늦은 프로그래밍 이야기

230202 TIL (JPA 심화) 본문

내일배움캠프/TIL, WIL

230202 TIL (JPA 심화)

한정규 2023. 2. 3. 00:06

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
Comments