GraphQL Ruby. 성능은 어떨까요?
다른 기술과 마찬가지로 GraphQL에도 문제가 있으며, 그 중 일부는 아키텍처에서 직접적으로 발생하는 문제이고 일부는 다른 애플리케이션에서 볼 수 있는 것과 동일한 문제입니다. 하지만 해결책은...
전문가로부터 루비 생태계에서 랙의 역할에 대해 자세히 알아보고 루비 게임의 기술을 향상하세요.
다음과 함께 작업하는 동안 루비 웹 프레임워크 당연한 것으로 받아들이는 것이 일반적입니다. 프레임워크가 HTTP 요청을 처리하고 미들웨어 로직을 실행한다는 것을 알고 있습니다. 하지만 그 이면에 무엇이 있는지 궁금해지기 시작하면서 랙에 대한 이야기를 듣기 시작했습니다.
그리고 프로젝트 은 "모듈식 루비 웹 서버 인터페이스"로 설명됩니다. Rack은 웹 서버, 웹 프레임워크 및 미들웨어용 API를 통합하여 웹 애플리케이션을 만들 수 있는 인터페이스입니다.
위 그림에서 설명한 것처럼, Rack은 웹 애플리케이션과 애플리케이션 서버 사이의 중개자 역할을 하며, 가장 간단한 방식으로 HTTP 요청을 래핑합니다.
가능한 방법.
Rack 애플리케이션은 클래스가 아닌 루비 객체로, 다음에 응답합니다. 통화
. 정확히 하나의 인수, 즉 환경 의 동결되지 않은 배열을 반환합니다.
정확히 세 가지 값입니다:
및 body.
랙 애플리케이션의 자세한 사양은 다음과 같이 확인할 수 있습니다. 여기.
'랙' 필요
클래스 RackApp
def call(env)
status = 200
headers = { 'Content-Type' => 'text/html' }
body = ['<h1>내 랙 앱<h1>']
[상태, 헤더, 본문]
end
end
핸들러는 웹 서버를 Rack과 연결합니다. Rack에는 Thin, WEBrick, FastCGI, CGI, SCGI 및 LiteSpeed용 핸들러가 포함되어 있습니다. Rack을 지원하는 각 애플리케이션 서버는 다음을 수행해야 합니다.
는 연결을 생성하기 위한 핸들러를 제공합니다(퓨마에는 자체 핸들러가 있습니다). 핸들러는 일반적으로 MyHandler.run(myapp)
. 두 번째 선택적 해시를 전달하여 서버별 구성을 포함할 수 있습니다.
씬 애플리케이션 서버 사용
Rack::Handler::Thin.run(app)
구성을 추가할 기본 파일은 다음과 같습니다. config.ru
를 사용하여 실행할 수 있습니다. 랙업
명령을 실행합니다.
Rack을 사용하면 미들웨어 애플리케이션(기본 웹 애플리케이션과 애플리케이션 서버 사이의 애플리케이션)을 만들 수 있습니다. 이러한 미들웨어 애플리케이션은 서로 연결되어 순차적으로 실행됩니다.
랙 미들웨어는 다음과 같은 모든 사양을 구현해야 합니다. 랙 애플리케이션 를 클릭하고 다음 사항을 충족합니다:
클래스 RackMiddleware
def initialize(app)
앱 = 앱
end
def call(env)
app.call(env)
end
end
이제 기본 사항을 알았으니 Rack 미들웨어로 첫 번째 Rack 애플리케이션을 만들고 Puma(애플리케이션 서버)를 사용하여 실행할 준비가 되었습니다.
다음 사항이 있는지 확인합니다. 랙
보석과 puma
gem이 설치되었습니다.
gem 설치 랙
gem 설치 푸마
먼저, 다음과 같은 파일을 만들어야 합니다. config.ru
이 파일은
애플리케이션을 실행하고 미들웨어를 추가하기 위해 Rack::Builder DSL을 사용합니다.
내 config.ru
파일에 정의한 간단한 랙 애플리케이션을 추가합니다.
이전 섹션을 참조하세요.
# config.ru
클래스 RackApp
def call(env)
status = 200
headers = { 'Content-Type' => 'text/html' }
body = ['<h1>내 랙 앱<h1>']
[상태, 헤더, 본문]
end
end
여기서 간단한 미들웨어를 약간 수정하면 이제 실행 후 서버 소프트웨어가 HTML 본문에 추가됩니다.
# config.ru
클래스 RackMiddleware
def initialize(app)
앱 = 앱
end
def call(env)
상태, 헤더, 본문 = @app.call(환경)
body << env['SERVER_SOFTWARE']
[status, headers, body]
end
end
마지막 단계로 서버를 실행하고 애플리케이션이 실행되는 것을 확인합니다. 우리의 config.ru
파일은 다음과 같이 표시됩니다:
# config.ru
클래스 RackApp
def call(env)
status = 200
headers = { 'Content-Type' => 'text/html' }
body = ['<h1>내 랙 앱<h1>']
[상태, 헤더, 본문]
end
end
클래스 RackMiddleware
def initialize(app)
앱 = 앱
end
def call(env)
상태, 헤더, 본문 = @app.call(환경)
body << env['SERVER_SOFTWARE']
[상태, 헤더, 본문]
end
end
랙미들웨어 사용
RackApp.new 실행
마지막 줄에서는 다음을 사용하여 미들웨어를 지정합니다. 사용
를 사용하여 애플리케이션을 실행합니다. 실행합니다.
실행할 준비가 되었습니다. 랙업
를 클릭하고 서버가 실행 중인 것을 확인합니다. 애플리케이션이 실행되고 있는 포트를 확인할 수 있으며 액세스 후 다음과 같은 내용이 표시됩니다:
때로는 기본으로 돌아가 우리가 사용하는 기술에 대한 통찰력을 배우는 것이 좋습니다. 학습 랙은 아키텍처에 대한 명확한 개요를 제공하고 아키텍처 뒤에 숨겨진 '마법'을 보여줍니다. 루비 웹 프레임워크.