Spring Bean의 생명 주기를 학습하고, 예외 처리를 전역적으로 관리하며, JPQL을 활용하여 데이터베이스를 효율적으로 다루는 방법을 배운다.
준비하기
Bean 생명주기
API 예외 처리
JPQL 기본 개념
JPQL 응용
페이징(Paging)과 고급 JPQL
Fetch Join
Fetch Join 심화
Spring Data JPA & JPQL 적용
Git Clone은 원격 저장소(repository)의 전체 내용을 로컬 컨텐츠로 복사하는 Git 명령어이다.
git clone https://github.com/UK-spring/spring-callback
Spring은 Bean의 생성 → 주입 → 소멸까지 자동으로 관리한다.
| Scope | 설명 |
|---|---|
| Singleton | 기본 설정 (Container 내 하나의 Bean만 생성) |
| Prototype | 매 요청마다 새로운 Bean 생성 |
| Request | HTTP 요청당 Bean 생성 |
| Session | HTTP 세션당 Bean 생성 |
| Application | 서블릿 컨텍스트 내에서 하나의 인스턴스 생성 |
특정 Controller에서 발생하는 예외를 개별적으로 처리할 때 사용한다.
@ExceptionHandler(IllegalArgumentException.class)
public ResponseEntity<String> handleIllegalArgumentException(IllegalArgumentException ex) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());
}
| 어노테이션 | 설명 |
|---|---|
| @ControllerAdvice | 모든 Controller의 예외를 공통 처리 |
| @RestControllerAdvice | JSON 응답을 반환하는 Controller의 예외 처리 |
N+1 문제 해결을 위해 Fetch Join을 활용할 수 있다.@Query("SELECT t FROM Tutor t JOIN FETCH t.company")
List<Tutor> findAllWithCompany();@Query("SELECT c FROM Company c JOIN FETCH c.tutors")
List<Company> findAllWithTutors();📌 주의: Fetch Join은 페이징과 함께 사용 불가!@BatchSize(size = 100)
@OneToMany(mappedBy = "company")
private List<Tutor> tutorList = new ArrayList<>();
✔ Fetch Join은 N+1 문제를 해결하지만 페이징과 함께 사용할 수 없음 🚫
✔ @BatchSize를 활용하면 페이징과 Fetch 효과를 함께 적용 가능 ✅
✔ API 예외 처리는 @ExceptionHandler, @ControllerAdvice, @RestControllerAdvice를 적절히 조합하여 활용
✔ Spring Bean의 생명 주기를 잘 활용하면 효율적인 객체 관리가 가능 🚀
참고
https://teamsparta.notion.site/Spring-03e30571f1654107bb4364861ed01c1a