일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ansible
- dockerfile
- intervals
- DevOps
- 자바스크립트
- EC2
- FastAPI
- YAML
- Python
- AWS
- Django
- leetcode
- IAC
- POD
- terraform
- github
- ebs
- Service
- 쿠버네티스
- docker
- asyncio
- Deployment
- EKS
- IAM
- asgi
- elasticsearch
- Kubernetes
- event loop
- K8S
- WSGI
- Today
- Total
궁금한게 많은 개발자 노트
[ Spring ] JPA란? 본문
JPA ( Java Persistence API ) : Java ORM 기술 표준으로 사용되는 Interface의 모음
실제로 구현된 것이 아니라 구현된 클래스와 Mapping을 해주기 위해 사용되는 framework
JPA는 과거의 Java ORM 표준이었던 (Entity Bean) EJB을 문제점인 코드 복잡성, API 복잡성, 느린 속도 등을 개선하기 위해 만들어진 framework로 이를 구현한 대표적인 오픈 소스가 Hibernate, OpenJPA, EclipseLink, DataNucleus등이 존재
JPA의 사용 이유로는 높은 생산성이 있습니다. JDBC API를 사용하는 지루하고 반복적인 일을 JPA가 대신 처리(간단한 CRUD)하여 DDL자동 생성 뿐만 아니라 DB 설계 중심의 패러다임(SQL중식 개발)을 객체 설계 중심으로 전환시켜줍니다.
예를 들면, 객체를 변경하면 DB에서 자동 업데이트가 되며, 필드 변경 시 모든 SQL수정이 필요 없고, 객체에 필드만 추가해주면 SQL은 JPA가 처리하기 때문에 유지 보수성 측면에서도 뛰어납니다.
추가로, Application과 Database사이에 존재하면서 다양한 최적화 시도를 가능하게 해주므로 성능 최적화 기회를 제공
[ Entity ]
JPA에서 Entity는 DB의 Table에 대응되는 하나의 Class. Field는 Entity에서 Column을 의미하며, @Entity Annoation을 사용하여 해당 클래스가 Entity임을 알려줍니다. 이렇게 되면 JPA에서 해당 클래스에 정의된 필드들을 바탕으로 데이터베이스에 테이블을 생성하고 Mapping합니다.
[ Repository ]
Entity에 의해 생성된 DB에 접근하는 Method들을 사용하기 위한 Interface입니다. Entity를 선언함으로써 DB구조를 생성했다면, 어떤 값을 넣거나 조회하는 등의 CRUD를 어떻게 할지 정의해주는 것이 Repository입니다.
JpaRepository를 상속함으로써 기본적인 동작이 가능하며, 어떤 Entitry를 method대상으로 할 지, 해당 Entity의 PK Type으로 정의할 수 있습니다. ex) public interface TestRepository extends JpaRepository<Entity, PK type>
다음과 같은 method들이 이미 JpaRepository에 구현되어 있습니다.
ex) save, saveAll, findById, findAll ,exists, deleteById, deleteAll
Hibernate - JPA Annotations: https://www.techferry.com/articles/hibernate-jpa-annotations.html
reference: https://gmlwjd9405.github.io/2019/08/04/what-is-jpa.html
'Back End' 카테고리의 다른 글
[ Django ] psycopg2 psycopg2-binary 차이 (0) | 2023.05.16 |
---|---|
RDBMS와 NoSQL의 차이 (0) | 2023.05.09 |
[ Spring ] Java Config, Configuration Annotation (0) | 2022.10.24 |
[ FastAPI ] Middleware에서 request body 사용 불가 (2) | 2022.10.05 |
[ Python ] FastAPI - Depends (0) | 2022.06.03 |