DB 데이터를 변경할 때 사용하는 보험들 (UPDATE, DELETE)
DB에 담긴 로우 데이터를 변경할 때 안전하게 조치하는 방법을 서술한다.
근래 들어, 일하면서 특정 조건에 해당하는 고객데이터를 수정할 일이 많았다. DB 데이터를 변경하게 되는 UPDATE/DELETE 쿼리 문은 사용할 때 항상 조심스럽다. 트랜잭션을 마친 데이터는 DB에서의 복구가 불가능하며, 백업본으로 복구하는 것 밖에는 방법이 없기 때문이다. (백업본마저 없다면 애도를 표한다 …)
따라서 여러 개의 데이터를 변경할 경우에는, 잘못된 변경에 대한 복구가 가능하도록 보험을 들어놓고 시도하는 것이 안전하다. 아래는 데이터를 잘못 변경하더라도 복구할 수 있는 보편적인 방법들이다.
- DB 백업
- 트랜잭션
나는 백업과 트랜잭션을 조합해서 다음과 같이 사용한다.
- (테스트 DB에서) 트랜잭션을 이용해, UPDATE/DELETE 쿼리문을 실행하고 롤백해보면서 개발한다.
- (라이브 DB 반영시) 라이브 DB 스냅샷 떠서 백업본을 만들고, 트랜잭션을 거쳐 업데이트를 실행한다.
- 업데이트 결과가 적절한지 확인한다.
- affected rows를 체크
- SELECT 문을 실행하여 해당 데이터들이 의도한데로 수정된지 확인 후 COMMIT
- 업데이트 결과가 적절한지 확인한다.
- 라이브 배포
지금까지 DB 데이터를 안전하게 변경하는 방법에 대해서 알아보았다. 백업과 트랜잭션을 사용하는 방법에 대한 내용은 다음 글에서 다룰 예정이다.