Overview
오늘은 DB 스키마(Database Schema)에 대해 공부해보겠다.
데이터베이스 스키마는 데이터의 구조, 관계 및 제약 조건을 정의하는 설계도 역할을 합니다. 이를 통해 데이터가 어떻게 저장되고, 연결되며, 관리되는지 정의할 수 있다.
이 글에서는 DB 스키마의 개념과 주요 아키텍처, 스키마와 인스턴스의 차이점, 스키마 변경 및 성능 최적화 방법 등을 다룬다.
📌 주요 내용
- DB 스키마의 정의 및 역할
- 외부/개념/내부 스키마의 차이점
- DB 스키마와 테이블 스키마 비교
- 스키마 설계 시 고려할 요소 (정규화, 인덱스, 트랜잭션)
- 스키마 변경(Migration) 및 성능 최적화 방법
DB 스키마를 효과적으로 설계하면 데이터 무결성을 유지하면서도 성능을 최적화할 수 있습니다.
📅 관련 글
2022.01.14 - [Database] - Mariadb란? (사용법)
2022.09.26 - [Open Source Software] - Redis(Remote Dictionary Server)란?
2023.04.21 - [Database] - DB 스키마란?(Schema)
2023.05.17 - [Database] - MongoDB란?
2023.12.18 - [GCP] - GCP를 활용한 데이터 자동화(MongoDB, CloudSQL, GA, Dune)
2024.03.21 - [Database] - PostgreSQL 개념 및 특징(with MySQL)
2024.04.25 - [Database] - DB 샤딩(Sharding): 개념 및 동작방식
2025.03.20 - [Database] - DB의 데이터 무결성(Integrity)과 제약 조건(Constraints)
2025.03.28 - [Data Enginnering] - 대량 데이터 처리와 데이터 아키텍처 설계(OLAP & OLTP)
DB 스키마란?(Schema)
데이터베이스 스키마는 데이터베이스 시스템에서 데이터의 구조, 구성 및 관계를 정의한다.
데이터베이스 내에 어떤 구조로 데이터가 저장되는가를 나타내는 데이터베이스 구조를 스키마라고 한다.
스키마는 개체의 특성을 나타내는 속성(Attribute)과 속성들의 집합으로 이루어진 개체(Entity), 개체 사이에 존재하는 관계(Relation)에 대한 정의와 이들이 유지해야 할 제약조건을 정의한다.
Employee, Department 및 Project라는 세 개의 테이블이 있다고 가정한다.
따라서 다음과 같이 스키마 다이어그램을 사용하여 이 세 테이블의 스키마를 나타낼 수 있다.
해당 스키마 다이어그램에서 Employee와 Department는 관련되어 있고 Employee와 Project 테이블은 관련되어 있다.
DB 스키마 아키텍처
DB 스키마 아키텍처는 데이터의 논리적 구성과 물리적 스토리지 및 사용자가 데이터와 상호 작용하는 방식을 분리하는 데이터베이스 설계 개념이다.
DB 스키마는 사용자의 관점에 따라서 외부, 개념, 내부 스키마로 구분 된다.
1. 외부 스키마(External Schema) - (User View)
User View라고도 하는 외부 스키마는 개별 사용자 또는 응용프로그램이 데이터를 인식하고 상호 작용하는 방식을 나타낸다. 각 사용자 또는 응용프로그램은 자신의 특정 요구사항과 액세스 권한에 맞게 조정된 서로 다른 외부 스키마를 가질 수 있다. 외부 스키마는 개념 스키마의 하위 집합으로, 관련 데이터에 초점을 맞추고 전체 데이터베이스의 복잡성을 숨긴다.
전체 데이터베이스의 한 논리적인 부분으로 볼 수 있으므로 서브 스키마라고도 한다.응용프로그래머가 각 개인의 입장에서 필요로 하는 데이터베이스의 논리적 구조를 정의한 것이다.
2. 개념 스키마(Conceptual Schema) - (Logical View)
Logical View라고 하는 개념 스키마는 물리적 스토리지 또는 구현 세부 정보와 관계없이 데이터베이스에 있는 데이터의 전체 논리적 구성을 나타낸다. 모든 테이블, 열, 관계, 제약 조건 및 기타 데이터베이스 개체를 정의한다. 개념 스키마는 외부 스키마와 내부 스키마를 연결하는 브리지 역할을 하여 모든 사용자 및 응용프로그램에 대한 일관된 데이터 보기를 제공한다. 단순히 스키마라고 하면 개념 스키마를 의미하는 것이다. 데이터베이스 파일에 저장되는 데이터의 형태를 나타내는 것으로 DBA에 의해 구성된다.
3. 내부 스키마(Internal Schema) - (Physical View)
Physical View라고 하는 내부 스키마는 Hard Disk 또는 SSD(Solid-State Drives)와 같은 스토리지 미디어에 있는 데이터의 실제 물리적 저장소 및 구성을 나타낸다. 여기에는 파일 구조, 인덱싱 방법 및 데이터 저장 형식과 같은 세부 정보가 포함된다. 내부 스키마는 데이터와 상호 작용하는 사용자 및 애플리케이션으로부터 이러한 세부 정보를 숨기면서 데이터 저장, 액세스 및 검색을 최적화하는 것과 관련이 있다. 시스템 프로그래머나 시스템 설계자가 보는 관점의 스키마이다.
요약하자면, 데이터베이스 스키마의 개념은 데이터베이스 시스템의 데이터 구조 및 구성을 정의한다.
반면, 3개 스키마 아키텍처(외부, 개념 및 내부 스키마)는 데이터의 논리적 구성을 물리적 스토리지 및 사용자 상호 작용으로부터 분리하기 위한 프레임워크를 제공한다.
DB 스키마와 DB 인스턴스 (Schema vs. Instance)
스키마(Schema)와 인스턴스(Instance)는 데이터베이스 개념에서 중요한 개념이다.
- 스키마(Schema):
- 데이터베이스의 구조(Structure) 를 정의한 것.
- 데이터베이스에 어떤 테이블, 컬럼, 관계, 제약 조건 등이 있는지를 명세하는 설계도 같은 역할을 함.
- 시간이 지나도 변하지 않는 정적인 성격 을 가짐.
- 인스턴스(Instance):
- 특정 시점에서 DB에 저장된 실제 데이터 를 의미함.
- 시간이 지남에 따라 데이터가 추가/변경/삭제되면서 계속 변하는 동적인 성격 을 가짐.
📌 비유
- 스키마는 건물 설계도, 인스턴스는 실제 건물에 사는 사람들과 가구 같은 개념!
DB 스키마와 테이블 스키마 (Schema vs. Table Schema)
DB 스키마는 전체적인 데이터베이스의 구조를 정의하는 반면, 테이블 스키마(Table Schema) 는 특정 테이블의 구조를 정의하는 개념이다.
📌 예시: Employee 테이블 스키마
CREATE TABLE Employee (
emp_id INT PRIMARY KEY,
name VARCHAR(50),
department_id INT,
salary DECIMAL(10,2),
CONSTRAINT fk_department FOREIGN KEY (department_id) REFERENCES Department(department_id)
);
- 위 예제에서 Employee 테이블은 각 컬럼의 타입, 기본 키, 외래 키 등을 정의하는 테이블 스키마를 포함하고 있다.
DB 스키마의 제약 조건 (Constraints)
스키마에는 단순히 테이블을 정의하는 것뿐만 아니라 데이터 무결성을 유지하기 위한 제약 조건(Constraints) 도 포함된다.
✔️ 주요 제약 조건 종류
- Primary Key (기본 키): 한 테이블에서 각 행을 유일하게 식별하는 키 (예: `emp_id`)
- Foreign Key (외래 키): 다른 테이블과의 관계를 정의 (예: `department_id`)
- Unique: 중복을 허용하지 않음 (예: `email 컬럼`)
- Not Null: 반드시 값이 존재해야 함 (예: `name 컬럼`)
- Check: 특정 조건을 만족해야 함 (예: `salary > 0`)
DB 스키마 설계 시 고려할 요소
데이터베이스 스키마를 설계할 때 다음과 같은 점을 고려해야 한다.
- 정규화(Normalization)
- 데이터 중복을 최소화 하여 효율적인 데이터 저장 구조를 설계해야 함.
- 1NF, 2NF, 3NF 등의 정규화 과정이 있음.
- 반정규화(Denormalization) 고려
- 정규화된 데이터를 성능 개선을 위해 일부 중복을 허용하는 방식.
- 자주 조회하는 데이터를 조인 연산 없이 빠르게 가져올 수 있음.
- 인덱스(Index) 설정
- 검색 속도를 빠르게 하기 위해 적절한 인덱스를 설정해야 함.
- 너무 많은 인덱스를 설정하면 INSERT/UPDATE 성능이 저하될 수 있음.
- 트랜잭션과 동시성 제어
- 데이터 일관성을 유지하기 위해 트랜잭션을 고려해야 함.
- ACID 원칙(Atomicity, Consistency, Isolation, Durability)을 준수하는 것이 중요함.
데이터베이스 스키마 유형
DBMS에 따라 스키마를 정의하는 방식이 다를 수 있다.
- 관계형 데이터베이스 (RDBMS)
- MySQL, PostgreSQL, Oracle, SQL Server 등
- 테이블 기반 스키마 정의 (`CREATE TABLE, ALTER TABLE`등)
- NoSQL 데이터베이스
- MongoDB, Cassandra, DynamoDB 등
- 스키마리스(Schema-less) 구조도 가능하지만, 모델링이 중요함.
- JSON/BSON 같은 문서 기반 저장 구조를 가짐.
DB 스키마 변경 (Schema Evolution)
운영 중인 데이터베이스의 스키마를 변경해야 할 경우 마이그레이션(Migration) 과정이 필요하다.
- DDL (Data Definition Language) 사용
- `ALTER TABLE ADD COLUMN`
- `ALTER TABLE DROP COLUMN`
- `ALTER TABLE MODIFY COLUMN`
- 데이터 마이그레이션 툴 활용
- Flyway, Liquibase 같은 DB 마이그레이션 도구 사용 가능
📌 주의할 점
- 기존 데이터를 보호하는 전략 필요 (백업, 데이터 변환 등)
- 서비스 중단 최소화 를 위해 롤링 업데이트 방식 적용
DB 스키마와 성능 최적화
스키마 설계 시 성능을 고려해야 한다.
- JOIN 최적화
- 관계형 데이터베이스는 JOIN이 많으면 성능이 저하될 수 있음.
- 외래 키(Foreign Key)를 적절히 사용하고, 필요하면 중복 데이터 허용.
- 파티셔닝(Partitioning) 활용
- 대량의 데이터를 처리할 때 테이블을 여러 개로 분할하여 성능 개선.
- RANGE, LIST, HASH 파티셔닝 전략 활용.
- 캐싱(Caching) 도입
- 자주 조회하는 데이터를 캐싱(DB 캐시, Redis 활용)하여 성능 개선.
마무리
데이터베이스 스키마는 단순한 구조 설계를 넘어 데이터의 효율적인 관리와 성능 최적화를 결정하는 핵심 요소이다.
✔️ 좋은 스키마 설계는 데이터 무결성을 보장하며, 유지보수를 쉽게 만든다.
✔️ 정규화와 반정규화를 적절히 활용하여 성능을 최적화해야 한다.
✔️ 스키마 변경 시에는 마이그레이션(Migration) 전략을 신중하게 계획해야 한다.
이번 글을 통해 DB 스키마의 개념과 중요성을 이해하고, 효율적인 데이터베이스 설계를 위한 기본 원칙을 익히는 데 도움이 되길 바란다. 😊
Reference
'Database' 카테고리의 다른 글
데이터베이스 인덱스(Index) 최적화 방법 (3) | 2025.03.21 |
---|---|
DB 샤딩(Sharding): 개념 및 동작방식 (0) | 2024.05.10 |
PostgreSQL 개념 및 특징(with MySQL) (0) | 2024.03.29 |
MongoDB란? (2) | 2023.05.20 |
Mariadb란? (사용법) (0) | 2022.01.14 |