먼저 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..
들어가기에 앞서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..
양방향 연관관계에서 중요한 것 알고 가야할 것 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..
현 시대는 객체를 관계형 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구성..