Rails 8.1 로컬 CI 설정으로 개발 생산성 향상

We Configure Our Rails Local CI

작성자
HackerNews
발행일
2026년 01월 10일

핵심 요약

  • 1 GitHub Actions의 느리고 불안정한 CI 문제에 대응하여 Rails 8.1 로컬 CI를 도입, Pika 프로젝트의 CI 실행 시간을 10분 이상에서 3분 미만으로 대폭 단축했습니다.
  • 2 ci.rb 스크립트, Gemfile 및 application_system_test_case.rb 설정을 포함한 구체적인 로컬 CI 구현 방법을 제시하며, 보안 검사 및 테스트 과정을 자동화합니다.
  • 3 로컬 CI는 빠른 피드백과 배포를 가능하게 하지만, Dependabot PR 처리 방식 변경 및 새로운 워크플로우 적응 등 고려해야 할 사항도 존재합니다.

도입

지속적 통합(CI)은 개발 프로세스에서 필수적인 요소이지만, GitHub Actions와 같은 클라우드 기반 CI 서비스는 예측할 수 없는 느린 속도와 시스템 테스트의 불안정성으로 인해 개발자들에게 큰 좌절감을 안겨줄 수 있습니다. Pika 프로젝트는 GitHub Actions에서 CI 실행에 10분 이상이 소요되었고, 시스템 테스트의 잦은 실패로 인해 배포 과정이 반복적으로 지연되는 문제를 겪었습니다. 이러한 비효율성을 해결하고자, 팀은 Rails 8.1에 새롭게 도입된 로컬 CI 기능을 활용하여 보다 빠르고 안정적인 개발 환경을 구축하는 방안을 모색하게 되었습니다.

로컬 CI 설정을 통해 Pika 프로젝트는 CI 실행 시간을 획기적으로 단축하고 안정성을 높였습니다.

ci.rb 스크립트 구성

로컬 CI의 핵심은 ci.rb 스크립트에 있습니다. 이 스크립트는 다음과 같은 단계로 구성됩니다:

  • 설정: bin/setup --skip-server로 환경 초기화.

  • 보안 검사: bundler-audit, brakeman (코드 분석), importmap audit (취약점 검사)를 수행합니다. importmap audit를 위해 Gemfileopenssl 젬 추가가 필요합니다.

  • 테스트 실행: bin/rails test (일반 테스트) 및 bin/rails test:system (시스템 테스트)를 실행합니다. 테스트 환경의 시드 데이터 재설정을 위해 db:seed:replant도 포함됩니다.

  • 결과 처리: 모든 단계 성공 시 gh signoff를 호출하여 승인하고, 실패 시 수정 메시지를 표시합니다.

시스템 테스트 환경 최적화

application_system_test_case.rb 파일에서는 시스템 테스트의 안정성을 높이기 위한 설정이 적용되었습니다:

  • ENV["PARALLEL_WORKERS"] ||= "1"을 설정하여 시스템 테스트의 병렬 실행을 방지, 불안정성을 줄였습니다.

  • Selenium WebDriver Chrome 옵션을 세밀하게 조정하여 헤드리스 모드와 일반 모드 모두에서 일관된 테스트 환경을 제공합니다. 이는 37signals의 Fizzy 저장소에서 영감을 받아 최적화되었습니다.

로컬 CI 실행 전제 조건 및 과정

로컬 CI를 실행하기 위해서는 GitHub CLI(gh) 설치, 로그인, gh-signoff 확장 설치 및 저장소 활성화가 필수적입니다. 실행 과정은 간단합니다: 변경 사항을 브랜치에 푸시하고 PR을 생성한 후, 로컬 환경이 깨끗한 상태에서 bin/ci 명령어를 실행하면 됩니다. Pika 프로젝트의 경우, 이 과정을 통해 CI 실행 시간이 10분 이상에서 3분 미만으로 단축되는 놀라운 개선을 이루었습니다. 비상 시에는 gh signoff create -f 명령어로 CI를 건너뛸 수 있습니다. 또한, GitHub 저장소의 브랜치 보호 규칙에서 “Do not allow bypassing the above settings” 옵션을 활성화하여 관리자도 무단 푸시를 방지할 수 있도록 보안을 강화했습니다.

결론

로컬 CI 도입은 GitHub Actions의 한계를 극복하고 개발 생산성을 크게 향상시키는 효과적인 대안임이 입증되었습니다. CI 실행 시간 단축과 시스템 테스트의 안정성 확보는 개발팀에 빠른 피드백과 효율적인 배포 흐름을 제공합니다. 그러나 Dependabot과 같은 자동화된 보안 업데이트 처리 시 로컬 CI 과정을 수동으로 거쳐야 하는 새로운 워크플로우에 대한 적응과 초기 학습 곡선은 존재합니다. 그럼에도 불구하고, 팀의 특정 요구사항과 개발 속도를 고려할 때 로컬 CI는 매우 유용한 전략이며, 향후 GitHub Actions 기반의 더 빠른 대안(예: Blacksmith)도 고려할 수 있음을 시사합니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

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