# 강의/[인프런] 자바 ORM 표준 JPA 프로그래밍
[完] 값 타입
값 타입 값 타입 값 타입의 종류 기본 값 타입 임베디드 타입(복합 값 타입) 값 타입과 불변 객체 값 타입의 비교 값 타입 컬렉션 JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 값 타입 int, Integer, String 등 단순히 값으로 사용하는 자바 기본 타입 식별자가 없고 값만 있으므로 변경 시 추적 불가 값 타입 분류 1. 기본 값 타입 String name, int age ... 와 같은 것들 생명주기를 엔티티에 의존 값 타입은 공유하면 안된다. - 어떤 객체의 값을 바꿨는데 다른 객체의 값이 바뀌면 안된다. 값은 항상 복사된다(Call by value) - 예외로 Wrapper 클래스는 특수한 클래스로 공유 가능 2. 임베..
프록시와 연관관계 관리
프록시와 연관관계 관리 프록시 프록시를 사용하는 이유는? 엔티티를 조회할 때 연관된 엔티티가 항상 사용되는 것은 아니다. EX) Member의 name만 알고 싶은데 Member 엔티티와 연관된 Team 엔티티를 가져올 필요가 없음 JPA는 엔티티가 실제 사용될 때까지 DB 조회를 지연하는 방법을 제공한다. (지연로딩) 프록시 기초 EntityManager.getReference()를 호출하면, JPA는 DB를 조회하지 않고 실제 엔티티 객체를 생성하지 않는다. 대신, DB 접근을 위임한 프록시 객체를 반환한다. 프록시 객체는 실제 객체에 대한 참조를 보관하고, 프록시 객체의 메소드를 호출 했을 때 실제 객체의 메소드를 호출한다. 프록시 특징 프록시 객체는 처음 사용할 때 한 번만 초기화된다. 프록시 객..
고급 매핑(상속, Mapped Superclass)
고급 매핑 목차 상속 관계 매핑 @MappedSuperClass 상속 관계 매핑 관계형 데이터베이스에 상속 관계를 표현하는 방법은 없으나 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사합니다. 각각 테이블로 변환 → 조인 전략 하위 테이블들이 상위 테이블의 키를 가짐으로 조인해서 하위 테이블의 값을 가져옴 통합 테이블로 변환 → 단일 테이블 전략 자식 클래스의 자료를 모두 하나의 테이블에서 갖도록 하고 어떤 타입인지 구분 서브타입 테이블로 변환 → 구현 클래스마다 테이블 전략 공통되는 부분을 모두 각각 갖도록 함 상속 관계 매핑 시 사용하는 주요 어노테이션 @Inheritance(strategy = InheritanceType.XXX) JOINED : 조인 전략 SINGLE_TABLE : 단일..
엔티티 매핑 2 (연관관계)
연관관계 매핑 기초 목표 🤔 객체와 테이블 연관관계의 차이를 이해 객체의 참조와 테이블의 외래 키를 매핑 객체가 지향하는 패러다임과 관계가 지향하는 패러다임의 차이를 이해하고 적절하게 매핑하는 방법을 이해한다. 용어 방향(Direction) : 단방향, 양방향 다중성(Multiplicity) : 다대일, 일대다, 일대일, 다대다 연관관계의 주인(Owner) : 객체 양방향 연관관계는 관리 주인이 필요함 연관관계가 필요한 이유 [예제 시나리오] 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계이다. @Entity public class Member{ ... private Long teamId; ... } 연관관계가 없다면, 엔티티에 매번 외래키를 매핑해야 하고, 연관된 테..
엔티티 매핑 1(테이블, 컬럼, 키 매핑 전략)
엔티티 매핑 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColumn 1. 객체와 테이블 매핑 @Entity @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 함 JPA를 사용해서 테이블과 매핑할 클래스 기본 생성자 필수(public 또는 protected 접근제한자) 가급적 name 속성은 따로 지정하지 않고 클래스명 그대로 사용한다. @Table 엔티티와 매핑할 테이블 지정 name 속성 : 테이블 이름 catalog : 데이터베이스 catalog 매핑 schema : 데이터베이스 schema 매핑 uniqueConstraints : DDL 생성 시에 유니크 제약 조건 생성 데이터..
영속성 관리 - 내부 동작 방식
JPA에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑 영속성 컨텍스트 : JPA 내부 동작 방식 JPA 내부구조 영속성 컨텍스트 플러시 준영속 상태 영속성 컨텍스트란? 영속성 컨텍스트란? 1. 엔티티를 영구 저장하는 환경 2. 엔티티 매니저를 통해서 영속성 컨텍스트에 접근한다. (클라이언트의 요청 하나당 하나의 엔티티 매니저가 생성된다.) 영속화란? 엔티티 매니저의 persist()를 통해 엔티티를 DB에 저장하는 것이 아닌 영속성 컨텍스트에 저장하는 것 em.persist(entity); 엔티티의 생명주기 비영속(new/transient) : 영속성 컨텍스트와 관계가 없는 상태(객체 생성만 한 것) 영속(managed) : 영속성 컨텍스트에 관리되고 있는 상태 준영속(detached) : 영속..
JPA는 왜 사용해야 하는가?
JPA는 왜 사용해야 하는가? 관계형 데이터베이스를 이용해 SQL 중심적인 개발을 할 때 맞닿는 문제가 두 가지 있다. 하나는 객체지향 패러다임과 관계형 패러다임의 불일치와 SQL의 유지보수 문제이다. 비즈니스 서비스를 개발할 때 수십 개, 수백 개의 테이블을 관리하고, 각 테이블마다 컬럼을 관리하는 것은 쉬운 일이 아니다. 특히 개발 중 기획된 내용이 변경됨으로 기존 코드를 수정해야할 때가 빈번하게 발생하는데 이때 들어가는 비용은 무시할 수 없다. ORM은 최근에 갑자기 등장된 것이 아니라 꽤 오래 전부터 다뤄지는 영역이었고, 자바의 ORM 기술 표준인 JPA에 대해 알아보도록 한다. JPA를 사용함으로 얻는 이점 1. CRUD 코드 작성 소요시간을 대폭적으로 감소시켜 생산성 증가 2. 테이블의 변경사..