
: 스프링 부트를 활용한 애플리케이션 개발 실무
📝 목차
8장. Spring Data JPA 활용
8-4. 정렬과 페이징 처리
- 정렬 처리하기
- 페이징 처리
8-5. @Query 어노테이션 사용하기
8-6. QueryDSL 적용하기
- QueryDSL 이란?
- QueryDSL 의 장점
- QueryDSL 을 사용하기 위한 프로젝트 생성
- 기본적인 QueryDSL 사용하기
- QuerydslPredicateExecutor, QuerydslRepositorySupport 활용
8-7. [한걸음 더] JPA Auditing 적용
- JPA Auditing 기능 활성화
- BaseEntity 만들기
8-8. 정리
: 쿼리 메서드 작성 방법을 기반으로 수행
: @Query 어노테이션을 사용해 직접 JPQL 작성하기
JPQL을 사용하면 JPA 구현체에서 자동으로 쿼리 문장을 해석하고 실행
메서드의 이름을 기반으로 생성하는 JPQL의 한계 대부분 해소 가능
: QueryDSL은 문자열이 아니라 코드로 쿼리를 작성할 수 있도록 도와준다.
@Query은 직접 문자열을 입력하기 때문에 컴파일 시점에 에러를 잡지 못하고 런타임 에러가 발생할 수 있다.
: 문자열이 잘못된 경우에는 애플리케이션이 실행 ➙ 로직 실행 ➙ 오류 발견
: 정적 타입을 이용해 SQL과 같은 쿼리를 생성할 수 있도록 지원하는 프레임워크
QueryDSL이 제공하는 플루언트(Fluent) API를 활용해 쿼리 생성
✅ IDE가 제공하는 코드 자동 완성 기능을 사용할 수 있다.
✅ 문법적으로 잘못된 쿼리를 허용하지 않는다.
= 정상적으로 활용된 QueryDSL은 문법 오류를 발생시키지 않는다.
✅ 고정된 SQL 쿼리를 작성하지 않기 때문에 동적으로 쿼리를 생성할 수 있다.
✅ 코드로 작성 ➙ 가독성 및 생산성이 향상된다.
✅ 도메인 타입과 프로퍼티를 안전하게 참조할 수 있다.
: Audit? 감시하다라는 뜻 ➙ 각 데이터마다 누가 언제 데이터를 생성하고 변경했는지 감시한다는 의미로 사용한다.
작성한 코드들을 보면 엔티티 클래스에는 공통적으로 들어가는 필드가 존재.
예를 들면, 생성 일자와 변경 일자 같은 것들.
대표적으로 많이 사용되는 필드 ⬇️
매번 엔티티 생성하거나 변경할 때마다 값을 주입해야 하는 번거로움 발생
이 같은 번거로움을 해소하기위해 Spring Data JPA에서는 값들을 자동으로 넣어주는 기능을 제공 ➡️ JPA Auditing 기능
: 2가지 방법이 존재
@SpringBootApplication
@EnableJpaAuditing
public class AdvancedJpaApplication {
public static void main(String[] args) {
SpringApplication.run(AdvancedJpaApplication.class, args);
}
}
@Configuration
@EnableJpaAuditing
public class JpaAuditingConfiguration {
}
코드의 중복을 없애기 위해 각 엔티티에 공통으로 들어가게 되는 칼럼(필드)을 하나의 클래스로 빼는 작업을 수행
➙ 생성 일자와 변경 일자만 추가해서 생성!
@Getter
@Setter
@ToString
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseEntity {
@CreatedDate
@Column(updatable = false)
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime updatedAt;
}
@MappedSuperClass
: JPA의 엔티티 클래스가 상속받을 경우 자식 클래스에게 매핑 정보를 전달합니다.
@EntityListeners
: 엔티티를 데이터베이스에 적용하기 전후로 콜백을 요청할 수 있게 하는 어노테이션
AuditingEntityListener
: 엔티티의 Auditing 정보를 주입하는 JPA 엔티티 리스너 클래스
@createdDate
: 데이터 생성 날짜를 자동으로 주입하는 어노테이션
@LastModifiedDate
: 데이터 수정 날짜를 자동으로 주입하는 어노테이션
BaseEntity를 생성하고 엔티티 클래스에서 공통 칼럼을 제거해 준다.
ORM의 개념을 알아보고 자바의 표준 ORM 기술 스펙인 JPA를 공부
데이터를 다루는 영역은 애플리케이션을 개발하면서 가장 중요한 부분!