- 연관관계 설정은 필수일까?2025년 03월 07일 15시 14분 22초에 업로드 된 글입니다.작성자: do_hyuk
성능개선을 위해 리팩토링을 진행하려다가 문득 JPA 연관관계 설정에 대해 다시 한 번 생각해보게 되었다.
현재 게시글과 회원의 연관관계는 다음과 같이 설정되어 있다.
//codePost.class @ManyToOne(fetch = FetchType.LAZY) @JoinColumn() private Member member;
codePost 조회 시 N+1 문제가 발생하는 것을 방지하기 위해 FetchType.LAZY(지연매핑)을 설정해놨다.
//member.class @OneToMany(mappedBy = "member", cascade = CascadeType.ALL, orphanRemoval = true) private List<CodePost> codePosts = new ArrayList<>();
또한 회원이 삭제될 경우 코드 게시글의 연관관계를 모두 끊고(CascadeType.ALL), 그로 인해 발생할 고아 객체들을 모두 삭제하기 위한 설정(orphanRemoval = true)도 해주었다.
이전에 작성했던 코드를 보니 문제점이 보인다..연관관계 삭제만을 위한건데 CascadeType.ALL로 설정한 것을 보니..CascadeType.Remove로 변경해야겠다.
하지만 Ori 서비스에 대해 회의한 결과 회원 탈퇴가 진행되어도 해당 회원이 작성했던 글은 사라지지 않고 유지되도록 하고, 회원의 닉네임이 변경되어도 회원이 작성했던 과거 글들의 작성자 닉네임은 수정되지 않게끔 결정했기 때문에 연관관계의 필요성이 모호해졌다.
그로 인해 연관관계의 필요성에 대해 좀 더 확실히 하고자 이 글을 적는다.
연관관계 필요한가?
결론적으로 말해서 연관관계가 필요했던 이유는 테이블에서의 외래키 설정을 객체끼리도 관계를 표현하기 위해서인데
post 테이블에 member 테이블의 외래키인 member_id 는 필요 없다고 판단되었기 때문에 연관관계 매핑을 끊기로 결정했다.
연관관계를 끊고 필요한 회원 정보를 테이블의 컬럼으로 추가시키는 방법으로 진행하겠다.
필요한 정보는 회원의 아이디, 이메일, 닉네임이 끝이다.
'포트폴리오 > AutoReview' 카테고리의 다른 글
배포된 데이터베이스의 스키마를 변경해보자(2) (0) 2025.03.15 배포된 데이터베이스의 스키마를 변경해보자(1) (0) 2025.03.11 K6로 토큰 인증 절차가 필요한 API 테스트 하기 (0) 2025.02.24 [feature] 댓글 공개 여부 기능 추가(1) (0) 2025.02.21 [feature] 댓글 기능 추가 (0) 2025.02.19 댓글