Yebali

Spring Data JPA란? 본문

Spring

Spring Data JPA란?

예발이 2021. 10. 11. 20:48

일단 JPA란?

Spring Data JPA를 알기 전 우선 JPA에 대해 알아야 한다.
JPA란 Java Persistentce API의 약자로 JAVA에서 관계형 DB를 사용하는 방식을 정의한 '인터페이스'이다.
말 그대로 인터페이스이기 때문에 구현체가 없다.

Hibernate란?

Java로 서버를 조금이라도 공부했다면 Hibernate를 들어봤을 것이다
Hibernate는 JPA의 구현체의 한 종류이다. 표준으로 사용되는 구현체이며 마음에 들지 않는다면 다른 구현체를 사용하거나 직접 구현하는 것도 가능하다.

Spring Data JPA란?

Spring Data JPA는 JPA를 한 단계 더 추상화시켜 개발 용이성을 상당히 올려주는 인터페이스이다.
Spring Data JPA는 'Repository'라는 인터페이스를 제공한다.
이 Repository는 정해진 규칙으로 인터페이스를 선언하기만 해도 자동으로 내부에서 구현체를 만들어 동작시켜준다.
특히 자주 사용하는 매서드들은 별도로 선언하지 않아도 사용할 수 있게 해 준다.
(ex. findAll(), save(), delete())

public interface MemberRepository extends JpaRepository<Member, Long> {
	//메서드를 구현하지 않고 선언하는 것만으로 사용이 가능하다.
	List<Member> findByUsername(String username);
}
  • JpaRepository<엔티티, PK type>
  • findByUsername(String username) : 인터페이스를 선언하면 해당 메서드를 내부에서 자동으로 만들어 줌

'Repository'인터페이스의 기본 구현체인 'SimpleJpaRepository'의 내부를 보면 EntityManager를 사용하고 있습니다.

이를 통해 Spring Data JPA는 JPA를 추상화시켰다는 것을 알 수 있다.

 

참고

위의 사진은 JPA, Hibernate, Spring Data JPA의 관계를 잘 나타내고 있다.
단, Spring Data JPA가 만능은 아니라서 우리는 결국 JPA의 개념을 잘 알아야 한다.

 

추가로 JDBC란?

JDBC는 DB에 접근할 수 있도록 자바에서 제공하는 API이다.
위의 그림에서 처럼 JPA는 JDBC를 통해 DB와 통신한다.
선조 코더들께서는 복잡하게 직접 구현했었다고 들었는데 Spring에서는 아래와 같이 설정 파일에 몇 글자 적어주면 자동으로 DB에 연결해준다.

## application.yml에서 jdbc설정 예시 ##
spring:
  datasource:
    url: jdbc:h2:tcp://localhost/~/datajpa
   username: sa
    password:
    driver-class-name: org.h2.Driver