JPA(Java Persistence API)
JPA는 자바 진영의 ORM 기술에 대한 API 표준 명세이다.
ORM(Object- Relational Mapping)은 무엇이고 왜 사용하는가?
객체 모델과 관계형 데이터베이스 사이에는 지향하는 목적이 다르고 기능과 표현 방법도 다릅니다. 이것을 패러다임 불일치 문제라고 하는데 이 문제를 해결하기 위해서는 수많은 시간과 코드들이 소비되게 됩니다.
패러다임 불일치 예시
1. 객체에는 상속이라는 기능이 있지만 테이블은 상속이라는 개념이 없다.
2. 객체는 참조를 통해 다른 객체와 연관관계를 가지고 참조에 접근해 연관된 객체를 조회하지만 테이블은 외래키를 사용해 다른 테이블과 연관관계를 가지고 조인을 사용해 연관된 테이블을 조회한다.(이 때 객체를 테이블에 맞추어 모델링하게 되면 객체지향의 특징을 잃게 되는 문제가 생깁니다.)
3. 객체 그래프 탐색시 SQL을 직접 다루면 처음 실행하는 SQL에 따라 객체 그래프를 어디까지 탐색할지 정해지는데, 비즈니스 로직에 따라 사용하는 객체그래프가 다르다.
==> 이 문제들을 해결하기 위해서는 개발자가 수많은 시간과 코드들을 소비하게 되고 객체 중심이 아닌 데이터 중심의 개발로 변하게됩니다.
그래서 등장한 것이 ORM 기술입니다 ORM은 객체와 테이블의 매핑을 통해 패러다임 불일치 문제를 개발자 대신 해결해 주고 자동으로 SQL을 생성해서 데이터베이스에 전달해줍니다. 이를 통해 객체는 객체모델링에 집중할 수 있고 데이터베이스는 데이터베이스에 맞도록 모델링하는 것에 집중할 수 있습니다. (개발자는 매핑방법만 ORM 프레임워크에 알려주면 됩니다.)
JPA(Java Persistence API)
다시 JPA로 돌아가 봅시다. JPA는 ORM기술을 활용하기 위해 만든 자바 ORM 기술 표준으로 인터페이스를 모아둔 것입니다. JPA를 이용하려면 JPA를 구현한 ORM프레임워크를 선택해서 사용하게 됩니다. (하이버네이트가 가장 대중적으로 이용됩니다.)
JPA를 사용함으로 얻는 장점
- JDBC를 사용하는 반복적인 코드와 SQL을 직접 작성하지 않아도 된다.
- 엔티티에 필드가 추가되어도 수정해야될 코드가 줄어든다.
- SQL을 직접다룰 때에는 등록,수정,조회시 결과를 매핑하기 위한 JDBC 코드를 직접 변경해주어야 했지만 JPA는 이런 과정을 대신 처리해줍니다.
- 패러다임의 불일치 해결
- 애플리케이션과 데이터베이스 사이에서 다양한 성능 최적화가 가능하다.
- 데이터베이스 변경시 추상화된 데이터 접근 계층을 제공해 특정 데이터베이스 기술에 종속되지 않는다.
참고
자바 ORM 표준 JPA프로그래밍(김영한님)
'Backend > JPA' 카테고리의 다른 글
[JPA] 프록시, 지연로딩, 즉시로딩은 무엇인가? (0) | 2024.06.17 |
---|---|
[JPA] Spring Data JPA란? (0) | 2024.06.12 |
[JPA] 영속성 컨텍스트 (0) | 2023.07.24 |
[JPA] @JpaDataTest에서 Auditing 기능 사용하기 (0) | 2023.06.23 |
[JPA] JPA Auditing 기능을 이용한 생성, 수정일자 자동화 (0) | 2023.06.19 |