스마트폰 인디언식 이름 짓기
스마트폰에서 간단히 생일 입력해서 확인 할 수 있다
http://indian.herokuapp.com/
[책 리뷰] 당신의 인생에 집필을 더하라
책을 구매한지는 한달이 넘은것 같은데 읽을 의지가 없어 읽지 못하고 있었습니다.
요즘 저는 책이 배송되면 무조건 잘라서 스캔후 드랍박스에 넣어두고 있습니다. “당신의 인생에 집필을 더하라” 역시 배송받자 마자 스캔하고 드랍박스에 넣어 두었는데, 지난 주말 부터 책읽을 여유가 되어 아이패드로 짬짬이 읽었는데 ”당신의 인생에 집필을 더하라”는 술술 읽혀서 실제 독서시간으로는 5시간도 안될것 같은데 다 읽었습니다.(시간 여유가 아니라 필요에 의해서 읽었을 수도 있겠다고 생각합니다)
이책을 구매할때 ”책을 한번도 써보지 못한 사람이지만 언젠가 써보고 싶다는 생각을 가진 사람을 대상으로 집필된 책”이라고 생각했었습니다. 다 읽고난후 생각해보니 제가 의도했던것을 얻을수 있었습니다. 전문적인 집필서적도 아니고 문장이나 단어 선택등에 대한 이야기는 조금 뿐이지만 책을 처음 쓰고자 하는 사람에게 필요한건 아닙니다.
“당신의 인생에 집필을 더하라” 에서는 책집필의 의도, 시작하는 방법, 출판 프로세스등 책을 출판하지 않으면 알 수 없는 이야기가 있습니다. 무엇보다 복잡한 이야기가 많이 없어서 쉽게 읽을수 있어서 책을 처음 집필해보고자 하는 사람에게 유익 하다고 생각합니다.
저는 인생에 집필을 더 할 수 있을까요?
Rails on heroku
heroku 소개
웹 어플리케이션을 배포하는 새로운 방향으로 개발자들이 서버설정, 배포환경, 서버확장 등의 업무에 시간을 빼앗기지 말고 웹 어플리케이션의 코드에 집중할수 있게 하자는 생각으로 서비스를 제공하고 있는곳이 바로 heroku 입니다.
개발자는 소스코드를 작성하고 배포를 위해 git 저장소에 코드를 커밋하고 원격의 heroku 저장소에 푸쉬하는것만으로 배포되고 서버가 재시작 됩니다. 웹 어플리케이션의 성공으로 서버가 더 필요할경우 dyno라고 불리우는 프로세서를 증가시켜주기만 하면 여러대의 서버를 추가한것과 같은 효과를 얻게 됩니다.
heroku 가입
http://www.heroku.com/ 사이트에 접속하여 이메일 주소로 가입하면 됩니다.
heroku 설치
heroku 사용을 위해서는 heroku console, git 설치가 필요합니다. heroku 에서 제공하는 toolbelt 를 이용해 간단하게 설치 할 수 있습니다.
http://devcenter.heroku.com/articles/heroku-command
git 은 맥의 경우 xcode 가 설치되어 있다면 이미 설치 되어 있습니다. 그렇지 않다면 homebrew를 이용해 간단히 설치 할 수 있습니다.
git 이 이미 설치되어 있는 경우 heroku console 만 설치하고자 하면 아래 명령어를 사용하여 설치합니다.
$ gem install heroku
heroku 인증을 위해서 ssh 공개키를 heroku서버에 등록합니다
heroku keys:add
기본적으로 공개키가 생성되는 ~/.ssh/id_rsa.pub 위치의 파일을 알아서 heroku 서버에 업로드 하게 됩니다.
공개키가 생성되어 있지 않을경우 아래 명령어를 이용해 공개키를 생성합니다.
ssh-keygen -t rsa
Rails 프로젝트 생성 및 Git 로컬 저장소 생성
Rails 프로젝트를 heroku 에 배포하는 예제를 통해 heroku 의 동작방식에 대한 이해를 돕고자 합니다.
Rails 샘플 프로젝트를 rails-on-heroku 라는 이름으로 생성
$ rails new rails-on-heroku
$ cd rails-on-heroku
$ vi Gemfile
Gemfile 수정 : gem ‘sqlite3′ 부분을 수정
group :production do
gem ‘pg’
end
group :development, :test do
gem ‘sqlite3′
end
위의 작업은 heroku 에서 sqlite3 를 지원하지 않기 때문에 추가된 작업으로 개발환경에서는 sqlite3를 사용하고 heroku 배포환경헤서는 postregsql 을 사용하도록 설정하는 부분입니다. 현재 heroku 에서 정상적으로 사용되는 DB관련 gem 은 mysql, pg, mongoid 등이 있습니다. rails 3.1 부터 사용하는 mysql2 gem 은 현재 사용이 불가능합니다
+ 수정 : 2012.1.1 확인해본 결과 현재 mysql2 gem 도 지원합니다.
Git 로컬 저장소 생성 및 커밋
$ git init
$ git add .
$ git commit -m ‘initial commit’
자세한 git 명령어에 대한 설명은 검색을 통해 찾아보시기 바랍니다.
- Git for Lazy(영문) : http://www.spheredev.org/wiki/Git_for_the_lazy
- Git 사용자 메뉴얼(한글) : http://namhyung.springnote.com/pages/3132772
로컬에 생성된 rails-on-heroku 프로젝트가 정상적으로 브라우저에 노출되는지 확인해봅니다.
heroku 프로젝트 생성
heroku 프로젝트의 생성은 웹상에서도 가능하지만 터미널에서도 가능합니다.
$ cd rails-on-heroku => rails 프로젝트 루트로 이동
$ heroku create –stack cedar rails-on-heroku
Creating rails-on-heroku…
done, stack is cedar
http://rails-on-heroku.herokuapp.com/ | git@heroku.com:rails-on-heroku.git
Git remote heroku added
stack 은 heroku 버전이라고 할 수 있습니다. 위의 명령어로 현재 가장 최신인 cedar stack 으로 프로젝트가 생성됩니다.
heroku create 명령으로 http://rails-on-heroku.herokuapp.com 주소를 얻게 되었고 원격의 git 저장소 생성 및 remote 브랜치에 heroku 라는 이름으로 추가 되었습니다.
배포가 이루어지기전의 http://rails-on-heroku.herokuapp.com 페이지는 브라우저에 다음과 같은 페이지가 보여집니다.
heroku 배포
heroku에 프로젝트를 배포하는것은 간단합니다.
$ git push heroku master
…..생략
—–> Discovering process types
Procfile declares types -> (none)
Default types for Ruby/Rails -> console, rake, web, worker
—–> Compiled slug size is 17.9MB
—–> Launching… done, v5
http://rails-on-heroku.herokuapp.com deployed to Heroku$
위의 명령어는 현재 로컬 저장소의 소스를 heroku 원격 저장소에 반영한다는 의미로 위의 명령어 실행이 완료되면 배포가 모두 완료 된것입니다.
배포 완료후 http://rails-on-heroku.herokuapp.com/ 웹페이지를 브라우저에서 실행해본 화면입니다.
Rails with Unicorn on heroku
heroku는 1dyno 까지는 무료이지만 그 이상은 유료이기 때문에 무료로 사용하는 경우 웹 프로세스가 1개 뿐이라서 무료 상태에서는 웹서비스를 하기 힘든 환경입니다. cedar stack 에서는 사용자가 원하는 HTTP 서버를 사용 할 수 있기 때문에 unicorn 등의 HTTP서버를 이용해서 1개의 dyno에 여러개의 unicorn worker를 연결하는 방법으로 이 문제를 해결 할 수 있습니다.
Gemfile 수정
gem ‘unicorn’
{Rails.root}/config/unicorn.rb 파일 생성 후 수정
worker_processes 4 # unicorn worker 갯수
timeout 30 # 30초 이상 걸리는 worker 는 종료후 재시작
{Rails.root}/Procfile 파일 생성 후 수정
web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
bundle, git 커밋, 배포
$ bundle install
$ git add .
$ git commit -m ‘use unicorn’
$ git push heroku master
unicorn 사용 여부 확인
$ heroku ps
Process State Command
——- ————— ————————————
web.1 starting for 5s bundle exec unicorn -p $PORT -c ./..
참고 문서 : http://michaelvanrooijen.com/articles/2011/06/01-more-concurrency-on-a-single-heroku-dyno-with-the-new-celadon-cedar-stack/
heroku 사용시 유의사항
heroku 는 배포시 몇가지의 소스파일을 임의로 수정하고 있습니다.
대표적인것이 config/databases.yml 파일로 heroku 에서 알아서 해당 프로젝트의 DB 설정으로 수정합니다. 이외에도 몇가지의 설정파일을 heroku 에서 수정하는것들이 있습니다. 개발환경에서는 잘되는데 heroku 에서 잘안되는것이 있다면 heroku에서 임의로 파일을 수정하는 부분의 문제일 가능성이 있습니다.
예제에서는 Rails 의 DB를 사용하지 않았지만 DB를 사용한 프로젝트일경우 배포후 $ heroku run rake db:migrate 명령을 통해 최초 DB 생성 및 테이블 추가 작업을 진행해야 합니다.
마치며
Rails를 공부하면서 로컬 환경에서만 개발하다가 다른사람에게 보여주고 싶어서 배포를 하려고 할때 답답한 경우가 많습니다. 이는 Rails 만의 문제가 아닙니다. 서버를 구매하고 웹서버, DB, 환경설정등 해야할 작업이 많기도 하고 서버OS 마다 다른 환경으로 많은 시간이 소요됩니다. 특히나 Rails를 공부하는 시점에서 서버 설정이 중요할까요? heroku 를 이용해서 공부하면서 만든 혹은 혼자 쓰려고 만든 웹 서비스를 손쉽게 전 세계의 모든 사람이 볼 수 있도록 할 수 있습니다.
heroku 는 Rails 를 위해서 시작했지만 최근 php, java, python 의 다양한 웹 프레임워크도 지원하기 시작했습니다. heroku 와 유사한 서비스로 직접 heroku와 같은 시스템을 만들수 있는 cloudfoundry 라는 프로젝트도 있습니다. 이와 같은 서비스를 PaaS 라고 부르고 있습니다. PaaS 와 함께 즐거운 웹 개발을 시작하세요
덧. heroku 에는 Ruby 언어를 만든 matz 가 최근에 합류 하였습니다. Matz joins Heroku
추가 : 2012년 1월 7일 RoRlab 에서 발표한 동영상 추가 합니다.


