jujuwon
시크릿주주
jujuwon
전체 방문자
오늘
어제
  • 분류 전체보기 (106)
    • 🔠 프로그래밍언어 (35)
      • ☕️ Java (19)
      • 🐠 Python (15)
      • 🍠 Kotlin (1)
    • 🔙 Backend (16)
      • 🌿 Springboot (12)
      • 🐳 Docker (1)
      • ☁️ AWS (3)
    • 💼 CS (12)
      • 📶 Network (12)
    • 🕹 알고리즘 (14)
      • 📑 스터디 (2)
      • 💁🏻‍♂️ 백준 (9)
      • 👨🏼‍🔬 프로그래머스 (3)
    • 📚 Book (8)
      • 🔎 오브젝트 (4)
      • 🧪 TDD (2)
      • 📜 논문 (2)
    • 🔐 보안 (7)
      • 👾 Pwnable (7)
    • 📝 회고 (4)
    • 🧩 etc. (10)
      • ⚠️ issue (2)
      • 💡 꿀팁 (7)
      • ✏️ 끄적 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

hELLO · Designed By 정상우.
jujuwon

시크릿주주

Spring Boot :: Spring Data 패키지 구조
🔙 Backend/🌿 Springboot

Spring Boot :: Spring Data 패키지 구조

2022. 8. 16. 08:10
반응형

Spring Data JPA 를 활용해서 인터페이스를 사용할 때

JpaRepository<T, ID> 를 상속받아서 사용한다.

이 JpaRepository 안에 들어가면 또 다른 Repository 를 상속받고 또 상속받고 ,,

이 구조에 대해서 기록해두고자 한다.

 

인터페이스 살펴보기


먼저 MemberRepository 라는 레포지토리를 만들어보았다.

public interface MemberRepository extends JpaRepository<Member, Long> {
}

 

여기서 JpaRepository 안에 들어가보자.

 

 

패키지 위치는 org.springframework.data.jpa.repository 이다.

JpaRepository 는 PagingAndSortingRepository<T, ID> 를 상속받고 있고,

PagingAndSortingRepository<T, ID> 를 또 들어가보자.

 

 

재밌는게 PagingAndSortingRepository 는

org.springframework.data.repository 에 위치하는 것을 볼 수 있다.

Paging 과 Sorting 은 RDB 거나 NoSQL 거나 비슷하기 때문에

공통 인터페이스로 제공한다.

그래서 data.jpa.repository 가 아니라 data.repository 에 존재 !

그 말은 Spring Data JPA 를 쓰다가, Spring Data Mongo 같은 걸로 바꿔도

동일하게 사용할 수 있다는 뜻 !

 

실제 라이브러리를 확인해보자.

 

 

PagingAndSortingRepository 는 Spring-data-commmons 에 들어있다.

즉 JPA 가 아니라 Mongo, Redis 를 쓸 때도 commons 는 마찬가지로 사용된다.

물론 RDB 를 쓰다가 NoSQL 로 DB를 바꾼다는 건 쉽지 않다..

“유사한 인터페이스로 편하게 개발할 수 있다” 정도의 장점으로 생각하자.

 

 

공통으로 사용하는 CrudRepository 도 마찬가지로 data-commons 에 위치해있다.

 

 

가장 최상위로 올라가면 Repository 라는 인터페이스가 정의되어 있는데,

이 인터페이스는 marker interface 라고 하는데 주석에 보면 다음과 같은 문구가 있다.

classpath scanning for easy Spring bean creation.

스프링 빈을 만들 때 classpath 스캔을 쉽게 해주는 기능을 제공한다.

일단은 그런 게 있구나 ~ 정도만 알아두자.

 

 

JPA 에서 사용하는 JpaRepository 는 spring-data-jpa 안에 들어있고,

JPA 에 특화된 기능들을 제공한다.

 

 

위에서 설명한 인터페이스들의 관계를 간단한 그림으로 정리해보자.

 

 

참고 ⬇️

최신 스프링 데이터 JPA 에선 T findOne(ID) 에서 Optional<T> findById(ID) 로 변경되었다.

 

주요 메소드


  • save(S) : 새로운 엔티티는 저장하고 이미 있는 엔티티는 병합한다.
  • delete(T) : 엔티티 하나를 삭제한다. 내부에서 EntityManager.remove() 호출
  • findById(ID) : 엔티티 하나를 조회한다. 내부에서 EntityManager.find() 호출
  • getOne(ID) : 엔티티를 프록시로 조회한다. 내부에서 EntityManager.getReference() 호출
  • findAll(...) : 모든 엔티티를 조회한다. 정렬( Sort )이나 페이징( Pageable ) 조건을 파라미터로
    제공할 수 있다.

JpaRepository 는 대부분의 공통 메서드를 제공 !

728x90
반응형
저작자표시 (새창열림)
    '🔙 Backend/🌿 Springboot' 카테고리의 다른 글
    • JPA :: 페이징과 정렬
    • JPA :: Query Method 기능
    • Spring Boot :: Spring Data JPA
    • JPA :: Auditing 엔티티 공통 정보 추가하기
    jujuwon
    jujuwon

    티스토리툴바