본문 바로가기

Spring/JPA

(48)
[JPA] Proxy 이번 장에서는 즉시 로딩과 지연 로딩을 이해하기 위해 프록시에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 사항은 강의나 공식문서에서 확인한다. 프록시 서버 프록시를 이해하기 위해 프록시 서버에 대해서 간략하게 알아본다. 아래는 위키백과에 나와있는 프록시 서버의 정의다. 프록시 서버(proxy server)는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다. 간략하게 클라이언트와 서버간의 중개인 역할을 하는 서버를 프록시 서버라고 한다. 프록시란 개념이 서버에 적용되었다고 볼 수 있다. JPA의 프록시 JPA에서도 사용유무가 불분명한 데이터를 위한 DB조회수 감소와 메모리 사용량을 최..
[JPA] Relation Mapping - 3 이번 장에서는 기본적인 연관괸계 매핑 기초 (링크)와 다양한 연관관계 매핑 (링크)에 이어 상속관계 매핑에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 사항은 강의나 공식문서에서 확인한다. 관계형 데이터베이스에는 상속의 개념이 없다. 슈퍼타입과 서브타입 관계라는 모델링이 객체의 상속과 유사하다. JPA에서 관계형 데이터베이스를 사용해서 상속관계를 매핑하는 방법은 총 세가지가 있다. 상위 클래스인 Person(사람)과 하위 클래스인 Teacher(선생), Student(학생)을 예로 들어 알아본다. 조인전략 하위 클래스를 전부 테이블로 만들고 하위 클래스의 테이블들은 부모의 기본 키를 기본 키 및 외래 키로 사용한다. 테이블이 깔끔하게 정규화되고 저장공간을 효율적으..
[JPA] Relation Mapping - 2 이번 장에서는 기본적인 연관괸계 매핑 기초 (링크)에 이어 다양한 연관관계 매핑에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 사항은 강의나 공식문서에서 확인한다. 테이블의 경우 외래 키 하나만으로 양쪽으로 조인이 가능하다. 사실상 방향이라는 개념이 없다. 하지만 Java 객체의 경우 참조용 필드가 있는 객체에서만 다른 객체로 참조가 가능하다. 한쪽만 참조하면 단방향이 되고 양쪽 모두 서로를 참조하는 참조용 필드가 있다면 양방향 참조가 된다. 다대일 (N : 1) 다대일 단방향의 경우 가장 많이 사용되는 연관관계이며 테이블과 객체관의 관계도는 아래와 같다. 다대다 양방향의 경우 객체들이 양쪽을 서로 참조 할 수 있는 연관관계이며 이때 외래 키를 가지고 있는 쪽이 ..
[JPA] Relation Mapping - 1 이번 장에서는 기본적인 연관관계 매핑에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 사항은 강의나 공식문서에서 확인한다. 데이터 중심적인 설계의 문제점 JPA가 없다면 Java 객체(이하 객체)와 DB Table(이하 Table)의 연관관계는 아래의 그림처럼 설계가 된다. Table은 FK로 연관관계가 맺어져있지만 객체는 연관 관계가 맺어져있지 않고 외래 키를 가지고 있다. 연관관계가 맺어지지 않은 상황에서의 Java Entity 클래스의 코드는 아래와 같을 것이다. @Entity public class Car { @Id @GeneratedValue private Long id; @Column(name = "name") private String name; @Co..
[JPA] Entity Mapping 이번 장에서는 엔티티 매핑에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 사항은 강의나 공식문서에서 확인한다. 기본 매핑 @Entity JPA를 사용하여 테이블과 매핑되는 클래스에는 @Entity 어노테이션이 붙어야한다. @Entity 어노테이션이 붙은 클래스는 JPA의 관리 대상이 된다. JPA에서는 우리가 작성한 클래스를 그대로 사용하는 것이 아니라 우리가 작성한 클래스를 기반으로 새로운 프록시 객체를 생성한다. 그렇기 때문에 몇가지 지켜야하는 규칙이 있다. 기본 생성자(파라미터가 없는)가 있어야하며 접근제한자는 public 또는 protected만 가능하다. 필자의 경우 Entity 클래스에 아래와 같은 어노테이션을 추가하여 사용한다. @NoArgsConst..
[JPA] Persistence - 2 이번 장에서는 Persistence - 1 (링크)에 이어 영속성에 대해서 알아본다. 번역상으로 Persistence는 "지속됨", "고집"으로 번역되지만 이 글에서는 "Persistence = 영속"이라 정의한다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 사항은 강의나 공식문서에서 확인한다. 영속성 컨텍스트의 장점 1차 캐시 Entity를 생성하고 persist(영속화)하면 영속성 컨텍스트내의 1차 캐시에 저장된다. // 엔티티를 생성한 상태 User user = new User(); user.setId(1L); user.setName("유저"); // 엔티티를 영속화 entityManager.persist(user); Entity를 조회하면 DB에 조회하기 전에 1차 캐시를..
[JPA] Persistence - 1 이번 장에서는 영속성에 대해서 알아본다. 번역상으로 Persistence는 "지속됨", "고집"으로 번역되지만 이 글에서는 "Persistence = 영속"이라 정의한다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 사항은 강의나 공식문서에서 확인한다. Persistence Context JPA에서 가장 중요한 개념 두 가지가 있다. 첫번째는 객체와 관계형 데이터베이스를 매핑(Object Relational Mapping)하는 것이며 두번째는 영속성 컨텍스트의 개념을 정확히 이해하고 사용하는 것이다. Persistence Context(영속성 컨텍스트)를 이해하기 위해 Entity Manager와 Entity Manager Factory의 개념을 이해해야한다. Entity Mana..
[JPA] Java Persistence API 이번 장에서는 JPA (Java Persistence API)가 무엇인지 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 사항은 강의나 공식문서에서 확인한다. JPA Java Persistence API의 약자로 자바 퍼시스턴스 API 또는 자바 지속성 API로 불린다. 자바 플랫폼 Standard Edition과 자바 플랫폼 Enterprise Edition을 사용하는 응용프로그램에서 관계형 데이터베이스의 관리를 표현하는 자바 진영의 ORM 기술 표준이다. ORM ORM이란 Object Relational Mapping의 약자로 객체 관계 매핑을 의미한다. 객체는 객체대로 설계하고 관계형 데이터베이스는 관계형 데이터베이스대로 설계하고 ORM 프레임워크가 중간에서 매핑시켜주..