SQL 데이터베이스에 대해 제대로 알자(6) - 논리삭제와 물리삭제

BackEnd

지난포스팅 목록

 

1편(데이터베이스)

2편(조건조합)
3편(정렬)

4편(연산)

5편(추가,삭제,갱신)에 이어서 6편에서는 물리삭제와 논리삭제에 대해 배워보자

<물리삭제와 논리삭제>

 

이번에는 데이터 삭제 방법인 물리삭제와 논리삭제에 대해 알아보자

 

데이터베이스에서 데이터를 삭제하는 방법은 용도에 따라 크게 '물리삭제'와 '논리삭제'의 두 가지로 나뉜다.

 

하지만 물리삭제와 논리삭제는 전용 SQL 명령이 따로 존재하지 않는다.

 

지금부터 설명할 내용은 SQL 명령에 관한 해설이라기보다는 시스템 설계 분야에 관한 것으로, 

시스템을 구축할 때 자주 사용하는 말이기도 하다. 그럼 자세히 알아보자

 

두 종류의 삭제방법

 

데이터베이스에서 데이터를 삭제할 때는 물리삭제와 논리삭제의 두 가지 방법을 고려할 수 있다. 

단, 이는 SQL 명령이 두 가지 존재한다는 의미가 아니다.

 

데이터를 삭제하는 데에 두 가지 사고 방식이 있다고 이해하면 쉽다.

 

먼저, 물리삭제는 SQL DELETE 명령을 사용해서 직접 데이터를 삭제하자는 사고 방식이다. 

 

삭제 대상 데이터는 필요없는 데이터이므로 DELETE 명령을 실행해서 테이블에서 삭제해버리자, 라는 지극히 자연스러운 발상에 의한 삭제방법이다.

 

한편 논리삭제의 경우, 테이블에 '삭제플래그'와 같은 열을 미리 준비해둔다.

 

즉, 테이블에서 실제로 행을 삭제하는 대신, UPDATE 명령을 이용해 '삭제플래그'의 값을 유효하게 갱신해두자는 발상에 의한 삭제방법을 말한다.

 

실제 테이블 안에 데이터는 남아있지만, 참조할 때에는 '삭제플래그'가 삭제로 설정된 행을 제외하는 SELECT 명령을 실행한다.

 

결과적으로는 해당 행이 삭제된 것처럼 보인다.

 

사실 논리삭제는 삭제플래그를 사용하는 방법 이외에도 여러 가지 방법이 있다.

 

설계하는 사람에 따라 다르므로 얼마든지 방법은 다양하다. 하지만 일반적으로는 삭제플래그를 사용해서 논리삭제를 구현한다.

 

논리삭제 = 삭제한 것으로 가정하기

 

UPDATE로 삭제플래그 열의 값을 0에서 1로 갱신 

조회할 때에는 

 

SELECT FROM XXXX WHERE 삭제플래그<>1 로 검색

 

논리삭제의 장점으로는 데이터를 삭제하지 않기 때문에 삭제되기 전의 상태로 간단히 되돌릴 수 있다는 것을 꼽을 수 있다.

 

한편 단점으로는 삭제해도 데이터베이스의 저장공간이 늘지 않는 점, 그리고 데이터베이스의 크기가 증가함에 따라 검색속도가 떨어지는 점을 들 수 있다. 뿐만 아니라 애플리케이션 측 프로그램에서는 삭제임에도 불구하고 UPDATE 명령을 실행하므로 혼란을 야기하기도 한다.

 

삭제방법 선택하기

 

어떤 방법으로 삭제할 것인지는 시스템의 특성이나 테이블에 저장되어 있는 데이터의 특성에 따라 다르기 때문에 단정지어 말할 수는 없다.

상황에 맞게 선택해야한다.

 

예를 들어 SNS 서비스처럼 사용자의 개인정보를 다루는 시스템에서는 사용자가 탈퇴한 경우 데이터를 삭제한다. 이때 개인정보를 취급하는 마스터 테이블에서 삭제할 경우에는 물리삭제를 하는 편이 안전하다.

 

개인정보 유출을 미연에 방지하는 측면에서도 좋은 선택이라고 할 수 있다.

 

반면, 쇼핑 사이트의 경우는 사용자가 주문을 취소할 경우에도 데이터를 삭제한다. 이러한 경우에는 논리삭제 방법을 많이 사용한다.

 

주문이 취소되었다고 해도 발주는 된 것으로, 해당 정보가 완전히 불필요한 것이라고 말할 수 없기 때문이다.

이러한 데이터는 특히 주문 관련 통계를 낼 때 유용하게 사용할 수 있기 때문이다.

 

한편으로는 하드웨어의 제한으로 인해 물리삭제를 할 수 밖에 없는 경우도 있을 것이다.

 

논리삭제로는 실제로 데이터가 삭제되지 않기 때문에 데이터베이스의 사용량은 줄어들지 않으며, 오히려 일방적으로 늘어난다.

이때 저장공간이 작다면 가능한 한 용량이 모자라지 않도록 운용할 필요가 있다. 결국 물리삭제 방법으로 데이터를 지운다.

 

이렇게 물리삭제와 논리삭제는 어느 쪽이 좋은지 따지기 보다는 상황에 따라 용도에 맞게 데이터 삭제 방법을 선택하는 것이 중요하다.

 

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

 

여기까지 물리삭제와 논리삭제가 무엇인지 개념적으로 알아봤다.

 

아무래도 기본을 다지는 상황이다보니 설명이 부족한 부분도 있을 것이다. 

 

기본적으로 알아야할 개념만 잡았다고 생각하고 아 이런것이 있구나! 라는 것 정도는 터득했다고 생각한다.

 

7편에서는 집계와 서브쿼리에 대해 알아보도록 하자!

 

 

 

모든 포스팅에 대한 내용은 도서 SQL첫걸음에서 익히고 배운 것들에 대한 내용을 직접 타이핑 하였음을 밝힙니다.