references: Meteor.js 시작하기 by 박승현




미티어 프레임워크의 디비 구조는 서버측의 몽고DB와 클라이언트 측의 미니몽고로 이원화 되어 있다.



클라이언트에선 서버측의 몽고디비에서 데이터를 가져오는것이 아니라 미니몽고에서 데이터를 가져온다.


그러나 생각해보면 저번 구현에선 서버측에 데이터를 넣어 놨는데 아무런 문제 없이 데이터를 가져 올 수 있었다.


미티어 프레임워크는 기본패키지로 AutoPublish를 제공하는데 몽고디비랑 미니몽고를 자동으로 싱크해준다.


물론 이는 위험하다.


실제로 Meteor Developer에선 Security Checklist 1번에 명시되어 있을정도



AutoPublish를 제거하면 별도로 Publish/Subscribe를 구현해주어야 한다.



** 아래의 예시는 이전 코드에서 이어집니다.


  • Autopublish 삭제하기.

프로젝트 폴더에서 콘솔을 열고 meteor list를 입력하면 설치된 패키지 리스트가 출력 됩니다.



Autopublish가 가장 위에 있네요. 설명에도 프로토타입에만 사용하라고 되어있습니다.


콘솔에 meteor remove autopublish를 입력해 autopublish 패키지를 삭제합니다.



그리고 localhost:3000/에 들어가보면 보이던 친구목록이 사라진 걸 확인할 수 있습니다.





  • Publish/Subscribe 구현하기
이제 서버에서 데이터를 발행하는 코드를 작성해봅시다.

발행은 서버에서 동작합니다. .\server\publish.js를 추가합니다.

.\server\publish.js

1
2
3
4
Meteor.publish("friendsList",function(obj){
    var condition = obj || {};
    return Friends.find(condition);
});
cs


추가된 publish.js를 서버측 main.js에 추가합니다.


.\server\main.js


1
2
3
4
5
6
7
8
9
import { Meteor } from 'meteor/meteor';
 
import '../lib/collections.js';
import './publish.js';
 
Meteor.startup(() => {
  // code to run on server at startup
});
 
cs


클라이언트 측에서 서버에서 발행한 friendsList를 구독하는 코드를 작성합니다.


구독은 friendList 템플릿이 생성되는 시점에 이루어져야 하므로 다음과 같이 작성합니다.


.\client\firendsList.js


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import { Template } from 'meteor/templating';
 
Template.friendsList.helpers({
    listName : function(){
        return "나의 친구들 목록";
    },
    list : function(){
        Friends = new Mongo.Collection("friends");
        return Friends.find();
    }
});
 
Template.friendsList.onCreated(function () {
    this.subscribe("friendsList",{});
});
 
cs


 이제 화면에 다시 데이터가 출력 되는 것을 확인할 수 있습니다.











+ Recent posts