본문 바로가기
728x90

자바 ORM 표준 JPA 프로그래밍 - 기본편6

[JPA] 프록시 프록시 기능을 구현하는 과정에서 DB에서 가져오고 싶은 정보의 범위가 비지니스 로직에 따라 다르기 마련이다. 예를 들어 Member와 Team이라는 두 개의 entity가 연관관계 상에 있을 때, 구현 목적에 따라 두 개의 데이터가 한번에 조회되는 것이 좋을수도 있고, 그렇지 않을수도 있다. 이러한 상황을 JPA는 프록시와 지연로딩이라는 개념으로 기가막히게(?) 해결해준다고 한다. 먼저 프록시의 개념은 다음과 같다. 프록시 기초 em.find(): 앞서 살펴본 데이터베이스를 통해 실제 엔티티 객체를 조회하는 메서드 em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체를 조회하는 메서드 기존에 알던 EntityManager의 find method 말고, getReferen.. 2023. 2. 15.
[JPA] 고급 매핑 상속관계 매핑 객체는 상속관계가 있지만, 관계형 데이터베이스는 상속관계 X 슈퍼타입, 서브타입 관계라는 모델링 기법이 그나마 객체 상속과 유사하다 상속관계 매핑: 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것 데이터베이스 논리 모델을 실제 물리 모델로 구현하는 방법에는 3가지가 있다. 조인 전략: 각각 테이블로 변환 단일 테이블 전략: 통합 테이블로 변환 구현 클래스마다 테이블 전략: 서브타입 테이블로 변환 객체는 상속관계를 지원하기 때문에, 그냥 매핑하면 된다. 결론은 DB에서 세가지 중 어떤 방식으로 물리 모델을 구현하더라도, JPA를 이용하면 모두 객체와 매핑이 가능하도록 지원한다는 점이다. 조인 전략 위의 다이어그램은 조인 전략을 사용하는 경우이고, 각각의 테이블에 중복되는 정보.. 2023. 2. 6.
[JPA] 다양한 연관관계 매핑 연관관계 매핑시 고려사항 3가지 다중성 (연관관계 차수) 단방향 or 양방향 연관관계 주인 설정 다중성 다대일: @ManyToOne 일대다: @OneToMany 일대일: @OneToOne 다대다: @ManyToMany 다중성과 관련되어 헷갈리는 경우 반대 엔티티에서의 연관관계 차수를 생각해보자! (다중성은 대칭성을 띄기 때문이다.) 참고: 다대다 관계는 실무에서 사용하면 안 된다. 왜 그런지에 대해서는 뒤에서 공부하자. 단방향과 양방향 테이블 외래 키 하나로 양쪽 조인이 모두 가능 사실상 방향이라는 개념이 없다. 객체 참조용 필드가 있는 쪽으로만 참조가 가능하다. 한쪽만 참조하면 단방향 양쪽에 필드를 만들어 서로 참조해야 양방향 사실 양방향이란 개념은 없다. (참조의 입장에서 사실은 두 개의 단방향이다).. 2023. 2. 1.
[JPA] 연관관계 매핑 기초 객체가 지향하는 패러다임과 관계형 데이터베이스의 패러다임 간의 차이에서 오는 어려움을 해결하는 첫 번째 단계이다. 차근차근하게 정리해 보자. 이번 단계의 목표 객체와 테이블 연관관계의 차이를 이해하자 객체의 참조와 테이블의 외래 키를 매핑 용어 이해 방향(Direction): 단방향, 양방향 다중성(Multiply): 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) 이해 연관관계의 주인(Owner): 객체 양방향 연관관계는 관리 주인이 필요(???, 처음 보면 c언어의 포인터와 같은 느낌이라고 한다..) 연관관계가 필요한 이유 예제 시나리오 회원과 팀이 있다. 회원은 하나의 팀에만 소속 가능 회원과 팀은 다대일 관계이다. (한 팀에는 여러 명이 속하기 때문) 하지만, 위의 스키마에 .. 2023. 1. 30.
[JPA] 영속성 컨텍스트에 대한 정리 JPA가 내부에서 어떻게 돌아가는지에 대한 이론적 배경을 공부하기 위해 영속성 컨텍스트라는 개념을 공부해 보자. JPA에서 가장 중요한 2가지 객체와 관계형 데이터베이스를 매핑하기 (Object Relational Mapping) 영속성 컨텍스트 (JPA의 내부 동작과 연관된 개념) 이번에는 영속성 컨텍스트에 대한 개념을 정리해 보자. 영속성 컨텍스트 JPA를 이해하는데 가장 중요한 용어로 "엔티티를 영구 저장하는 환경"이라는 뜻이다. EntityManager.persist(entity object); 영속성 컨텍스트를 이용해 entity를 영속화함을 의미한다. EntityManger와 영속성 컨텍스트를 정리하자면, 영속성 컨텍스트는 논리적인 개념으로 눈에 보이지 않는다. EntityManger를 통해 .. 2023. 1. 21.
[JPA] Java 표준 ORM인 JPA란? SQL 중심적인 개발의 문제점 무한 반복, 지루한 코드.. 기획 단계에서 잘못되어 새로운 필드를 테이블에 추가하려 하는 경우, 관련된 모든 쿼리를 전부 변경해야 한다. 하지만, 관계형 데이터베이스를 대부분의 케이스에서 사용하기 때문에, SQL에 의존한 개발을 할 수밖에 없다..!! 개발을 하면서 객체라는 개념을 다양한 저장소에 저장하게 되는데, 이 중 현실적인 대안은 관계형 데이터베이스이다. 개발자는 사실상 객체를 관계형 데이터베이스에 저장하기 위한 mapping 과정을 도맡아 한다고 볼 수 있음 객체와 관계형 데이터베이스의 차이 상속 연관관계 데이터 타입 데이터 식별 방법 상속 부모 테이블을 만들고, 자식 테이블을 만들어 관리하는 방식으로 흉내 낼 수 있고, 이를 슈퍼타입 서브타입으로 만들어 관리한다고.. 2023. 1. 19.
728x90