본문으로 건너뛰기

Rails 8.1 로컬 CI를 통한 개발 워크플로우 가속화

Speed Up Your Rails Testing Workflow with Local CI

작성자
HackerNews
발행일
2025년 11월 21일
https://dev-tester.com/speed-up-your-rails-testing-workflow-with-local-ci/

핵심 요약

  • 1 Rails 8.1에 도입된 로컬 CI는 개발자의 로컬 환경에서 CI 검사를 실행하여 클라우드 기반 CI 대비 피드백 주기를 획기적으로 단축합니다.
  • 2 새로운 DSL(`ActiveSupport::ContinuousIntegration`)을 통해 설정, 코드 스타일, 보안 감사, 단위 테스트 등 CI 단계를 간편하게 정의하고 실행할 수 있습니다.
  • 3 로컬 CI는 개발 생산성을 높이고 GitHub 커밋 상태 서명 기능을 제공하지만, 다중 아키텍처 빌드나 복잡한 아티팩트 생성에는 제한적일 수 있습니다.

도입

대부분의 개발자는 느린 CI(Continuous Integration) 피드백 주기와 태스크 전환 비용으로 인한 시간 낭비를 경험합니다. 코드를 푸시한 후 CI 서비스의 지연된 알림을 기다리며 문제를 해결하고 다시 푸시하는 과정은 상당한 비효율을 초래합니다. 이러한 문제점을 해결하기 위해 Ruby on Rails 8.1에서는 '로컬 CI(Local CI)'라는 새로운 기능을 도입했습니다. 이 기능은 개발자가 자신의 로컬 환경에서 CI 검사를 직접 실행하여 빠르고 효율적인 피드백을 받을 수 있도록 설계되었습니다.

로컬 CI가 해결하는 문제점

기존 웹 애플리케이션은 GitHub Actions, CircleCI와 같은 서드파티 클라우드 CI 서비스를 활용하여 변경 사항을 배포하기 전 필요한 검사를 수행합니다. 그러나 이러한 서비스는 초기 설정 시간이 오래 걸리고, 무료 또는 엔트리 레벨 티어의 가상 환경은 종종 성능이 저하되어 느리거나 일관성 없는 결과를 초래합니다. 이는 팀의 배포 속도를 저해하는 주요 병목 현상으로 작용할 수 있습니다.

Rails 8.1의 로컬 CI는 이러한 병목 현상을 해소하기 위해 로컬 개발 시스템이 업데이트 준비 상태를 확인하는 동일한 역할을 수행하도록 합니다. 현대 개발 시스템의 강력한 하드웨어 리소스를 활용하여 클라우드 기반 CI 서비스보다 훨씬 빠른 시간 내에 동일한 CI 흐름을 실행할 수 있습니다.

Rails 앱에 로컬 CI 설정하기

새로운 Rails 8.1 애플리케이션은 로컬 CI 기능이 기본으로 활성화되어 있지만, 기존 앱은 다음 단계를 통해 설정해야 합니다.

  • Rails 8.1로 앱 업그레이드: Gemfile에서 Rails 버전을 ~> 8.1.1로 업데이트합니다.

  • bin/rails app:update 태스크 실행: 이 태스크는 새로운 스크립트와 설정 파일을 생성하고 기존 파일을 업데이트하여 Rails 8.1의 변경 사항을 적용합니다. 특히 config/ci.rbbin/ci 파일이 생성됩니다.

  • 프레임워크 기본값 로드: config/application.rb에서 config.load_defaults 8.1로 설정하여 Rails 8.1의 새로운 기본 설정을 로드합니다.

로컬 CI 설정 파일 탐색

bin/rails app:update 실행 후에는 config/ci.rbbin/ci 두 가지 새로운 파일이 생성됩니다.

  • bin/ci 스크립트: 애플리케이션 종속성을 로드하고, 새로운 ActiveSupport::ContinuousIntegration 라이브러리를 요구하여 로컬 CI의 핵심인 DSL을 사용할 수 있도록 합니다.

  • config/ci.rb: CI.run 블록 내에서 step 메서드를 사용하여 CI 실행 단계를 정의합니다. 각 step은 표시할 메시지와 실행할 명령어를 인자로 받습니다. 기본 설정에는 bin/setup, bin/rubocop, bin/importmap audit 등이 포함되어 있으며, 필요에 따라 bin/rails spec과 같은 단위 테스트 단계를 추가할 수 있습니다.

로컬 CI 실행 및 빌드 서명

bin/ci 스크립트를 터미널에서 실행하면 config/ci.rb에 정의된 각 단계가 실행되고 성공 여부 및 소요 시간이 표시됩니다. 이를 통해 클라우드 CI에서 2분 이상 걸리던 Rubocop 검사 등을 로컬에서 10초 이내에 완료하여 즉각적인 피드백을 받을 수 있습니다.

선택적으로, 로컬 CI 실행 후 GitHub 커밋 상태를 설정하는 ‘빌드 서명(Signoff)’ 기능을 사용할 수 있습니다. 이는 gh CLIgh extension install basecamp/gh-signoff 확장을 필요로 하며, success? 메서드를 통해 모든 단계 통과 시 gh signoff 명령어를 실행하여 최신 커밋에 대한 상태를 GitHub에 전송합니다.

로컬 CI가 도움이 되지 않는 경우

로컬 CI는 개발 워크플로우를 가속화하는 데 효과적이지만, 모든 시나리오에 적합하지는 않습니다.

  • 다중 아키텍처 빌드: 개발 환경과 다른 아키텍처(예: ARM vs X64)에서 앱이 작동하는지 확인해야 하는 경우.

  • 복잡한 빌드: 엔드 투 엔드 테스트와 같이 로컬에서 실행하기 어려운 추가 서비스가 필요한 경우.

  • 아티팩트 생성: 팀 전체에 공유해야 하는 스크린샷, 로그 등 빌드 아티팩트 생성이 필요한 경우.

결론

Rails 8.1에 추가된 로컬 CI 기능은 개발 워크플로우를 단순하고 빠르게 개선하는 훌륭한 도구입니다. 클라우드 기반 CI 서비스의 느린 피드백 주기를 기다리는 대신, 로컬 개발 환경에서 훨씬 짧은 시간 안에 CI 결과를 얻을 수 있습니다. 기존 Rails 애플리케이션에서도 쉽게 설정할 수 있어 접근성이 높습니다. 로컬 CI가 모든 시스템 검증 요구사항을 충족하는 만능 해결책은 아니지만, 일반적인 Rails 앱 개발 워크플로우에는 매우 효과적입니다. 다음 기능 브랜치에서 `bin/ci`를 실행해보면 더 빠른 피드백 루프가 작업 방식에 긍정적인 변화를 가져올 것임을 알 수 있을 것입니다.

댓글0

댓글 작성

댓글 삭제 시 비밀번호가 필요합니다.

이미 계정이 있으신가요? 로그인 후 댓글을 작성하세요.

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