개발 지식 - DB에서 '진짜' 값을 삭제하면 안되는 이유.

이유승·2023년 7월 19일
0

개발 지식

목록 보기
1/29

데이터베이스에서 데이터를 '삭제'해야한다.

삭제라는 것은 어떤 것을 완전히 지워버린다는 뜻이지만, 웹 개발에서 '삭제'라는 개념은 대단히 조심스럽게 사용해야하는 것이다.

물리적? 논리적?

삭제에는 2가지 방법이 존재한다. 물리적 삭제와 논리적 삭제.

물리적 삭제라는 것은 '삭제'라는 단어의 뜻에 부합하는, 데이터를 정말로 지워버리는 것.

논리적 삭제는 삭제하려는 데이터에 'isDelete'와 같은 필드를 하나 추가해서, 이 데이터는 삭제되었다는 꼬리표만 붙여놓고 진짜 지우지는 않는 방법이다.

물리적 삭제는 위험하다..

1. 진짜 지워버리면 복구할 수가 없다.

어느 데이터를 삭제했는데, 알고보니 이게 지우면 안되는 것이었다?

가령 쇼핑몰을 운영하는데, 주문 정보나 결제 정보같은 것을 실수로 삭제했다고 가정해보자.

당장 고객이 돈을 지불했는데, 뭘 주문했는지 모르거나 / 결제를 한 사실도 모를 수 있다. 물리적 삭제를 감행해버렸으니 데이터 복구는 대단히 어렵거나 불가능하다. 재앙과 같은 일이 벌어진 것.

그런데 논리적 삭제에서는 'isDelete'만 true 처리된 것일 뿐, 실제 데이터는 그대로 남아있기 때문에 언제든 되살릴 수 있다.

2. 데이터베이스의 데이터들은 서로 연결되어있다.

데이터베이스에 존재하는 수많은 데이터들은 PK, FK 등의 개념으로 연결되어있다.

그런데 어느 데이터가 물리적 삭제를 당하면? PK/FK 문제로 에러가 발생하면 다행이고, 데이터 사이의 참조 관계에 손상이 발생한다면 전체 서비스가 멈춰버릴 수도 있는 심각한 사태로 발전할 수도 있다.

논리적 삭제 방법은 이 문제에서도 안전하다. 데이터는 여전히 남아있기 때문.

3. 물리적 삭제는 자원이 더 필요해..

데이터베이스에서 데이터를 삭제하는 것은 쉽다.

다만 SQL문을 사용하는 사용자 입장에서야 마냥 쉽지, RDBMS에서 삭제 작업은 일정한 자원을 필요로 하는 일이다. 삭제 대상이 많을 수록 데이터베이스에서 소모하는 자원이 증가하는 것은 당연한 일.

이에 대하면 논리적 삭제는 데이터 필드 하나를 변경해주는 일이라, 상대적으로 자원 소모가 적다. 성능 유지 측면에서 더 유리한 것.



그렇다면?

논리적 삭제!

데이터 테이블 내부에 'isDelete' 필드를 추가하는 등의 방법으로 논리적 삭제 방식을 적용하면 된다. 논리적 삭제 방식에서는 데이터가 삭제된 것처럼 보이지만, 실제로는 안전하게 보관되기 때문에 필요 시 복구하거나 추적할 수 있다.

실제 상용 서비스에서도 계정을 삭제하거나 탈퇴하였다고 계정 데이터를 물리적으로 지우기보다는 일정 기간 동안에 논리적 삭제 방식으로 데이터를 보존시켜둔다. 추후 복구가 필요할 경우를 대비해두는 것이다. (물론 일정 기간이 경과하면 그때는 물리적으로 삭제해버린다.)

profile
프론트엔드 개발자를 준비하고 있습니다.

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

덕분에 좋은 정보 얻어갑니다, 감사합니다.

답글 달기