기본 콘텐츠로 건너뛰기

Meteor 1.0 - LocalMarket example - Direcctory 구조 분석

드디어 Meteor가 1.0을 찍었다. 감동 ;ㅅ;)/

Todo가 예쁘게 바뀐 건 봤고 새로운 예제 앱이 생겼다.
그 이름은 바로 LocalMarket.

동영상을 찍어서 보여주고 싶지만 귀찮기도 하고 어짜피 meteor create --example localmarket 치면 다 알테니까.

이전까지 실험적이었던 Mobile 정확히 말해 Cordova 와의 통합이 아주 멋지게 이루어졌다.
실행 옵션이 좀 많아졌는데

meteor run
: 그냥 Meteor 웹서버만 기동. 이하 아래의 것들도 기본적으로 Meteor 서버를 실행한다.

meteor run android
meteor run ios
: 안드로이드, iOS 시뮬레이션을 실행한다. 안드로이드의 경우 Hardware Accelerated Execution Manager (Intel HAXM) 을 설치한다.

meteor run android-device
meteor run ios-device
: 실제 iOS/Android 장비에서 실행한다.

실행에 대해선 어짜피 해보면 되니까 여기쯤 해두고
Web과 Mobile(android/iOS)간의 차이를 어떻게 극복했는지가 궁금한 거니까 디렉토리 구조를 살펴보기로 하자.


먼저 디렉토리 구조를 보자.
client 는 사용자가 실제로 보는 html+css+js+기타등등이고
server 는 backend 쪽인 것까지는 기존과 동일하다.
lib는 client/server 양쪽에서 실행되는 Collection, Router등등의 코드가 있다.

client 쪽에선 lib 아래에 jquery.touchwipe.js 를 쓴게 보인다.
그리고 head.html을 따로 분리하여 공통 헤더를 만들어 놓았고
init.js 에선 사용자가 앱/웹을 실행시 Geolocation.currentLocation(); 를 사용하여 위치정보를 수집할 수 있도록 해놓았다.
package 는 atmosphere가 아닌 프로젝트별 custom package를 넣어놓은 것을 확인할 수 있다.
mrt 시스템과 통합하면서 용도가 바뀐 부분이다.

public 은 font/icon/image/favicon/apple-touch-icon 과 같은 정적 이미지와 파일들을 관리하고 있다.

여기까지는 기존에 있거나 있었는데 조금 변경이 있었던 부분들이고
1.0이 되면서 새로 생긴 디렉토리와 파일들이 있다.

resource 는 기기 해상도별 아이콘과 초기 시작화면인 splash 이미지들을 모아놓은 곳이다.
HAXE처럼 SVG를 지원하면 해상도 별로 저렇게 만들지 않아도 될텐데라는 생각이 들긴 하지만 제법 깔끔하게 관리하고 있다는 인상이다.

cordova-build-override 의 경우 무릎을 탁 쳤는데 iOS *-info.plist의 경우 그냥 cordova에서 관리하기 좀 불편한 파일이라 짜증났었는데 이렇게 분리해줘서 너무 좋았다.
가령 상태바를 숨긴다던가 오리엔테이션을 지정한다던가 등등의 설정값은 여기에서 지정하면 된다.

mobile-config.js 는 앱을 만들때 꼭 확인해야하는데 어떤 아이콘을 쓸지 시작 화면은 뭘 할지 등등을 여기에 지정하면 된다.

이외에도 .meteor 디렉토리를 보면 몇가지 변경점을 발견할 수 있는데
.id 파일이 있어 유니크 키를 저장하고 있고고
platforms파일엔
server
browser
ios
android
이런 내용들이 있다.
iOS, android야 그렇다치고 'server나 browser중 하나만 할 수도 있나?' 하는 엉뚱한 생각이 들기도 하다.
release엔 현재 프로젝트의 Meteor 버전이 있고
versions엔 사용하고 있는 package들의 버전이 있다.

packages를 보면 재밌는 것들이 몇몇 보이는데

jquery-waypoints - 무한 스크롤 및 스크롤 고정등 스크롤 관련 유용한 패키지
fastclick - 모바일에서 클릭 지연시간을 없애주는 패키지
tmeasday:publish-counts@0.3.1 - publish 시점에 collection의 갯수를 카운트하는 패키지
percolate:velocityjs - velocity 테스팅 패키지가 아니라 animation 관련 패키지
mdg:camera - webkit브라우저 공통 카메라 패키지
mdg:geolocation - webkit브라우저 공통 위치 패키지

정도 눈여겨 볼만하다.
아직도 갈길은 멀지만 이정도 훌륭한 결과물을 이끌어낸 percolate studio에 박수를 보낸다.

댓글

이 블로그의 인기 게시물

Renoise로 바닥부터 Sound Design (No Sample/No VST)

