피드로 돌아가기
Formatting a 25M-line codebase overnight
Hacker NewsHacker News
DevOps

Rust 기반 rubyfmt 도입을 통한 2,500만 라인 코드베이스의 하룻밤 포매팅 완료

Formatting a 25M-line codebase overnight

2026년 5월 4일12advanced

Context

세계 최대 규모의 Ruby 코드베이스를 운영하며 기존 linter의 과도한 설정 옵션으로 인한 엔지니어 간의 스타일 논쟁과 생산성 저하 발생. Ruby VM의 느린 부팅 속도로 인해 'Save on format' 기능을 구현하기 위한 100ms 미만의 latency 확보가 불가능한 상황.

Technical Solution

  • gofmt 방식의 Zero-configuration 철학을 채택하여 스타일 결정 권한을 도구로 일원화함으로써 불필요한 논쟁 제거
  • 초기 Ruby VM 부팅 및 bundler 로딩 오버헤드를 회피하기 위해 C 언어로 직접 libruby를 컴파일하여 millisecond 단위 성능 최적화 수행
  • Ruby 기반 파서의 성능 한계를 극복하기 위해 전체 로직을 Rust로 재작성하여 실행 속도 및 메모리 효율성 극대화
  • ripper 파서에서 Prism 파서로 점진적 전환을 수행하며 두 파서 간의 출력 결과 동일성을 검증하는 테스트 전략 적용
  • Prism의 네이티브 객체 직접 메모리 로딩 방식을 통해 serde 및 역직렬화 코드를 제거하여 바이너리 크기 축소 및 속도 향상

Impact

  • 2,500만 라인의 거대 코드베이스를 하룻밤 사이에 전체 포매팅 완료
  • 일반적인 Ruby 프로세스 부팅 시간(158ms~345ms)을 극복하고 파일당 100ms 미만의 포매팅 latency 달성

- 개발자 경험(DX) 향상을 위해 설정 가능성(Configurability)보다 일관성(Consistency)을 우선하는 Zero-config 도구 검토 - 언어 런타임의 부팅 오버헤드가 병목인 경우, Native 컴파일 언어로의 재작성이나 저수준 라이브러리 직접 바인딩 고려 - 대규모 마이그레이션 시 신구 파서의 결과를 비교 검증하는 'Shadow Testing' 전략을 통해 안정성 확보

원문 읽기