본문 바로가기
Back-End/Spring Boot

[스프링 DB 접근 기술] 스프링 데이터 JPA

by 달의 조각 2022. 3. 2.
이 글은 김영한 님의 스프링 입문 강의(https://inf.run/hcic)를 수강하며 학습한 내용을 정리한 글입니다.

 

  스프링 부트JPA만 사용해도 개발 생산성이 증가하고, 개발해야 할 코드도 확연히 줄어든다. 리포지토리에 구현 클래스 없이 인터페이스만으로 개발 가능하다. 기본 CRUD 기능도 스프링 데이터 JPA가 모두 제공한다. 단순하고 반복이라 생각했던 개발 코드들이 확연하게 줄어들어서 개발자는 핵심 비즈니스 로직 개발에 집중할 수 있다. 

※ 스프링 데이터 JPA: JPA를 편리하게 사용하도록 도와주는 기술

 

1. 회원 리포지토리

인터페이스가 JpaRepository를 상속받고 있으면 스프링 데이터 JPA가 구현체를 자동으로 만들어 주고, 스프링 빈에 등록해 준다.

//인터페이스가 인터페이스를 받을 때 extends
public interface SpringDataJpaMemberRepository extends JpaRepository<Member, Long>, MemberRepository {

    @Override
    Optional<Member> findByName(String name);
}

 

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

// SpringConfig
private final MemberRepository memberRepository; // 스프링 데이터 JPA가 만들어 놓은 구현체가 등록된다

@Autowired // 생성자가 하나라서 생략 가능
public SpringConfig(MemberRepository memberRepository) {
	this.memberRepository = memberRepository;
}

@Bean
public MemberService memberService() {
	return new MemberService(memberRepository);
}
//    @Bean
//    public MemberRepository memberRepository() {
//        return new MemoryMemberRepository();
//        return new JdbcMemberRepository(dataSource);
//        return new JdbcMemberRepository(dataSource);
//        return new JpaMemberRepository(em);
//    }

 

스프링 데이터 JPA 제공 기능

  1. 인터페이스를 통한 기본적인 CRUD
  2. findByName(), findByEmail()처럼 메서드 이름만으로 조회 기능 제공
  3. 페이징 기능 자동 제공

복잡한 동적 쿼리는 Querydsl이라는 라이브러리를 사용하면 된다. 이 조합으로 해결하기 어려운 쿼리는 JPA가 제공하는 네이티브 쿼리를 사용하거나, JdbcTemplate를 사용한다.

댓글