ActiveSupport::CurrentAttributes — Rails가 request-scoped state를 다루는 방법
· 3 min read
rails generate authentication을 실행하면 app/models/current.rb가 생성된다. 3줄짜리 파일이다. 이 3줄이 어떤 문제를 풀고 있고, 내부에서 어떻게 동작하는지를 다룬다. CurrentAttributes는 DHH의 PR #29180으로 Rails에 도입되었다.
문제: request context의 전파
현재 사용자 정보는 애플리케이션 전체에서 필요하지만, request가 끝나면 사라져야 한다. 이 정보를 필요한 곳마다 메서드 인자로 넘기는 것은 가능하지만 번거롭다.
# 인자 전달 방식 - 동작하지만 모든 레이어에 user를 넘겨줘야 한다
def create(message_params, user)
message = Message.new(message_params)
message.creator = user
Event.create(record: message, user: user)
end
ActiveSupport::CurrentAttributes가 이 문제를 해결한다. request 동안만 유효한 저장소를 제공하고, request가 끝나면 자동으로 비운다.