6.6.1 스프링 데이터 JPA 란?
앞서 스프링 부트와 JPA 를 통해 개발 코드가 단순화되고, 개발 생산성이 증가하는 것을 볼 수 있었다.
여기에 더해 스프링 데이터 JPA를 사용하면,
repository 에 구현 클래스 없이 interface 만으로도, 개발이 완료된다.
또한, 스프링 데이터 JPA 는 기본 CRUD 기능도 제공한다.
즉, 스프링 데이터 JPA를 사용하면, 단순하고 반복적인 코드를 거의 작성하지 않으므로,
핵심 비즈니스 로직을 개발하는데 집중할 수 있다.
이러한 스프링 데이터 JPA는 실무에서 선택이 아닌 필수이다.
(단, JPA 를 먼저 학습하고 스프링 데이터 JPA 를 학습하여야 한다.)
6.6.2 스프링 데이터 JPA 코드 작성 - Repository
스프링 데이터 JPA 의 설정은 앞서 섹션 6.5의 JPA 설정과 동일하다.
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none
먼저, src > main > java > hello.hellospring > repository 폴더에
SpringDataJpaMemberRepository 인터페이스를 생성하고, 아래와 같이 코드를 작성한다.
스프링 데이터 JPA 에서는 인터페이스를 작성한 후, 구현하지 않아도 된다!
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface SpringDataJpaMemberRepository extends JpaRepository <Member, Long>, MemberRepository {
@Override
Optional<Member> findByName(String name);
}
extends JpaRepository <Member, Long>
- JpaRepository 인터페이스를 상속(extends)받는다.
- Member, Long( 식별자 id의 타입) 로 타입을 정한다.
extends MemberRepository
- MemberRepository 인터페이스를 다중 상속 받는다.
+ 추가 ) JpaReapository APIhttps://docs.spring.io/spring-data/jpa/docs/current/api/org/springframework/data/jpa/repository/JpaRepository.html
6.6.3 스프링 데이터 JPA 코드 작성 - SpringConfig
SpringConfig 파일의 코드를 다음과 같이 작성한다.
package hello.hellospring;
import hello.hellospring.repository.*;
import hello.hellospring.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig {
private final MemberRepository memberRepository;
public SpringConfig(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@Bean
public MemberService memberService() {
return new MemberService(memberRepository);
}
}
스프링 데이터 JPA는 repository를 받으면, 구현체를 자동으로 생성하고 스프링 빈에 자동 등록한다.
따라서 위의 코드처럼, memberRepository 를 생성하고, injection 받도록 코드를 작성하면,
스프링 데이터 JPA 구현체가 자동 등록된다.
실제 회원가입 test code 를 실행시키면, 정상적으로 작동하는 것을 확인할 수 있다.
6.6.4 스프링 데이터 JPA 제공 클래스
스프링 데이터 JPA 에서 제공하는 클래스는 다음과 같다.
아래의 그림을 보면, 앞서 작성한 save(), findAll() 메소드들이 모두 제공되는 것을 확인할 수 있다.
즉, 스프링 데이터 JPA는 다음과 같은 기능을 제공하는 것을 알 수 있다.
1) 인터페이스를 통해 기본적인 CRUD 제공 (공통된 메소드 제공)
2) 메소드 이름 만으로 조회 기능 제공
3) 페이징 기능 제공
또한, 단순한 클래스들은 기본적인 규칙을 이용하여 인터페이스 만으로도 개발을 완성할 수 있다.
단, 비즈니스에 따라 달라 공통화 할 수 없는 클래스들은 제공하지 않는다.
+ 참고 )
JPA와 스프링 데이터 JPA를 기본으로 사용하되, 복잡한 동적 쿼리는 Querydsl 라이브러리를 사용한다.
(동적 쿼리 작성이 편리하고, 쿼리를 자바 코드로 안전하게 작성 가능하다.)
또한, 앞의 기술로도 해결하기 어려운 경우, JPA 가 제공하는 native 쿼리 / Jdbc Template 을 사용할 수 있다.
김영한 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 강의를 기반으로 작성하였습니다.
'SPRING 입문 [ 코드로 배우는 스프링 부트 ]' 카테고리의 다른 글
[스프링 입문] 섹션 7 AOP (+ 강의를 마치며) (0) | 2023.01.18 |
---|---|
[스프링 입문] 섹션 6.5 스프링 DB 접근 기술 (JPA) (1) | 2023.01.18 |
[스프링 입문] 섹션 6.4 스프링 DB 접근 기술 (스프링 통합 Jdbc Template) (0) | 2023.01.17 |
[스프링 입문] 섹션 6.3 스프링 DB 접근 기술 (스프링 통합 테스트) (0) | 2023.01.17 |
[스프링 입문] 섹션 6.2 스프링 DB 접근 기술 (순수 JDBC) (0) | 2023.01.17 |