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


파일위치는 /usr/local/meteor/packages/session/session.js 입니다.
Session.set(key, value)
Arguments
The key to set, eg, selected_item
The new value for key
모 설명할것이 없겠죠?
Meteor.autosubcribe(function () {
//
// Session.get 을 선언하면
//
Meteor.subscribe("chat-history", {room: Session.get("currentRoomId")});
});
//
// 위에서 선언한 currentRoomId 값으로 Session.set 을 호출하면
// 위에 값은 자동으로 변경됩니다.
//
Session.set("currentRoomId", "home");
이것은 위에서 설명했듯이 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;
Session.get(key)
너무 간단하죠.
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);
});
}
이번 시간에는 Session 에 대해서 알아보았습니다. 다음시간에는 본격적으로 Template, Collection에 대해서 알아보겠습니다. 감사합니다.