기본 콘텐츠로 건너뛰기

6월, 2016의 게시물 표시

Meteor DDP 요점 정리

준비
ddp 라이브러리 추가
$ meteor add ddp외부 DDP 연결
extDDP = DDP.connect("http://externalhost.com:4100");Collection 연결
Posts = new Mongo.Collection('posts', extDDP);
2,3 과정은 client 에서 가장 먼저 실행되도록 client/lib 디렉토리 안에 넣는 것을 추천기존 연결을 외부 DDP로 대치
Meteor.connection = extDDP;
ex) 활용예
Meteor.connection = extDDP;
Meteor.loginWithPassword(login.valiu, password.value);
Meteor.startup 같은 곳에서 사용하면 좋음.
만일 login을 그냥 사용하려면
expDDP.call('login', .... ); 형태로 사용하여야함.Subscribe 사용
onCreated 시점에 this.subscribe 대신 DDP 객체의 subscribe를 사용
Template.postView.onCreated(function() {
  extDDP.subscribe("getPosts", { searchWord: 'blahblah' });
});Helper 사용
3번처럼 했다면 그냥 똑같이 사용
Tempalte.postView.helpers({
  "posts": function() {
    return Posts.find({});
  }
});Method 사용
Template.postInput.events({
  "submit": function(e) {
    expDDP.call('addPost', inputText.value', function(error, result) {
     /* do something */
    });
    e.preventDefault();
  }
});

microservice 기반 meteor application 설계 /w DDP

특정 업무가 장애가 일어나도 전체가 다운되지 않는 서비스를 Meteor 로 만들 수 있지 않을까 라는 생각을 하고 있었는데 실제로 한번 해보았다.

로긴 서버와 N개의 업무서버가 하나의 DB를 바라보고 클라이언트에서 로긴 서버에 계정생성/접속 후 토큰을 꺼내와서 나머지 서버에 접속하는 그림을 그려보았다.

업무 서버의 경우 웹앱에서 접근 문제가 있기 때문에 CORS를 열어준다.

Meteor.startup ->
  WebApp.rawConnectHandlers.use (req, res, next)->
    res.setHeader "Access-Control-Allow-Origin", "*"
    next()

iOS/Android 앱의 경우는 사실 상관이 없지만 webApp인 경우엔 꼭 필요.

반대로 webApp 인 경우는 client 폴더에만 작업하면 되는데
가장 먼저 실행하는 파일(ex. client/lib) 에 DDP와 Collection 연결하는 부분을 만들어 준다.

# global namespace
@ddps =
  loginDDP : DDP.connect "http://localhost:4100"
  chatDDP : DDP.connect "http://localhost:4200"

# models
@Chats = new Mongo.Collection 'chats', ddps.chatDDP

그리고 Meteor App 이 시작하는 시점에 아래와 같이 구성한다.
Meteor.startup ->   Meteor.connetion = ddps.loginDDP   Tracker.autorun ->     if Meteor.user()?       unless Meteor.loggingIn()         console.log Meteor.user()?.username         ddps.chatDDP.call "login",    …

Android 에서 DDP 라이브러리를 사용하자.

Meteor는 자체적으로 Cordova 를 통한 iOS/Android 앱을 지원한다.
하지만, Hybrid 앱은 역시 Native에 비해 예측 못할 변수가 많고 성능도 그다지 좋지 않다.
DDP를 사용하여 Native Android 앱과 Meteor 서버를 연결해보자.

새 프로젝트를 만들고 File/Project Structure (cmd+;) 으로 들어가서

하단 +를 누르면

Library DependencyFile DependencyModule Dependency 세개 나온다. Choose Library Dependency 창에서 ddp 하고 엔터쳐보자. 지금 현재는 3개 정도 나오는데
com.keysolutions:android-ddp-client:1.0.2.0 이걸 써서 할거다. 선택하고 OK 해서 추가하자.
activity_main.xml 에 버튼 하나 만들고  AndroidManifest.xml 에
    <uses-permission android:name="android.permission.INTERNET" />     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 이 두 개의 permission 이 있는지 확인하자. 없으면 추가. <application>이랑 나란히 놓으면 된다.
준비 해야할 class 는 일단 두개인데 하나는 어플리케이션 전체에서 DDP 연결을 책임질 MyApplication (Application을 상속받은 클래스)와 DDP에서 subscription 처리를 해줄 LoginDDPState(DDPStateSingleton을 상속받은 클래스)이다. 물론 이름은 임의로 정했다.
먼저 MyApplication.java 를 보자 package com.appsoulute.meteorddpexam1;import android.app.Application; import android.con…

내가 underscore라이브러리를 별로 선호하지 않는 이유.

node.js 콘솔을 연다(function() { return 10; })() --> 10_ --> 10 (응????????)

REPL에서 function의 반환값이 _에 저장됨. 그래서 _를 조사하면 10이 나옴.
golang에선 _를 blank identifier로 사용.

sum := 0
for _, value := range array {
    sum += value
}

이런 식으로.
논란의 여지는 있지만 단지 길이가 길어서 _를 함수명으로 쓰는 류들에 대해서 별로 좋아하지 않음.
마찬가지 이유로 $를 쓰는 jQuery도 그다지.
결론은 coffeescript 쓰세요. 두번 쓰세요. for in(of) when은 무적입니다.

#하지만 둘 다 같은 사람이 만들었음;