Spring Data Jpa
JPA는 Java 오브젝트를 관계형 데이터베이스에 매핑하는 Java 표준입니다. JPA는 개발자가 데이터베이스에 데이터를 저장, 조회, 업데이트, 삭제하기 위해 SQL을 작성할 필요없이, 객체를 조작하는 것만으로 데이터베이스에 저장, 조회, 업데이트, 삭제를 수행할 수 있게 합니다.
우리에겐 복잡한 Entity의 멤버종류가 많거나 join대상이 많아지는 경우, 최적화작업을 위해 3가지 방법을 사용할 수 있다 !!
1. @Query어노테이션
2. JPA Criteria Query
3. Query DSL
· 장점
- 필요한 데이터만 선별하여 가져오거나 복잡한 Join 쿼리를 생성할 수 있습니다.
🌞최적화에 무조건 필요한 작업🌞
· 단점
- JPA의 1차 캐시를 활용할 수 없습니다.
디비로 바로 들어가기때문에 Transational 주의 필요 !
EntityManager Flush() , EntityManager Clear() 을 사용하여 디비와 영속성컨텍스트 안의 내용을 동기화 시키자!
@Query 어노테이션
JPQL문을 직접 작성하여 실행시킨다.
· 장점
- JPQL이 아닌 Native 쿼리를 사용할 수 있습니다. Native 쿼리는 데이터베이스에 수행되는 SQL문을 직접 작성하므로 특정 데이터베이스에서만 제공하는 기능이나, show tables 같은 JPA에서 기본적으로 지원하지 않는 기능을 사용할 때 쓸 수 있습니다.
· 단점
- SQL문을 문자열 형태로 작성하기 때문에, 컴파일 시점에 문법 에러를 발견하기 어렵습니다. (어플리케이션 구동 시점에 발견할 수 있습니다.)
JPA Criteria Query
자바 코드로 작성할 수 있도록 도와줍니다.
· 장점
- 문법 오류를 컴파일 단계에서 발견할 수 있습니다.
· 단점
- @Query 어노테이션이나 Query DSL에 비하여 사용방법이 복잡하여 실행하고자 하는 JPQL을 직관적으로 알기 어렵습니다.
🔥🔥🔥🔥Query DSL🔥🔥🔥🔥
·- 문법 오류를 컴파일 단계에서 발견할 수 있습니다.
- Criteria Query에 비하여 실행하고자 하는 JPQL을 직관적으로 알 수 있습니다.
'개-발 > Java + Spring + Kotlin' 카테고리의 다른 글
[Spring] Lock / DeferredResult를 활용한 대기열 처리 (0) | 2023.03.09 |
---|---|
[Spring] 트랜잭션 @transational 어노테이션 (0) | 2023.03.03 |
[Spring] jwt토큰을 더 안전하게 ! (RefreshToken , Cookie) (9) | 2023.01.10 |
[Spring] Cookie 란 무엇 '인가' ? (0) | 2023.01.10 |
[Spring] Access Token 과 Refresh Token (0) | 2023.01.10 |