개발강의정리/Spring

[스프링 데이터 JPA] 2-3. ORM 패러다임 불일치

nineDeveloper 2019. 11. 22.
728x90

스프링 데이터 JPA

2. 핵심 개념 이해

본격적인 스프링 데이터 JPA 활용법을 학습하기에 앞서, ORM과 JPA에 대한 이론적인 배경을 학습합니다

포스팅 참조 정보

GitHub

공부한 내용은 GitHub에 공부용 Organizations에 정리 하고 있습니다

해당 포스팅에 대한 내용의 GitHub 주소

실습 내용이나 자세한 소스코드는 GitHub에 있습니다
포스팅 내용은 간략하게 추린 핵심 내용만 포스팅되어 있습니다

https://github.com/freespringlecture/spring-data-jpa-study/tree/chap02-03-orm_paradigm

해당 포스팅 참고 인프런 강의

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%8D%B0%EC%9D%B4%ED%84%B0-jpa/dashboard

실습 환경

  • Java Version: Java 11
  • SpringBoot Version: 2.1.2.RELEASE

3. ORM 패러다임 불일치

밀도(Granularity) 문제

객체 릴레이션
다양한 크기의 객체를 만들 수 있음
커스텀한 타입 만들기 쉬움
테이블
기본 데이터 타입 (UDT는 비추)

서브타입(Subtype) 문제

객체 릴레이션
상속 구조 만들기 쉬움
다형성
테이블 상속이라는게 없음
상속 기능을 구현했다 하더라도 표준 기술이 아님
다형적인 관계를 표현할 방법이 없음

식별성(Identity) 문제

객체 릴레이션
레퍼런스 동일성 (==)
인스턴스 동일성 (equals() 메소드)
주키 (primary key)

관계(Association) 문제

객체 릴레이션
객체 레퍼런스로 관계 표현
근본적으로 '방향'이 존재한다
다대다 관계를 가질 수 있음
외래키(foreign key)로 관계 표현
'방향'이라는 의미가 없음
그냥 join으로 아무거나 묶을 수 있음
태생적으로 다대다 관계를 못만들고, 조인 테이블 또는 링크 테이블을 사용해서 두개의 1대다 관계로 풀어야 함

데이터 네비게이션(Navigation)의 문제

객체 릴레이션
레퍼런스를 이용해서 다른 객체로 이동 가능
콜렉션을 순회할 수도 있음
하지만 그런 방식은 릴레이션에서 데이터를 조회하는데 있어서 매우 비효율적이다
데이터베이스에 요청을 적게 할 수록 성능이 좋다
따라서 join을 쓴다
하지만, 너무 많이 한 번에 가져오려고 해도 문제다
그렇다고 lazy loading을 하자니 그것도 문제다 (n+1 select)


728x90

댓글

💲 추천 글