[Java Spring 무작정 따라하기] Spring Data JPA

khj·2024년 8월 5일

✨ 인터페이스 생성

Spring Data JPA는 JPA를 편리하게 사용하도록 도와주는 기술이다.
사용한다면 이전보다도 개발할 코드들이 확 줄어든다고 한다.
하지만 JPA를 도와주는 도구와 같은 것이라서 JPA를 먼저 학습한 이후에 사용하는 것이 권장된다고 한다.
일단 간단한 구현만 해보겠다.

JpaRepository와 MemberRepository를 받는 인터페이스를 하나 생성했다.

// 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);
}

그리고 SpringConfig를 조금 수정했다.

// hello.hello_spring/SpringConfig.java
package hello.hello_spring;

import hello.hello_spring.repository.MemberRepository;
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);
    }

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

EntityManager를 제거하고 memberRepository를 선언하고 injection받으면 된다.
별거 안한것 같고 구현체도 만들지 않았지만 이게 완성이다.
Spring Data JPA 인터페이스만 만들어두면 인터페이스에 대한 구현체를 직접 만들어 Bean으로 등록해준다고 한다.


스프링 통합 테스트도 성공적으로 출력되었다.

📌 Spring Data JPA의 단점?

Spring Data JPA는 개발할 코드가 적어 생산성이 적고 유지보수가 쉬우면서 페이지네이션과 같은 기능을 제공해주는 장점이 많은 기술이다.
하지만 단점도 몇가지 존재한다고 한다.

  • 복잡한 쿼리 작성의 제약
    메서드 이름을 기반으로 쿼리를 자동 생성하는 기능은 단순한 쿼리에는 유용하지만, 복잡한 쿼리에서는 JPQL이나 네이티브 쿼리를 사용해야 하므로 코드가 복잡해 질 수 있다.

  • 성능 문제
    JPA는 ORM 프레임워크로서, 객체와 DB 간의 변환 작업이 추가된다.
    이 과정에서 성능 저하가 발생할 수 있으며, 특히 대규모 데이터를 다룰 때 주의가 필요하다.

  • 학습 곡선
    JPA 및 Hibernate와 같은 ORM 프레임워크는 개념적으로 복잡하며, 제대로 활용하기 위해서는 상당한 학습이 필요하다.

  • DB 종속성
    JPA는 기본적으로 RDBMS와 잘 맞지만 NoSQL DB와의 호환성은 떨어진다.

  • 디버깅과 문제 해결의 난해함
    자동 생성된 SQL 쿼리를 디버깅하거나 문제를 해결하는 과정이 복잡할 수 있다.
    자동으로 생성되기 때문에 원인을 파악하기 어려울 수 있다.

  • 기본 설정의 한계
    pring Data JPA는 많은 기능을 자동으로 제공하지만, 이로 인해 기본 설정에만 의존하게 되면 특정 요구 사항을 만족시키기 어려울 수 있다.

profile
Spring, Django 개발 블로그

0개의 댓글