늦은 프로그래밍 이야기
230202 TIL (JPA 심화) 본문
JPA 심화
ORM
Object Relational Mapping의 줄임말로 객체와 관계형 데이터베이스를 연결하는 것을 의미한다. ORM은 위의 방식인 DAO나 Mapper를 사용하지 않고 데이터베이스의 테이블과 객체를 매핑한다. QueryMapper의 DB 의존성 및 중복 쿼리 등의 문제를 보완하기 위하여 탄생하였다. ORM은 객체와 관계형 DB의 차이에서 오는 다음과 같은 문제를 해결해야 한다.
상속의 문제
객체는 객체 간의 멤버변수나 상속관계를 맺을 수 있지만, RDB의 테이블들은 상속관계가 없고 모두 독립적으로 존재한다.
해결책 : 매핑정보에 상속 정보를 넣어준다. (ex. @OneToMany, @ManyToOne)
관계 문제
객체는 참조를 통해 관계를 가지고 방향을 가지지만, RDB는 외래키를 설정하여 Join으로 조회시에만 참조가 가능하다.
해결책 : 매핑 정보에 방향정보를 넣어준다. (ex. @JoinColumn, mappedBy)
탐색 문제
객체는 참조를 통해 다른 객체로 순차적 탐색이 가능하며 컬렉션도 순회하지만, RDB는 탐색시 참조하는 만큼 추가 쿼리나 Join이 발생하여 비효율적이다.
해결책 : 매핑/조회 정보로 참조탐색 시점을 관리한다. (ex. @FetchType, fetchJoin())
밀도 문제
객체는 멤버 객체 크기가 매우 클 수 있지만, RDB는 기본 데이터 타입만 존재한다.
해결책 : 크기가 큰 멤버 객체는 테이블을 분리하여 상속으로 처리한다. (ex. @embedded)
식별성 문제
객체는 hashCode 또는 정의한 equals() 메소드를 통해 식별하지만, RDB는 Primary Key로만 식별한다.
해결책 : PK를 객체 Id로 설정하고 EntityManager가 객체를 식별하여 관리한다. (ex. @Id, @GeneratedValue)
'내일배움캠프 > TIL, WIL' 카테고리의 다른 글
| 230206 TIL (알고리즘, 프로젝트) (0) | 2023.02.07 |
|---|---|
| 230203 TIL (알고리즘) (0) | 2023.02.04 |
| 230201 TIL (JPA 심화) (0) | 2023.02.01 |
| 230131 TIL (알고리즘, JPA 심화) (0) | 2023.01.31 |
| 13주차 WIL (0) | 2023.01.29 |