[인프런 워밍업 클럽 스터디] 10일차 - 객체지향과 JPA 연관관계

image

[1 : 1 관계]

[연관관계의 주인]

  • Table을 보았을 때 누가 관계의 주도권을 가지고 있는가

  • 연관관계의 주인이 아닌 쪽에 mappedBy 옵션을 달아 주어야 한다.

  • 연관관계의 주인의 값이 설정되어야만 진정한 데이터가 저장된다.

  • 객체가 연결되는 기준이 된다.

     

[연관관계의 주인 효과]

  1. 상대 테이블을 참조하고 있으면 연관관계의 주인

  2. 연관관계의 주인이 아니면 mappedBy를 사용

  3. 연관관계의 주인의 setter가 사용되어야만 테이블 연결

 

[N : 1 관계] - @ManyToOne 과 @OneTOMany

@JoinColumn

  • 연관관계의 주인이 활용할 수 있는 어노테이션.

  • 필드의 이름이나 null 여부, 유일성 여부, 업데이트 여부 등을 지정

 

[N : M 관계] - @ManyToMany

구조가 봅잡하고, 테이블이 직관적으로 매핑되지 않아 사용하지 않는 것을 추천

 

  • cascade 옵션 : 한 객체가 저장되거나 삭제될 때, 그 변경이 폭포처럼 흘러 연결되어 있는 객체도 함께 저장되거나 삭제되는 기능

  • orphanRemoval 옵션

    : 객체간의 관계가 끊어진 데이터를 자동으로 제거하는 옵션

 

 

[연관관계 정리]

  1. 상대 테이블을 가리키는 테이블이 연관관계의 주인이다. 연관관계의 주인이 아닌 객체는 mappedBy를 통해 주인에게 매여 있음을 표히새 주어야 한다.

  2. 양쪽 모두 연관관계를 갖고 있을 때는 양쪽 모두 한 번에 맺어주는게 좋다.

  3. cascade 옵션을 활용하면, 저장이나 삭제를 할 때 연관관계에 놓인 테이블까지 함께 저장 또는 삭제가 이루어진다.

  4. orphanRemoval 옵션을 활용하면, 연관관계가 끊어진 데이터를 자동으로 제거해준다.

 

 

[연관관계를 사용하면 무엇이 좋을까?]

  1. 각자의 역할에 집중하게 된다.(응집성)

  2. 새로운 개발자가 코드를 읽을 때 이해하기 쉬워진다.

  3. 테스트 코드 작성이 쉬워진다.

[연관관계를 사용하는 것이 항상 좋을까?]

  • 지나치게 사용하면, 성능상의 문제가 생길 수도 있고 도메인 간의 복잡한 연결로 인해 시스템을 파악하기 어려워질 수 있다.

  • 또한 너무 얽혀 있으면, A를 수정했을 때 B, C, D 까지 영향을 받을 수 있다.

  • 그렇기 때문에 비즈니스 요구사항, 기술적인 요구사항, 도메인 아키텍처 등 여러 부분을 고민해서 연관관계 사용을 선택해야 한다.

     


 

Section 5. 정리

  1. 책 생성, 대출, 반납 API를 온전히 개발하며 지금까지 다루었던 모든 개념을 실습해본다.

  2. 객체지향적으로 설계하기 위한 연관관계를 이해하고, 연관관계의 다양한 옵션에 대해 이해한다.

  3. JPA에서 연관관계를 매핑하는 방법을 이해하고, 연관관계를 사용해 개발할 때와 사용하지 않고 개발할 때의 차이점을 이해한다.

 

 

 

댓글을 작성해보세요.