1 ) 학습한 내용
- Bean
- API 예외처리
- JPQL
- fetch join
- JPA 와 JPQL
- Bean
- 생명주기
- Spring Container 초기화
- Bean 인스턴스 생성
- 의존성 주입
- 초기화 메서드 호출
- Bean 사용
- 소멸 메서드 호출
- Bean 소멸
- 속성
- Bean이 Spring 내부적으로 구현된 코드에 의존하지 않는다.
- 메서드 이름을 자유롭게 설정할 수 있다.
- 외부 라이브러리에도 초기화, 종료 메서드를 적용할 수 있다.
- @PostConstruct
- Bean이 생성되고 의존성 주입이 완료된 후에 호출되는 메서드를 지정
- 주로 초기화 작업을 할 때 사용
- Bean Scope
- Singleton(싱글톤)
- 기본으로 설정되는 스코프.
- Spring 컨테이너 내에서 Bean이 하나만 생성되고 모든 요청이 같은 객체를 사용
- 상태를 가지면 안된다.
- prototype
- 요청할 때 마다 새로운 인스턴스 생성
- 필요한 의존관계 주입
- 상태를 가지는 객체
- Webscope
- request
- HTTP 요청마다 새로운 Bean 생성
- 웹 요청이 들어오면 Bean 생성되고 요청이 완료된다.
- 요청 데이터를 처리하는 객체
- session
- HTTP 세션 동안 하나의 Bean 인스턴스 유지
- application
- 서블릿 컨텍스트 내에서 Bean이 단일 인스턴스로 존재
- 애플리케이션 구동되는 동안 동일한 객체가 유지
- request
- Singleton(싱글톤)
- 생명주기
- API 예외처리
- @ExceptionHandler
- 특정 컨트롤러에서 발생한 예외를 처리하기 위한 메서드를 지정
- 단일 컨트롤러 내에서 예외를 처리
- 계층별로 알맞은 예외를 발생 시키기만 하면된다.
- 문제점
- 코드 재사용, 유지보수성 부족
- 단일 컨트롤러 내의 예외처리만 가능
- 단일 책임 원칙 위반.
- @ControllerAdvice
- @RestControllerAdvice
- 반환 값이 JSON이다.
- REST API의 예외를 처리한다.
- @RestControllerAdvice
- @ExceptionHandler
- JPQL
- JPQL
- 객체지향 쿼리 언어
- Entity 객체를 대상으로 SQL Query를 작성할 수 있도록 도와준다.
- SQL 추상화
- 타입 안정성
- 정적 쿼리 최적화
- QueryDSL
- Java 기반의 ORM 쿼리 빌더 라이브러리
- 동적 쿼리를 지원한다.
- JPA Criteria
- JPQL과 유사한 쿼리를 코드로 생성할 수 있다.
- 복잡하고 실용성이 없어서 QueryDSL을 사용한다.
- Native SQL
- JPA가 제공하는 SQL을 직접 사용하는 기능
- JPQL
- JQPL 기본 문법
- 문법 규칙
- 테이블 이름이 아닌 Entity 이름을 사용한다.
- Entity와 필드는 대소문자를 구분한다.
- JPQL 키워드는 대소문자 구분하지 않는다.
- 별칭은 필수이고 as는 생략이 가능
- 문법 규칙
- fetch join
- SQL의 Join과 비슷하지만 연관된 엔티티나 컬렉션을 한 번의 쿼리로 함께 로드하는 기능
- 지연 로딩 설정된 엔티티도 fetch join으로 사용할 수 있다.
- N + 1 문제 해결할 수 있다.
- 데이터의 중복이 발생할 수 있다. (DISTINCT)
- 컬렉션 페이징 처리가 힘들다.
- 조회 시 여러 테이블이 Join 된다면 일반 Join을 사용하면 된다.
- SQL의 Join과 비슷하지만 연관된 엔티티나 컬렉션을 한 번의 쿼리로 함께 로드하는 기능
- JPA 와 JPQL
- Spring Data JPA
- Query Methods 만으로는 조회하기 힘든 경우가 많다.
- N + 1 문제가 발생한다.
- Spring Data JPA 에도 JPQL을 적용할 수 있다.
- @Query Annotation을 사용한다.
- @Param을 사용하여 파라미터 바인딩한다.
- Spring Data JPA
'TIL > Spring' 카테고리의 다른 글
TIL 2024-12-12 ( 4주차 - 데이터베이스 다루기 ) (1) | 2024.12.12 |
---|---|
TIL 2024-12-10 ( 2-3주차 - 데이터베이스 다루기 ) (0) | 2024.12.10 |
TIL 2024-11-26 (Spring 심화) (0) | 2024.11.26 |
TIL 2024-11-18 (Cookie/Session) (0) | 2024.11.18 |
TIL 2024-11-13 (Spring 숙련 - 2주차) (1) | 2024.11.13 |