의문점
기존 데이터베이스에 저장된 데이터를 삭제 할 때, delete 쿼리로 데이터를 삭제하는 물리 삭제 (hard delete) 방식과 구분자를 추가 해줘서 실제로 데이터베이스에는 삭제를 안 하고 구분자의 값만 바꾸는 논리 삭제 (soft delete) 방식이 있는데, 어떠한 방식을 사용하는게 더 좋은가에 대하여 의문점이 들었다.
물리 삭제 (hard delete)
이 방식은 이름 그대로, 데이터베이스에서 삭제하고자 하는 데이터의 행을 delete 쿼리를 사용하여 지우는 것이다.
- 장점
1. 데이터를 조회 할 때, 불필요한 where 절을 따로 추가 해줄 필요가 없어서, 조회가 간단하고 속도가 빠르다.
- 데이터를 실제로 삭제하기 때문에 데이터베이스의 용량이 매우 커지는 것을 방지한다.
- 단점
1. 데이터를 실제로 삭제 해서 데이터의 복구가 불가하다.
- 연관 관계로 이어진 테이블들에서는 외래 키 제약 조건에 의해 사용하기 불편하다.
논리 삭제 (soft delete)
이 방식은 기존 데이터베이스에 구분자를 추가해줘서 삭제를 할 때, 구분자의 값을 바꾸는 방식이다.
- 장점
1. 삭제 할 때, 구분자의 값만 바꿔주기 때문에 데이터의 복구가 가능하다.
- update 쿼리가 delete 쿼리보다 마이크로 초 단위로 더 빠르다.
- 연관 관계로 이어진 테이블들에서는 사용하기 더 간단하다.
- 단점
1. 데이터를 조회 할 때, where 절을 따로 추가 해줘야 하기 때문에, 조회가 복잡해지고 속도가 느려진다.
- 데이터베이스의 용량이 계속하여 커진다.
결론
간단하게 말하자면,데이터가 삭제가 되더라도 데이터가 남아있어야하는 테이블에서는 soft delete 형식을 사용하는 것이 더 좋다. 나중에 데이터를 복구 할 수 있기 때문이다. 또한, 연관 관계가 복잡하게 이어진 테이블에서도 soft delete 방식이 더 좋을 수 있다.
하지만, 데이터들이 삭제되고 남겨지지 않아도 문제 없는 테이블에서는 hard delete 방식이 더 좋을 수 있다.
결국에는 서비스 운영에 따라서 어떠한 방식을 사용하는지 달라진다.
서비스가 어떻게 운영되는지 확인하고, 각 테이블에 맞는 방식으로 정해주자.