본문 바로가기

Spring/JPA

(5)
자바 ORM 표준 JPA 프로그래밍 #5(프록시와 연관관계) 들어가며 엔티티를 조회할 때 연관관계에 있는 Entity까지 조회를 하는 것은 효과적이지 않다. JPA는 이러한 상황을 위해 지연 로딩을 지원하는데 연관관계에 있는 엔티티에 프록시 객체를 집어 놓았다가 실제로 사용시 엔티티를 집어 넣는다. 프록시 먼저 프록시에 대해서 살펴보도록 하자. 엔티티를 조회할 때 항상 연관된 엔티티를 사용하지는 않는다. 예를들어 지연로딩을 설정한 경우 엔티티 조회시 연관 엔티티에는 프록시 객체가 들어있다. 연관 엔티티를 상속받은 프록시 객체를 통해 데이터베이스에 쿼리를 해당 엔티티를 사용시에만 날릴 수 있게 한다. 프록시 초기화 과정 1. 프록시 객체에 접근을 시도하게 되면 실제 데이터를 조회한다. 2. 프록시 객체가 초기화 되어있지 않으면 영속성 컨텍스트에 실제 엔티티 생성을 ..
자바 ORM 표준 JPA 프로그래밍 #4(연관관계) 들어가며 엔티티들은 대부분 다른 엔티티와 연관 관계가 있다. JAVA에서는 연관관계를 참조를 이용해서 맺고, 데이터베이스는 외래키를 이용해서 맺는다. 따라서 JPA를 이용해 연관관계를 맺기 위해서는 객체의 참조와 테이블의 외래키를 매핑해야 한다. 연관관계 핵심 키워드 방향 단방향, 양방향이 잇다. 이는 외래키 개념이 없는 객체 관계에서만 존재하는데 간단히 객체 A가 B를 참조하지만 B는 A를 참조하지 않는 것이 단방향 둘 다 참조하는 것이 양방향 관계이다. 다중성 1:N, N:1, N:M의 관계가 있다. 예를 들어 회원과 팀은 1:N, 팀과 회원은 N:1, 상품과 주문의 관계는 N:M이다.(한번에 여러 상품을 주문할 수 있고, 상품 또한 서로 다른 주문에 포함 될 수 있으므로) 연관관계 주인 객체를 양방..
자바 ORM 표준 JPA 프로그래밍 #3(엔티티) 들어가며 Entity와 Table을 정확히 매핑하는 일은 중요하다. JPA에서는 다양한 어노테이션을 통해 매핑을 지원한다. 각 어노테이션에 대해서 공부해 보자 대표적인 어노테이션 객체와 테이블 매핑: @Entity, @Table 기본키 매핑: @Id 필드와 컬럼 매핑: @Column 연관관계 매핑: @ManyToOne, @JoinColumn @Entity JPA를 사용해서 테이블과 매핑할 클래스는 해당 어노테이션이 필수이다. 기본 생성자가 필수적으로 있어야 한다. final 클래스, enum, interface, inner 클래스에는 사용할 수 없다. 저장할 필드에 final을 사용하면 안된다. @Table 생략이 가능하며 생략시 엔티티 이름을 테이블 이름으로 사용한다. uniqueConstraints를..
자바 ORM 표준 JPA 프로그래밍 #2(영속성) 들어가며 JPA에서 제공하는 기능은 크게 엔티티와 테이블을 매핑하는 설계 부분과 매핑한 엔티티를 실제 사용하는 부분으로 나눌 수 있다. 엔티티 매니저는 엔티티를 저장하고, 수정, 삭제, 조회하는 등 엔티티와 관련된 모든 일을 처리한다. 이름 그대로 엔티티의 관리자의 역할을 한다. 개발자의 역할에서 보면 엔티티를 저장하는 가상의 데이터베이스로 보면 될 것 같다. 엔티티 매니저 팩토리와 엔티티 매니저 엔티티 매니저 팩토리는 이름 그대로 엔티티 매니저를 만드는 공장인데, 이 공장을 만드는 비용은 상당히 크다. 따라서 한 개만 만들어 애플리케이션 전체에서 공유하도록 설계되어 있다. 일반적으로 애플리케이션은 엔티티 매니저 팩토리를 한개만 생성한다. 엔티티 매니저 팩토리의 특징 위의 설명을 바탕으로 설계된 에티티 ..
자바 ORM 표준 JPA 프로그래밍 #1(JPA란) JPA의 기초이론과 핵심원리, 성능 최적화 까지 거의 JPA의 전부에 대해 자세히 알려주는 이 책을 읽으며 내용을 잊지 않기 위해 각 챕터를 정리하고자 한다. JPA의 등장 배경 기존의 JDBC API를 사용했을때의 반복적인 SQL(CRUD) 작성(SQL에 의존하여 개발) 객체 모델이 데이터 모델에 의존(데이터 모델을 설계 후 이에 맞추어 객체 모델을 설계 -> 객체 모델의 장점 포기) 위의 문제로 인해 객체와 데이터베이스 간의 다리 역할을 해주는 ORM 프레임워크의 등장 JPA는 자바 진영의 ORM 기술의 표준 * ORM(Object Relational Mapping): 객체와 관계형 데이터 베이스를 연결해주는 것을 의미 * JPA(Java Persistence API): JPA는 자바 ORM 기술에 ..