inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 ORM 표준 JPA 프로그래밍 - 기본편

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

해결된 질문

611

jhwoo

작성한 질문수 6

0

안녕하세요

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

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

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

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

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

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

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

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

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

             유저테이블 - 유저 삭제

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

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

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

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

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

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

 

JPA java

답변 2

0

jhwoo

답변 감사드립니다 ^^

0

김영한

안녕하세요 jhwoo님^^

좋은 질문입니다.

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

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

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

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

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

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

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

감사합니다^^

inheritance startegy 선택시 고려사항

0

2

0

Entity 동등성 비교

0

10

1

실무 조언 관련 질문입니다.

0

41

1

H2데이터베이스 파일 생성

0

51

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

49

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

48

1

JPQL 메소드와 락

0

52

1

Delivery @OneToOne

0

57

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

89

2

UnsupportedOperationException 발생

0

82

3

H2 Database 연결이 안됩니다.

0

89

2

연관관계 매핑 질문드립니다.

0

82

2

h2데이터베이스 실행오류

0

105

2

persistence.xml

0

103

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

77

1

영속성 컨텍스트

0

62

1

JPA 프록시

0

90

1

Native Query와 MyBatis

0

63

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

83

1

임베디드 타입 예시 코드 관련 질문

0

112

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

90

3

인텔리제이 패키지 커서 단축키 질문

0

106

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

136

1

양방향 연관관계 시 연관관계 주인을 설정하는 이유

0

68

1