SPRING 입문 [ 코드로 배우는 스프링 부트 ]

[스프링 입문] 섹션 6.6 스프링 DB 접근 기술 (스프링 데이터 JPA)

wlalsu_u 2023. 1. 18. 04:56

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() 메소드들이 모두 제공되는 것을 확인할 수 있다.

 

 

출처 : 김영한 - 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의 자료

 

 

 

 

즉, 스프링 데이터 JPA는 다음과 같은 기능을 제공하는 것을 알 수 있다.

 

 

 

1) 인터페이스를 통해 기본적인 CRUD 제공 (공통된 메소드 제공)

2) 메소드 이름 만으로 조회 기능 제공

3) 페이징 기능 제공

 

 

 

또한, 단순한 클래스들은 기본적인 규칙을 이용하여 인터페이스 만으로도 개발을 완성할 수 있다.

 

 

단, 비즈니스에 따라 달라 공통화 할 수 없는 클래스들은 제공하지 않는다.

 

 

 

 

+ 참고 )
JPA와 스프링 데이터 JPA를 기본으로 사용하되, 복잡한 동적 쿼리는 Querydsl 라이브러리를 사용한다.
(동적 쿼리 작성이 편리하고, 쿼리를 자바 코드로 안전하게 작성 가능하다.)

또한, 앞의 기술로도 해결하기 어려운 경우, JPA 가 제공하는 native 쿼리 / Jdbc Template 을 사용할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

김영한 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 강의를 기반으로 작성하였습니다.

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard