인트로
PM 실무를 보다 보면 데이터 관리 시 종종 오류가 발생하는 것때문에 머리를 부여잡는 개발자들을 볼 때가 있다. 이러한 오류들은 일반적으로 잘못된 입력값 혹은 누락된 값으로부터 비롯되는 것들이 많다. 예를 들어 있어야 하는 값이 없거나.. 뜬금없이 Null 값이 들어가 있다던가..
우리가 다루는 데이터는 논리적이고 정확해야 한다. 따라서 이를 위한 기술 및 기법이 필요하다. 이번 글의 주제는 올바른 데이터 처리를 위한 기본 원칙으로서 ‘데이터의 무결성’과 ‘정합성’에 대해 말해보고자 한다.
데이터 무결성과 데이터 정합성
관계형 데이터베이스(RDB)의 가장 큰 목표는 "데이터 무결성을 높이는 것" 이다.
- 데이터 무결성(Data Integrity) : 데이터 값이 정확한 상태
- 데이터 정합성 : 어떤 데이터들이 값이 서로 일치함.
무결성의 종류
- 엔터티 무결성(Entity Integrity) = 개체 무결성
- 모든 인스턴스는 고유한 값(=같은 값 존재 X)이거나, 널(Null) 값을 가지면 안 됨
- 참조 무결성(Referential Integrity)
- 참조되는 엔터티의 주 식별자 값과 일치(=참조하는 기본키 값 중에 하나와 일치)하거나, 널(Null) 값이어야 함.
- 참조 무결성은 FK(Foreign Key) 제약에 의해 지켜짐.
- 도메인 무결성(Domain Integrity)
- 속성 값과 관련된 제약.
- 같은 속성에 사용되느니 값들은 같은 성격의 값.
- 기본 값이나 널 여부, 체크 조건 등으로 지켜질 수 있음.
- 업무 무결성(Business Integrity)
- 기업에서 업무를 수행하는 방법이나 데이터를 처리하는 규칙을 의미
- 넓게 보면 엔터티 무결성, 참조 무결성, 도메인 무결성도 업무 무결성에 포함될 수 있음.
- 업무 무결성은 범위가 넓어 주로 프로그램에서 체크.
- 업무 무결성을 물리적으로 강제하는 대표적인 방법으로는 **트리거(Trigger)**가 존재.
- '주문 금액이 3만원 이상이면 배송비 무료', '초회(=첫회) 보험료를 입금하지 않은 보험계약은 효력 없음" 등.
자주 접하는 이슈들
프로덕트 매니저(PM) 업무를 수행하다 보면 다양한 이슈사항을 접하게 된다. 이때 주로 부딪히는 문제가 데이터 정합성인데 보통 다음과 같은 상황에서 많이 발생한다.
- 중복되거나 불필요한 데이터가 존재하여 비효율적인 쿼리문이 작성된다.
- 서로 다른 테이블 간 조인 조건이 맞지 않아 원하는 정보를 추출하지 못한다.
- 동일한 컬럼명이 존재하는데 타입이 달라서 엉뚱한 값이 출력된다.
- 하나의 필드에 2개 이상의 로우가 존재하여 조회되지 않는 로우수가 증가한다.
- 해당 컬럼에 대한 인덱스가 없어서 전체 레코드를 스캔하느라 성능이 저하된다.
- 의도치 않은 변형 또는 삭제 작업으로 인해 원본 데이터가 손상된다.
- 시스템 장애나 사용자 실수로 인한 데이터 손실이 발생한다.
- 대량의 데이터를 빠르게 검색하고자 하는데 속도가 느리다.
- SQL 구문상 문법 오류가 발생한다.
- 데이터베이스 용량이 부족하여 추가 공간 확보가 필요하다.
- 트리거 이벤트가 정상적으로 작동하지 않는다.
- 기타 등등...
그래서?
이러한 문제점 해결을 위해 DBA(Data Base Administration, 데이터 관리자)는 지속적인 모니터링과 함께 적절한 조치를 취해야 한다. 물론 근본적인 원인 제거를 위해서는 RDB를 다시 짠다..라는 특단의 조치가 필요하지만 현실적으로 쉽지 않다. 그러므로 차선책으로 기존 환경에서의 최적화 방안을 모색해야 한다. 다행히 위 사항들은 비교적 쉽게 해결할 수 있으므로 아래 내용을 참고하면 좋을 것 같다.
우선 첫 번째로 각 테이블별 PK 제약조건을 점검하자. 만약 NOT NULL 속성이 위배된다면 반드시 수정해야 한다. 그리고 FK 관계라면 참조무결성 규칙 위반 여부를 확인해야 한다. 아울러 UNIQUE 인덱스 유무 역시 체크리스트에 포함시켜야 한다. 이렇게 함으로써 원치 않는 데이터 삽입을 방지할 수 있으며 동시에 빠른 응답속도를 보장받을 수 있다.
두 번째로는 외래키 관련 항목을 살펴보자. 먼저 부모 테이블의 PRIMARY KEY 가 자식 테이블의 FOREIGN KEY 에 제대로 반영되었는지 살펴봐야 한다. 더불어 ON DELETE CASCADE 옵션이 적용되었는지도 검토해야 한다. 그래야 혹시라도 모를 연쇄삭제 현상을 예방할 수 있기 때문이다.
참고
무결성과 정합성이란 무엇인가?
데이터 무결성과 데이터 정합성을 정리해 보았다.
velog.io
https://spidyweb.tistory.com/164
'국문 > 백엔드' 카테고리의 다른 글
[관계형 데이터 모델링] 2. 관계형 데이터 모델링을 위한 업무 분석(요구사항 분석) (0) | 2023.02.11 |
---|---|
[관계형 데이터 모델링] 1. 관계형 데이터 모델링의 개념과 순서 (0) | 2023.02.09 |
관계형 데이터베이스란? (2) | 2023.02.02 |