배포(Deployment)

Sidebar 2.5

번역 완료율

이 장에서는:

  • Meteor.com에 배포하는 방법을 배운다.
  • Modulus에 배포하는 방법을 배운다.
  • Meteor up을 이용하여 자신의 서버에 배포하는 법을 배운다.
  • 어떤 사람들은 프로젝트를 완벽해질 때까지 조용히 작업하기를 좋아하지만, 또 다른 사람들은 가능한 빨리 세상을 보여주고 싶어한다.

    독자가 첫 번째 부류의 사람이고 당장 컴퓨터에서 개발하고 싶다면 이 장을 건너뛰고 진행해도 좋다. 그렇지 않고 시간을 들여서라도 미티어 앱의 온라인 배포 방법을 배우길 원한다면, 우리가 그렇게 해 줄 것이다.

    우리는 미티어 앱을 배포하는 방법에 대한 몇 가지 다른 방법들을 배울 것이다. 편안하게 이들 각각을 개발 과정의 어느 단계에서든 사용해 보기 바란다, Microscope이나 다른 미티어 앱이든지 상관없이 말이다. 자 시작하자!

    사이드바 소개

    이 장은 사이드바 장이다. 사이드바 장은 좀 더 일반적인 미티어 주제를 이 책의 나머지와는 독립적으로 보다 깊이있게 다룬다.

    따라서, Microscope의 구축을 계속하고 싶다면, 이 장을 건너뛰고 나중에 돌아와서 읽어도 된다.

    Meteor에 배포하기

    미티어 서브도메인(즉, http://myapp.meteor.com)에 배포하는 것이 가장 쉬운 선택이며, 처음 시도해 볼 것이다. 이곳은 초기에 앱을 시연하거나, 또는 스테이징 서버를 신속히 설치하기에 유용하다.

    미티어에 배포하는 것은 매우 간단하다. 터미널을 열고, 앱 디렉토리로 이동하여, 다음을 입력하면 된다:

    meteor deploy myapp.meteor.com
    

    물론, “myapp” 은 독자가 정한 이름으로 바꾸되, 이미 사용되지 않은 이름이어야 할 것이다.

    처음 앱을 배포하는 경우에는 Metero 계정을 만들라는 메시지가 나타날 것이다. 그리고 모든 것이 잘 진행되면, 잠시 후면 http://myapp.meteor.com 에서 앱에 접속할 수 있다.

    이 호스트 인스턴스의 데이터베이스에 직접 접속하거나 앱의 도메인을 커스텀 도메인으로 설정하는 것 같은 일에, 더 자세히 알고 싶다면 미티어 공식 문서를 참조하기 바란다.

    Modulus에 배포

    Modulus는 Node.js 앱을 배포하는 데 훌륭한 선택이다. 이곳은 미티어를 공식 지원하는 몇 안되는 PaaS(Platform-as-a-service)중의 하나이다. 그리고 이미 상당수의 사람들이 여기에서 상품화된 미티어 앱을 구동하고 있다.

    Demeteorizer

    Modulus는 미티어 앱을 표준 Node.js 앱으로 변환시켜주는 도구 demeteorizer를 오픈소스로 공개했다.

    먼저 계정을 생성하자. Modulus에 앱을 배포하려면 Modulus 명령어 도구를 설치하여야 한다:

    npm install -g modulus
    

    그리고 인증을 통과한다:

    modulus login
    

    이제 Modulus 프로젝트를 생성한다 (이 작업은 Modulus의 웹 대시보드에서도 할 수 있다):

    modulus project create
    

    그 다음 단계는 앱에서 접속할 MongoDB 데이터베이스를 생성하는 것이다. Modulus 자체MongoHQ를 이용하거나 다른 클라우드 MongoDB 프로바이더의 것을 이용하여 MongoDB 데이터베이스를 만든다.

    MongoDB 데이터베이스를 만들었으면, Modulus의 웹 인터페이스(Dashboard > Databases > Select your database > Administration)에서 데이터베이스에 대한 MONGO_URL을 얻는다. 그리고 이를 사용하여 앱 설정을 다음과 같이 한다:

    modulus env set MONGO_URL "mongodb://<user>:<pass>@mongo.onmodulus.net:27017/<database_name>"
    

    이제 앱을 배포하면 된다. 다음과 같이 입력한다:

    modulus deploy
    

    이제 Modulus에 앱을 성공적으로 배포하였다. 로그 접속, 커스텀 도메인 설정, 그리고 SSL에 대한 더 많은 정보가 필요하면 the Modulus documentation을 참조하기 바란다.

    Meteor Up

    매일 새로운 클라우드 솔루션이 등장하고 있지만, 이들은 종종 다양한 문제나 한계에 직면한다. 그래서 현 시점에서 볼 때, 독자가 소유한 서버에 배포하는 것이 미티어 앱을 상품화하는 최선의 방법이다. 남은 문제는 직접 배포하는 것이 그리 간단하지 않고, 특히 상품화 수준의 배포를 원할 때 더욱 그렇다.

    Meteor Up(또는 줄여서 mup)이 이 이슈를 해결하는 또 다른 시도인데, 이는 명령어 유틸리티로서 설치와 배포를 다룬다. 그래서 Meteor Up을 사용하여 Microscope를 배포하는 방법을 알아보기로 하자.

    무엇보다도 먼저, 서버가 필요할 것이다. 우리가 추천하는 서비스는 월 $5부터 시작하는 Digital Ocean이나 Micro 인스턴스를 무료로 제공(바로 확장성 문제에 이르겠지만, Meteor Up으로 이것 저것 해보기는 충분하다)하는 AWS이다.

    어떤 서비스를 선택하든, 세 가지를 알아야 한다: 서버의 IP 주소, 로그인(보통 root 또는 ubuntu), 그리고 비밀번호. 이들은 안전한 곳에 보관하라, 바로 필요할테니까!

    Meteor Up 초기화

    시작하려면, Meteor Up을 npm을 통해서 다음과 같이 설치해야 한다:

    npm install -g mup
    

    그리고 특별한 별도의 디렉토리를 생성하여 특정한 배포에 대한 Meteor Up 설정을 유지한다. 별도의 디렉토리를 사용하는 이유는 두 가지이다: 첫째, Git 저장소에 비밀번호 같은 것을 포함하는 것을 피하는 방법으로 가장 좋은데, 특히 저장소가 공개저장소일 때 그렇다.

    둘째, 복수의 별도의 디렉토리를 사용함으로써, 다수의 Meteor Up 설정을 관리할 수 있다. 예를 들면, 이렇게 하여 제품화 단계, 스테이징 단계별로 편리하게 배포할 수 있다.

    그러므로, 새로운 디렉토리를 생성하고, 이를 사용하여 새로운 Meteor Up 프로젝트를 초기화한다:

    mkdir ~/microscope-deploy
    cd ~/microscope-deploy
    mup init
    

    Dropbox로 공유하기

    독자와 팀원 모두가 동일한 배포 설정을 사용하는 훌륭한 방법은 Meteor Up 설정 폴더를 Dropbox, 또는 이와 유사한 서비스 내부에 만드는 것이다.

    Meteor Up 설정

    새 프로젝트를 초기화하는 과정에서 Meteor Up은 두 가지 파일을 생성한다: mup.jsonsettings.json.

    mup.json은 모든 배포관련 설정을 보관하는 반면, settings.json은 모든 앱 관련 설정(OAuth token, analytics token 등)을 담는다.

    다음 단계는 mup.json 파일을 설정하는 것이다. 아래는 mup init 명령으로 생성되는 초기설정 상태의 mup.json 파일이다. 독자가 할 일은 빈 칸을 채우는 것이다:

    {
      //server authentication info
      "servers": [{
        "host": "hostname",
        "username": "root",
        "password": "password"
        //or pem file (ssh based authentication)
        //"pem": "~/.ssh/id_rsa"
      }],
    
      //install MongoDB in the server
      "setupMongo": true,
    
      //location of app (local directory)
      "app": "/path/to/the/app",
    
      //configure environmental
      "env": {
        "ROOT_URL": "http://supersite.com"
      }
    }
    
    mup.json

    이 설정을 하나 하나 따져보자.

    서버 인증

    Meteor Up은 비밀번호 기반과 사설키(PEM) 기반의 인증을 지원하므로, 거의 모든 클라우드 서비스를 이용할 수 있다.

    중요 노트: 비밀번호 기반의 인증을 선택한다면 sshpass를 먼저 설치하여야 한다(이 안내를 참조하라).

    MongoDB 설정

    다음 단계는 앱에서 사용하는 MongoDB 데이터베이스를 설정하는 것이다. 우리는 MongoHQ나 기타 클라우드 MongoDB 서비스를 이용하기를 권하는 데, 이들이 전문적인 지원과 더 나은 관리도구를 제공하기 때문이다.

    MongoHQ를 사용하기로 결정하면, setupMongo 값을 false로 설정하고 mup.jsonenv 블록에 MONGO_URL 환경 변수를 추가한다. Meteor Up으로 MongoDB를 호스트한다면, setupMongo값을 true로 설정하기만 하면 Meteor Up이 나머지를 처리할 것이다.

    미티어 앱 경로

    Meteor Up 설정이 다른 디렉토리에 존재하므로, app 속성으로 앱의 정보를 Meteor Up에게 알려주어야 한다. 그저 앱의 전체경로를 입력하면 된다. 이 때 전체경로는 터미널에서 앱의 디렉토리로 이동하여 pwd 명령어를 실행하면 얻을 수 있다.

    환경변수

    앱의 환경변수들(ROOT_URL, MAIL_URL, MONGO_URL, 등과 같은)을 env 블록에 지정한다.

    설정과 배포

    배포하기 전에 서버를 설정하여 미티어 앱을 호스트할 수 있는 상태로 준비해야 한다. Meteor Up은 이 복잡한 과정을 단일 명령어로 해결하는 마술을 부린다!

    mup setup
    

    이 명령어는 서버의 성능과 네트워크의 연결 상태에 따라 수 분정도가 걸릴 것이다. 설정이 성공하면, 마침내 앱을 배포할 수 있다:

    mup deploy
    

    이 명령어는 앱을 bundle로 만들고, 방금 설정한 서버에 배포를 수행한다.

    로그 보기

    로그는 매우 중요하다. Meteor Up은 로그를 tail -f 명령어를 모방하여 처리하는 매우 쉬운 방법을 제공한다. 다음을 입력하라:

    mup logs -f
    

    이것으로 Meteor Up의 기능의 개요를 둘러보았다. 더 많은 정보를 원하면 Meteor Up의 GitHub repository를 방문하기를 권한다.

    이들 미티어 앱을 배포하는 세 가지 방법이면 대부분의 경우에 충분히 대처할 수 있을 것이다. 물론, 독자들 중의 일부는 Meteor 서버를 처음부터 끝까지 완벽하게 통제하기를 선호할 수도 있다. 하지만, 이것은 나중의 주제이거나 또는 다른 책에서 다루게 될 것이다!