스프링/JPA

스프링/JPA

[JPA] EAGER Loading Vs LAZy Loading N+1이란?

먼저 N+1문제란 무엇인지 알기 전에EAGER Loading (즉시 로딩), Lazy Loading (지연 로딩)에 대해 이해하고 넘어가야만 한다.예시를 살펴보며 이해해보자1. Member Entity, Post Entity가 존재한다.2. Member : Post -> 1 : N 연관관계를 맺는다. @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToMany(mappedBy = "member", fetch = FetchType.LAZY) private List posts = new ArrayList();}  @Enti..

스프링/JPA

[Spring] JPA에서 Entity Life의 Cycle은 어떻게 이루어지나?(면접 질문 있음)

들어가기에 앞서Spring Boot 개발을 하면서 JPA를 활용하여 개발을 하지만 JPA에서 Entity가 어떻게 관리되는지 얕게 공부한터라 다시 한번 상기하고,  더불어 면접 질문에 대해 대비하려고 한다.JPA에서 Entity는 여러 Life Cycle(생명 주기) 단계 를 거치며, 각각의 단계는 Entity가 DB어떻게 상호작용하는지를 결정한다.크게 New 상태, Managed 상태, Detached 상태, Removed 상태로 4가지로 나뉜다.1. NEW(Transient)상태Entity가 아직 영속성 컨텍스트에 의해 관리되지 않는 상태이다.특징-  DB에 저장되지 않은 상태-  아직 EntityManager를 통해 persist()메소드가 호출되지 않은 상태이다.MyEntity entity = n..

스프링/JPA

[Spring] JPA Save메소드를 이용한 양방향 매핑 (Gradle)

양방향 연관관계에서 중요한 것 알고 가야할 것 1. DB는 FK(외래키)하나로 관계를 맺은 Table을 탐색할 수 있다 2. DB랑은 다르게 객체는 객체안에 탐색하고 싶은 객체와 참조를 맺어놔야 탐색이 가능하다 3. 양방향 매핑은 단방향 매핑과 다르게 주인을 정해줘야 한다 (주인이 아니라면 조회밖에 하지 못한다) 코드를 보면 Member @Entity @Table(name = "member") @Getter @Setter @Data @NoArgsConstructor @AllArgsConstructor public class Member { @Id @Column(name = "member_id") private Long member_id; @Column(name = "id") private String i..

스프링/JPA

[Spring] JPA란 무엇인가

현 시대는 객체를 관계형 DB에 저장해서 관리를 합니다 그렇다면 관계형 DB안에 객체를 저장하려면 SQL을 이용하여 저장해야 합니다 SQL 중심의 개발이죠 Insert, Update, Select, Delete , Create..등등 1. 무한 반복, 지루한 코드 public class Member { private String memberId; private String name; ... } INSERT INTO MEMBER(MEMBER_ID, NAME) VALUES SELECT MEMBER_ID, NAME FROM MEMBER M UPDATE MEMBER SET ... 위 객체를 RDB(Relational Database, 관계형 데이터베이스) SQL을 이용하여 저장한 코드입니다 그런데 만약 DB구성..

Sleeg
'스프링/JPA' 카테고리의 글 목록