티스토리 뷰
최근 스프링 프로젝트를 수행하면서 JPA에 대해 조금 더 공부하고 싶은 마음이 들었다. 그래서 JPA에 대해 간략하게 정리해보려 한다.
JPA를 이야기하기 전에 ORM에 대해 간략한 이해가 필요하다고 생각한다.
기존에 자바를 이용해 DB에 접속하기 위해서는 마이바티스같은 Mapper를 사용하거나 JDBC를 이용해 직접 쿼리를 날리는 식으로 사용됐었다.
이런 방식에는 문제가 있는데 객체지향적인 프로그래밍이 어렵다는 문제이다.
ORM은 이런 문제를 해결하기 위해 데이터베이스의 테이블을 객체화 시켜 개발할 수 있다.
JPA는 이런 자바진영의 공식 ORM API 표준이다. 하지만 JPA자체는 Interface를 묶어둔 추상화 API로 이를 구현하여 사용할 수 있도록 만들어준 프로젝트가 Hibernate이다. 일반적으로 JPA를 사용한다고 한다면 Hibernate를 이용하여 프로젝트를 수행하게 된다.
JPA를 사용하면서 보다 객체지향적인 설계에 집중할 수 있으며 DDD와 같은 다양한 디자인 패턴 철학을 효과적으로 도입할 수 있도록 도와준다.
JPA의 약자를 풀어 쓴다면 Java Persistence API로 DB에 존재하는 데이터를 불러와 영속화 하고 이런 영속화와 객체 수정과정에서 DB를 수정하는 패러다임을 가져간다.
컴퓨터 공학에서 지속성(Persistence)은 프로세스가 생성했지만 별개로 유지되는 상태의
특징 중 한 가지이며, 별도의 기억 장치에 데이터를 보존하는 것을 목적으로 한다.
이 특징으로 인해 프로그래머는 저장 장치로부터 데이터를 전송하는 작업 및 자료 구조 등을
이용해 데이터를 보존하는 것이 가능하다.
-위키백과-
일반적으로 Spring을 사용하게 된다면 Repository를 이용하고 Entity Manager를 관리할 필요가 없지만 실제 Hibernate는 Entity Manager Factory를 이용하여 Entity Manager를 관리하며 또 이를 통해 영속화된 캐시를 관리하게 된다.
추가적으로 쿼리를 이용해 DB의 데이터에 접근이 가능한데, JPQL과 같이 객체 중심의 쿼리를 작성하는 방법이나 Native Query를 이용하는 방법으로 DB의 데이터에 접근하는 방법을 제공한다.
(쿼리를 이용한 방법은 QueryDSL을 이용하는 방법이 현재 제일 많이 사용되는 방법인것 같다.)
JPA에 대한 기본적인 소개는 여기서 마무리 하겠다.
'개발 > BACKEND' 카테고리의 다른 글
QueryDSL을 도입한 이유에 대해 (0) | 2022.05.20 |
---|---|
[JPA] Custom Repository 구현 (0) | 2022.05.08 |
[JPA] 객체 연관관계 탐색 해제를 통한 성능개선 (0) | 2022.03.20 |
[Spring Boot] Security ProviderNotFoundException에러 해결 (0) | 2022.03.19 |
[간단] Lombok @SuperBuilder 에 대해서 (0) | 2022.03.05 |
- Total
- Today
- Yesterday
- 게임개발
- Lombok
- 이명규
- 신작
- frontend
- 개발
- 턴드림
- 게임 개발
- 개발일지
- JPQL
- JPA
- 유니티
- 사이드프로젝트
- 인디게임
- Java
- studio108
- QueryDSL
- JIRA
- 스크럼
- mobx
- 보따리장사
- 인디
- 용사
- Unity3D
- spring
- 모험
- 게임
- 우주게임
- 튜토리얼
- spring boot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |