본문 바로가기
백엔드(Back-End)/JPA(Java Persistence API)

[Spring Data JPA] - Spring Data, Spring Data JPA는 무엇일까?

by TwoJun 2023. 10. 6.

[Spring Data] - Spring Data JPA(Java Persistence API)

 

 

 

1. Spring Data

1-1. Spring Data의 정의

(1) Spring Data JPA를 알아보기 전에 Spring Data가 무엇인지 확인해 보자.

 

(2) Spring Data는 데이터 계층의 엑세스를 단순화하고 효율적으로 처리할 수 있도록 도와주는 프로젝트 집합이다.

 

(3) 이러한 Spring Data는 다양한 데이터베이스와의 상호작용을 간소화해서 개발자가 데이터베이스와 더 효율적으로 통신할 수 있도록 도와주고 있다.

 

(4) Spring Data는 데이터베이스에 대한 다양한 모듈을 제공하고 있고 각 모듈들은 데이터베이스와의 통합을 담당하며 이를 통해 개발함으로써 편리하게 데이터를 다룰 수 있다는 장점이 있다.

 

 

 

 

1-2. Spring Data의 다양한 모듈과 기능 

(1) Repository Abstraction (리포지토리 추상화)

- Spring Data는 데이터 접근 계층을 단순화하기 위해 Repository Interface를 제공하고 있다.

 

- 이를 통해 개발자는 데이터베이스에 대한 다양한 작업을 메서드나 함수 형태로 작성할 수 있다.

 

 

(2) Query 메서드 작성 기능

- Spring Data JPA(Java Persistence API)와 같은 스프링 데이터 라이브러리에서는 Java 형태로 메서드를 작성하고 해당 메서드의 이름을 통해 자동으로 쿼리를 생성해 주는 기능을 제공함으로써 직접적인 쿼리를 작성하지 않아도 되는 장점을 가지고 있다.

 

 

(3) QueryDSL

- 프로젝트의 규모, 환경에 따라 JPA, MongoDB 등의 기술에 대한 복잡한 동적 쿼리를 작성할 수 있는 QueryDSL과 같은 도구를 사용할 수 있다.

 

 

 

 

 

2. Spring Data JPA

2-1. Spring Data JPA의 정의

JPA와 애플리케이션의 중간 레벨에서 동작하는 Spring Data JPA

(1) Spring Data JPA(스프링 데이터 JPA)는 앞서 소개된 Spirng Data의 프로젝트 중 하나로 JPA(Java Persistence API)를 사용하여 데이터베이스와 상호작용하는 데 있어 도움을 주는 라이브러리(모듈)이다.

 

(2) JPA는 자바에서 사용되는 객체와 관계형 데이터베이스 테이블 간의 매핑을 위한 표준 API로써 이러한 Spring Data JPA는 JPA를 기반으로 하고, JPA를 보다 쉽게 사용할 수 있도록 여러 가지 기능이 포함되어 있고 편리함을 위해 추상화 레벨을 높인 라이브러리이기도 하다. Spring Data JPA를 효과적으로 사용하기 위해서는 JPA에 대한 이해가 선행되어야 한다.

 

(3) Spring Data JPA가 갖고 있는 주요 기능과 특징들은 다음과 같다.

 

 

 

 

2-2. Spring Data JPA의 기능과 특징

(1) 엔티티 매핑(Entity Mapping)

- JPA는 클래스를 정의하고 데이터베이스의 테이블과 매핑할 수 있다. 이를 통해 객체와 관계형 데이터베이스 테이블이 갖는 패러다임의 불일치를 극복하고 객체지향적으로 데이터를 다룰 수 있게 된다.

 

 

(2) Common Repository Interface 제공

Common Repository Interface

- Spring Data JPA는 Repository Interface를 제공함으로써 데이터 접근을 높은 레벨로 추상화(Abstraction)했다. 개발자는 이러한 인터페이스 내부에서 인터페이스를 확장하여 데이터베이스 조작을 위한 메서드를 정의할 수 있게 된다.

 

