데이터베이스 설계의 기반: 모델, 트랜잭션, 인덱스
데이터베이스의 구조와 데이터 모델, 정규화, SQL, ACID 트랜잭션, 인덱스 및 보안 설계 원칙을 정리한다.
2026-08-14 · 최초 발행 2025-08-10
데이터베이스가 분리해 주는 것
데이터베이스는 특정 조직의 여러 사용자가 함께 사용할 운영 데이터를 통합해 저장한 집합이다. 이를 생성하고 관리하며 활용하도록 돕는 소프트웨어 시스템이 DBMS(Database Management System)다.
이 구조가 제공하는 중요한 성질은 데이터 독립성이다. 응용 프로그램과 데이터베이스의 변경 영향을 분리하는 방식으로, 논리적 독립성과 물리적 독립성으로 나뉜다.
- 논리적 독립성은 개념 스키마가 바뀌어도 외부 스키마에 영향을 주지 않는 특성이다.
- 물리적 독립성은 내부 스키마의 변경이 개념 스키마에 영향을 주지 않는 특성이다.
사용자 관점에서 저장장치까지 이어지는 구조
데이터베이스는 사용자가 보는 뷰, 전체 논리 구조, 실제 저장 방식이라는 서로 다른 관점을 분리한다.
외부 스키마(External Schema)는 사용자나 응용 프로그래머가 바라보는 데이터베이스 구조다. 개념 스키마(Conceptual Schema)는 데이터베이스 전체의 논리적 구조를 기술하며, 내부 스키마(Internal Schema)는 데이터가 물리적 저장장치에 저장되는 방법을 다룬다.
데이터 표현 방식이 넓어진 과정
계층형 모델(Hierarchical Model)은 트리 구조로 데이터를 표현하며 부모와 자식의 1:N 관계만 다룰 수 있다. IBM의 IMS(Information Management System)가 예이며, 데이터 접근 속도가 빠른 반면 복잡한 관계를 표현하기 어렵고 데이터 중복이 발생할 수 있다.
네트워크 모델(Network Model)은 CODASYL에서 표준화됐고, 그래프 구조로 데이터를 표현해 M:N 관계를 지원한다. IDMS와 ADABAS가 여기에 속한다. 계층형 모델보다 복잡한 관계를 표현할 수 있지만 구조 변경과 구현이 복잡하다.
관계형 모델(Relational Model)은 E.F. Codd가 1970년에 제안한 모델로, 데이터를 2차원 테이블 형태로 다룬다. Oracle, MySQL, SQL Server, PostgreSQL가 대표적이다. 높은 유연성, SQL 표준화, 데이터 독립성을 갖추며 현재 가장 널리 사용된다.
객체지향 모델(Object-Oriented Model)은 객체 개념을 데이터베이스에 적용해 복잡한 데이터 유형을 지원한다. ObjectStore와 Versant가 예다. 복잡한 데이터 구조를 표현하기 쉽지만 표준화가 부족하고 시장 점유율이 낮다.
객체관계형 모델(Object-Relational Model)은 관계형 모델에 객체지향 개념을 통합한다. Oracle과 PostgreSQL의 확장 기능이 해당하며, 관계형 모델의 안정성과 객체지향 모델의 유연성을 함께 취한다.
NoSQL(Not Only SQL)은 비관계형 분산 데이터베이스를 가리킨다. 문서형 MongoDB, 키-값형 Redis, 컬럼형 Cassandra, 그래프형 Neo4j처럼 유형이 나뉜다. 확장성과 유연한 스키마, 대용량 데이터 처리에 강점이 있지만 트랜잭션 지원이 제한되고 표준이 부족하다.
테이블과 키로 관계를 표현하는 법
관계형 데이터베이스에서 릴레이션(Relation)은 2차원 테이블 형태의 데이터 집합이다. 속성(Attribute)은 열(Column), 튜플(Tuple)은 행(Row), 도메인(Domain)은 속성이 가질 수 있는 값의 범위를 뜻한다.
키는 레코드 식별과 테이블 간 연결을 담당한다.
- 기본키(Primary Key)는 레코드를 유일하게 식별하는 속성이다.
- 외래키(Foreign Key)는 다른 테이블의 기본키를 참조한다.
- 후보키(Candidate Key)는 기본키가 될 수 있는 속성 집합이다.
- 대체키(Alternate Key)는 후보키 가운데 기본키로 선택되지 않은 키다.
- 슈퍼키(Super Key)는 튜플을 유일하게 식별할 수 있는 하나 이상의 속성이다.
중복과 종속성을 다루는 정규화
정규화는 데이터 중복을 최소화하고 데이터 무결성을 보장하기 위한 과정이다. 정규형은 함수적 종속성과 조인 관계를 기준으로 단계적으로 제약을 강화한다.
제1정규형(1NF)은 모든 속성이 원자적 값만 갖도록 한다. 제2정규형(2NF)은 1NF를 만족하면서 부분 함수적 종속을 제거한다. 제3정규형(3NF)은 2NF에 더해 이행적 함수적 종속을 제거한다.
보이스-코드 정규형(BCNF)은 3NF를 충족하고 모든 결정자가 후보키가 되도록 한다. 제4정규형(4NF)은 BCNF에서 다치 종속성을 제거하며, 제5정규형(5NF)은 조인 종속성까지 제거한다.
SQL이 맡는 작업 범위
SQL(Structured Query Language)은 관계형 데이터베이스를 관리하기 위한 표준 언어다. 구조를 정의하는 DDL(Data Definition Language)에는 CREATE, ALTER, DROP, TRUNCATE가 포함된다.
데이터를 조회하고 변경하는 DML(Data Manipulation Language)은 SELECT, INSERT, UPDATE, DELETE로 구성된다. DCL(Data Control Language)은 GRANT와 REVOKE를 이용해 접근 권한을 제어하며, TCL(Transaction Control Language)은 COMMIT, ROLLBACK, SAVEPOINT로 트랜잭션을 제어한다.
트랜잭션의 신뢰성을 만드는 ACID
트랜잭션은 데이터베이스에서 하나의 논리적 작업 단위다. ACID 속성은 이 작업이 신뢰성 있게 처리되기 위한 기준이다.
- 원자성(Atomicity)은 트랜잭션이 모두 성공하거나 모두 실패하도록 한다.
- 일관성(Consistency)은 실행 전후 데이터베이스가 일관된 상태를 유지하도록 한다.
- 격리성(Isolation)은 동시에 실행되는 트랜잭션이 서로 영향을 미치지 않도록 한다.
- 지속성(Durability)은 성공적으로 끝난 트랜잭션의 결과가 영구적으로 반영되도록 한다.
격리 수준은 READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE로 구분된다. READ UNCOMMITTED에서는 커밋되지 않은 데이터를 읽을 수 있고, READ COMMITTED에서는 커밋된 데이터만 읽을 수 있다. REPEATABLE READ에서는 트랜잭션 안에서 같은 쿼리 결과가 항상 동일하며, SERIALIZABLE은 트랜잭션이 순차적으로 실행되는 것처럼 동작한다.
검색 성능과 변경 비용 사이의 인덱스
인덱스는 데이터 검색 속도를 높이기 위한 데이터 구조다. B-Tree 인덱스는 가장 널리 사용되며 균형 트리 형태를 가진다. 해시 인덱스는 해시 함수를 이용한 빠른 검색과 등호 비교에 효율적이다. 비트맵 인덱스는 카디널리티가 낮은 컬럼에 효과적이다.
인덱스를 설계할 때는 WHERE 절에 자주 사용되는 열과 카디널리티가 높은 열을 우선 검토한다. 복합 인덱스에서는 선택도가 높은 열을 앞에 배치한다. 다만 인덱스가 지나치게 많으면 INSERT, UPDATE, DELETE 성능 저하를 초래한다.
요구사항에 따라 달라지는 데이터베이스 선택지
클라우드 데이터베이스는 AWS RDS, Azure SQL Database, Google Cloud SQL처럼 제공되며, 확장성·관리 용이성·비용 효율성을 특징으로 한다. DBaaS(Database as a Service)를 포함한 관리형 서비스 형태가 있다.
분산 데이터베이스는 여러 노드에 데이터를 나누어 저장하고 수평적 확장(Horizontal Scaling)을 지원한다. CAP 이론에서는 일관성(Consistency), 가용성(Availability), 분할 내성(Partition Tolerance) 가운데 최대 2가지만 동시에 보장할 수 있다.
인메모리 데이터베이스는 디스크가 아닌 메인 메모리에 데이터를 저장한다. 초고속 데이터 처리와 실시간 분석에 적합하며 SAP HANA, Redis, MemSQL이 예다.
NewSQL은 NoSQL의 확장성과 관계형 데이터베이스의 ACID 속성을 결합한다. Google Spanner, CockroachDB, VoltDB가 이에 속한다. 그래프 데이터베이스는 노드와 엣지로 데이터 관계를 표현해 복잡한 관계 분석과 탐색에 최적화하며, Neo4j, Amazon Neptune, ArangoDB가 대표적이다.
블록체인 데이터베이스는 분산 원장 기술을 기반으로 변경 불가능한(immutable) 데이터를 저장하고 높은 신뢰성과 투명성을 제공한다.
데이터베이스 운영에서 지켜야 할 보안 경계
데이터베이스 보안은 사용자 인증과 권한 관리를 위한 접근 제어에서 시작한다. 저장 데이터(Data at Rest)와 전송 데이터(Data in Transit)는 암호화 대상으로 다루며, 감사(Auditing)를 통해 데이터베이스 활동을 로깅하고 모니터링한다.
SQL 인젝션은 파라미터화된 쿼리 사용으로 방지한다. 정기적인 백업과 재해 복구 계획도 백업 및 복구 전략의 일부다.
전자상거래 데이터 모델에서 보는 관계 설계
이 모델은 고객, 주문, 상품, 카테고리 사이의 관계를 표현한다. 정규화를 통해 데이터 중복을 최소화하고, 주문과 상품의 다대다 관계는 ORDER_ITEM 중간 테이블로 해소한다.
인덱스는 customer_id, product_id, order_date에 생성한다. 주문 처리에서는 재고 감소와 주문 생성이 하나의 원자적 트랜잭션으로 처리된다.
설계 원칙과 선택 기준
관계형 데이터베이스는 여전히 많은 시스템의 기반이지만, 빅데이터와 실시간 처리 요구, 비정형 데이터 증가로 NoSQL, NewSQL, 그래프 데이터베이스 등 다양한 선택지가 함께 쓰인다. 데이터 특성과 조직의 요구사항에 맞는 솔루션을 고르는 일은 시스템의 성능, 확장성, 유지보수성에 직접 영향을 준다.
데이터베이스 시스템의 특성을 이해하고 적절한 설계 원칙을 적용해야 조직의 데이터 자산을 효과적으로 관리할 수 있다.