본문 바로가기
Server/Spring

스프링 데이터 JPA

by print_soo 2024. 8. 27.

정의

스프링 데이터 JPA란? 스프링 프레임워크의 일부로, 데이터베이스와 상호작용을 간편하게 만들어주는 도구이다.

 

핵심 기능

  • 기본적인 데이터 베이스 작업 자동화
    • 데이터를 저장, 조회, 수정, 삭제하는 작업을 자동으로 처리해주는 여러 메서드를 제공한다.
    • 예) save(), findAll()
  • 인터페이스 기반 개발
    • 단순히 인터페이스를 정의하는 것만으로도, 스프링 데이터 JPA가 필요한 메서드를 자동으로 구현해준다
  • 쿼리 메서드 지원
    • 메서드 이름만 잘 지으면, SQL을 직접 작성하지 않아도 데이터 베이스에서 원하는 데이터를 쉽게 조회할 수 있다.
    • 예를 들면 findByName(String name)이라는 메서드를 작성하면, 자동으로 데이터 조회하는 SQL이 생성된다.

 

 

1. 스프링 데이터 JPA 회원 Repository 만들기

파일 경로: src/main/java/만든 파일명/repository/SpringDataJpaMemberRepository

package section4.section4_spring.repository;


import org.springframework.data.jpa.repository.JpaRepository;
import section4.section4_spring.domain.Member;

import java.util.Optional;
public interface SpringDataJpaMemberRepository extends JpaRepository<Member,
        Long>, MemberRepository {
    
    Optional<Member> findByName(String name);
}

 

이 파일은 데이터 베이스에서 회원 정보를 다루는 repository를 정의한다. 이 repository는 회원 정보를 저장하고, 검색하는 기능을 자동으로 제공한다.

  • JpaRepository<Member, Long>
    • JpaRepository
      • 스프링 데이터 JPA가 제공하는 기본 리포지토리 인터페이스이다.
      • 이 인터페이스는 기본적인 저장, 조회, 수정, 삭제 작업을 해주는 메소드를 기본적으로 제공한다.
    • <Member, Long>
      • 데이터 베이스에 저장할 엔티티가 Member이고, 엔티티의 식별자가 Long 타입임을 나타낸다.
    • findByName(String name);
      • 해당 메소드는 JpaRepository 인터페이스가 자동으로 생성해주지 않는 기능이기에 직접 정의해준 것이다.
      • 스프링 데이터 JPA는 쿼리 메서드를 지원하기 때문에 자동으로 SQL 쿼리를 생성해서 데이터 베이스에서 이름으로 회원을 검색한다.

 

2. 스프링 데이터 JPA 회원 리포지토리를 사용하도록 스프링 설정변경하기

파일: SpringConfig 

 

//[JPA]

private EntityManager em;

@Autowired
public SpringConfig(EntityManager em) {
    this.em = em;
}

@Bean //빈을 등록할거야!
public MemberService memberService() {
    return new MemberService(memberRepository()); //->JPA
}

@Bean //빈을 등록할거야!
public MemberRepository memberRepository() {
    return new JpaMemberRepository(em);
}


//[스프링 데이터 JPA]

@Configuration
public class SpringConfig {

    private final MemberRepository memberRepository;

    @Autowired
    public SpringConfig(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

    @Bean 
    public MemberService memberService() {
        return new MemberService(memberRepository);
    }
}

 

스프링 데이터JPA를 사용하면서 코드가 단순하게 변경되었다. 기존에는 Repository 메서드에서 em을 사용해 JpaMemberRepository를 만들어내고, 또 이렇게 만들어낸 리포지토리가 MemberService에 주입되었다.

 

하지만 스프링 데이터JPA를 사용하면 MemberRepository를 직접 SpringConfig 클래스의 생성자에서 주입받아 memberRepository변수에 저장하고 이 변수를 사용해서 MemberService()메서드에 주입해 MembetService가 만들어진다. 

 

 

이렇게 바뀐 이유는 아래와 같다.

  1. 스프링 데이터 JPA의 자동 빈 등록 기능활용
    • JpaMemberRepository가 스프링에 의해 자동으로 생성되고 관리된다.
  2. 의존성 주입의 단순화
    • 스프링 데이터 JPA는 MemberRepository 인터페이스를 보고 자동으로 JpaMemberRepository를 만들어서 빈으로 등록해주고, 그걸 SpringConfig에 주입해준다.