강연자는 ‘코드 토폴로지 표기법’으로 객체, 메서드 등을 시각화하여, 서비스 객체들이 공통적으로 ‘생성자, 하나의 public 메서드, 다수의 private 메서드’ 형태를 가지며, GitLab 사례처럼 시간이 지남에 따라 내부 복잡성이 심화됨을 지적합니다. 이에 대한 대안으로, 강연자는 ‘Painless Rails’ 방법론의 세 가지 원칙을 제시합니다: 계층형 아키텍처 실천, 단일 추상화 수준 유지, 그리고 코드를 ‘작업 유형(types of work)’별로 분리하는 것입니다.
강연자는 서비스 객체 리팩토링 시연을 통해 이 원칙들을 적용합니다. 비즈니스 규칙은 User 모델로, 데이터 변이 로직은 ‘Mutators’ 함수로, 컨트롤러 로직은 다시 컨트롤러로 분리합니다. 그 결과, 원래의 서비스 객체는 고수준의 ‘오케스트레이터’ 역할을 하는 단일 함수로 간결해집니다. 이러한 재구성은 모델, 변이, 서비스, 컨트롤러로 이어지는 명확한 계층형 아키텍처를 확립하며, 모듈성 및 테스트 용이성을 향상시킵니다. 강연자는 현재 서비스 객체 사용 방식이 Rails의 계층형 아키텍처를 훼손하고 책임을 모호하게 만든다고 비판합니다. 또한, Martin Fowler의 ‘서비스 레이어’와 Eric Evans의 ‘도메인 서비스’ 개념을 언급하며, 진정한 도메인 서비스의 특징들(상태 비저장, 비즈니스 오퍼레이션 표현, 도메인 객체 조정 등)을 ‘Fowler-Evans Ruler’로 제시합니다.