강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

gusdn85554님의 프로필 이미지
gusdn85554

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

재질문 있습니다!

작성

·

227

0

안녕하세요 영한님 서포터즈님

제가 QnA 댓글에 재질문을 올렸는데 다른 글에서 재질문 시 메일이 전송되지 않아 확인이 어렵다는 글을 본적이 있어서 혹시나 다시 올려봅니다!!

질문 : https://www.inflearn.com/questions/373305?re_comment_id=155118

예를 들어 제가 "A" 길드를 만듭니다. 길드이름은 유니크 속성, 길드와 member가 연관관계 맺어져있는 상황입니다.

당연히 말씀하신 길드를 "하드 삭제" 하게 되면  외래키 무결성 제약조건(멤버의 외래키는 길드 id인데 길드가 없어지므로)이 위배됩니다. 

그래서 말씀하신 소프트 삭제를 하게 됩니다. 그렇다면 DB에 아직까지 길드의 이름이 남아있겠죠?

그렇다면 다시 길드를 만들 때 A라는 길드를 만들고 싶은데 DB에 현재 존재하기 때문에 만들 수 없습니다.

이 때,  길드를 삭제하면 "DUMMYGUILD" + id 로 길드이름을 바꿔서 저장하는 방법을 생각했는데 이게 옳은 방법일까요?? 이 방법을 사용하게 되면 누가 고의적으로 DUMMYGUILD을 만들고 싶다할 때 오류가 생길 것 같은데.. 해결방법이 궁금합니다 ㅠㅠ

 

또, 소프트 삭제할 경우 DB에 계속 쌓이는데 이게 문제가 없나요??

언제 한 번 싹 청소해주듯이 해줄 때가 있는건가요?

관련 검색어라도 알려주시면 감사드립니다!!

감사합니다

답변 2

2

gusdn85554님의 프로필 이미지
gusdn85554
질문자

안녕하세요 codesweaver님

계속되는 꼬리질문에 정성스러운 답변 감사드립니다

데이터를 어떻게 관리하냐에 대한 것도 정말 많은 생각과 해결 방안이 있는 것을 배울 수 있었습니다.

또한, 실무에 빗대어 말씀해주시니 이해가 더 잘됐습니다.

답변해주신 내용들을 조합해서 프로젝트를 진행하면서 다시 한 번 생각해보겠습니다.

답변 감사합니다 ㅎㅎ 즐거운 크리스마스 되세요

 

감사합니다!

행복한 연휴 되시고 새해 복 많이 받으세요!

0

안녕하세요, gusdn85554 님. 공식 서포터즈 codesweaver 입니다.

.

결론부터 말씀드리면, 키로써 한 번 생성된 값은 임의로 변경하지 않는게 좋습니다. 삭제가 무결성 원칙을 깰 위험이 있듯, 변경또한 무결성 원칙을 깰 위험이 있습니다. 키가 참조되고 있는 모든 곳의 업데이트가 동시에 이루어짐을 보장할 수 있어야 하기 때문입니다. 그리고 길드 삭제 시 일정한 패턴으로 길드명을 변경하는 방법의 경우, 말씀하신 것처럼 누군가가 하필 그 패턴에 맞는 길드명을 가지고 있을 경우 문제가 발생할 수 있고, 또 한 아이디를 가진 사람이 두 번 이상 길드를 삭제하면 문제가 될 여지가 있습니다.

.

그러나 그렇다고 한번 생성된 키를 절대 지우지 못하거나 변경할 수 없다는 것은 아닙니다. 가령 회원정보의 경우 개인정보 관리법에 의해 장기 미접속자의 경우 회원테이블과 별도의 테이블로 회원정보를 보관해야 하며, 사용자에게 장기 미접속 상황임을 알려야 하는 등의 의무가 있습니다. 그리고 장기 미접속 기간이 지속되면 이를 최종적으로 삭제처리 해야 합니다. 이 처럼 정말 필요한 상황이라면 데이터를 하드 삭제하기도 합니다. 길드명을 재활용 할 필요가 강력하게 있다면, 기존 데이터를 하드 삭제하는 것도 고려해야 합니다.

.

데이터가 계속 늘어나는 문제에 관해 예전에 있던 회사의 경우를 말씀드리면, 회사 창업 초창기부터 5년 이상 누적된 주문데이터 양이 방대해서 이를 old 테이블로 이전, 새로운 주문 테이블을 생성하여 최근 1년치의 주문 정보만을 옮겨놓았습니다. 1년이 지난 주문을 검색하고 싶은 경우 사용자가 검색 옵션에 추가 체크를 하도록해서 과거의 주문을 조회하도록 처리하기도 했습니다. 

.

감사합니다.

 

gusdn85554님의 프로필 이미지
gusdn85554

작성한 질문수

질문하기