47
Rack 어플리케이션 작성 개요

150120 Rack 어플리케이션 개요

Embed Size (px)

Citation preview

Page 1: 150120 Rack 어플리케이션 개요

Rack 어플리케이션 작성 개요

Page 2: 150120 Rack 어플리케이션 개요

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

Page 3: 150120 Rack 어플리케이션 개요

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

Page 4: 150120 Rack 어플리케이션 개요

01. Rack이란 무엇인가?

Page 5: 150120 Rack 어플리케이션 개요

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

Page 6: 150120 Rack 어플리케이션 개요

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

쪼갤수 있는 입출력 하는 애

Page 7: 150120 Rack 어플리케이션 개요

HelloRack

Request Response

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

Page 8: 150120 Rack 어플리케이션 개요

HelloRack

Request

hello_rack.call(env)

Page 9: 150120 Rack 어플리케이션 개요

HelloRack

Response

[status_code, header, body]

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

Page 10: 150120 Rack 어플리케이션 개요

데모

Page 11: 150120 Rack 어플리케이션 개요

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

(nil, false는 빼고)

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

Page 12: 150120 Rack 어플리케이션 개요

여기까지 이해하셨으면

Page 13: 150120 Rack 어플리케이션 개요

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

Page 14: 150120 Rack 어플리케이션 개요

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

Page 15: 150120 Rack 어플리케이션 개요

다시 데모

Page 16: 150120 Rack 어플리케이션 개요

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

Page 17: 150120 Rack 어플리케이션 개요

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

Page 18: 150120 Rack 어플리케이션 개요

조금 복잡할 뿐이죠

Page 19: 150120 Rack 어플리케이션 개요

10. 미들웨어

Page 20: 150120 Rack 어플리케이션 개요

다시한번 이야기하자면

Page 21: 150120 Rack 어플리케이션 개요

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

쪼갤수 있는 입출력 하는 애

Page 22: 150120 Rack 어플리케이션 개요

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

Page 23: 150120 Rack 어플리케이션 개요

서버와 어플 사이의 어플

여기서는 thin HelloRack

Page 24: 150120 Rack 어플리케이션 개요

MiddleRack

Request Response

HelloRack

Page 25: 150120 Rack 어플리케이션 개요

데모

Page 26: 150120 Rack 어플리케이션 개요

이런식으로 하면 됩니다.

Page 27: 150120 Rack 어플리케이션 개요

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

Page 28: 150120 Rack 어플리케이션 개요

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

Page 29: 150120 Rack 어플리케이션 개요

어디서 쓰고 있나?

Page 30: 150120 Rack 어플리케이션 개요

$ bundle exec rake middleware

Page 31: 150120 Rack 어플리케이션 개요

$ bundle exec rake middleware

Page 32: 150120 Rack 어플리케이션 개요

어떻게 추가 하나?

Page 33: 150120 Rack 어플리케이션 개요

config/application.rb

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

Page 34: 150120 Rack 어플리케이션 개요

어떤 경우 만드는가?

Page 35: 150120 Rack 어플리케이션 개요

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

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

Page 36: 150120 Rack 어플리케이션 개요

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

Page 37: 150120 Rack 어플리케이션 개요

$ bundle exec rake middleware

케쉬

예외처리

DB연결

Page 38: 150120 Rack 어플리케이션 개요

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

Page 39: 150120 Rack 어플리케이션 개요

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

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

Page 40: 150120 Rack 어플리케이션 개요

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

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

Page 41: 150120 Rack 어플리케이션 개요

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

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

Page 42: 150120 Rack 어플리케이션 개요

Page 43: 150120 Rack 어플리케이션 개요

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

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

Page 44: 150120 Rack 어플리케이션 개요

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

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

Page 45: 150120 Rack 어플리케이션 개요

들어주셔서 감사합니다.

Page 46: 150120 Rack 어플리케이션 개요

질문 받아도 될까요?

Page 47: 150120 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/