150120 rack 어플리케이션 개요

Post on 18-Jul-2015

417 Views

Category:

Engineering

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Rack 어플리케이션 작성 개요

이 슬라이드는 크게 11가지 주제를 다룹니다.

01. Rack이란 무엇인가? 10. 미들웨어11. 레일즈에서의 Rack 미들웨어

01. Rack이란 무엇인가?

공식 홈페이지에는 이렇게 적혀있습니다.

모듈러 루비 웹서버 인터페이스

쪼갤수 있는 입출력 하는 애

HelloRack

Request Response

말은 어려운데 그냥 간단한 웹서버용 인터페이스

HelloRack

Request

hello_rack.call(env)

HelloRack

Response

[status_code, header, body]

※스테이터스 코드의 종류는 rfc2616 를 보세요.

데모

call(env)메세지를 이해하는 객체는 모두 Rack이 될 수 있음

(nil, false는 빼고)

ref: https://github.com/macournoyer/thin/blob/master/lib/thin/server.rb#L153

여기까지 이해하셨으면

아마 이런 생각이 들겁니다.

그럼 로그는? URL은?등등..

다시 데모

이런식으로 만들면 됩니다.

레일즈도 시나트라를 포함한 모든 Rack 어플은기본적으로 이렇습니다.

조금 복잡할 뿐이죠

10. 미들웨어

다시한번 이야기하자면

모듈러 루비 웹서버 인터페이스

쪼갤수 있는 입출력 하는 애

서버와 어플사이에랙을 넣을 수 있다는 이야기죠

서버와 어플 사이의 어플

여기서는 thin HelloRack

MiddleRack

Request Response

HelloRack

데모

이런식으로 하면 됩니다.

그냥 콜스택이 하나 늘어나는 것 뿐

11. 레일즈에서의 Rack 미들웨어

어디서 쓰고 있나?

$ bundle exec rake middleware

$ bundle exec rake middleware

어떻게 추가 하나?

config/application.rb

ref: http://guides.rubyonrails.org/rails_on_rack.html

어떤 경우 만드는가?

DB 연결관련파라메터 처리케쉬예외처리로깅

모든 리퀘스트에서 사용하는

대부분은 레일즈에서 이미 알아서 해줍니다.

$ bundle exec rake middleware

케쉬

예외처리

DB연결

rails, rack, sinatra 에서 만들어준 것 이외의 커스텀 rack을 쓰는 걸 딱 두번 봤는데

01. 독립적인 어플리케이션을 레일즈에 마운트 할때

ref: http://faye.jcoglan.com/ruby.html

10. 트렌젝션을 사용하지 못하도록 강제하는 경우

ref: http://blog.livedoor.jp/sonots/archives/38797925.html

10은 쓸만한 경우지만 01의 경우는 nignx에서 설정을 하는게 더 좋습니다.

ref: http://stackoverflow.com/questions/15711053/nginx-passenger-to-serve-rails-apps-in-different-sub-uris

- 헬퍼 오브젝트 - Rack::Request - Rack::Response- Rack::Builder(라우터?)- Rack::Static(파일 서버)- Rack::Auth(인증하기) - 기타등등..

이 슬라이드에서 다루지 않은 것들

소스 코드가 길지 않으니 한번 읽어보세요.

https://github.com/rack/rack/tree/master/lib/rack

들어주셔서 감사합니다.

질문 받아도 될까요?

참고 자료

http://guides.rubyonrails.org/rails_on_rack.html http://m.onkey.org/ruby-on-rack-1-hello-rack http://faye.jcoglan.com/ruby.html https://github.com/rack/rack https://github.com/rack/rack-contrib https://github.com/sinatra/sinatra-contrib http://blog.livedoor.jp/sonots/archives/38797925.html http://hawkins.io/2012/07/rack_from_the_beginning/

top related