이 발표는 Rails 애플리케이션의 아키텍처를 개선하고 기능을 유연하게 통합하기 위한 여러 고급 기술을 제시합니다.
1. ‘Rails다운’ 코드와 클래스 메서드 활용
- 클래스 메서드: Ruby의 유연성을 활용,
admin_access_only같은 커스텀 클래스 메서드를 구현하여before_action을 추상화하고 컨트롤러의 가독성 및 표현력을 높입니다.
2. app 폴더 확장 및 커스텀 제너레이터
- 도메인별 폴더:
app디렉토리에api_clients,validators등 커스텀 폴더를 추가하여 코드를 체계적으로 조직화하고 외부 Gem 의존성을 줄입니다. - 커스텀 제너레이터:
rails generate generator로 생성된 제너레이터는NamedBase를 상속, 파일 경로 및 네임스페이스 자동 처리 기능을 활용해 반복 작업을 자동화하고 일관성을 유지합니다.
3. 제너레이터 템플릿 오버라이드 및 Concern 재정의
- 템플릿 오버라이드:
lib/templates를 통해 Rails 또는 Gem의 제너레이터 템플릿을 오버라이드하여 스캐폴드 등을 팀 요구사항에 맞게 커스터마이징하고 개발 효율성을 높입니다. - 기능별 Concern: Concern은 코드 재사용을 넘어,
User::Billing처럼 모델 내 기능별로 코드를 조직화하는 데 활용됩니다. 관련 코드를 네임스페이스 폴더에 배치하여 단일 파일의 복잡성을 줄이고 모듈성을 강화합니다.
4. Cloudflare Turnstile 통합 사례
Challenges::TurnstileConcern, 커스텀TurnstyleValidator,TurnstileApiClient를 활용하여 Cloudflare Turnstile 유효성 검사를 Rails의 유효성 검사 흐름에 매끄럽게 통합하는 방법을 시연합니다.
5. Rails 확장 메커니즘 및 실용적 적용
- 렌더링 파이프라인: PHP 렌더링 예시를 통해 Rails의 렌더링 파이프라인과 템플릿 핸들러(
ActionController::Renderers.add,ActionView::Template.register_template_handler)의 동작 방식을 심층적으로 설명합니다. - Gem 개발 사례: Jbuilder, Inertia Rails와 유사하게,
PhumPDFGem은 Node.js 없이 순수 Ruby로 Puppeteer 프로토콜을 구현, HTML/CSS 기반 PDF 생성을render phum_pdf방식으로 Rails 컨트롤러에 통합하는 실제 개발 사례를 제시합니다.