기존 코드베이스에 Robocop.yml 도입 및 정착시키기: 성공 사례와 방법

omakaseしないためのrubocop.yml のつくりかた / Shu Oogawara - Kaigi on Rails 2024

3줄 요약

  • 본 발표는 기존 Ruby/Rails 프로젝트에 정적 코드 분석 도구인 Robocop을 성공적으로 도입하고 팀의 스타일을 반영한 `Robocop.yml`을 구축하는 방법을 제시합니다.
  • 핵심 어려움인 시간 확보의 어려움과 팀 문화 언어화의 문제를 정기 회의 내 소규모 논의와 명확한 의사결정 절차로 극복했음을 보여줍니다.
  • 성공의 기반에는 전담 리더십과 함께, 충분한 테스트 스위트 및 심리적 안전성이 보장된 팀 문화가 필수적이며, `Robocop.yml`은 팀 문화의 지속적인 반영체로서 관리되어야 합니다.

Ruby 생태계에서 널리 사용되는 정적 코드 분석 및 포맷터인 Robocop은 코드 품질 및 일관성 유지에 중요한 역할을 합니다. 하지만 기존 코드베이스에 Robocop을 처음 도입하는 것은 상당한 어려움을 수반하며, 특히 Rails 7.2의 기본 설정은 최소한의 일관성만을 제공할 뿐 팀의 고유한 스타일을 온전히 반영하기에는 부족합니다. 본 발표는 이러한 도전 과제를 극복하고 팀 고유의 `Robocop.yml`을 성공적으로 구축한 실제 사례를 공유하며, 그 과정에서의 방법론과 성공 요인을 상세히 설명합니다.

Robocop 설정을 팀 차원에서 결정하는 것이 어려운 주된 이유는 첫째, 직접적인 매출 증대로 이어지지 않아 시간 확보가 어렵고, 둘째, 팀의 코딩 스타일이라는 ‘문화’를 언어화하고 하나의 합의점으로 모아야 하기 때문입니다. 시간 확보의 어려움은 개발 일정에 지장을 주지 않도록 기존의 정기 회의 시간을 활용하여 소규모로 논의를 진행하는 방식으로 해결할 수 있습니다. 이는 지속적으로 조금씩 진행함으로써 프로젝트의 흐름을 방해하지 않습니다. 문화 언어화 및 합의 도출의 어려움은 다양한 의견을 수렴하되 명확한 의사결정 규칙을 적용함으로써 완화할 수 있습니다. 구체적으로는, 각 Cop 설정에 대한 팀원의 의견을 ‘찬성’, ‘반대’, ‘무관심’, ‘설정 변경 희망’ 등 다양한 형태로 자유롭게 표현하도록 허용하고, 슬랙 투표를 활용하여 집계합니다. 결정은 기본적으로 다수결 원칙을 따르되, 의견이 첨예하게 갈리거나 특정 설정 변경이 필요한 경우에는 추가 논의를 통해 합의점을 찾거나 리더십의 판단으로 결정합니다. ‘무관심’ 의견 배제, ‘설정 변경 희박’ 의견에 대한 대안 토론 등 세부 규칙 마련이 중요합니다. 실제 팀은 Robocop.todo.yml 기반으로 Cop 선정, 논의, 의견 수렴, 코드 수정, PR 작성 과정을 반복하며 9개월에 걸쳐 Robocop.todo.yml을 완전히 제거했습니다. 이러한 성공의 배경에는 논의 준비 및 진행을 전담하는 오너십과 팀 문화의 뒷받침이 있습니다. 특히 충분한 테스트 스위트와 심리적 안전성이 확보된 팀 문화가 결정적이었습니다.

결론적으로, 기존 프로젝트에 Robocop을 성공적으로 도입하고 `Robocop.yml`을 구축하는 것은 단순히 설정 파일을 만드는 기술적인 작업을 넘어 팀의 코딩 문화를 정의하고 합의하는 과정입니다. 이는 단기적인 목표가 아닌, 팀 문화의 변화와 성장에 따라 지속적으로 관리되고 발전시켜나가야 하는 대상입니다. 따라서 `Robocop.yml` 관리를 위해서는 시간 관리 전략과 명확한 의사결정 절차 마련과 더불어, 강력한 테스트 문화와 심리적 안전성을 갖춘 팀 문화 구축 및 유지가 필수적입니다. `Robocop.yml`은 팀 문화의 거울이기에, 문화에 대한 '위임'은 불가능하며 팀 스스로 가꾸어 나가야 합니다.