JPA

    [JPA] N+1 문제 및 해결 방안

    [JPA] N+1 문제 및 해결 방안

    N+1이란? 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 갯수 N번 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어와 서버와 데이터의 접촉이 N번 발생하는 현상이다. 예시로 게시물과 해시태그를 예시로 들어 확인해본다. 가정 한 게시물에는 여러개의 해시태그를 들 수 있다. 해시태그는 한 게시물에만 속한다. @Entity @Getter @Setter @NoArgsConstructor public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "board_id") private Long id; private String content; @OneToMany(mappedBy = "boa..

    [JPA]연관관계 매핑(다대일, 일대다, 일대일, 다대다)

    다양한 연관관계 매핑 다대일[N:1] 일대다[1:N] 일대일[1:1] 다대다[N:M] 연관관계 매핑시 고려사항 3가지 다중성 단방향, 양방향 연관관계의 주인 다중성 다대일: @ManyToOne 일대다: @OneToMany 일대일: @OneToOne 다대다: @ManyToMany 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인 가능하다. 사실 방향이라는 개념이 존재하지 않는다. 객체 참조용 필드가 있는 쪽으로만 참조 가능 한 쪽만 참조하면 단뱡향 양쪽이 서로 참조하면 양방향 연관관계의 주인 테이블은 외래키 하나로 두 테이블이 연관관계를 맺는다. 객체 양방향 관계는 A->B, B->A 처럼 참조가 2 곳이 존재 객체 양방향 관계는 참조가 2 곳이 있다. 둘중 테이블의 외래 키를 관리할 곳을 지정해야한다. ..

    [JPA] 기본 키 매핑

    @Id @GeneratedValue 기본 키 매핑 방법 직접 할당: @Id만 사용 자동 생성(@GeneratedValue) IDENTITY: 데이터베이스에 위임, Mysql SEQUENCE: 데이터베이스 시퀀스 오브젝트 사용, ORACLE @SequenceGenerator 필요 TABLE: 키 생성용 테이블 사용, 모든 DB에서 사용 @TableGenerator 필요 AUTO: 방언에 따라 자동 지정, 기본값 IDENTITY 전략 - 특징 기본 키 생성을 데이터베이스에 위임한다. 주로 Mysql, PostgreSQL, SQL Server, DB2에서 사용(예: MySQL의 AUTO_ INCREMENT) JPA는 보통 트랜잭션 커밋 시점에 INSERT SQL 실행한다. AUTO_INCREMENT는 데이터베..

    [JPA] 객체와 테이블 매핑

    객체와 테이블 매핑: @Entity, @Table 필드와 컬럼 매핑: @Column @Entity @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. 주의 JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) 저장할 필드에 final 사용 X @Entity 속성 관리 ex) @Entity (name=?) JPA에서 사용할 엔티티 이름을 지정한다. 기본값: 클래스 이름을 그대로 사용한다. 같은 클래스 이름이 없으면 가급적 기본값을 사용한다. @Table @Table은 엔티티와 매핑할 테이블 지정 속성 기능 기본값 속성 기능 기본값 name 매핑할 테이블 이름 엔티티 이름을 사용 catalog 데이터베이스 ca..

    [JPA] 영속성 컨텍스트

    [JPA] 영속성 컨텍스트

    JPA에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑하기 영속성 컨텍스트 영속성 컨텍스트 JPA를 이해하는데 가장 중요한 용어 “엔티티를 영구 저장하는 환경”이라는 뜻 논리적인 개념 눈에 보이지 않는다. 엔티티 매니저를 통해서 영속성 컨텍스트에 접근한다. 엔티티의 생명주기 비영속(new/transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 영속(managed) 영속성 컨텍스트에 관리되는 상태 준영속(detached) 영속성 컨텍스트에 저장되었다가 분리된 상태 삭제(removed) 삭제된 상태 Code 영속된다고 해서 DB에 저장되는 것이 아니라. commit을 할 때 저장이 된다. 영속성 컨텍스트의 장점 1차 캐시 동일성(identity)보장 트랜잭션을 지원하는 쓰기 지연 (tra..