이번 주는 Rails 커뮤니티에 정말 다양한 소식이 있었어요. 가장 큰 소식은 바로 Rails 8.1 정식 릴리스예요!
500명 이상의 기여자들이 참여한 이번 릴리스는 안정성과 개발자 경험을 모두 강화하며, Active Job Continuations부터 Local CI까지 실용적인 기능이 가득 담겼어요.
또한, Rails 개발자 Branko Petric은 모놀리스를 마이크로서비스로 쪼갰던 경험을 회고하며 “분리가 아닌 최적화가 해답이었다”는 후기를 전했어요.
Rails 8.1에서 schema.rb의 컬럼 정렬 방식이 개선되어, 팀 간 협업 시 스키마 충돌을 줄일 수 있다는 소식도 눈길을 끌었죠.
마지막으로 AngelList의 Alexander Stathis는 “모놀리스를 쪼개지 않고 키우는 법”을 공유했어요.
Rails 엔진과 Packwork로 경계를 명확히 하고, Sorbet와 Tonic 등 다양한 도구로 대규모 Rails 시스템을 효율적으로 운영하는 노하우를 공유했어요.
🎧 10분 요약 오디오로 들어보시겠어요? → YouTube로 듣기
새로운 소식
Rails 8.1 정식 릴리스
Rails 팀이 8.1 버전을 정식으로 공개했어요. 이번 릴리스는 500명 이상의 기여자와 2,500건이 넘는 커밋이 반영된 대규모 업데이트예요. Shopify와 HEY 같은 서비스가 이미 프로덕션 환경에서 안정적으로 운영 중이에요.
이번 버전은 “안정성과 개발자 경험의 진화”를 핵심 주제로, 배포·로깅·CI 등 다양한 개발 흐름을 단순화하고 개선했어요.
주요 변경 사항
Active Job Continuations
37signals의 Donal McBreen이 주도한 기능으로, 긴 실행 시간을 갖는 잡을 중단된 지점부터 이어서 실행할 수 있어요.
이제 배포 중 잡이 중단되더라도 처음부터 다시 시작하지 않아도 돼요.
Kamal 배포 시 컨테이너 종료 제한(기본 30초) 문제를 해결하는 데 특히 유용해요.
Structured Event Reporting
Shopify의 Adrianna Chang이 주도한 새로운 로깅 시스템이에요.
기존 텍스트 로그 대신 구조화된 이벤트 기반 로깅 API를 도입해 머신 분석과 후처리가 훨씬 쉬워졌어요.
예를 들어 다음과 같이 이벤트를 전송할 수 있어요:
Rails.event.notify("user.signup", user_id: 123, email: "user@example.com")
이벤트에 태그나 컨텍스트를 추가할 수도 있고, 애플리케이션이 직접 구독자(subscriber)를 등록해 원하는 방식으로 이벤트를 처리할 수 있어요.
Local CI (로컬 CI 환경)
37signals의 Jeremy Daer가 이끈 기능이에요.
강력한 로컬 머신을 활용해 클라우드 CI 없이 로컬에서 테스트를 병렬 실행할 수 있게 되었어요.
HEY의 테스트 3만 건이 클라우드에서는 10분 이상 걸렸지만, 로컬에서는 1~2분 내에 완료돼요.
Rails 8.1은 기본 CI DSL(config/ci.rb)을 도입해, bin/ci 명령으로 손쉽게 CI 파이프라인을 실행할 수 있어요.
GitHub CLI와 연동해 CI 통과 여부로 PR 병합 가능 여부를 자동 관리할 수도 있어요.
Markdown Rendering
AI 및 문서 중심 워크플로우를 고려해 Markdown 응답을 기본 지원해요.
컨트롤러에서 format.md로 간단히 렌더링할 수 있어, 블로그나 문서 중심 서비스에 특히 유용해요.
Command-line Credentials Fetching
Matthew Nguyen(Shopify)과 Jean Boussier가 개발했어요.
이제 Kamal이 Rails credentials에서 직접 비밀 키를 가져올 수 있어, 외부 시크릿 관리 도구 없이 간단히 배포할 수 있어요.
Deprecated Associations
Xavier Noria가 Gusto와 함께 개발한 기능이에요.
Active Record의 관계를 deprecated: true로 표시하면, 사용 시 자동으로 경고·예외·알림을 발생시켜 점진적 API 제거를 도와줘요.
Registry-Free Kamal Deployments
Kamal 2.8은 로컬 레지스트리 기반 배포를 기본으로 지원해요.
이제 Docker Hub나 GHCR 같은 원격 레지스트리 없이도 간단한 배포를 바로 시작할 수 있어요.
그 외 개선 사항
Rails 8.1에는 이 외에도 수천 건의 버그 수정과 소규모 개선이 포함되어 있어요.
자세한 변경 내역은 각 컴포넌트의 CHANGELOG에서 확인할 수 있어요.
“모놀리스를 쪼갰더니 더 복잡해졌다” — Branko의 마이크로서비스 회고
Rails 개발자 Branko Petric이 최근 자신의 팀이 겪은 모놀리식 아키텍처 분리 실패 경험을 공유했어요.
그는 “우리는 모놀리스를 마이크로서비스로 나눴고, 그것은 실수였다”라고 단언하며, 마이크로서비스 도입이 오히려 생산성을 떨어뜨렸다고 밝혔어요.
Branko의 팀은 20만 줄 규모의 Rails 앱을 8개의 마이크로서비스로 분리했지만, 결과적으로 배포 복잡도가 10배 늘고 서비스 간 디버깅이 어려워졌다고 해요. 데이터 일관성 문제도 잦았고, 팀은 기능 개발보다 인프라 관리에 더 많은 시간을 써야 했다고 해요. 심지어 성능 향상도 전혀 없었어요.
결국 문제의 원인은 아키텍처가 아니라 데이터베이스 최적화 부족이었어요. 잘못된 쿼리와 누락된 인덱스가 병목의 주범이었죠. 이를 깨달은 팀은 5개의 서비스를 다시 모놀리스로 합치고, 3개의 진짜로 독립적인 서비스만 남긴 채 쿼리와 배포 파이프라인을 개선했어요.
Branko는 이번 경험을 통해 “마이크로서비스는 만능이 아니며, 때로는 시스템을 해체하기보다 내부를 개선하는 것이 더 현명하다”고 강조했어요.
Rails 8.1, schema.rb 컬럼 정렬 방식 변경
Rails 개발자 Stuart Yam이 Rails 8.1에서 도입된 작은 변화 하나를 소개했어요. 이제 schema.rb에서 각 테이블의 컬럼이 알파벳 순으로 정렬되도록 변경되었어요.
이전에는 마이그레이션 순서나 환경에 따라 컬럼 순서가 달라져, 팀 간 협업 시 schema.rb가 불필요하게 충돌하거나 커밋이 뒤섞이는 문제가 자주 발생했어요. Rails 8.1에서는 컬럼을 자동으로 정렬해 이러한 스키마 충돌과 “플립플롭(diff flip-flopping)” 현상을 방지할 수 있게 되었어요.
Stuart은 “이런 작은 변화들이 개발자들의 삶을 훨씬 편하게 만들어준다”며, Rails 팀의 세심한 개선에 박수를 보냈어요.
해당 변경은 PR #53281을 통해 반영되었어요.
️
AngelList, “모놀리스를 쪼개지 않고 키운다” — Alexander Stathis의 Rails 아키텍처 전략
AngelList의 수석 엔지니어 Alexander Stathis가 최근 발표에서 **“Rails 모놀리스를 확장 가능한 구조로 발전시키는 방법”**을 공유했어요.
AngelList는 투자와 회계, 금융 업무를 처리하는 복잡한 비즈니스 로직을 갖고 있지만, 여전히 Rails 모놀리식 아키텍처를 유지하면서도 확장성과 생산성을 확보하고 있다고 해요.
Stathis는 마이크로서비스로 분리하는 대신, Rails 엔진과 Packwork를 활용해 모듈형 모놀리스(modular monolith) 로 발전시킨 과정을 소개했어요. Packwork는 Shopify가 만든 정적 분석 도구로, 코드 간 의존성을 시각적으로 관리하고 도메인 경계를 명확히 유지하는 데 도움을 주어요.
AngelList는 Active Record 콜백 대신 서비스 객체(Service Object) 패턴을 활용해 로직을 명시적으로 표현하고, Sorbet와 Boba 젬으로 타입 안정성과 코드 일관성을 유지해요. 또한 Sidekiq, GoodJob, Temporal 등 여러 비동기 작업 도구를 상황에 맞게 혼합 사용하면서, 작업 특성에 따른 유연한 설계를 실현하고 있어요.
로컬 개발 환경에서는 Tonic을 이용해 실제 프로덕션 데이터를 스크럽(scrub)한 뒤 안전하게 테스트 데이터를 생성하고, 이를 Docker 기반 환경에서 손쉽게 재현할 수 있게 했어요.
또한 AngelList에는 “정원사(gardener)”로 불리는 플랫폼 팀이 있어, CI/CD, 인증, 패키지 업그레이드 등 코드베이스의 건강을 유지하고 개발자 경험을 개선하는 역할을 맡고 있다고 해요.
마지막으로 Stathis는 “Rails는 AngelList의 비밀 소스(secret sauce)”라며, 높은 생산성과 단순한 구조 덕분에 새로운 개발자도 빠르게 프로젝트에 기여할 수 있다고 강조했어요.
이번 발표는 “모놀리스를 버리기보다, 잘 관리하고 구조화하면 충분히 확장 가능한 시스템을 만들 수 있다”는 메시지를 전하고 있어요.