데이터 무결성이 중요한 이유
어느 날, 당신이 쇼핑몰의 월별 매출 보고서를 뽑았는데, 총매출액이 마이너스(-)로 나왔다고 상상해 보자. 황급히 원본 데이터를 살펴보니, 누군가의 실수 혹은 프로그램 버그로 인해 상품의 가격(price)에 "음수 값"이 들어가 있거나, 주문 수량(quantity)에 "-1"이 입력된 것을 발견했다. 또 다른 예로, 분명히 우리 쇼핑몰의 전체 고객은 "5명"인데, orders 테이블에는 존재하지도 않는 "user_id = 99번" 고
객의 주문 기록이 남아있다.
이런 말도 안 되는 데이터, 현실 세계에서는 결코 존재할 수 없는 데이터를 우리는 "쓰레기 데이터(Garbage Data)"라고 부른다.
쓰레기 데이터가 초래하는 재앙
- 잘못된 비즈니스 결정: 매출액이 음수로 찍힌 보고서를 믿고 다음 달 사업 계획을 세울 수는 없다.
- 치명적인 시스템 오류: 애플리케이션 코드는 상품 가격이 항상 양수일 것이라고 가정하고 만들어졌는데, 음수 가격을 마주치는 순간 예외를 발생시키며 멈춰버릴 수 있다.
- 데이터 불일치: users 테이블에서는 탈퇴한 고객을 삭제했는데, orders 테이블에는 그 고객의 주문 기록이 그대로 남아 "주인 없는 주문"이라는 유령 데이터가 되어 떠돌아다닌다.
그렇다면 이 쓰레기 데이터가 애초에 데이터베이스에 저장되지 못하도록 막을 책임은 누구에게 있을까? 물론 데이터를 입력하는 애플리케이션(웹사이트, 앱 등)에서 1차적으로 검증해야 한다. 하지만 그것만으로는 충분하지 않다.
- 애플리케이션에 미처 발견하지 못한 버그가 있을 수 있다.
- 여러 다른 종류의 애플리케이션이 하나의 데이터베이스에 접근할 수도 있다.
- 개발자나 관리자가 데이터베이스에 직접 접속해서 데이터를 수정할 수도 있다.
따라서 우리는 데이터베이스를 데이터를 지키는 최후의 보루로 만들어야 한다. 어떤 경로로 데이터 변경 요청이 들어오든, 데이터베이스 스스로가 말도 안 되는 값은 거부하고 데이터의 정확성과 일관성을 지킬 수 있도록 규칙을 설정해야 한다.
이렇게 데이터의 정확성, 일관성, 유효성을 유지하려는 성질을 데이터 무결성(Data Integrity)이라고 부른다.
그리고 이 데이터 무결성을 강제하기 위해, 테이블의 특정 컬럼에 설정하는 규칙이 바로 제약 조건(Constraints)이다.
제약 조건(Constraints)의 역할
제약 조건은 테이블에 데이터를 INSERT, UPDATE, DELETE 할 때, "이 규칙을 어기면 절대 안 돼!" 라고 외치는 문지기와 같다.
- price 컬럼에는 "0" 이상의 값만 받도록 규칙을 정하고, 음수 값을 넣으려는 시도는 거부한다.
- email 컬럼에는 중복된 값이 들어올 수 없도록 규칙을 정하고, 이미 가입된 이메일은 거부한다.
- orders 테이블의 "user_id"는 반드시 users 테이블에 존재하는 "user_id" 값만 받도록 규칙을 정하고, 유령 회원의 주문은 거부한다.
제약 조건을 잘 설정해 둔 데이터베이스는 애플리케이션의 버그나 사용자의 실수로부터 데이터를 지켜내는 튼튼한 성벽이 된다.
'데이터 베이스 > 데이터베이스 기본' 카테고리의 다른 글
| Ch08. 데이터 무결성 - 외래 키 제약 조건 (0) | 2026.06.08 |
|---|---|
| Ch08. 데이터 무결성 - 기본 키 제약 조건 (0) | 2026.06.08 |
| Ch07. 인덱스 - 복합 인덱스 정리 (0) | 2026.06.07 |
| Ch07. 인덱스 - 복합 인덱스(3) (0) | 2026.06.07 |
| Ch07. 인덱스 - 복합 인덱스(2) (0) | 2026.06.07 |