발표자들은 Kent Beck의 3X 모델(탐색, 확장, 추출)을 통해 애플리케이션의 현재 상태를 진단하며 이야기를 시작합니다. Meraki는 2006년 탐색 단계를 시작하여 2012년 Cisco에 인수된 후 급격한 확장 단계를 거쳐 현재 420만 라인의 Ruby 코드와 600명 이상의 월별 기여자를 가진 거대한 시스템으로 성장했습니다. 이 과정에서 초기 Rails 모범 사례가 확립되기 전에 구축된 코드는 거대한 모델과 컨트롤러로 인해 복잡성이 극대화되고 테스트가 어려워지는 문제가 발생했습니다.
이러한 문제를 해결하기 위해 Meraki 팀은 코드베이스를 모듈화하고 모놀리식 아키텍처 내에 명확한 경계를 설정하는 방법을 채택했습니다. 첫째, 거대한 컨트롤러 액션 내부에 있던 비즈니스 로직을 더 작고 테스트하기 쉬운 Plain Old Ruby Objects (PORO)로 추출했습니다. 이는 HTTP 개념과 분리되어 단위 테스트를 용이하게 하고 비즈니스 로직의 테스트 커버리지 ROI를 높이는 데 기여했습니다. 둘째, ERB 파일 내에 혼재되어 있던 비즈니스 로직 역시 PORO로 대체하여 코드 가독성, 테스트 용이성, 그리고 코드 품질 도구의 활용성을 개선했습니다. 셋째, 이른바 ‘뚱뚱한 모델(Fat Models)’이 코드의 ‘쓰레기통(junk drawers)’이 되는 문제를 해결하기 위해 모델에서 핵심 비즈니스 로직을 별도의 클래스로 추출했습니다. 이는 모델 간의 암시적 결합을 줄이고 코드 응집도를 높이는 데 효과적이었습니다.
추출된 PORO들은 더 이상 Rails의 MVC 패턴(컨트롤러, 모델, 뷰)에 따라 분류되지 않고, domain/coffee_machine
과 같이 도메인 개념을 기반으로 하는 디렉토리 구조로 재배치되었습니다. 이 접근 방식은 각 팀이 소유한 코드에 대한 자율성과 책임감을 부여하여, 전체 조직의 합의 없이도 개선 작업을 수행할 수 있도록 했습니다. 이러한 노력의 결과로 모듈화된 코드의 테스트 커버리지는 97% 이상으로 크게 증가했으며, 평균 메서드 복잡성은 30% 감소했습니다. 또한, 문제 발생 시 책임 팀을 명확히 함으로써 플래키 테스트와 심각도 1(SEV1) 응답에 대한 개선을 가져왔습니다. 그러나 팀 자율성이 때로는 도메인 외부에서 문제를 야기할 수 있다는 도전 과제도 존재했습니다.