1. 문제 인식 및 정의
여러 서비스 클래스에서 동일한 형태의 예외 로직이 반복되고 있는 상황 확인
발생가능한 문제
- 유지보수성 저하: 로직 변경 시 모든 중복 위치를 찾아 수정해야 한다.
- 휴먼 에러 위험 증가: 일부 위치에서 변경을 놓치면 버그로 이어진다.
- 가독성 저하: 핵심 로직보다 반복된 부수 코드가 많아져 흐름이 뚝뚝 끊긴다.
2. 해결 방안
중복 코드를 제거하고, 공통 로직은 한곳에서 관리할 수 있도록 리팩토링한다.
- 서비스 계층에서는 각 도메인에 대한 책임을 명확히 분리 한다.
- User 관련 공통 로직은 UserService 에 정의
- Todo 관련 공통 로직은 TodoService 에 정의
- 도메인 객체가 필요한 서비스들은 더 이상 각자의 Repository를 직접 사용하지 않고, 해당 도메인의 Service에서 제공하는 공통 메서드를 통해 조회 및 예외 처리를 일관되게 수행하도록 한다.
3. 해결 완료
UserService 메서드 추가
- getUserByIdOrThrow()
- getManagerByIdOrThrow()
- getUserByEmailOrThrow()
- ensureEmailIsUnique()
- saveUser()
TodoService 메서드 추가
- getTodoOrThrow()
[Commit History]
https://github.com/gajicoding/spring-advanced/commit/1d67c102c62c1f05eff2bd55fef32a2b6de19110
Lv 5. 공통 예외 로직 추출, 도메인 로직 분리 · gajicoding/spring-advanced@1d67c10
UserService 메서드 추가 - getUserByIdOrThrow() - getManagerByIdOrThrow() - getUserByEmailOrThrow() - ensureEmailIsUnique() - saveUser() TodoService 메서드 추가 - getTodoOrThrow() - 메서드 사용
github.com
+ 테스트 코드 수정
https://github.com/gajicoding/spring-advanced/commit/d813f543b20376e67062b114470be85778cc74cb
test: 서비스 리팩토링에 따라 테스트 코드 수정 · gajicoding/spring-advanced@d813f54
Todo todo = new Todo("title", "title", "contents", user);
github.com
리팩토링 효과
- 유지보수성 향상: 사용자 조회 로직을 수정할 일이 생기더라도 UserService의 한 메소드만 수정하면 된다.
- 중복 제거: 동일한 로직이 여러 곳에 퍼져있는 문제를 해결했다.
- 가독성 개선: 주요 도메인 로직에만 집중할 수 있게 되었다.
리팩토링 단점
- 서비스 간 호출 복잡도 증가
- 초기 설계 난이도 증가
'Spring > 코드 개선 (Refactoring)' 카테고리의 다른 글
[코드 개선 과제] JPQL fetch join -> @EntityGraph (0) | 2025.06.12 |
---|