1. 프로그램상에서의 변화
테스트 코드 작성
- As-is
- 기존엔 테스트 코드의 중요성을 깨닫지 못한 상태고, 이미 거대해진 서비스를 테스트 하기엔 막막 했었습니다.
- To-be
- 로직이 도메인에 집중 됨에 따라 도메인 관련 테스트 코드 작성하기 시작했습니다.
- Mock등의 러닝 커버가 있는 테스트 코드 보단 junit 기본적인 단위 테스트 및 도메인 테스트 부터 시작했습니다.
- 비지니스 로직 검증을 할 수가 있었습니다.
- 테스트 하기 어려운 부분들은 Mock 을 활용하고 있습니다. (외부 api의 응답)
- 팀원 전체가 도메인 로직, 비지니스 로직 검증을 위한 최소한의 테스트 코드를 작성하기 시작했습니다.
도메인에서 처리 가능한 로직은 도메인으로
- As-is
- 기존 도메인은 데이터베이스와 동기화를 위한 상태 값만 가지고 있었습니다.
- Lombok의 getter/setter 적극 활용으로 불완전 객체가 생성되고 있었습니다.
- 불완전 객체이다 보니 어디서든 데이터의 호출, 삽입이 가능합니다.
- 접근 제어자를 신경 쓰지 않고 대부분이 public 으로 되어 있었습니다.
- To-be
- 도메인에서 처리가능한 로직은 도메인으로 이동함에 따라 책임(행위)과 상태 값을 가지면서 객체 다운 객체를 만들었습니다.
- 무작정 Lombok을 쓰기보다는 필요한 경우만 getter만들어 호출, setter는 사용하지 않도록 해서 객체의 적절한 책임 전달을 위해 노력하고 있습니다. (명확함 메서드 이름으로 도메인에서 처리)
- 완전 불변 객체는 아니지만 어느정도 트레이드 오프 영역을 갖고 객체의 불변을 지키려고 노력중 입니다. (가장 논쟁을 많이 하고 있습니다)
- 로직이 도메인으로 이동함에 따라 도메인 내에서 처리하는 메서드 등, 외부에서 불 필요한 메서드는 적절한 접근 제어자를 처리하고 있습니다.
자연스럽게 다이어트한 서비스
- As-is
- 불완전 객체에서 get/set 을 이용해 서비스에 모든 로직을 구현하고 있었습니다.
- To-be
- 도메인에 로직이 응집되어 있으니 도메인 내에서 로직을 수행 후 적절한 상태를 반환해 줄 수 있습니다.
- 데이터베이스에서 조회한 결과가 컬렉션 일 땐 일급 컬렉션을 적극 활용하고 있습니다.
일급컬렉션을 통해 도메인 로직의 응집도 증가
- As-is
- 일급 컬렉션의 이해도가 매우 낮은 상태며, 활용조차 하지 못 했었습니다.
- To-be
- 서비스에서 처리하던 부분들을 일급 컬렉션을 통해 객체의 책임(행위)에 대한 응집도를 높일 수 있었습니다.
- 생성자의 중요성을 깨달을 수 있었습니다. (유연성)
- 단일 책임 원칙을 지키려고 노력하면서 사용하다 보니 자연스럽게 습관화가 되었습니다.
개발팀 컨벤션이 자연스럽게 구글 자바 스타일 가이드를 따라감