[cookbook] Meteor Session (그냥 get,set이 전부가 아니다.)

Meteor Session Introduction

Meteor 에는 server side, client side 의 API 가 나누어져 있는데, 이것은 client side API 입니다.

client 영역에서 global object 로서 key-value를 저장할 수 있도록 간단하게 제공됩니다. 이것은 sessionStorage 도 아니고, localStorage 에 저장하는 것도 아닙니다. 코어소스에서 object로서 선언되어 관리됩니다. 특이한 성질은 Session.get 을 선언해놓으면, 동일한 키값으로 Session.set 을 호출할때마다 그 값은 바로 변경 (reactivity)되어 집니다.

아래 이미지는 Session object 구조입니다.

meteor_session_what.png

meteor_session_object.png

Source

파일위치는 /usr/local/meteor/packages/session/session.js 입니다.

Session.set

syntax

Session.set(key, value)

모 설명할것이 없겠죠?

example

Meteor.autosubcribe(function () {
  //
  // Session.get 을 선언하면
  //
  Meteor.subscribe("chat-history", {room: Session.get("currentRoomId")});
});

//
// 위에서 선언한 currentRoomId 값으로 Session.set 을 호출하면
// 위에 값은 자동으로 변경됩니다.
//  
Session.set("currentRoomId", "home");

Session.get

이것은 위에서 설명했듯이 Session.set 과 연관되어 있습니다. 단, Session.set 으로 동일한 값을 설정하여 두번이상 호출하였을 시에는 적용되지 않습니다. 일명 Meteor에서는 무효화라는 의미인 invalidate 라는 단어를 사용합니다. 안드로이드에서도 사용하는데 말이죠...

아래 소스는 session core 내용에서 invalidate 를 구현하는 부분입니다. 이런 간단한 부분말고도 내부에 복잡한 invalidation 코드들이 많습니다.

 30   set: function (key, value) {
 31     var self = this;
 32 
    //
    // 예전 값을 관리합니다.
    // Backbone.js와 동일한 로직을 사용합니다.
    //
 33     var old_value = self.keys[key];
 34     console.log('session set');
 35     if (value === old_value){
 36       console.log('session set #2');
 37       return;
 38     }
    //
    // 이 아래로는 값이 달라져야 들어옵니다.
    //
 39     self.keys[key] = value;

syntax

Session.get(key)

너무 간단하죠.

example

if (Meteor.is_client) {                              
  Session.set("cracker", "카스타드");                
  var frag = Meteor.ui.render(function () {          
    return "<p>내가 좋아하는 과자는 " +              
      Session.get("cracker") + "</p>";               
  });                                                


  Meteor.startup(function () {                      
    //
    // meteor 예제에서는 appendChild부분이 Meteor.startup가 연관되어 있지 않은데,
    // 이는 document.body를 찾지 못하여 에러가 발생합니다.
    // 필히 DomReady 격과 동일한 Meteor.startup 안에서 실행하세요.
    // 
    document.body.appendChild(frag);                 

    setTimeout(function() {
      //
      // 위에서 설정한 Session.get 에 적용됩니다.
      //                          
      Session.set("cracker", "사실 몽쉘통통 크하하");
    }, 3000);                                        
  });                                                
}                                                    

Conclusion

이번 시간에는 Session 에 대해서 알아보았습니다. 다음시간에는 본격적으로 Template, Collection에 대해서 알아보겠습니다. 감사합니다.

추천 관련글