티스토리 뷰

여기서의 포스팅은 맛보기 수육

 

Spring Data의 등장

  • 관계형 데이터베이스 중심의 세상에서 여러 데이터 관련 신흥 세력(기술)들이 등장
  • 기술이 다른 것이지, "데이터"를 보관하고 관리한다는 부분에 있어 공통점이 있는 것을 발견
  • 동일 인터페이스 기반, 페이징 처리 등 추상화를 통해 공통으로 기술을 제공할 수 있게 된다.

공통 기능 제공 - https://spring.io/projects/spring-data

 

Spring Data

Spring Data’s mission is to provide a familiar and consistent, Spring-based programming model for data access while still retaining the special traits of the underlying data store. It makes it easy to use data access technologies, relational and non-rela

spring.io

 

Spring Data JPA

  • Spring Data Common의 기술을 기본적으로 가지고, JPA 기술을 추가로 가지고 있다.
  • JpaRepository를 상속받아 기본적인(공통) 기능을 제공받는다.
  • 구현 클래스는 동적 프록시 기술을 사용하여 자동으로 만들어준다. (인터페이스만 생성)
  • 메서드 이름으로 쿼리를 생성해준다.
  • @Query 네이티브 쿼리를 지원한다. (직접 sql 작성)

기술 사용법

JpaRepository 사용법 - JpaRepository인터페이스 상속 받은 후, 제네릭에 관리할 <엔티티, 엔티티PK>를 주면 된다.

스프링 데이터 JPA가 프록시 기술을 사용하여 구현 클래스를 생성

 

쿼리 메서드 사용법 - 인터페이스에 메서드만 적어두면, 메서드 이름을 분석하여 쿼리를 자동 생성 후 실행해준다.

+) 자동으로 생성해주는 필터 조건이 있다.

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation

 

Spring Data JPA - Reference Documentation

Example 121. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") void del

docs.spring.io

 

위 코드에서 볼 수 있는 것처럼 쿼리메서드를 사용할 수 있고, 직접 JPQL을 사용할 수 있다.

findAll 메서드가 존재하지 않는 이유는 JpaRepository가 공통으로 제공하고 있는 기능이기 때문이다.

 

 

QueryDSL의 등장

  • Query의 문제점 : String타입, 실행 해보기 전까지는 옳은지 아닌지 판단 불가능하다..
  • 쿼리를 Java로 type-safe하게 개발할 수 있게 지원하는 프레임워크 -> 주로 JPQL에 사용한다.
  • QueryDSL - Query Domain Specific Language
  • 쿼리에 특화된 프로그래밍 언어, 다양한 저장소 쿼리 기능 통합을 지원하고 단순, 간결하다.

QueryDSL의 동작 방식

--> QueryDSL은 JPQL 빌더, JPA를 편리하게 사용할 수 있는 언어!

 

+) 단순 쿼리 : SpringDataJPA, 복잡(동적) 쿼리 : QueryDSL 

QueryDSL을 사용한 동적쿼리

 

 

본 포스팅은 인프런 강의 김영한님의

[ 스프링 DB 2편 - 데이터 접근 활용 기술 ] 을 수강하며 작성한 내용입니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30