자바 ORM 표준 JPA 프로그래밍 - (1) JPA 소개
Date: 2022-02-03
✓︎ SQL을 직접 다룰때 발생하는 문제점
✓︎ 패러다임의 불일치
✓︎ JPA란 무엇일까?
“왜 실무에서 테이블 설계는 다들 열심히 하면서 제대로 된 객체 모델링은 하지 않을까?”
“왜 객체 지향의 장점을 포기하고 객체를 단순히 테이블에 맞추어 데이터 전달 역할만 하도록 개발할까?”
1. SQL을 직접 다룰때 발생하는 문제점
- 진정한 의미의 계층 분할이 어렵다.
- 엔티티를 신뢰할 수 없다.
- SQL에 의존적인 개발을 피하기 어렵다.
2. 패러다임의 불일치
- 관계형 데이터베이스는 데이터 중심으로 구조화되어 있고, 집합적인 사고를 요구한다. 객체지향에서 이야기하는 추상화, 상속, 다형성 같은 개념이 없다.
- 따라서 객체 구조를 테이블 구조에 저장하는 데는 한계가 있다.
- 문제는 객체와 관계형 데이터베이스 사이의 패러다임 불일치 문제를 해결하는데 너무 많은 시간과 코드를 소비하는데 있다.
-
결국, 객체 모델링은 힘을 잃고 점점 데이터 중심의 모델로 변해간다.
연관관계
- 객체는 참조를 사용해서 다른 객체와 연과관계를 가지고 참조에 접근해서 연관된 객체를 조회한다. 반면에 테이블은 외래 키를 사용해서 다른 테이블과 연관관계를 가지고 조인을 사용해서 연관된 테이블을 조회한다.
- 객체를 테이블에 맞추어 모델링하면 객체를 테이블에 저장하거나 조회할 때는 편리하다.
- 하지만 객체는 연관된 객체의 참조를 통해 연관된 객체를 찾을 수 있다.
- 객체 모델은 외래키가 필요 없고, 참조만 있으면 된다.
- 반면에 테이블은 참조가 필요 없고 외래키만 있으면 된다.
- JPA는 연관관계와 관련된 패러다임의 불일치 문제를 해결해준다.
객체 그래프 탐색
- 객체에서 참조를 사용해서 연관된 팀을 찾는 것을 객체 그래프 탐색이라고 한다.
member.getOrder().getOrderItem()...
- SQL을 직접 다루면 처음 실행하는 SQL에 따라 객체 그래프를 어디까지 탐색할 수 있는지 정해진다.
- 결국 조회하는 메소드를 상황에 따라 여러 벌 만들어서 사용해야 한다.
- JPA는 연관된 객체를 사용하는 시점에 적절한 SELECT SQL을 실행한다. 따라서 JPA를 사용하면 연관된 객체를 신뢰하고 마음껏 조회할 수 있다. 이 기능은 실제 객체를 사용하는 시점까지 데이터베이스 조회를 미룬다고 해서 지연 로딩이라 한다.
비교
-
데이터베이서는 기본 키의 값으로 각 로우를 구분한다. 반면에 객체는 동일성(identity) 비교와 동등성(equality) 비교라는 두 가지 비교 방법이 있다. 따라서 테이블의 로우를 구분하는 방법과 객체를 구분하는 방법에는 차이가 있다.
String memberUd = "100"; Member member1 = memberDAO.getMember(memberId); Member member2 = memberDAO.getMember(memberId); member1 == member2 //다르다
- 위의 코드에서 기본 키 값이 같은 회원 객체를 두 번 조회했다. 그런데 둘을 동일성(==) 비교 하면 false가 반환된다. 왜냐하면 member1과 member2는 같은 데이터베이스 로우에서 조회했지만, 객체 측면에서 볼 때 둘은 서로 다른 인스턴스이기 때문이다.
- JPA는 같은 트랜잭션일 때 같은 객체가 조회되는 것을 보장한다.
3. JPA란 무엇일까?
-
JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준이다.
- ORM(Object-Relational Mapping)은 객체와 관계형 데이터베이스를 매핑한다는 뜻이다.
- ORM 프레임워크는 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결해준다.
-
자바 진영에도 다양한 ORM 프레임워크들이 있는데 그중에 하이버네이트 프레임워크가 가장 많이 사용된다. 하이버네이트는 거의 대부분의 패러다임 불일치 문제를 해결해주는 성숙한 ORM 프레임워크이다.
- JPA는 자바 ORM 기술에 대한 QPI 표준 명세다. 따라서 JPA를 사용하려면 JPA를 구현한 ORM 프레임워크를 선택해야 한다.
- 왜 JPA를 사용해야 하는가?
- 유지보수
- 패러다임 불일치 해결
- 성능
- 데이터 접근 추상화와 벤터 독립성
- 표준
Reference
JPA 공부 시작!