발표자는 개발자들이 서비스 객체를 “그냥 무언가를 하는 것”으로 인식하며, 일반적인 서비스 객체의 형태는 생성자, 인자 없는 공개 메서드, 다수의 비공개 메서드를 포함한다고 설명합니다. 그는 GitLab 코드베이스 사례를 통해 서비스 객체 내부에서 복잡성이 ‘안쪽으로(inward)’ 성장하여 유지보수성을 저해하는 비효율성을 지적합니다. 이러한 문제 해결을 위해 발표자는 자신의 ‘Painless Rails’ 방법론을 제시합니다. 이 방법론은 계층형 아키텍처 실천, 단일 수준의 추상화 유지, 그리고 코드를 ‘작업 유형(types of work)’에 따라 다른 빌딩 블록으로 분리하는 세 가지 핵심 원칙에 기반합니다.
구체적인 리팩토링 예시를 통해 그는 서비스 객체가 수행하던 다양한 작업을 분리하는 과정을 설명합니다. 비즈니스 규칙은 모델의 메서드로, 데이터베이스 변경과 같은 ‘뮤테이션’은 ‘뮤테이터’라는 단일 책임의 함수 형태로 관리됩니다. ‘컨트롤러 로직’은 다시 컨트롤러로 복원됩니다. 이 과정을 거치면 원래의 서비스 객체는 저수준 작업을 직접 수행하지 않고, 모델, 뮤테이터, 메일러 등 다른 빌딩 블록들을 조율하는 ‘고수준의 오케스트레이터’ 역할만 수행합니다. 이러한 분리 전략은 코드의 모듈성을 높이고, 진정한 계층형 아키텍처를 복원하며, 각 빌딩 블록을 독립적으로 테스트하기 쉽게 만듭니다. 발표자는 기존 서비스 객체 방식이 ‘우발적 복잡성’을 초래하고 계층형 아키텍처를 파괴한다고 강조합니다.
더 나아가 발표자는 Martin Fowler와 Eric Evans의 ‘서비스 계층’ 및 ‘도메인 서비스’ 개념을 인용하며, 이들이 정의한 도메인 서비스의 특성(상태 없음, 활동 지향적 이름, 비즈니스 오퍼레이션 표현, 도메인 객체 조율, 트랜잭션 제어, 부수 효과 발생 가능성, 애플리케이션 로직 배제)을 ‘Fowler-Evans Ruler’로 명명합니다. 이 척도를 통해 서비스 객체의 적절성을 측정할 수 있으며, 척도에서 높은 점수를 받는 서비스 객체는 종종 단순한 함수로 대체될 수 있음을 시사합니다.