Renoise는 Ableton Live Standard 버전처럼 기본적으로 아무 악기가 없고 달랑 샘플러 하나가 전부인데 그마나 다행인건 멀티레이어라고나 할까. 샘플러만 있으면 사실 다 되지. 아날로그 웨이브 테이블을 최소단위로 넣어서 루프를 돌리면  되니까. 근데 그러면 무조건 폴리포니가 되어서 구조적으로 모노 신스는 구현이 불가능하다. 그것도 방법이 없는 건 아닌데 Bend 라든가 Glide 등등으로 하면 되니까. 그래도 모노 신스가 있었으면 좋겠는데 방법이 있더라. http://forum.renoise.com/index.php?/topic/27225-renoise-native-monophonic-synthesiser/  이 글을 보고 약간 충격을 받음. 이펙터만 있으면 역시 소리를 만들 수 있구나! 바로 시도에 들어감. 처음은 이런 상태. 나는 누군가. 여긴 어딘가. 키보드를 눌러도 아무 소리가 안난다. ESC 눌러서 첫번째 트랙 맨위에 Z(C-4 00) 하나 눌러 놓고 일단 플레이. 일단 이렇게 해놓고 소리가 날 수 있게 한단 말이지. 그럼 먼저 제네레이터. 일단 1byte짜리라도 뭐가 있어야 시작을 할 수 있으니 빈 샘플을 만들자. 1byte 짜리 빈 샘플을 만든다. 당연히 소리가 안난다. DC Offset을 만들어 00 인 상태를 바꿔보자. 퍽하고 클릭음이 생기면서 Master Scope 에 변화가 생겼다. Meter도 생겼다. 그런데 이건 소리라고 할 수 없다. RingMod(Ring Modulator)를 추가해보자. 오오 소리가 난다. 0인 경우엔 Ring Modulator를 적용해도 0으로 소용이 없지만 DC Offset으로 값을 변경한 후부터 Oscillator에 따라 파형이 생긴다. 기본적으로 440Hz의 음을 들을 수 있다. 무에서 유를 만들기는 했는데 Pitch도 Volume도 없다. 일단 Pitch부터 해보자. Key Tracker로 Dest...

MQTT 접속해제 - LWT(Last will and testament)

통신에서 중요하지만 구현이 까다로운 문제로 "상대방이 예상치 못한 상황으로 인하여 접속이 끊어졌을때"의 처리가 있다. 이것이 까다로운 이유는 상대방이 의도적으로 접속을 종료한 경우는 접속 종료 직전에 자신의 종료 여부를 알리고 나갈 수 있지만 프로그램 오류/네트웍 연결 강제 종료와 같은 의도치 않은 상황에선 자신의 종료를 알릴 수 있는 방법 자체가 없기 때문이다. 그래서 전통적 방식으로는 자신의 생존 여부를 계속 ping을 통해 서버가 물어보고 timeout 시간안에 pong이 안올 경우 서버에서 접속 종료를 인식하는 번거로운 방식을 취하는데 MQTT의 경우 subscribe 시점에서 자신이 접속 종료가 되었을 때 특정 topic으로 지정한 메시지를 보내도록 미리 설정할 수 있다. 이를 LWT(Last will and testament) 라고 한다. 선언을 먼저하고 브로커가 처리하게 하는 방식인 것이다. Last Will And Testament 라는 말 자체도 흥미롭다. 법률용어인데  http://www.investopedia.com/terms/l/last-will-and-testament.asp 대략 내가 죽으면 뒷산 xx평은 작은 아들에게 물려주고 어쩌고 하는 상속 문서 같은 내용이다. 즉, 내가 죽었을(연결이 끊어졌을) 때에 변호사(MQTT Broker - ex. mosquitto/mosca/rabbitMQ등)로 하여금 나의 유언(메시지)를 상속자(해당 토픽에 가입한 subscriber)에게 전달한다라는 의미가 된다. MQTT Client 가 있다면 한번 실습해보자. 여러가지가 있겠지만 다른 글에서처럼  https://www.npmjs.com/package/mqtt  을 사용하도록 한다. npm install mqtt --save 로 설치해도 되고 내 경우는 자주 사용하는 편이어서 npm install -g mqtt 로 전역설치를 했다. 호스트는 무료 제공하고 있는 test.mosquitto.o...

cURL로 cookie를 다루는 법

http://stackoverflow.com/questions/22252226/passport-local-strategy-and-curl 레거시 소스를 보다보면 인증 관련해서 cookie를 사용하는 경우가 있는데 가령 REST 서버인 경우 curl -H "Content-Type: application/json" -X POST -d '{"email": "aaa@bbb.com", "pw": "cccc"}' "http://localhost/login" 이렇게 로그인이 성공이 했더라도 curl -H "Content-Type: application/json" -X GET -d '' "http://localhost/accounts/" 이런 식으로 했을 때 쿠키를 사용한다면 당연히 인증 오류가 날 것이다. curl의 --cookie-jar 와 --cookie 옵션을 사용해서 cookie를 저장하고 꺼내쓰자. 각각 옵션 뒤엔 저장하고 꺼내쓸 파일이름을 임의로 지정하면 된다. 위의 과정을 다시 수정해서 적용하면 curl -H --cookie-jar jarfile "Content-Type: application/json" -X POST -d '{"email": "aaa@bbb.com", "pw": "cccc"}' "http://localhost/login" curl -H --cookie jarfile "Content-Type: application/json" -X GET -d '' "http://localhost/accounts/" 이렇게 사용하면 ...