티스토리 뷰

728x90
반응형

 

스프링 부트와 JPA만 사용해도 개발 생산성이 정말 많이 증가하고, 개발해야할 코드도 확연히 줄어든다.
여기에 Spring Data JPA를 사용하면, 기존의 한계를 넘어 리포지토리에 구현 클래스 없이 인터페이스 만으로 개발을 완료할 수 있다.
그리고 반복 개발해 온 기본 CRUD 기능도 스프링 데이터 JPA가 모두 제공한다.

 

스프링 부트와 JPA라는 기반 위에, 스프링 데이터 JPA라는 프레임워크를 더하면, 지금까지 조금이라도 단순하고 반복이라고 생각했던 개발 코드들이 확연하게 줄어든다.

따라서 개발자는 핵심 비즈니스 로직을 개발하는데 집중할 수 있다.

 

실무에서 관계형 데이터베이스를 사용한다면 스프링 데이터 JPA는 이제 선택이 아닌 필수라고해도 과언이 아니다 !

 

이제 구현을 진행해 보자.

 


 

기본 초기 설정은 앞서 진행했던 JPA 설정을 그대로 유지하고 사용하면 된다.

 

우선 repository 경로에 SpringDataJpaMemberRepository 인터페이스를 하나 추가한다.

그리고 JapRepository 라는 클래스를 상속 받도록 구성한다.

소스는 아래와 같다.

 

package com.demoproject.demo.repository;

import java.util.Optional;

import org.springframework.data.jpa.repository.JpaRepository;

import com.demoproject.demo.domain.Member;

public interface SpringDataJpaMemberRepository extends JpaRepository<Member, Long>, MemberRepository{
    
    @Override
    Optional<Member> findByName(String name);
}

 

 

소스가 엄청 간단하게 구현된 것을 확인할 수 있다.

그럼 이제 SpringConfig에서 bean 설정을 변경해준다.

 

package com.demoproject.demo;

// import javax.persistence.EntityManager;
// import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

// import com.demoproject.demo.repository.JdbcTemMemberRepository;
// import com.demoproject.demo.repository.JpaMemberRepository;
import com.demoproject.demo.repository.MemberRepository;
// import com.demoproject.demo.repository.MemoryMemberRepository;
import com.demoproject.demo.service.MemberService;

@Configuration
public class SpringConfig {

    private final MemberRepository memberRepository;

    @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 JdbcTemMemberRepository(dataSource);
    //     return new JpaMemberRepository(em);
    // }
}

 

 

위와 같이 Repository Bean 부분을 아예 사용하지 않게 되었다.

 

이제 MemberServiceIntegrationTest 에서 실행시켜 보자.

그럼 아래처럼 성공한 것을 확인할 수 있다.

 

 

 

 

스프링 데이터 JPA가 SpringDataJpaMemberRepository 를 스프링 빈으로 자동 등록해 준다.

JpaRepository를 확인해 보면 기본 메서드를 모두 제공해 주는 것을 확인할 수 있다.

기본적인 단순 CRUD를 모두 제공해 주는 것이다.

 

당연하게도 객체마다 다른 부분들, 예를 들어 이름같은 부분은 Jpa가 모두 제공해 줄 순 없기 때문에

SpringDataJpaMemberRepository 에 findByName만 남겨 놓은 것이다.

대신에 findByName(), findByEmail() 과 같이 메서드 이름 만으로 조회하는 기능을 제공해 준다.

 

 

참고로 실무에서는 JPA와 스프링 데이터 JPA를 기보능로 사용하고, 복잡한 동적 쿼리는 Querydsl이라는 라이브러리를 사용하면 된다.

Querydsl을 사용하면 쿼리도 자바 코드로 안전하게 작성할 수 있고, 동적 쿼리도 편리하게 작성할 수 있다.

이 조합으로 해결하기 어려운 쿼리는 JPA가 제공하는 네이티브 쿼리를 사용하거나, 앞서 학습한 스프링 JdbcTemplate을 사용하면 된다.

 

 

이렇게 Spring Data JPA에 대해 간단하게 나마 알아보았다.

이제 이를 활용한 프로젝트를 많이 해보면서 익숙해 지도록 해봐야 겠다!

 

 

 

이상!

 

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31