✅ LV.1 코드 개선
기본 적인 코드 순서 코드 최적화 문제라 어렵지 않게 해결했다.
✅ LV.2 N+1 문제 해결
원래 기존에는 N+1 문제가 생길것 같은곳은 DTO+QueryDSL로 해결했는데 이번에는 조건에 따라 @EntityGraph를 사용해 보았다. 간단한 조인 상황에서는 @EntityGraph를 사용하는게 훨씬 간편하고 좋았다.
✅ LV.3 테스트 코드 리팩토링
아직 익숙하지 않아서 실수를 몇개 하면서 잠시 헷갈린 경우가 있었지만 저번 팀프로잭트 때 테스트 코드를 작성하면서 공부한 경험이 있어서 어렵지 않게 해결했다.
✅ LV.4 API 로깅
처음 접해보는 Interceptor와 AOP여서 걱정을 많이 했는데 공부를 해보니 필터 처음 배울 때랑 비슷한 느낌이었다. 간단하게 어떻게 사용했는지 정리해보겠다.
1️⃣ Interceptor
- AdminAccessInterceptor에서 어드민 요청 URL, 시간, 사용자 ID 로그 출력
2️⃣ AOP
- AdminApiAspect에서 어드민 API 전후로 요청/응답 JSON 로그
- RequestContextHolder를 통해 HttpServletRequest 접근
- ObjectMapper로 직렬화된 로그 기록
✅ Lv.5 내가 정의한 문제 해결
ManagerService를 대표로 예시를 들겠다.
1️⃣ [문제 인식 및 정의]
- 서비스 레이어에 검증 로직이 몰려 있었다.
- 검증 책임이 Todo, User, Manager, Repository에 적절히 나뉘어있지 않고 섞여 있었다.
- 특히 "이미 등록된 담당자인지"를 판단하는 책임이 서비스에 직접 존재하고 있어 추상화 계층이 어긋나 있었다.
이로 인해 도메인 책임이 불명확했고, 가독성과 테스트성 모두 저하되는 문제가 있었다.
2️⃣ [해결 방안]
[의사 결정 과정]
- 객체가 스스로 판단할 수 있는 것은 도메인에 위임한다.
- 서비스는 흐름만 담당하고, 도메인은 규칙을 판단하게 한다.
- 중복 등록 검증은 단일 Manager가 할 수 없고, 여러 개 중 비교해야 하므로 새로운 도메인 서비스 또는 유효성 검증 로직이
필요하다 판단함
[해결 과정]
- Todo.validateOwner(User)로 작성자 검증 위임
- User.validateNotSelf(User)로 자기 자신 등록 방지 위임
- Manager.validateBelongsTo(Todo)로 삭제 시 소속 검증 위임
- ManagerDomainService.validateDuplicateManager(Todo, User)를 새로 정의하여 중복 담당자 등록 검증 책임을 분리
3️⃣ [해결 완료]
[회고]
- 처음엔 다른 사람이 작성한 코드다 보니 코드를 한눈에 이해하기 힘들었지만 계속 검토하다보니
한 메서드 안에 너무 많은 책임이 모여있는 걸 보면서 추상화 수준이 어긋났음을 인지했다. - 도메인에 책임을 넘기면서 서비스 흐름이 매우 간결해졌고,
도메인 객체의 책임도 명확해졌다. - 특히 "중복 등록 검증"은 단일 엔티티로는 할 수 없다는 점에서 검증 로직과 도메인 설계가 완전히 연결되어 있다는 것을 체감했다.
3-2. [전후 코드 비교]
| 구분 | 리팩토링 전 | 리팩토링 후 |
| 작성자 검증 | 서비스에서 todo.getUser().getId() == user.getId() | todo.validateOwner(user) |
| 본인 등록 방지 | if (user == managerUser) | user.validateNotSelf(managerUser) |
| 소속 검증 | if (todo.id != manager.todo.id) | manager.validateBelongsTo(todo) |
| 중복 등록 검증 | existsBy...를 서비스에서 직접 | managerDomainService.validateDuplicateManager(...) |
✅ Lv.6 테스트 커버리지
처음에 테스트 커버리지를 접했을 때 새로운 커버리지인가 싶어서 또 공부를 해야겠구나 했는데 기존 단위 테스트 단계로 프로젝트에서 어느 정도나 테스트 코드가 구현되었는지를 숫자로 알 수있는 좋은 기능이었다.
인텔리제이 내부 기능을 사용하다가 자코코 라는 좋은 기능을 발견해서 사용해 보았다.
서비스와 레포지토리를 위주로 테스트 하였다.

'TIL' 카테고리의 다른 글
| [250423 TIL] 배달어플 소셜로그인 (1) | 2025.04.23 |
|---|---|
| [250422 TIL] 배달어플 JWT 회원 기능 초본 (2) | 2025.04.22 |
| [250414 TIL] 뉴스피드 KPT (2) | 2025.04.14 |
| [250411 TIL] 영속성 컨텍스트 심화 (1) | 2025.04.11 |
| [250409] N+1, 인덱싱, 썸네일 (1) | 2025.04.09 |