Q1. 관계형 데이터베이스에서 무결성이 무엇인지 설명해 주세요.
개념
관계형 데이터베이스에서 무결성은 데이터베이스 내의 데이터가 항상 정확하고, 일관되며, 유효한 상태를 유지하도록 보장하는 성질을 말한다. 즉, 데이터베이스에 결점이 없는 상태, 신뢰할 수 있는 데이터만 저장되도록 하는 규칙이자 제약 조건이다.
데이터 무결성이 중요한 이유는 사용자가 데이터를 신뢰하고 이를 바탕으로 올바른 결정을 내릴 수 있게 하기 때문이다.
데이터베이스는 여러 가지 제약 조건을 통해 무결성을 강제한다.
- 개체 무결성 (Entity Integrity):
- 테이블의 모든 행(row)이 고유하게 식별되어야 한다는 규칙.
- 이를 위해 기본 키(Primary Key, PK)를 사용하며, 기본 키로 지정된 열은 NULL 값을 가질 수 없고 항상 고유한 값을 가져야 함.
- 참조 무결성 (Referential Integrity):
- 두 테이블 간의 관계가 항상 일관성을 유지하도록 보장하는 규칙.
- 외래 키(Foreign Key, FK)를 사용하여 구현. 외래 키는 한 테이블의 열이 다른 테이블의 기본 키를 참조할 때, 이 외래 키의 값은 참조하는 테이블의 기본 키 값이거나 NULL이어야 함.
- 예를 들어, ‘주문’ 테이블의 ‘고객ID’는 반드시 ‘고객’ 테이블에 존재하는 ‘고객ID’여야 하며, 존재하지 않는 고객의 주문을 생성할 수 없음.
- 도메인 무결성 (Domain Integrity):
- 테이블의 특정 열(column)에 입력될 수 있는 값의 범위를 제한하는 규칙.
- 데이터 타입(예: 숫자, 문자열), 허용되는 값의 범위(예: ‘성별’ 열에는 ‘남’ 또는 ‘여’만 가능), 또는 형식을 지정하여 데이터가 유효한 범위 내에 있도록 보장.
- 사용자 정의 무결성 (User-Defined Integrity):
- 위의 세 가지 유형 외에, 특정 비즈니스 논리나 규칙을 데이터베이스에 적용.
- 예를 들어, ‘월급’ 열의 값은 항상 0보다 커야 한다는 규칙 등을 설정할 수 있음.
Q2. 관계형 데이터베이스에서 마이그레이션이란 무엇인지 설명해 주세요.
개념
마이그레이션은 데이터를 한 시스템에서 다른 시스템으로 이전하거나 이동하는 전체 과정을 의미한다. 데이터베이스의 맥락에서는 기존 데이터베이스 시스템을 새로운 시스템으로 옮기거나 업그레이드하는 작업을 말한다.
마이그레이션의 주요 목적
- 시스템 업그레이드: 오래된(legacy) 데이터베이스 시스템을 더 새롭고 성능이 좋은 시스템으로 교체할 때 (예: 구버전 MySQL에서 최신 버전 PostgreSQL로 이전)
- 클라우드 이전: 기업 내부 서버(On-premise)에서 운영하던 데이터베이스를 AWS, Google Cloud, Azure 등 클라우드 환경으로 이전할 때
- 비용 절감: 라이선스 비용이 비싼 상용 데이터베이스에서 오픈소스 데이터베이스로 전환하여 운영 비용을 줄이고자 할 때
- 데이터 통합: 여러 곳에 흩어져 있던 데이터베이스를 하나의 중앙 데이터베이스로 통합할 때
마이그레이션 과정
데이터 마이그레이션은 단순히 데이터를 복사-붙여넣기 하는 작업이 아니며, 데이터 손실이나 서비스 중단을 최소화하기 위해 다음과 같은 체계적인 계획과 절차가 필요하다.
- 계획 및 평가: 현재 시스템을 분석하고, 새로운 시스템의 요구사항을 정의하며, 마이그레이션 전략(일시 중단 후 전체 이전 vs. 단계적 이전)을 수립.
- 데이터 추출 및 변환: 기존 시스템에서 데이터를 추출하고, 새로운 시스템의 구조(스키마)에 맞게 데이터를 변환하거나 정제.
- 테스트: 실제 데이터의 일부를 이용해 마이그레이션 테스트를 수행하여 데이터가 정확하게 옮겨지는지, 성능에 문제는 없는지 검증.
- 실행: 계획된 절차에 따라 실제 데이터 마이그레이션을 실행.
- 검증: 마이그레이션 완료 후, 모든 데이터가 누락되거나 변형되지 않았는지 최종적으로 확인하고 검증.
