[SpringBoot] Entity 설계 - Cascade 옵션은 언제 써야 할까
·
BackEnd/SpringBoot
· 들어가며JPA로 Entity 연관관계를 설계하다 보면다음과 같은 코드를 한 번쯤은 보게 됩니다.@OneToMany(cascade = CascadeType.ALL)private List orderItems = new ArrayList(); 처음에는 "연관된 Entity까지 한 번에 저장해 주니까 편하네?"라고 생각하고 cascade 옵션을 사용하게 됩니다. 하지만 cascade는편의 기능이 아니라, 연관된 Entity의 생명주기를 어떻게 관리할 것인지에 대한 설계 옵션입니다. 이번 글에서는 Cascade 옵션이 무엇인지,그리고 언제 사용해야 하고 언제 사용하면 안 되는지를 정리해 보겠습니다. · Cascade- Cascade란?Cascade는 부모 Entity의 상태 변화가 자식 Entity에게 전파되..
[SpringBoot] Entity 설계 - 모든 연관관계는 LAZY로 시작해야 하는 이유
·
BackEnd/SpringBoot
· 들어가며JPA로 Entity 연관관계를 매핑하다 보면fetch 옵션을 한 번쯤은 마주치게 됩니다.@ManyToOne(fetch = FetchType.LAZY) 이번 글에서는 Member-Order 예제를 기준으로연관관계 로딩 전략인 EAGER / LAZY에 대해 각각 알아보고,왜 LAZY를 기본으로 가져가야 하는지 정리해 보겠습니다. · 로딩 전략JPA에서 연관관계 로딩 전략은연관된 Entity를 언제 조회할 것인지를 결정하는 설정입니다.- EAGER (즉시 로딩)EAGER 로딩 전략은 연관된 Entity를 즉시 함께 조회하고,Entity를 조회하는 시점에 JOIN 또는 추가 쿼리가 발생합니다.@ManyToOne(fetch = FetchType.EAGER)private Member member;- L..
[SpringBoot] Entity 설계 - 연관관계의 주인과 mappedBy
·
BackEnd/SpringBoot
· 들어가며JPA에서 Entity 연관관계를 설계할 때 가장 헷갈리는 개념 중 하나가연관관계의 주인을 설정하는것과 그에 따른 mappedBy를 배치하는 것입니다. 특히 양방향 연관관계를 설정했을 때 다음과 같은 고민을 하게 됩니다.어디 쪽을 기준으로 값을 변화시키지?mappedBy는 왜 쓰는 거지?둘 다 서로를 가리키는데, 왜 주인이 필요할까? 이번글에서는아래의 간단한 Member-Order 테이블과 예제 코드를 기반으로연관관계의 주인과 mappedBy 개념을 정리해 보겠습니다.- 예제 테이블MemberMEMBER_ID(PK)NAME OrderORDER_ID(PK)MEMBER_ID(FK) - 예제 코드Member@Entity@Getter @Setterpublic class Member { @Id ..
[SpringBoot] Entity 설계 - N:N 관계를 쓰면 안 되는 이유
·
BackEnd/SpringBoot
· 들어가며JPA를 처음 사용하면서 Entity 설계할 때 가장 쉽게 마주치게 되는 연관관계 중 하나가 N:N(다대다) 관계입니다. 쇼핑몰을 예시로 들 때,처음에는"회원은 여러 상품을 가질 수 있고,상품도 여러 회원과 연관될 수 있는데 N:N이 맞지 않나?"라는 생각이 자연스럽게 듭니다. JPA에서도 이를 위해 @ManyToMany를 제공하고 있기 때문에 별 의심 없이 사용하게 됩니다. 하지만 실무나 프로젝트를 진행하다 보면, N:N 관계는 거의 항상 문제가 됩니다. 이 글에서는왜 N:N 관계를 그대로 사용하면 안 되는지,그렇다면 어떻게 설계하는 게 좋은지 공부한 내용을 정리해 보겠습니다. · JPA에서의 N:N 관계JPA에서는 @ManyToMany 애노테이션을 통해 다대다 관계를 비교적 간단하게 표현할..
[SpringBoot] Entity 설계 시 생각해봐야 할것들
·
BackEnd/SpringBoot
· 들어가며개발을 공부하고, 실제로 프로젝트를 진행하다 보면항상 느끼게 되는 것이 하나 있습니다. 설계가 정말 중요하다!!! 설계가 제대로 되어 있지 않으면나중으로 갈수록 수정하기가 점점 힘들어지고,버그를 잡는 것 또한 훨씬 어려워지는 것 같습니다. 그래서 이번에는제가 공부하면서, 그리고 직접 실습해 보면서 느꼈던Entity를 설계할 때 반드시 한 번쯤 고민해 봐야 할 내용들을두고두고 다시 볼 수 있도록따로 정리해 두어야겠다고 생각했습니다. · 목차📌 Entity 설계 기본 원칙- N:N 관계를 쓰면 안 되는 이유- 연관관계의 주인과 mappedBy- 모든 연관관계는 LAZY로 시작해야 하는 이유- Cascade 옵션은 언제 써야 할까📌 Entity 상태 관리와 캡슐화- Entity에 Setter를..