데이터 베이스/데이터베이스 기본

Ch08. 데이터 무결성 - 데이터 무결성이 중요한 이유

webmaster 2026. 6. 7. 19:40

데이터 무결성이 중요한 이유

어느 , 당신이 쇼핑몰의 월별 매출 보고서를 뽑았는데, 총매출액이 마이너스(-) 나왔다고 상상해 보자. 황급히 원본 데이터를 살펴보니, 누군가의 실수 혹은 프로그램 버그로 인해 상품의 가격(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" 값만 받도록 규칙을 정하고, 회원의 주문은 거부한다.

제약 조건을 설정해 데이터베이스는 애플리케이션의 버그나 사용자의 실수로부터 데이터를 지켜내는 튼튼한 성벽이 된다.