일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Streams
- spring kafka
- transactionaleventlistener
- AWS
- consumer
- QueryDSL
- offsetdatetime
- PAGING
- Kotlin
- mirror maker2
- JPA
- Entity
- spring
- CodePipeline
- git
- Spring JPA
- centos7
- Spring Data JPA
- entity graph
- API
- producer
- CI
- K8s
- cd
- topic생성
- kafka
- bean
- ECS
- mysql
- Kubernetes
- Today
- Total
Yebali
Spring Data JPA란? 본문
일단 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
'Spring' 카테고리의 다른 글
Spring Data JPA의 Query Creation (0) | 2021.10.11 |
---|---|
Spring Data JPA를 이용한 CRUD (0) | 2021.10.11 |
Spring JPA의 OSIV (0) | 2021.10.11 |
Spring을 이용한 API 개발 - Collection 조회 최적화 (0) | 2021.10.11 |
Spring을 이용한 API개발 - 조회 성능 최적화 (0) | 2021.10.11 |