내일배움캠프(Spring 7기)/내일배움캠프
[CH 4 코드 개선 및 테스트 코드 작성] 정리 & 회고
가지코딩
2025. 6. 12. 12:41
단계별 요구사항
필수 기능
- Lv 1. 코드 개선
- Lv 2. N+1 문제
- Lv 3. 테스트코드 연습
도전 기능
- Lv 4. API 로깅
- Lv 5. 위 제시된 기능 이외 ‘내’가 정의한 문제와 해결 과정
- Lv 6. 테스트 커버리지
학습 키워드
- Fetch Join
- Interceptor
- AOP
- API 로깅
- 테스트 코드
- 테스트 커버리지
새롭게 알게된 지식
- @EntityGraph - fetch join을 어노테이션으로 처리하기
- AOP (Aspect-Oriented Programming)
- Interceptor vs AOP(Aspect Oriented Programming)
- 테스트 코드 개념
- 테스트 코드 개념 2 + Mock 을 이용한 테스트 코드 작성 예제
- 테스트 커버리지 - JaCoCo 설정
- IntelliJ 에서 테스트 커버리지 확인하기
설계 & 리팩토링 과정
- [코드 개선 과제] Interceptor vs AOP, 어떤 방식이 더 적합할까?
- [코드 개선 과제] 공통 예외 로직 추출, 도메인 로직 분리
- [코드 개선 과제] JPQL fetch join -> @EntityGraph
과제 학습 목표
(체크리스트) ✅ 완료, ❌ 실패, △ 미흡
- ✅ 스프링의 예외처리 메커니즘을 이해하고 Global 예외처리 방식을 활용할 수 있는가?
- ✅ 단위 테스트 및 컨트롤러, 서비스 레이어의 통합테스트를 작성할 수 있는가?
- △ LAZY 로딩 대신 EAGER 로딩을 사용해 N+1 쿼리 성능 문제를 해결할 수 있는가?
- ✅ 트랜잭션을 사용하여 데이터베이스의 일관성을 보장하고, 영속성 컨텍스트와의 상호작용을 이해할 수 있는가?
- ✅ JPA에서 트랜잭션을 사용하여 데이터베이스 상태 변경을 관리할 수 있는가?
- △ 영속성 전이(Persist Cascade)를 활용하여 엔티티 간의 관계에서 영속성 상태를 관리할 수 있는가?
- ✅ 지연 로딩(Lazy Loading)과 즉시 로딩(Eager Loading)의 차이를 이해하고, 적절한 로딩 전략을 선택할 수 있는가?
- △ JPA에서 Proxy 객체를 사용하여 지연 로딩(Lazy Loading)을 처리할 수 있는가?
- ✅ JPA에서 1:N, 1:1, N:M 연관관계를 설정하고, 이를 활용하여 엔티티 간의 관계를 정의하고 관리할 수 있는가?
느낀 점 & 마무리
전체 소스 코드
https://github.com/gajicoding/spring-advanced
GitHub - gajicoding/spring-advanced
Contribute to gajicoding/spring-advanced development by creating an account on GitHub.
github.com