Rack은 Ruby 웹 애플리케이션을 위한 최소한의, 모듈식, 적응형 인터페이스를 제공하여 HTTP 요청과 응답을 처리하는 표준을 정의합니다. 이는 웹 서버, 웹 프레임워크, 그리고 그 사이의 소프트웨어(미들웨어) 간의 API를 단일 메서드 호출로 통합합니다.
미들웨어의 작동 방식
Rails 애플리케이션은 여러 미들웨어 구성 요소를 포함하며, 각 미들웨어는 이전 미들웨어로부터 환경(environment)을 받아 검사하거나 수정하고, 업데이트된 환경을 스택의 다음 미들웨어로 전달합니다.
입력 처리 예시
- 세션 관리 (OmniAuth)
    
- Devise, OmniAuth와 같은 인기 Gem은 Rack 미들웨어를 백그라운드에서 사용하여 사용자 세션, 리다이렉션, 인증 흐름을 관리합니다.
 config/initializers/omniauth.rb에서Rails.application.config.middleware.use OmniAuth::Builder를 통해 미들웨어를 추가합니다.OmniAuth::Builder는::Rack::Builder를 상속하며,provider메서드를 통해 GitHub와 같은 인증 제공자의 미들웨어를 스택에 추가합니다.- 요청이 
/auth/github와 같은 OmniAuth 인증 경로와 일치하면 미들웨어가 인증 흐름을 처리하고, 완료 후 요청을 애플리케이션으로 전달합니다. 
 - HTTP 동사 오버라이드 (Sinatra)
    
- Sinatra는 
Rack::MethodOverride미들웨어를 기본으로 추가하여 표준 HTML 폼이 POST만 지원함에도 불구하고 PUT, DELETE와 같은 HTTP 동사를 사용할 수 있도록 합니다. - 숨겨진 
_method파라미터가 포함된 POST 요청을 Rack이 PUT 또는 DELETE 요청으로 처리합니다. 
 - Sinatra는 
 
출력 처리 예시
- API Rate Limit 관리 (커스텀 미들웨어)
    
- Twitter API와 같이 엄격한 Rate Limit을 가진 외부 서비스와 통신할 때, 여러 워커 서버에서 동시에 발생하는 대량의 요청으로 인해 Rate Limit을 초과할 위험이 있습니다.
 - 이를 해결하기 위해 커스텀 미들웨어(
TwitterRateLimit)를 구현하여 Redis에 요청 카운터를 기록하고, Rate Limit 초과 시 요청을 일시 중지하거나 조절하는 로직을 적용할 수 있습니다. - 이 미들웨어는 요청이 API에 도달하기 전에 Rate Limit 상태를 확인하여 애플리케이션이 차단되는 것을 방지합니다.