관리 메뉴

공부 기록장 💻

[Spring] 스프링 DB 접근 기술 4 - Spring Data JPA (Hibernate, JpaRepository) 본문

# Tech Studies/Java Spring • Boot

[Spring] 스프링 DB 접근 기술 4 - Spring Data JPA (Hibernate, JpaRepository)

dream_for 2023. 1. 18. 10:38

인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술"  정리

 

스프링 DB 접근 기술 시리즈  정리

1. 순수 JDBC 

2. JdbcTemplate

3. JPA

4. Spring Data JPA


Spring Boot와 JPA만 사용해도 개발 생산성이 매우 증가하며, 작성해야 할 코드도 확연히 줄어든다. 

이제 Spring Data JPA를 사용하게 되면, repository에 구현 클래스 없이 Interface 만으로도 개발을 완료할 수 있다.

반복 개발해온 기본 CRUD 기능도 Spring Data JPA가 모두 제공하므로, 개발자는 핵심 비즈니스 로직을 개발하는데만 집중할 수 있게 된다. 

실무에서 관계형 데이터베이스를 사용한다면 spring data jpa는 이제 선택이 아니라 필수이다.

 

다만, JPA를 먼저 학습하고 이해한 후에 Spring Data JPA를 학습해야 한다.

 

 

 


 

 

SpringDataJpaMemberRepository

이전의 JPA 설정을 그대로 사용하고, SpringDataJpaMemberRepisotry 인터페이스를 다음과 같이 만들자.

Member과 Long형(pk인 id의 타입)의 JpaRepository와 MemberRepository 인터페이스를 확장하도록 하고, findByName 오버라이딩 메서드를 선언해준다.

 

 

이렇게 spring data jpa 프레임워크에서 제공하는 JpaRepository와 이전에 만들어 놓은 MemberRepository 인터페이스를 확장하는 인터페이스만 선언해놓으면, 스프링 data jpa 가 인터페이스에 대한 구현체를 만들어 내고 스프링 빈에 자동 등록한다.

 

 

SpringConfig

Configuration은 다음과 같이 MemberRepository를 주입하도록 하고, 스프링 빈에 이전에 등록해놓도록 설정한 memberRepository 메서드는 모두 주석 처리한다.

 

 

테스트 검증 완료!

 

Spring Data JPA, JpaRepository

Spring Jata JPA의 JpaRepository 인터페이스의 상속 구조는 다음과 같다.

JpaRepository에서 기본적으로 findAll(), save(), delete(), getOne() 등 pk 칼럼과 관련된 기본적인 메서드를, 

그리고 PagingAndSortingRepository 로 페이징, 정렬 기능까지 모두 제공하고 있다. 

 

 

다만, 모든 프로그램의 비즈니스 로직에서 공통적이지 않은 name, email 으로 회원을 찾는 메서드와 같은 경우,

findBy~ 규칙을 통해 select m from Member m where m.~ = ?

또는 findBy~And~ 를 통해서는 select m from Member m where m.~ = ? and m,~ - ?

로 jpql(japa versistence query language)문을 자동적으로 생성하여 sql문으로 변환하여 db에 접근할 수 있게 된다.

즉, 단순한 인터페이스만으로 레포지터리 구현을 할 수 있게 된다는 뜻이다.

 

 


 

실무에서는 JPA와 스프링 데이터 JPA를 기본적으로 사용하며, 복잡한 동적 쿼리의 경우 Querydsl라는 라이브러리를 조합하여 사용한다. 이 조합으로도 해결하기 어려운 쿼리의 경우 JPA가 제공하는 네이티브 쿼리(순수 sql문)를 사용하거나, 앞서 학습한 스프링 JdbcTemplate으로 해결이 가능하다.

 

 

728x90
반응형
Comments