# 19강. 물리삭제와 논리삭제
데이터 삭제 방법에는 물리삭제와 논리삭제가 있습니다.

- 데이터베이스에서 데이터를 삭제하는 방법은 용도에 따라 크게 `물리삭제`와 `논리삭제`의 두가지로 나뉜다.
- 하지만 물리삭제와 논리삭제는 전용 SQL 명령이 따로 존재하지 않는다.
- 지금부터 설명할 내용은 SQL 명령에 관한 해설이라기보다는 시스템 설계 분야에 관한 것으로, 시스템을 구축할 때 자주 사용한느 말이기도 하다.

---

## 1. 두 종류의 삭제방법
- 데이터베이스에서 데이터를 삭제할 때는 물리삭제와 논리삭제의 두 가지 방법을 고려할 수 있다.
- 단, 이는 SQL 명령이 두 가지 존재한다는 의미가 아니다. 데이터를 삭제하는 데에 두 가지 사고 방식이 있다고 이해하면 쉽다.
- 먼저, 물리삭제는 SQL의 `DELETE` 명령을 사용해 직접 데이터를 삭제하자는 사고 방식이다.
- 삭제 대상 데이터는 필요없는 데이터이므로 `DELETE` 명령을 실행해서 테이블에서 삭제해버리자, 라는 지극히 자연스러운 발상에 의한 삭제방법을 말한다.
- 한편 논리삭제의 경우, 테이블에 `삭제플래그`와 같은 열을 미리 준비해 둔다.
- 즉, 테이블에서 실제로 행을 삭제하는 대신, `UPDATE` 명령을 이용해 `삭제플래그`의 값을 유효하게 갱신해두자는 발상에 의한 삭제방법을 말한다.
- 실제 테이블 안에 데이터는 남아있지만, 참조할 때에는 `삭제플래기`가 삭제로 설정된 행을 제외하는 `SELECT` 명령을 실행한다. 결과적으로는 해당 행이 삭제된 것처럼 보인다.
- 논리삭제는 삭제플래그를 사용하는 방법 이외에도 여러 가지 방법이 있다. 하지만 일반적으로는 삭제플래그를 사용해서 논리삭제를 구현한다.
- 논리삭제의 장점으로는 데이터를 삭제하지 않기 때문에 삭제되기 전의 상태로 간단히 되돌릴 수 있다는 것을 꼽을 수 있다.
- 한편 단점으로는 삭제해도 데이터베이스의 저장공간이 늘어나지 않는 점, 그리고 데이터베이스의 크기가 증가함에 따라 검색속도가 떨어지는 점을 들 수 있다.
- 뿐만 아니라 애플리케이션 측 프로그램에서는 삭제임에도 불구하고 `UPDATE` 명령을 실행하므로 혼란을 야기하기도 한다.

---

## 2. 삭제방법 선택하기
- 시스템의 특성이나 테이블에 저장되어 있는 데이터의 특성에 따라 다르기 때문에 단정지어 삭제방법을 말할 수는 없다.
- 예를 들어 SNS 서비스처럼 사용자의 개인정보를 다루는 시스템에서는 사용자가 탈퇴한 경우 데이터를 삭제한다. 이때 개인정보를 취급하는 마스터 테이블에서 삭제할 경우에는 물리삭제를 하는 편이 안전할 것이다. 개인정보의 유출을 미연에 방지하는 측면에서도 좋은 선택이라 할 수 있다.
- 반면, 쇼핑 사이트의 경우는 사용자가 주문을 취소할 경우에도 데이터를 삭제한다. 이러한 경우에는 논리삭제 방법을 많이 사용한다. 주문이 취소되었다고 해도 발주는 된 것으로, 해당 정보가 완전히 불필요한 것이라고는 말할 수 없다. 이러한 데이터는 특히 주문 관련 통계를 낼 때 유용하게 사용할 수 있기 때문이다.
- 한편으로는 하드웨어의 제한으로 인해 물리삭제를 할 수밖에 없는 경우도 있다. 논리삭제로는 실제로 데이터가 삭제되지 않기 때문에 데이터베이스의 사용량은 줄어들지 않으며, 오히려 일방적으로 늘어난다. 이때 저장공간이 작다면 가능한 한 용량이 모자라지 않도록 운용할 필요가 있고 결국, 물리삭제 방법으로 데이터를 지운다.
- 물리삭제와 논리삭제는 어느 쪽이 좋은지 따지기보다는 상황에 따라 용도에 맞게 데이터 삭제 방법을 선택하는 것이 중요하다.

##### 물리삭제와 논리삭제는 용도에 맞게 선택한다!

---