[ 김영한 스프링 데이터 JPA #1 ] 소개

김수호·2024년 6월 2일
0
post-thumbnail

스프링 데이터 JPA 는 스프링 프레임워크와 JPA 를 함께 사용할 때, JPA 를 보다 편리하게 사용할 수 있게 해주는 기술이다.

예를 들어, 순수 JPA 만을 사용해서 User(회원) 에 대한 (조회/등록/수정/삭제) 등을 처리하기 위해서는 다음과 같이 리포지토리를 작성해야 할 것이다.

@Repository
public class UserRepository {

    @PersistenceContext
    private EntityManager em;

    public User save(User user) {
        em.persist(user);
        return user;
    }

    public void delete(User user) {
        em.remove(user);
    }

    public List<User> findAll() {
        return em.createQuery("select u from User u", User.class).getResultList();
    }

    public Optional<User> findById(Long id) {
        User user = em.find(User.class, id);
        return Optional.ofNullable(user);
    }

    public long count() {
        return em.createQuery("select count(u) from User u", Long.class).getSingleResult();
    }

    public User find(Long id) {
        return em.find(User.class, id);
    }
}

만약에 여기에 더해서, Goods(상품) 에 대한 (조회/등록/수정/삭제) 기능을 처리하기 위한 리포지토리도 만든다고 가정해보자.

그러면 사실상 위 UserRepository 코드에서 User(회원) -> Goods(상품) 으로의 변경 외에 나머지 코드는 사실상 거의 같은 클래스가 생성될 것이다.

스프링 데이터 JPA 는 이러한 중복되는 부분에 대한 불편함을 해소하고, 다양한 편의 기능을 제공한다. ( 이 부분은 뒤에서 살펴보도록 하자. )

 

위 코드를 스프링 데이터 JPA 를 사용해서 구현해보면 다음과 같다.

public interface UserRepository extends JpaRepository<User, Long> {
}

해당 도메인에 대한 인터페이스를 생성하고, JpaRepository<엔티티, 엔티티ID> 만 인터페이스 상속받으면 모든 작업이 끝난다. 그러면 해당 도메인에 대한 기본적인 (조회/등록/수정/삭제) 기능을 넘어 다양한 부가 기능을 사용할 수 있게된다.

 

스프링 데이터 JPA 는 어떻게 이것을 가능하게 하는걸까?

스프링 데이터 JPA 가 어떻게 동작하는지 알아보고, 제공되는 편의 기능에 대해서도 하나씩 알아보자.


강의를 듣고 정리한 글입니다. 코드와 그림 등의 출처는 김영한 강사님께 있습니다.

profile
현실에서 한 발자국

0개의 댓글