패러다임의 불일치
객체 모델과 관계형 데이터베이스 모델은 지향하는 페러다임이 서로 다르다.
페러다임의 불일치 문제를 해결하기 위한 결과물이 ‘JPA’ 이다.
객체 모델과 관계형 데이터베이스 모델의 페러다임 차이를 비교해보자.
Granularity (밀도)
- 객체
- 다양한 크기의 객체
- 커스텀한 타입
- 릴레이션
- 테이블
- 기본 데이터 타입 (UDT는 비추)
Subtype
- 객체
- 상속 구조
- 다형성
- 릴레이션
- 테이블 상속 無 (상속 기능을 구현했다 하더라도 표준 기술이 아닙니다.)
- 다형적인 관계 無
Identity
- 객체
- 레퍼런스 동일성 (==)
- 인스턴스 동일성 (equals() 메소드)
- 릴레이션
- 주키 (primary key)
Association
- 객체
- 객체 레퍼런스로 관계 표현
- 방향이 존재
- 다대다 관계 가능
- 릴레이션
- Foreign Key 로 관계 표현
- 방향이라는 의미가 無
- 다대다 관계 불가능. (조인 테이블 또는 링크 테이블을 사용해서 두개의 1대다 관계로 풀어야 )
Data Navigation
- 객체
- 레퍼런스를 이용해 다른 객체로 이동 가능
- 콜렉션 순회 가능
- 릴레이션
- SQL 을 직접 다루면 처음 실행하는 SQL 에 따라 객체 그래프를 어디까지 탐색할 수 있는지 정해진다.
이것은 큰 제약이다. 왜냐하면, 비즈니스 로직에 따라 사용하는 객체 그래프가 다르므로 언제 끊어질지 모를 개체 그래프를 함부로 탐색할 수 없기 때문이다. - 데이터베이스에 요청을 적게 할 수록 성능이 좋아, join 을 쓴다.
- 너무 많이 한 번에 가져오려고 해도 문제이다.
- SQL 을 직접 다루면 처음 실행하는 SQL 에 따라 객체 그래프를 어디까지 탐색할 수 있는지 정해진다.
- https://www.inflearn.com/course/스프링-데이터-jpa
- 자바 ORM 표준 프로그래밍 <김영한>