0Pricing
Ruby Academy · 강의

미들웨어와 Rack

Rack 스택을 알아봅니다

미들웨어와 Rack은(는) CoddyKit의 무료 Ruby Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Ruby Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Ruby Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

Rack이란 무엇인가요?

Rack은 Ruby 웹 서버와 프레임워크 사이의 최소 인터페이스입니다. Sinatra, Rails 및 기타 프레임워크는 모두 Rack에서 실행됩니다.

  • 요청과 응답이 흐르는 방식을 표준화합니다
  • 재사용 가능한 미들웨어를 사용할 수 있게 합니다
  • Rack 앱은 call(env)에 응답하는 모든 것입니다
app = lambda do |env|
  [200, { 'Content-Type' => 'text/plain' }, ['Hello Rack']]
end

puts app.call({}).inspect

Rack 계약

Rack 앱의 call은 세 요소로 이루어진 배열을 반환해야 합니다.

  • 상태 정수(예: 200)
  • 헤더 해시
  • each에 응답하는 본문(일반적으로 문자열 배열)
status, headers, body = 200, { 'Content-Type' => 'text/html' }, ['<h1>Hi</h1>']
puts status
puts headers.inspect
body.each { |chunk| puts chunk }

env 해시

env 인수는 요청을 설명하는 해시입니다.

  • REQUEST_METHOD는 GET 또는 POST와 같은 요청 방식입니다
  • PATH_INFO는 요청된 경로입니다
  • QUERY_STRING은 원시 쿼리 매개변수입니다
env = { 'REQUEST_METHOD' => 'GET', 'PATH_INFO' => '/home' }
puts "#{env['REQUEST_METHOD']} #{env['PATH_INFO']}"

미들웨어란 무엇인가요?

미들웨어는 요청이 앱에 도달하기 전이나 후에 동작을 추가하도록 앱을 감쌉니다.

  • 로그 기록, 인증, 압축
  • 각 미들웨어도 call(env)에 응답합니다
  • 체인에서 다음 앱을 호출합니다
class Logger
  def initialize(app)
    @app = app
  end

  def call(env)
    puts "Request: #{env['PATH_INFO']}"
    @app.call(env)
  end
end

미들웨어 클래스 만들기

미들웨어는 감싼 앱을 저장하고 call에서 해당 앱에 작업을 위임합니다.

  • 생성자는 내부 앱을 받습니다
  • call은 환경을 수정한 다음 전달할 수 있습니다
  • 돌아오는 과정에서 응답을 변경할 수도 있습니다
class UpcaseBody
  def initialize(app)
    @app = app
  end

  def call(env)
    status, headers, body = @app.call(env)
    new_body = body.map(&:upcase)
    [status, headers, new_body]
  end
end

puts 'Middleware defined'

미들웨어 스택

미들웨어는 스택을 구성합니다. 요청은 앱까지 아래로 흐르고 응답은 다시 위로 흐릅니다.

  • 들어갈 때는 바깥쪽 미들웨어가 먼저 실행됩니다
  • 나올 때는 바깥쪽 미들웨어가 마지막에 실행됩니다
inner = lambda { |env| [200, {}, ['core']] }

class Wrap
  def initialize(app); @app = app; end
  def call(env)
    s, h, b = @app.call(env)
    [s, h, b.map { |x| "[#{x}]" }]
  end
end

puts Wrap.new(inner).call({}).last.inspect

Sinatra에서 미들웨어 사용하기

use를 사용해 Sinatra 앱에 미들웨어를 추가합니다.

  • use Rack::Logger
  • use 호출 순서가 스택 순서를 정합니다
require 'sinatra'

use Rack::Logger

get '/' do
  'Logged request'
end

config.ru와 rackup

config.ru 파일은 rackup 또는 Puma로 Rack 앱을 시작합니다.

  • run은 최종 앱을 설정합니다
  • use는 그 앞에 미들웨어를 추가합니다
# config.ru
require './app'
use Rack::CommonLogger
run Sinatra::Application

자주 사용하는 기본 제공 미들웨어

Rack에는 유용한 미들웨어가 함께 제공됩니다.

  • Rack::CommonLogger 요청 기록
  • Rack::Deflater gzip 압축
  • Rack::Static 파일 제공
  • Rack::Session::Cookie 세션
# In config.ru
# use Rack::Deflater
# use Rack::Static, urls: ['/assets'], root: 'public'
puts 'See comments for usage'

응답 수정하기

미들웨어는 내부 앱이 실행된 후 응답 헤더를 추가하는 경우가 많습니다.

  • 응답의 세 요소를 받습니다
  • 헤더를 변경한 다음 반환합니다
class AddHeader
  def initialize(app); @app = app; end
  def call(env)
    status, headers, body = @app.call(env)
    headers['X-Powered-By'] = 'Ruby'
    [status, headers, body]
  end
end

app = AddHeader.new(lambda { |e| [200, {}, ['ok']] })
puts app.call({})[1].inspect

요청 중단하기

미들웨어는 내부 앱을 호출하지 않고 요청을 중단할 수 있습니다.

  • 인증 관문이나 요청 속도 제한에 유용합니다
  • 응답의 세 요소를 직접 반환합니다
class Auth
  def initialize(app); @app = app; end
  def call(env)
    return [401, {}, ['Unauthorized']] unless env['token']
    @app.call(env)
  end
end

app = Auth.new(lambda { |e| [200, {}, ['ok']] })
puts app.call({})[0]

빠른 확인

Rack에 대한 이해도를 확인합니다.

복습

Rack 스택에 대해 배웠습니다.

  • Rack은 Ruby 웹 프레임워크 아래에서 공통으로 사용하는 인터페이스입니다
  • Rack 앱은 call(env)에 응답하고 [status, headers, body]를 반환합니다
  • 미들웨어는 앱을 감싸 여러 부분에 걸친 동작을 추가합니다
  • Sinatra에서는 use를, 또는 config.ru를 사용해 스택을 구성합니다
  • 미들웨어는 응답을 수정하거나 요청을 즉시 중단할 수 있습니다

자주 묻는 질문

“미들웨어와 Rack” 강의는 무료인가요?

네 — “미들웨어와 Rack” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Ruby Academy 강의 전체를 잠금 해제할 수 있습니다. Ruby Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“미들웨어와 Rack”에서 뭘 배우나요?

Rack 스택을 알아봅니다 브라우저에서 직접 실행하는 실습 코드로 Ruby Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Ruby Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Ruby Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“미들웨어와 Rack” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Ruby Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Ruby Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Sinatra 기초
  2. 경로와 매개변수
  3. JSON API
  4. 미들웨어와 Rack
← Ruby Academy(으)로 돌아가기