JPA
[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(Java Persisitence API) 기본 개념
JPA(Java persistence API) JPA를 통해 개발자는 애플리케이션에서 사용할 수 있도록 관계형 데이터베이스 엔티티의 객체 지향 버전을 작성할 수 있다. 스프링에서 제공하는 것이 아닌 자바 ORM 기술에 대한 표준 명세이다. JPA는 라이브러리가 아니라 인터페이스이다. 자바 클래스 - DB테이블 매핑 ORM→ Object-relational mapping(객체 관계 매핑) 객체와 관계형 데이터베이스 각각의 설계를 진행하고 ORM 프레임워크가 중간에서 매핑을 한다. 대중적인 언어에는 대부분 ORM 기술이 존재한다. JPA 구동 과정 JPA는 애플리케이션과 JDBC사이에서 동작한다. JPA 동작 과정 - save JPA 동작 과정 - find JPA를 사용해야하는 이유는? 1. sql 중심적인..