발표는 크게 네 가지 주요 주제로 구성됩니다. 첫 번째는 배치 작업(Batch Jobs) 인프라입니다. 이 시스템에서는 대량의 데이터 교환, XML/JSON 파일 생성, 일일 데이터 동기화 등 다양한 백그라운드 작업이 필요합니다. 기존의 Rescue 기반 시스템에서 Sidekiq으로 마이그레이션하는 과정을 설명하며, 이를 위해 커스텀 UI를 개발하여 작업의 범주화, 스케줄링, 활성화/비활성화, 진행 상황 추적, 로그 확인 등을 지원합니다. 특히, 작업의 복잡성을 ApplicationJob
및 BatchJob
과 같은 기반 클래스에 숨겨 실제 작업 코드는 비즈니스 로직에만 집중하도록 설계했습니다. 실시간 진행 상황 바는 Turbo Hotwire와 Action Cable을 활용하며, 클라이언트 과부하를 방지하기 위해 Rails 캐시를 이용한 브로드캐스트 스로틀링 기법을 적용했습니다. 또한, 수만 건의 데이터를 병렬 처리하기 위한 Parallel Job Processor
를 구현하여, 작업을 서브 작업으로 분할하고 Redis 채널을 통해 통신하며 병렬로 실행하는 방식을 소개합니다. 대규모 파일 생성을 위한 Parallel File Generator
는 이 병렬 처리 메커니즘의 특수한 사례로 제시됩니다.
두 번째 주제는 API 문서화(API Documentation) 입니다. 200개가 넘는 API 메서드를 가진 Ruby on Rails와 Java 애플리케이션의 API를 한곳에 통합하여 문서화하는 필요성을 강조합니다. 발표자는 코드에 가깝게 문서화를 작성하기 위해 간단한 Ruby 클래스 메서드(예: api_doc
, api_parameter
, api_error
)와 Ruby의 inherited
, method_added
콜백을 활용하여 API 메타데이터를 자동으로 수집하는 시스템을 구축했습니다. 이 시스템은 예제 URL, 통계 데이터(최근 호출 시간, 응답 시간), 그리고 실제 컨트롤러 및 메서드 링크까지 제공하여 개발자들의 생산성을 높입니다. 이러한 커스텀 구현은 Java 애플리케이션의 WSDL 파일을 쉽게 파싱하여 통합하거나, API 로그를 기반으로 자동화된 API 테스트를 수행하는 등 예상치 못한 이점을 가져왔습니다.
세 번째는 개발자 UI(Developer UI) 개선입니다. 160개 이상의 Rake 태스크가 존재하여 필요한 태스크를 찾기 어렵고 환경 로딩 시간이 길다는 문제점을 해결하기 위해 Shopify의 CLI UI
젬을 활용했습니다. 이를 통해 atis
라는 커스텀 CLI 도구를 개발하여 텍스트 포맷팅, 진행 바, 병렬 태스크 실행 시각화 등 사용자 친화적인 인터페이스를 제공합니다. 이 도구는 인터랙티브 모드와 옵션을 통한 직접 실행 모드를 모두 지원하여, 개발자의 수동 작업뿐만 아니라 CI/CD 환경에서도 유용하게 활용될 수 있도록 설계되었습니다.
마지막으로 Rails 마이그레이션 전략입니다. Rails 2에서 3으로의 전환과 같이 대규모 버전 업그레이드 시 발생하는 긴 브랜치 유지보수 및 충돌 문제를 해결하기 위한 혁신적인 방법을 제시합니다. Gemfile.next
와 같은 심볼릭 링크를 활용하고 Gemfile
및 boot.rb
파일에서 조건부 로직을 사용하여 동일한 코드베이스를 다른 Rails 버전(예: Rails 5.2와 6.1)으로 동시에 실행할 수 있는 방법을 소개합니다. 이 방식은 마이그레이션 과정의 스트레스를 줄이고 점진적인 전환을 가능하게 합니다.