Spring Data JPA를 알기전 우선 JPA에 대해 알아야 합니다.
JPA란 Java Persistentce API의 약자로 JAVA에서 관계형 DB를 사용하는 방식을 정의한 인터페이스입니다.
말 그대로 인터페이스이기 때문에 구현체가 없습니다.
Java로 서버를 조금이라도 공부했다면 Hibernate를 들어봤을 것입니다.
Hibernate는 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);
}
'Repository'인터페이스의 기본 구현체인 'SimpleJpaRepository'의 내부를 보면 EntityManager를 사용하고 있습니다. 이를 통해 Spring Data JPA는 JPA를 추상화 시켰다는 것을 알 수 있습니다.
위의 사진은 JPA, Hibernate, Spring Data JPA의 관계를 잘 나타내고 있습니다.
단, Spring Data JPA가 만능은 아니라서 우리는 결국 JPA의 개념을 잘 알아야 합니다!!
JDBC는 DB에 접근할 수 있도록 자바에서 제공하는 API입니다.
위의 그림에서 처럼 JPA는 JDBC를 통해 DB와 통신합니다.
선조 코더들께서는 복잡하게 직접 구현했었다고 들었는데 Spring에서는 아래와 같이 설정 파일에 몇글자 적어주면 자동으로 DB에 연결해줍니다.
## application.yml예시 ##
spring:
datasource:
url: jdbc:h2:tcp://localhost/~/datajpa
username: sa
password:
driver-class-name: org.h2.Driver