# Meteor

http://kr.discovermeteor.com/chapters/getting-started/

# 설치

curl https://install.meteor.com | sh

meteor create microscope # 앱 만들기
cd microscope
meteor --port 8090 # 실행

meteor add mizzao:bootstrap-3 # 패키지 추가
meteor add underscore

# 패키지

  • 미티어 코어는 여러 개의 코어 패키지들로 나누어짐. 미티어 앱에 포함.
  • 정규 미티어 패키지: isopacks. accounts-ui, appcache같은 퍼스트파티 패키지. 미티어에 포함.
  • 써드파티 패키지: 다른 사용자들이 개발한 isopack. 미티어 패키지 서버에 업로드되어 있음. meteor search 명령어로 찾아볼 수 있음.
  • 로컬 패키지: 직접 작성한 패키지. /packages디렉터리에 넣는다.
  • npm 패키지: node.js패키지.

# 파일구조

  • /server: 서버에서만 실행되는 코드
  • /client: 클라에서만 실행되는 코드
  • 그 밖의 모든 것은 클라, 서버 양쪽 모두에서 실행
  • /public: 정적 자원 넣기(fonts, images...)

파일을 로드하는 순서

  • /lib디렉토리에 있는 파일들은 제일 먼저 로드

  • main.*이름 파일들은 그 밖의 다른 모든 파일들보다 나중에 로드.

  • 그 밖의 모든 파일들은 파일명의 알파벳 순으로 로드

  • 미티어는 파일을 잘 찾는다. /client디렉토리 어디 넣든지 미티어는 이를 찾아 컴파일한다.

  • 이는 js나 css파일 경로를 직접 입력할 필요가 없다는 것을 의미.

# spacebars

  • Inclusions: 미티어에게 해당 위치에 동일 이름의 템플릿으로 대치하라는 의미.
  • Expressions: 현재 객체의 속성값, 현재 템플릿 매니저에 정의된 템플릿 헬퍼의 리턴 값.
  • Block helpers: 템플릿의 흐름을 제어하는 특별한 태그.

# collections

  • 데이터 저장
    • 브라우저 메모리: js변수 같은 것들은 브라우저 메모리에 저장된다. 현재 브라우저 탭에 한정.
    • 브라우저 저장소(storage): 쿠키, 로컬 스토리지. 세션 한계를 넘어 저장.
    • 서버 데이터베이스: 영구적으로 데이터 저장.

# 서버에서의 컬렉션

Mongo 데이터베이스로의 API로 가능

meteor mongo
> db.posts.insert({title: "A new post"});
> db.posts.find();
# { "_id": ObjectId(".."), "title" : "A new post"};

# 클라이언트에서 컬렉션

Posts = new Mongo.Collection('posts');: 실제 몽고 컬렉션의 로컬 인 브라우저 캐시를 생성하는 것. 클라이언트 쪽 컬렉션을 '캐시'라고 말하는 것은, 데이터의 부분 집합을 가지며 데이터에 빠르게 접근할 수 있다는 것을 의미.

❯ Posts.findOne();
# {title: "A new post", _id: LocalCollection._ObjectID};

❯ Posts.find().count();
# 1
❯ Posts.insert({title: "A second post"});
# 'xxx'

❯ Posts.find().count();
# 2

참고: find()는 커서를 리턴. 반응형 데이터 소스. 그 데이터 내용 얻으려 할 때, 현재 커서 위치에서 데이터를 배열로 변환하는 fetch()를 사용

# 몽고 쉘
❯ db.posts.find();
{title: "A new post", _id: ObjectId("..")};
{title: "A second post", _id: 'yyy'};

클라에서 서버로 보내는 코드 작성 없이 post를 MongoDB로 삽입했다. Posts = new Mongo.Collection('posts'); 요 코드로! 이는 다른 탭의 브라우저에서도 유지된다.

# 데이터베이스 활용

meteor reset # 몽고 데이터베이스를 완전히 비운다.

# 미티어 방식

  • 미티어 앱은 서버 뿐만 아니라 클라에서도 동작한다.
  • 데이터베이스는 어디에서나
    • db에 넣기만 하면 미티어가 부분집합을 가져와 클라에 복사해 둘 것이다.
    • => 1. HTML코드를 클라로 보내는 대신, 미티어 앱은 실제 생 데이터를 보내고 클라가 그것을 처리하게 한다.(데이터만 전송)
    • => 2. 서버에 갔다오는 시간 기다려야 하는 일 없이 즉시 데이터에 접속할 수 있다.

# 발행(Publishing)