액션 뷰 캐시의 유령: Rails 애플리케이션 최적화

RailsConf 2025 The Ghosts of Action View Cache by Hartley McGuire

작성자
jeff
발행일
2025년 07월 24일

핵심 요약

  • 1 Action View 프래그먼트 캐싱은 렌더링된 HTML을 캐시하여 성능을 향상시키고 객체 유형 관련 버그를 방지합니다.
  • 2 Action View Precompiler는 ERB 템플릿을 애플리케이션 부팅 시 미리 컴파일하여 메모리 사용량을 최적화합니다.
  • 3 Action View의 의존성 추적 기능을 활용하여 사용되지 않는 뷰 템플릿을 식별하고 제거하여 코드베이스를 깔끔하게 유지할 수 있습니다.

도입

본 강연은 Rails 애플리케이션 개발자가 겪을 수 있는 세 가지 주요 문제(캐싱 버그, 메모리 부족, 데드 코드)를 Action View의 다양한 기능을 통해 해결하는 과정을 이야기 형식으로 풀어냅니다. Shopify의 Rails 인프라 팀에서 근무하는 Harley McGuire는 Action View의 캐싱, 사전 컴파일, 그리고 데드 코드 식별 기능을 중심으로 Rails의 "마법"과 그 내부 동작 원리를 설명합니다. 이를 통해 개발자들이 Action View의 잠재력을 최대한 활용할 수 있도록 돕습니다.

1. Action View 프래그먼트 캐싱을 통한 성능 최적화

  • 기존 Rails.cache 사용 시 Active Record Relation과 같은 객체가 캐시되어 발생하는 버그를 해결하기 위해 Action View의 프래그먼트 캐싱이 제시됩니다.
  • 프래그먼트 캐싱은 뷰 템플릿 렌더링 결과를 HTML로 캐시하여, 특정 쿼리뿐만 아니라 전체 HTML 렌더링 과정의 속도를 높입니다.
  • 캐시 무효화는 Action View Digestor가 템플릿 소스 코드와 의존성(하위 템플릿)의 해시값을 기반으로 캐시 키를 생성하여 자동으로 처리합니다. 템플릿이나 종속성이 변경되면 캐시 키가 변경되어 새로운 버전이 렌더링됩니다.
  • Action View Dependency Tracker는 정규 표현식을 사용하여 render 호출에서 템플릿 이름을 추출하며, 이는 캐시 키 생성에 필요한 의존성 트리를 구축하는 데 사용됩니다.

2. Action View Precompiler를 통한 메모리 사용량 절감

  • Rails 애플리케이션은 요청 처리 시 ERB 템플릿을 Ruby 코드로 컴파일하는데, 이는 각 워커 프로세스에서 중복되어 메모리 사용량을 증가시킵니다.
  • action_view_precompiler Gem은 Ruby의 Ripper 파서를 사용하여 애플리케이션 부팅 시 모든 ERB 템플릿을 미리 컴파일합니다. 이는 템플릿 이름뿐만 아니라 로컬 변수까지 정확하게 파싱하여 가능한 기능입니다.
  • 이 Gem의 개발 결과, Ripper 기반의 ERB 트래커가 Rails에 업스트림되었고, Ruby 3.4부터는 새로운 Ruby 파서인 Prism이 기본값으로 채택되어 더욱 견고한 파싱이 가능해졌습니다.
  • 템플릿 사전 컴파일은 copy-on-write 최적화를 통해 워커 간 메모리 공유를 극대화하여 전체 메모리 사용량을 줄입니다.

3. Action View를 활용한 데드 코드 식별

  • 애플리케이션 내에 존재하는 사용되지 않는 뷰 템플릿(데드 코드)을 식별하기 위해 mark-sweep 가비지 컬렉션 알고리즘에서 영감을 받은 방법이 제안됩니다.
  • 이 방법은 모든 뷰 템플릿 목록을 확보한 후, 컨트롤러나 헬퍼에서 직접 렌더링되는 “루트 템플릿”부터 시작하여 의존성 트리를 따라 사용되는 템플릿을 표시합니다.
  • Action View Dependency Tracker를 활용하여 템플릿의 의존성을 파악하고, 최종적으로 표시되지 않은 템플릿을 데드 코드로 간주하여 제거할 수 있습니다. 이는 CI 단계에서 검증 도구로 활용될 수 있습니다.

결론

강연은 Action View가 캐시 무효화, 사전 컴파일, 데드 코드 식별과 같은 다양하고 복잡한 문제들을 해결하는 데 있어 핵심적인 기반 역할을 한다는 점을 강조합니다. 특히 `Prism` 파서의 도입과 Rails 코어에 대한 업스트림 노력은 Action View의 기능을 더욱 강화하고 개발자 경험을 개선할 것입니다. 궁극적으로 Rails는 개발자들이 미처 인지하지 못한 문제들을 해결할 수 있는 강력한 "빌딩 블록"을 제공하며, Action View는 그 중에서도 탐색할 가치가 있는 중요한 영역임을 역설하며 강연을 마무리합니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!