- JpaRepository 인터페이스를 상속 받고 제네릭에 관리할 엔티티의 <Entity, Entity_Identifier_Type>를 선언하면 된다. 이를 통해 JpaRepository가 제공하는 기본적인 CRUD 기능을 모두 사용할 수 있다.

 

 

(3) Query 메서드 제공

- 인터페이스 내부에서 작성된 메서드의 이름을 분석해서 Spring Data JPA가 자동으로 쿼리를 생성해준다. 이를 통해 개발자는 직접적인 쿼리를 작성하지 않아도 된다.

public interface MemberRepository extends Repository<Member, Long> {
    List<User> findByEmailAndName(String email, String name);
    
    // ...
}

- 생성된 JPQL의 형태

select m from Member m
where m.email = ?
and m.name = ?

 

- Repository 인터페이스에 정해진 규칙대로 메서드를 작성하면 Spring이 자동으로 해당 메서드의 이름을 분석해 적합한 쿼리를 날리는 구현체를 생성해서 Spring Bean으로 등록한다.

 

동적 프록시 기술을 기반으로 생성된 ItemRepository 인터페이스의 구현 클래스

- 구현체를 생성하는 과정은 Spring이 내부적으로 동적 프록시(Dynamic proxy) 기술을 사용해서 해당 인터페이스를 기반으로 인터페이스의 구현 클래스를 생성하는 것.

 

 

(4) Interface에 Query를 작성할 수 있다.

public interface UserRepository extends JpaRepository<User, Long> {
    @Query("select u from User u where u.emailAddress = ?1")
    User findByEmailAddress(String emailAddress);
}

 

 

(5) JPA Native Query 지원

public interface UserRepository extends JpaRepository<User, Long> {
    @Query(value = "SELECT * FROM USERS WHERE EMAIL_ADDRESS = ?0", nativeQuery = true)
    User findByEmailAddress(String emailAddress);
 }

 

 

(6) 페이징과 정렬(Paging and Sorting)

- Spring Data JPA는 페이징, 정렬 처리를 보다 간단하게 처리할 수 있는 기능을 제공하고 있다.

 

 

 

 

2-3. Spring Data 장점

(1) 코드의 양 감소, 유지보수성 증가

 

(2) 도메인 클래스를 중요하게 다룰 수 있다.

(자연스럽게 테스트 케이스를 작성하는 데 집중할 수 있다.)

 

(3) 비즈니스 로직을 이해하기 쉬워진다.

 

(4) 더 많은 테스트 케이스를 작성할 수 있다.

 

(5) JPA, Spring Data JPA로 해결하기 어려운 문제는 JdbcTemplate를 통해 SQL를 같이 사용해서 문제를 해결할 수도 있다.

 

 

 

 

2-4. 정리

(1) 이러한 Spring Data JPA를 사용하면 개발자는 JPA를 편리하게 사용함은 물론, 데이터 접근 계층에 대한 처리를 간소화함으로써 개발 생산성을 높이는 데 집중할 수 있게 된다. 하지만 앞서 언급한 것처럼 Spring Data JPA를 효율적으로 사용하고 이해하기 위해 JPA, 관계형 데이터베이스(RDBMS)에 대한 전반적인 생태계를 이해하는 것이 중요하다.

 

 

 

 

 

3. Reference

※ 해당 포스팅은 InFlearn에서 (전) 우아한형제들, 배달의 민족 서비스 개발팀장(기술이사)으로 재직하셨던 김영한님 "스프링 DB 2편 - 데이터 접근 활용 기술" 강의를 듣고 공부한 내용을 정리하였습니다.

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-2/dashboard

 

스프링 DB 2편 - 데이터 접근 활용 기술 - 인프런 | 강의

백엔드 개발에 필요한 DB 데이터 접근 기술을 활용하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 백엔드 개발자

www.inflearn.com

※ 해당 포스팅에 대해 내용 추가가 필요하다고 생각되면 기존 포스팅 내용에 다른 내용이 추가될 수 있습니다.

개인적으로 공부하며 정리한 내용이기에 오타나 틀린 부분이 있을 수 있으며, 이에 대해 댓글로 알려주시면 감사하겠습니다!

댓글