[ZB_BOOK STUDY] 스프링 부트 핵심 가이드 (8-2)

Dreamer·2024년 4월 14일
0
post-thumbnail

📖 스프링 부트 핵심 가이드

: 스프링 부트를 활용한 애플리케이션 개발 실무


📝 목차

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. 정리


8-4. 정렬과 페이징 처리

: 쿼리 메서드 작성 방법을 기반으로 수행

- 정렬 처리하기

- 페이징 처리

8-5. @Query 어노테이션 사용하기

: @Query 어노테이션을 사용해 직접 JPQL 작성하기
JPQL을 사용하면 JPA 구현체에서 자동으로 쿼리 문장을 해석하고 실행
메서드의 이름을 기반으로 생성하는 JPQL의 한계 대부분 해소 가능

8-6. QueryDSL 적용하기

: QueryDSL은 문자열이 아니라 코드로 쿼리를 작성할 수 있도록 도와준다.

@Query은 직접 문자열을 입력하기 때문에 컴파일 시점에 에러를 잡지 못하고 런타임 에러가 발생할 수 있다.
: 문자열이 잘못된 경우에는 애플리케이션이 실행 ➙ 로직 실행 ➙ 오류 발견

- QueryDSL 이란?

: 정적 타입을 이용해 SQL과 같은 쿼리를 생성할 수 있도록 지원하는 프레임워크
QueryDSL이 제공하는 플루언트(Fluent) API를 활용해 쿼리 생성

- QueryDSL 의 장점

✅ IDE가 제공하는 코드 자동 완성 기능을 사용할 수 있다.

✅ 문법적으로 잘못된 쿼리를 허용하지 않는다.
= 정상적으로 활용된 QueryDSL은 문법 오류를 발생시키지 않는다.

✅ 고정된 SQL 쿼리를 작성하지 않기 때문에 동적으로 쿼리를 생성할 수 있다.

✅ 코드로 작성 ➙ 가독성 및 생산성이 향상된다.

✅ 도메인 타입과 프로퍼티를 안전하게 참조할 수 있다.

- QueryDSL 을 사용하기 위한 프로젝트 생성

- 기본적인 QueryDSL 사용하기

- QuerydslPredicateExecutor, QuerydslRepositorySupport 활용

8-7. [한걸음 더] JPA Auditing 적용

: Audit? 감시하다라는 뜻 ➙ 각 데이터마다 누가 언제 데이터를 생성하고 변경했는지 감시한다는 의미로 사용한다.

작성한 코드들을 보면 엔티티 클래스에는 공통적으로 들어가는 필드가 존재.
예를 들면, 생성 일자와 변경 일자 같은 것들.
대표적으로 많이 사용되는 필드 ⬇️

  • 생성 주체
  • 생성 일자
  • 변경 주체
  • 변경 일자

매번 엔티티 생성하거나 변경할 때마다 값을 주입해야 하는 번거로움 발생
이 같은 번거로움을 해소하기위해 Spring Data JPA에서는 값들을 자동으로 넣어주는 기능을 제공 ➡️ JPA Auditing 기능

- JPA Auditing 기능 활성화

: 2가지 방법이 존재


  1. main()메서드가 있는 클래스에 @EnalbleJpaAuditing 어노테이션을 추가
@SpringBootApplication
@EnableJpaAuditing
public class AdvancedJpaApplication {

    public static void main(String[] args) {
        SpringApplication.run(AdvancedJpaApplication.class, args);
    }

}
  1. 별도의 Configuration 클래스를 생성
    ➙ 애플리케이션 클래스의 기능과 분리해서 활성화 권장
@Configuration
@EnableJpaAuditing
public class JpaAuditingConfiguration {
  
}

- BaseEntity 만들기

코드의 중복을 없애기 위해 각 엔티티에 공통으로 들어가게 되는 칼럼(필드)을 하나의 클래스로 빼는 작업을 수행
➙ 생성 일자와 변경 일자만 추가해서 생성!

@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를 생성하고 엔티티 클래스에서 공통 칼럼을 제거해 준다.

8-8. 정리

ORM의 개념을 알아보고 자바의 표준 ORM 기술 스펙인 JPA를 공부
데이터를 다루는 영역은 애플리케이션을 개발하면서 가장 중요한 부분!

profile
Moving forward based on records

0개의 댓글