스프링 부트와 JPA만으로도 개발 생산성이 증가하고 코드량도 줄어들지만, 스프링 데이터 JPA를 사용하면 리포지토리에 구현 클래스 없이 인터페이스 만으로 개발을 완료할 수 있다. 게다가 반복 개발해 온 CRUD 기능도 스프링 데이터 JPA가 모두 제공한다.
단순하고 반복되었던 코드들이 줄어드니 핵심 비즈니스 로직을 개발하는데 집중할 수 있다. 실무에서 관계형 데이터베이스를 사용한다면 스프링 데이터 JPA는 선택이 아닌 필수다.
* 주의
스프링 데이터 JPA는 JPA를 편리하게 사용하도록 도와주는 기술이다. 따라서 JPA를 먼저 학습한 뒤, 스프링 데이터 JPA를 학습한다.
앞의 JPA 설정을 그대로 사용한다.
1. 스프링 데이터 JPA 회원 리포지토리
- src/main/java/hello/hello_spring/repository/SpringDataJpaMemberRepository.java
package hello.hello_spring.repository;
import hello.hello_spring.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);
}
스프링 데이터 JPA가 JpaRepository 를 구현한 SpringDataJpaMemberRepository 를 스프링 빈으로 자동 등록해준다. 또한 구현체도 자동으로 만들어준다.
2. 스프링 데이터 JPA 회원 리포지토리를 사용하도록 스프링 설정 변경
- src/main/java/hello/hello_spring/SpringConfig.java
package hello.hello_spring;
import hello.hello_spring.repository.*;
import hello.hello_spring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig {
private final MemberRepository memberRepository;
@Autowired
public SpringConfig(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@Bean
public MemberService memberService() {
return new MemberService(memberRepository);
}
}
소스 구현 후, MemberServiceIntegrationTest 를 통해 통합 테스트를 진행한다.
3. 스프링 데이터 JPA 제공 클래스

옛날 버전이라 약간 틀릴 수 있지만, 공통화하여 제공할 수 있는 것들은 모두 제공한다.
공통할 수 없는 비즈니스 컬럼은 findByName 메서드와 같이 규칙에 맞게 작성하면, JPQL로 "select m from Member m where m.name = ?" 쿼리를 만들어 준다.
4. 스프링 데이터 JPA 제공 기능
1) 인터페이스를 통한 기본적인 CRUD
2) findByName(), findByEmail() 처럼 메서드 이름 만으로 조회 기능 제공
3) 페이징 기능 자동 제공
실무에서는 JPA와 스프링 데이터 JPA를 기본으로 사용하고, 복잡한 동적 쿼리는 Querydsl 라이브러리를 사용한다. Querydsl을 사용하면 쿼리도 자바 코드로 안전하게 작성할 수 있고, 동적 쿼리도 편리하게 작성할 수 있다.
이 조합으로 해결하기 어려운 쿼리는 JPA가 제공하는 네이티브 쿼리를 사용하거나, 스프링 JdbcTemplate을 사용하면 된다. JPA와 MyBatis 조합도 사용 가능하다.
참고링크 : 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?cid=325630
[지금 무료]스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술| 김영한 - 인프런 강의
현재 평점 5.0점 수강생 120,789명인 강의를 만나보세요. 스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다. 예제를 만들면서 자연스럽게 스
www.inflearn.com
'강의 실습 > 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 카테고리의 다른 글
| AOP 적용 (0) | 2026.03.18 |
|---|---|
| AOP가 필요한 상황 (0) | 2026.03.17 |
| JPA (0) | 2026.03.15 |
| 스프링 JdbcTemplate (0) | 2026.03.14 |
| 스프링 통합 테스트 (0) | 2026.03.13 |
댓글