2025-08-15 19:19
Tags:
관계형 데이터베이스 완벽 핸드북 엑셀을 넘어 데이터 시대를 지배하는 원리
오늘날 우리가 사용하는 거의 모든 서비스의 이면에는 데이터베이스가 존재. 온라인 쇼핑몰의 상품 목록, 은행의 거래 내역, SNS의 친구 목록까지, 모든 정보는 어딘가에 체계적으로 저장되고 관리됨. 그중에서도 수십 년간 데이터 관리의 표준으로 자리 잡아온 기술이 바로 관계형 데이터베이스(Relational Database Management System, RDBMS).
단순히 데이터를 저장하는 것을 넘어, 데이터 간의 ‘관계’를 정의하여 정보의 무결성을 지키고, 복잡한 데이터도 유연하게 다룰 수 있게 만드는 이 기술의 핵심을 파헤쳐 봄. 이 핸드북은 관계형 데이터베이스가 왜 만들어졌는지, 어떤 구조로 이루어져 있으며, 어떻게 사용하는지를 총망라한 종합 안내서.
1부: 왜 ‘관계형’ 데이터베이스가 필요했을까? (탄생 배경)
관계형 모델이 등장하기 전, 데이터 관리는 혼돈 그 자체. 1960년대에는 주로 계층형(Hierarchical) 모델이나 네트워크형(Network) 모델을 사용.
-
계층형 모델: 데이터를 나무와 같은 부모-자식 관계로 구성. 하나의 자식은 반드시 하나의 부모만 가질 수 있어 구조가 단순하지만, 현실 세계의 복잡한 관계(예: 한 명의 학생이 여러 과목을 수강하는 경우)를 표현하기 어려웠음. 데이터 중복이 발생하기 쉬운 구조.
-
네트워크형 모델: 계층형의 한계를 극복하고자 자식 노드가 여러 부모 노드를 가질 수 있도록 확장. 데이터 관계 표현은 유연해졌지만, 구조가 거미줄처럼 복잡해져 데이터를 추가하거나 조회하는 과정이 매우 어려웠음. 개발자는 데이터의 물리적 구조까지 모두 꿰고 있어야 했음.
이러한 문제들은 데이터 종속성과 데이터 중복성이라는 두 가지 큰 골칫거리를 낳음. 데이터의 논리적 구조가 물리적 저장 방식에 묶여 있어, 저장 방식을 바꾸면 애플리케이션 코드 전체를 수정해야 했음(종속성). 또한, 같은 정보가 여러 곳에 흩어져 저장되어 데이터 불일치가 발생할 위험이 컸음(중복성).
이때, IBM의 연구원이었던 **에드거 F. 코드(Edgar F. Codd)**가 1970년, “A Relational Model of Data for Large Shared Data Banks”라는 혁명적인 논문을 발표. 그는 데이터의 논리적 구조와 물리적 저장 구조를 완전히 분리하고, 모든 데이터를 누구나 이해하기 쉬운 2차원의 테이블(Table) 형태로 표현하자고 제안. 그리고 테이블 간의 관계를 통해 데이터를 연결하는 아이디어를 제시. 이것이 바로 관계형 모델의 시작.
핵심 아이디어: “데이터가 어떻게 저장되는지(How)는 신경 쓰지 말고, 데이터가 무엇인지(What)에만 집중하자.”
2부: 관계형 데이터베이스의 해부학 (핵심 구조)
관계형 데이터베이스는 몇 가지 핵심적인 구성 요소로 이루어짐. 마치 레고 블록처럼, 이 요소들을 조합하여 견고한 데이터 구조를 만듦.
1. 릴레이션 (Relation) = 테이블 (Table)
관계형 모델의 가장 기본 단위. 우리가 흔히 보는 엑셀 시트처럼 **행(Row)**과 **열(Column)**으로 구성된 2차원 표. 하나의 테이블에는 특정 주제에 관한 데이터들이 모여 있음. 예를 들어 ‘학생’ 테이블, ‘과목’ 테이블.
2. 튜플 (Tuple) = 행 (Row / Record)
테이블의 각 행. 하나의 독립적인 데이터 단위를 의미. ‘학생’ 테이블에서 한 명의 학생 정보(학번, 이름, 학과 등)가 하나의 튜플.
3. 애트리뷰트 (Attribute) = 열 (Column / Field)
테이블의 각 열. 데이터가 가질 수 있는 고유한 속성. ‘학생’ 테이블에서 ‘학번’, ‘이름’, ‘학과’, ‘학년’ 등이 각각의 애트리뷰트.
4. 도메인 (Domain)
하나의 애트리뷰트가 가질 수 있는 값의 집합. 예를 들어 ‘학년’ 애트리뷰트의 도메인은 {1, 2, 3, 4}가 될 수 있고, ‘성별’ 애트리뷰트의 도메인은 {‘남’, ‘여’}로 제한될 수 있음. 데이터의 타입을 강제하여 데이터의 품질을 보장.
5. 키 (Key)
관계형 데이터베이스의 핵심이자 ‘관계’를 가능하게 하는 장치. 데이터의 **무결성(Integrity)**과 **식별 가능성(Identifiability)**을 보장.
-
기본 키 (Primary Key, PK):
-
테이블 내의 모든 행을 유일하게 식별하는 값.
-
절대 중복될 수 없으며(Unique), 반드시 값이 있어야 함(Not Null).
-
예: ‘학생’ 테이블의 ‘학번’, ‘국민’ 테이블의 ‘주민등록번호’.
-
어떤 행을 특정해서 수정하거나 삭제할 때 기준점이 됨.
-
-
외래 키 (Foreign Key, FK):
-
두 테이블을 연결하는 다리 역할.
-
한 테이블의 열이 다른 테이블의 기본 키를 참조하는 것.
-
예: ‘수강신청’ 테이블에 있는 ‘학번’은 ‘학생’ 테이블의 기본 키를 참조하는 외래 키. 이를 통해 어떤 학생이 어떤 과목을 신청했는지 관계를 맺어줌.
-
관계의 일관성을 보장하는 중요한 역할. (예: 존재하지 않는 학번으로 수강신청을 할 수 없도록 막음)
-
-
후보 키 (Candidate Key):
-
기본 키가 될 수 있는 자격을 갖춘 모든 키.
-
유일성과 최소성(키를 구성하는 속성 중 하나라도 빠지면 유일성이 깨짐)을 만족.
-
예: ‘학생’ 테이블에서 ‘학번’과 ‘주민등록번호’ 둘 다 기본 키가 될 수 있다면, 이 둘은 모두 후보 키.
-
-
대체 키 (Alternate Key):
- 후보 키 중에서 기본 키로 선택되지 않은 나머지 키.
6. 스키마 (Schema)
데이터베이스의 전체적인 구조와 제약 조건에 대한 명세. 데이터베이스의 설계도와 같음. 테이블 구조, 데이터 타입, 키 관계 등이 모두 스키마에 정의됨.
비유로 이해하기:
데이터베이스 = 도서관
테이블(릴레이션) = ‘소설’, ‘과학’ 등 장르별 서가
행(튜플) = 서가에 꽂힌 책 한 권 한 권
열(애트리뷰트) = 책의 ‘제목’, ‘저자’, ‘출판사’ 정보
기본 키 = 각 책에 부여된 고유한 도서번호(ISBN)
외래 키 = 책 대출 기록부에 적힌 ‘도서번호’ (책 정보를 참조)
3부: 데이터와 대화하는 언어, SQL (사용법)
관계형 데이터베이스를 조작하기 위해 사용하는 표준 언어가 바로 SQL(Structured Query Language). SQL은 크게 4가지 종류의 명령어로 나뉨.
1. 데이터 정의어 (DDL: Data Definition Language)
데이터베이스의 구조를 만들고(정의하고), 수정하고, 삭제하는 역할.
CREATE
: 새로운 데이터베이스나 테이블을 생성.
CREATE TABLE Students (
student_id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
major VARCHAR(50)
);
ALTER
: 기존 테이블의 구조를 수정 (열 추가/삭제/변경).
ALTER TABLE Students ADD COLUMN grade INT;
DROP
: 테이블이나 데이터베이스를 통째로 삭제.
DROP TABLE Students;
2. 데이터 조작어 (DML: Data Manipulation Language)
테이블 내의 실제 데이터를 추가, 조회, 수정, 삭제하는 역할. 가장 빈번하게 사용됨.
INSERT
: 테이블에 새로운 행(데이터)을 추가.
INSERT INTO Students (student_id, name, major, grade) VALUES (2023001, '홍길동', '컴퓨터공학', 2);
SELECT
: 테이블에서 데이터를 조회.
SELECT name, major FROM Students WHERE grade > 1;
UPDATE
: 기존 행의 데이터를 수정.
UPDATE Students SET major = '소프트웨어공학' WHERE student_id = 2023001;
DELETE
: 특정 행을 삭제.
DELETE FROM Students WHERE name = '홍길동';
3. 데이터 제어어 (DCL: Data Control Language)
데이터에 대한 접근 권한을 부여하거나 회수하는 역할. 보안과 관련이 깊음.
-
GRANT
: 특정 사용자에게 테이블 접근이나 데이터 조작 권한을 부여. -
REVOKE
: 부여했던 권한을 회수.
4. 트랜잭션 제어어 (TCL: Transaction Control Language)
DML로 수행된 작업들을 하나의 논리적 단위(트랜잭션)로 묶어 제어.
-
COMMIT
: 모든 작업을 최종적으로 데이터베이스에 반영. -
ROLLBACK
: 작업을 모두 취소하고 마지막COMMIT
상태로 되돌림.
4부: 데이터 무결성을 위한 약속 (핵심 원칙 및 심화)
관계형 데이터베이스가 수십 년간 신뢰를 얻은 이유는 단순히 데이터를 표로 관리해서가 아님. 데이터의 정확성과 일관성을 보장하는 강력한 원칙들이 내장되어 있기 때문.
1. 정규화 (Normalization)
데이터의 중복을 최소화하고 무결성을 향상시키기 위해 테이블을 설계하는 과정. “같은 정보는 한 곳에만 저장한다”는 원칙을 체계화한 것. 일반적으로 3차 정규형까지 따르는 것을 목표로 함.
-
예시: 하나의 주문 테이블에 (주문번호, 주문일, 고객ID, 고객명, 고객주소, 상품ID, 상품명, 수량)이 모두 있다면?
-
문제점: 한 고객이 여러 번 주문할 때마다 고객명과 주소가 반복해서 저장됨 (데이터 중복). 고객 주소가 바뀌면 이 고객의 모든 주문 기록을 찾아 주소를 바꿔야 함 (갱신 이상).
-
해결책 (정규화): 테이블을 ‘주문’ 테이블과 ‘고객’ 테이블로 분리.
-
고객 테이블: (고객ID (PK), 고객명, 고객주소)
-
주문 테이블: (주문번호 (PK), 주문일, 고객ID (FK), …)
-
-
이렇게 하면 고객 정보는 한 곳에만 저장되고, 주문 테이블에서는 ‘고객ID’만 참조하여 중복을 없애고 데이터 관리가 용이해짐.
-
2. ACID 트랜잭션
데이터베이스의 신뢰성을 보장하는 4가지 핵심 속성. 특히 금융 거래와 같이 데이터의 일관성이 매우 중요한 시스템에서 필수적.
은행 계좌 이체 비유: A가 B에게 10만 원을 이체하는 트랜잭션.
A 계좌에서 10만 원 차감.
B 계좌에 10만 원 증액.
-
원자성 (Atomicity): 트랜잭션은 모두 성공하거나 모두 실패해야 함. 1번 과정만 성공하고 시스템이 멈추면, 10만 원이 공중으로 사라짐. 원자성은 이런 일을 방지.
-
일관성 (Consistency): 트랜잭션 전후로 데이터베이스의 규칙(제약 조건)은 항상 지켜져야 함. 이체 후에도 은행 시스템의 총액은 변함이 없어야 하는 것과 같음.
-
고립성 (Isolation): 여러 트랜잭션이 동시에 실행될 때, 서로에게 영향을 주지 않아야 함. 마치 각 트랜잭션이 혼자 실행되는 것처럼 보여야 함. A가 B에게 이체하는 도중에 다른 트랜잭션이 A의 잔고를 조회하면, 이체 전 또는 이체 후의 잔고 중 하나만 보여야 함.
-
지속성 (Durability): 성공적으로 완료된(COMMIT된) 트랜잭션의 결과는 시스템에 영구적으로 저장되어야 함. 이체가 완료된 후 갑자기 정전이 되어도 그 결과는 사라지지 않음.
3. 인덱스 (Index)
데이터 검색 속도를 획기적으로 높이는 기술. 책의 맨 뒤에 있는 ‘찾아보기’와 같은 원리. 특정 열(column)의 값과 해당 값이 저장된 행의 위치를 미리 정렬된 자료구조로 저장해 둠.
-
장점:
SELECT
쿼리의WHERE
절에서 특정 조건을 검색할 때, 테이블 전체를 훑지 않고 인덱스를 통해 빠르게 원하는 데이터의 위치를 찾을 수 있음. -
단점: 데이터를
INSERT
,UPDATE
,DELETE
할 때마다 인덱스도 함께 수정해야 하므로 쓰기 성능이 저하될 수 있음. 따라서 모든 열에 인덱스를 거는 것은 비효율적이며, 검색이 잦은 열에 전략적으로 사용해야 함.
5부: 관계형 데이터베이스의 세계 (생태계)
관계형 데이터베이스 모델을 구현한 다양한 소프트웨어(RDBMS)들이 존재.
-
Oracle Database: 상용 RDBMS의 절대 강자. 대규모 기업 환경에서 요구하는 강력한 성능, 안정성, 보안 기능을 제공.
-
MySQL: 세계에서 가장 널리 사용되는 오픈소스 RDBMS. 특히 웹 애플리케이션(PHP, Java, Python 등)과의 궁합이 좋아 수많은 웹사이트와 서비스의 기반이 됨.
-
PostgreSQL: 가장 진보된 오픈소스 RDBMS로 불림. SQL 표준을 매우 잘 준수하며, 복잡한 쿼리 처리와 데이터 무결성, 확장성 면에서 뛰어난 성능을 보여줌.
-
Microsoft SQL Server: Microsoft 환경에 최적화된 RDBMS. Windows Server와의 강력한 통합과 사용 편의성을 제공.
-
SQLite: 서버가 필요 없는 초경량 임베디드 데이터베이스. 모바일 앱(안드로이드, iOS)이나 데스크톱 응용 프로그램 내부에 데이터를 저장하는 용도로 널리 사용됨.
결론: 여전히 데이터 세계의 초석
최근 몇 년간 비정형 데이터를 다루기 위한 NoSQL 데이터베이스가 주목받고 있지만, 데이터의 일관성과 무결성이 중요한 대부분의 비즈니스 환경에서는 여전히 관계형 데이터베이스가 핵심적인 역할을 수행.
관계형 데이터베이스는 단순히 데이터를 저장하는 창고가 아님. 데이터를 논리적으로 구조화하고, 관계를 통해 정보의 가치를 높이며, ACID와 같은 원칙을 통해 데이터의 신뢰성을 보장하는 정교한 시스템. 이 핸드북을 통해 관계형 데이터베이스의 기본 원리를 이해했다면, 이제 여러분은 데이터를 훨씬 더 체계적이고 안정적으로 다룰 수 있는 강력한 무기를 얻게 된 것.