사용자 정의 무결성 (User-defined Integrity) - 업무 규칙에 따른 제약

핵심 인사이트 (3줄 요약)

  1. 본질: 사용자 정의 무결성은 기본키, 외래키, 도메인 무결성만으로는 막지 못하는 업무 규칙을 DBMS (Database Management System)에 강제하는 규칙이다.
  2. 가치: CHECK 제약조건은 단순 조건에 강하고, TRIGGER는 행·테이블을 넘는 복합 규칙에 강하다.
  3. 판단 포인트: 규칙이 단순하면 CHECK, 복잡하거나 감사·연쇄 처리가 필요하면 TRIGGER를 쓰되 부작용을 최소화해야 한다.

Ⅰ. 개요 및 필요성

사용자 정의 무결성은 "이 회사의 규칙"을 데이터베이스가 대신 지키게 하는 장치다. 예를 들어 휴가 종료일이 시작일보다 빨라서는 안 되고, 재고는 음수가 될 수 없으며, 한 주문이 승인 없이 다시 상태를 바꾸면 안 된다. 이런 규칙은 표준 무결성만으로는 충분히 표현되지 않는다.

애플리케이션 코드만 믿으면 배치 프로그램, 관리자 스크립트, 외부 연동이 규칙을 우회할 수 있다. 그래서 중요한 업무 규칙은 DB 레벨에 내려서 강제하는 편이 더 안전하다.

📢 섹션 요약 비유: 출입문에 "모자 쓰지 마세요"라고만 쓰는 것이 아니라, 문지기가 실제로 막아야 규칙이 지켜진다.


Ⅱ. 아키텍처 및 핵심 원리

DML (Data Manipulation Language) 문이 들어오면 DB는 제약조건을 먼저 검사하고, 필요하면 TRIGGER를 실행한 뒤 성공하면 COMMIT, 실패하면 ROLLBACK한다. 핵심은 "들어오기 전에 막을지", "들어온 뒤에 처리할지"를 구분하는 것이다.

방식강점한계적합한 규칙
CHECK단순하고 선언적다른 테이블 참조 어려움나이, 범위, 상태값
TRIGGER복합 규칙, 로그 처리 가능성능, 디버깅, 재귀 위험재고, 감사 로그, 연쇄 검증
ASSERTION표준 개념DBMS 지원이 약함전역 규칙
INSERT / UPDATE
    │
    ▼
CHECK 검사
    │
    ├─ 통과 ─▶ TRIGGER 실행(필요 시)
    │                │
    │                ├─ 추가 검증
    │                └─ 감사 로그 / 연쇄 처리
    │
    └─ 실패 ─▶ ROLLBACK

CHECK는 선언형이라 읽기 쉽고, TRIGGER는 절차형이라 더 많은 일을 할 수 있다. 대신 TRIGGER는 사이드 이펙트가 생기기 쉬우므로 규칙을 단순화하고 오류 메시지를 명확히 해야 한다.

📢 섹션 요약 비유: 간단한 규칙은 표지판으로 충분하지만, 복잡한 규칙은 경비원이 직접 확인해야 한다.


Ⅲ. 비교 및 연결

사용자 정의 무결성은 개체 무결성, 참조 무결성, 도메인 무결성과 같은 기본 무결성을 보완한다. 기본 무결성이 "누가 누구인가"를 지키는 규칙이라면, 사용자 정의 무결성은 "우리 조직에서는 어떻게 해야 하는가"를 지키는 규칙이다.

애플리케이션 레벨 검증은 사용자 경험이 좋지만, 우회될 수 있다. DB 레벨 검증은 강제력이 높지만, 규칙이 복잡하면 유지보수가 어려워진다. 따라서 둘은 경쟁 관계가 아니라 역할 분담 관계다.

📢 섹션 요약 비유: 학교 규칙이 교실 공지판에도 있고, 교문에도 붙어 있어야 더 안전하다.


Ⅳ. 실무 적용 및 기술사 판단

실무에서는 먼저 규칙의 복잡도를 본다. 단일 행의 조건이면 CHECK가 우선이고, 여러 행의 합계나 다른 테이블 참조가 필요하면 TRIGGER를 검토한다.

  • 채택: 업무 규칙이 자주 바뀌지 않고, DB가 최종 진실의 원천일 때
  • 회피: TRIGGER 안에서 외부 API 호출이나 과도한 비즈니스 로직을 넣을 때
  • 체크리스트
    1. 규칙이 행 단위인가, 테이블 단위인가?
    2. 에러 메시지가 사용자에게 이해 가능한가?
    3. 재귀 실행이나 성능 저하 가능성은 없는가?
    4. 애플리케이션 검증과 중복되어 유지비를 키우지 않는가?

규칙이 단순하면 선언형, 복잡하면 절차형으로 가되, 최종 목표는 데이터 일관성을 깨지 않게 하는 것이다.

📢 섹션 요약 비유: 집 문에는 간단한 자물쇠를 달고, 금고에는 경보장치를 다는 것과 같다.


Ⅴ. 기대효과 및 결론

사용자 정의 무결성은 데이터 정합성을 높이고, 장애 이후 복구를 쉽게 하며, 시스템 간 규칙 차이를 줄여준다. 결국 이 개념은 "DB가 단순 저장소가 아니라 규칙의 마지막 보루"라는 관점으로 기억하면 된다.

📢 섹션 요약 비유: 규칙을 문서로만 남기지 말고, 문 앞에서 실제로 지키게 만들어야 한다.

📌 관련 개념 맵

개념연결 포인트
개체 무결성기본키 중복 방지
참조 무결성외래키 관계 보장
도메인 무결성컬럼 타입/범위 보장
CHECK 제약조건단순 사용자 정의 규칙
TRIGGER복합 규칙과 감사 처리

📈 관련 키워드 및 발전 흐름도

기본 무결성
    │
    ▼
업무 규칙 등장
    │
    ▼
CHECK 제약조건
    │
    ▼
TRIGGER / 감사 로그 / 연쇄 검증
    │
    ▼
데이터 정합성 강화

👶 어린이를 위한 3줄 비유 설명

  1. 장난감 상자에도 "이 규칙은 꼭 지켜요"라는 약속이 필요해요.
  2. 간단한 약속은 스티커로 붙이고, 복잡한 약속은 지키는 사람이 직접 봐야 해요.
  3. 그래야 나중에 장난감이 엉망이 되지 않아요.