• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

외래키 생성 옵션이 있는지 궁급합니다

19.10.24 20:35 작성 조회수 340

0

안녕하세요

인프런 강의 잘 듣고 있습니다

강의 내용에서 조금 벗어나는 질문일수도 있으나 실무에서 많이 겪는 문제라고 생각하여 질문드립니다

유저 테이블(users)과 주문 테이블(orders)이 있고 주문테이블에서 manyToOne으로 유저 테이블이 매핑되어 있습니다

실무에서 유저가 탈퇴 시 DB에서는 어떻게 처리하는지 궁금합니다

    - 1) 외래키 제약조건이 있을 떄

             주문테이블 - 탈퇴한 유저의 주문 정보 모두 삭제

             유저테이블 - 주문테이블에서 탈퇴한 유저가 주문한 내역을 모두 삭제 후 유저 테이블에서 삭제

   - 2) 외래키 제약조건이 없을 때

             주문테이블 - 변경 없음 (삭제된 유저가 주문한 내역은 주문은 조회 되겠지만 주문한 유저는 조회 불가)

             유저테이블 - 유저 삭제

   - 3) 외래키 제약조건이 없을 때

             주문테이블 - 변경 없음 (주문 내역 조회 시 주문한 유저 조회 가능)

             유저테이블 - 유저 상태를 저장하는 필드를 따로 두고 탈퇴 상태로 플래그 변경

위 세가지 방식 중 하나를 선택해서 사용할 거 같은데 실무에서는 주로 어떻게 처리하는지 궁금합니다 

개인적으로 고민하는 방안은 2,3번 중 하나의 방식으로 처리를 하려고 하는데 이 때는 외래키 제약조건이 없어야 하기 때문에

JPA에서 DDL 생성 시 상대 테이블의 PK를 참조하는 컬럼은 생성하면서 외래키 제약조건은 생성하지 않는 방법이 있는지 알고 싶습니다

 

답변 2

·

답변을 작성해보세요.

0

jhwoo님의 프로필

jhwoo

질문자

2019.10.25

답변 감사드립니다 ^^

0

안녕하세요 jhwoo님^^

좋은 질문입니다.

먼저 1,2,3을 다 걱정하지 않으셔도 됩니다^^

JPA에서 DDL 생성 시 외래 키 제약조건을 생성하지 않는 방법도 고민하지 않으셔도 됩니다^^

실무에서는 개발이나, 운영 데이터베이스에 DDL을 반영할 때 JPA가 자동 생성해주는 기능을 그대로 사용하면 안됩니다.

해당 DDL을 참고하는 정도로만 사용하고, 가급적이면 DDL을 직접 확인하고 다듬어서 DB에 반영해야 합니다.

그리고 이때 외래키 제약조건이 필요하면 DDL을 함께 반영하고, 필요하지 않으면 반영하지 않으면 됩니다!

그럼 탈퇴시에 유저를 정말 삭제하는가? 라고 하면 실무에서는 대부분의 테이블을 삭제하지 않습니다. 외래키 제약조건이 있든, 없든간에 주로 플래그 처리만 합니다. 탈퇴한 회원을 복구하거나, 과거 데이터를 찾아야 하는 상황이 많은데, 데이터가 지워지면 확인할 방법이 없어서 큰일납니닷! ㅎㅎ (심지어 법적으로 이슈가 될 수 있습니다.)

추가로 법적으로 개인정보 이슈 때문에 휴먼회원 등등의 정책에 따라서 회원 데이터를 따로 이관해야 하는 경우도 있는데, 이것은 관련 데이터를 모두 옮겨야해서 논외로 하겠습니다.

감사합니다^^