본문 바로가기

정보/Database

(8)
JPA와 데이터 타입 1. JPA에서 다루는 타입⭐ Entity 타입@Entity로 정의하는 객체데이터가 변해도 식별자로 지속해서 추적 가능 ⭐ Value Objectint, Integer, String처럼 값으로 사용하는 자바 기본 타입이나 객체식별자가 없음. 값만 있음. 변경 시 추적 불가기본 값 타입자바 기본 타입(int, double) / 래퍼 클래스(Integer, Long) / String생명 주기를 엔티티에 의존한다.값 타입은 공유하지 말아야 한다.Primitive Type은 값을 공유하지 않기에 side-effect가 없다.(항상 값을 복사하기 때문)Integer같은 Wrapper class나 String class는 공유 가능한 객체이지만 변경을 불가능하게 만들어 놨음.Embedded type : 복합 값 타..
프록시, JPA 최적화 Member와 Team을 같이 출력해야 하는 경우, 따로 조회해야 하는 경우 등비즈니스 로직은 다양하다. 그렇기에 상황에 따라 최적화가 필요함.지연 로딩, 즉시 로딩 등을 사용하려면 프록시에 대한 이해가 필요하다. 1. Proxy Class em.find vs em.getReference전자는 DB를 통한 실제 엔티티 객체 조회후자는 DB조회를 미루는 가짜(프록시) 엔티티 객체 조회Member findMember = em.getReference(Member.class, member.getId());// 사용을 안하면 SELECT query안나감Member findMember = em.getReference(Member.class, member.getId());System.out.println(findMe..
연관 관계 Mapping (3) 1. 상속 관계 매핑 RDBMS에는 상속 관계 없지만, 슈퍼타입, 서브타입 관계 모델링 기법이 객체 상속과 유사객체는 상속 관계의 형태가 유일하지만,DB설계는 아래와 같이 3가지 방식이 있다. 어떤 방법을 구현하더라도 JPA는 매핑을 지원해준다.JOIN 전략 : 상속 관계처럼 각각의 테이블로 변환기본적, 정석적인 전략. 객체와 잘맞고, 정규화 잘 되어있고, 설계 입장에서도 좋음.장점 : 테이블 정규화, 저장 공간 효율화외래 키 참조 무결성 제약 조건 활용 가능 (Item만 보면 album, movie, book 조회 가능)단점 : 조회 시 JOIN을 많이 사용, 성능 저하조회 쿼리가 복잡함, 데이터 저장 시 INSERT 2번 호출단일 테이블 전략 : 논리 모델을 한 테이블로 합치는 것 (성능 때문에)DT..
연관 관계 Mapping (2) 1. 연관 관계 매핑 시 고려사항 3가지다중성다대일(@ManyToOne), 일대다(@OneToMany), 일대일(@OneToOne), 다대다(@ManyToMany)@ManyToMany는 실무에서 절대 사용하지 말것.단방향, 양방향테이블은 방향이 없지만, 객체는 방향이 있다(참조).연관 관계의 주인테이블은 외래 키 하나로 두 테이블이 연관관계를 맺지만 객체는 참조가 2군데외래 키를 관리하는 참조가 연관 관계의 주인  2. 여러 시나리오 앞이 연관 관계의 주인이다.N : 1 : 단방향(가장 많이 사용한다.), 양방향N쪽에 외래 키가 가야한다. => 연관 관계의 주인은 N쪽 (이쪽에 참조를 걸 것)1 : N 단방향 : 객체 입장에서는 이런 설계가 나올 수 있는데, DB입장에서는 초큼...DB에서는 N쪽에 FK..
연관 관계 Mapping (1) 0. Entity 설정과 DB 중심적 Entity의 문제점메타데이터는 Entity Class 내에 적어 두는 것을 선호Index도 마찬가지, @Table()에 적어두기Table 이름과 Column이름 조직 컨벤션에 맞게 바꾸는 것 중요.spring boot에서는 camel -> snake로 자동으로 바꿔주는 기능도 있으니. 객체 지향적인 Entity?public class Order { @Id @GeneratedValue @Column(name = "ORDER_ID") Long id; @Column(name = "MEMBER_ID") Long memberId; // 이 부분이 객체지향스럽지 않음 // 이렇게 될 경우 em.find(Member.class, order...
Entity Mapping 1. 객체와 테이블 매핑@Entity : JPA가 관리하는 EntityJPA를 사용해서 테이블과 매핑할 클래스는 필수기본 생성자 필수(파라미터가 없는 public, protected 생성자)reflection등 다양한 기술을 써서 객체 proxy할 때 사용된다고는 함. spec상 그렇다.final, enum, interface, inner 클래스는 사용 안된다!저장할 필드에 final 사용 X속성 : name / default는 class 이름@Table : class 이름과 다른 table과 매핑하기 위해서 사용. 2. DB 스키마 자동 생성DDL을 애플리케이션 실행 시점에 자동 생성 (production에서는 사용 X, 개발시에만)객체 중심으로 필요한 테이블 만들어준다. (DB dialect별로 DB..
JPA Persistence Context 는 Git과 흡사하다 1. Persistence ContextJPA에서 영속성 컨텍스트란, JPA에서 엔티티를 관리하는 일종의 캐시, 버퍼(저장소)이다.DB와의 직접 상호작용을 지연하고, 변경된 엔티티를 관리하다가 한 번에 반영하는 식으로 사용된다.엔티티를 영구 저장하는 환경이다. EntityManagerFactory는 App의 시작에 EntityManager를 생성하고,EntityManager가 Persistence Context에 접근하게 해주는 역할을 한다. EntityManager와 Persistence Context는 N:1의 환경. 참고. Entity 객체는 NoArgsConstructor의 기본 생성자가 필요하다. reflection API의 사용 때문.  2. Entity의 생명 주기비영속 (new/transi..
JPA : Java ORM 표준 - JPA에서 제일 중요한것 객체와 테이블 정확한 매핑.(실무에서 이게 어렵다 테이블이 수십 개)- JPA 내부 동작 방식이 중요. 0. SQL 중심적인 개발의 문제점- 패러다임의 불일치 (객체와 RDBMS 사이의 괴리)- CRUD 무한 반복 (자바 객체를 SQL로, SQL을 자바로)- 필드 추가 시 쿼리문 고쳐줘야 함.  -> 그러다보니 개발자는 객체와 RDB사이의 SQL매퍼의 일을 한다. DB에서 객체 상속 : Table 슈퍼타입 서브타입 관계 사용하지만- INSERT때는 쿼리를 슈퍼타입과 서브타입에 각각 넣어야한다.- 조회떄는 JOIN SQL 작성, 객체 생성...-> 자바 컬렉션에서는 너무 쉬움. 객체의 다형성도 활용 가능하다. DB에서 연관 관계 : 객체는 참조를 사용하지만 테이블은 외래 키를 ..