스키마(Schema)의 개념
스키마(Schema)는 데이터베이스(Database)에서 데이터 구조와 구성 방식을 정의하는 설계도입니다. 즉, 어떤 데이터가 어떤 형식(Data Type)으로 저장되며, 데이터 간의 관계(Relationship)가 어떻게 설정되는지를 규정합니다.
스키마의 주요 기능:
- 데이터 무결성(Data Integrity) 유지
- 데이터 타입 및 구조 표준화
- 관계 및 제약조건(Constraints) 정의
- 애플리케이션과 DB 간 일관된 인터페이스 제공
DB 유형과 DB 스키마
| DB 유형 | 특징 | 예시 제품 | DB 스키마 특성 |
|---|---|---|---|
| 관계형 (RDB) | 고정된 테이블 구조, 엄격한 데이터 타입 필요 | MySQL, PostgreSQL, SQLite | SQL DDL로 스키마를 사전 정의 |
| 문서형 (NoSQL) | JSON/BSON 문서 기반 저장, 구조 유연 | MongoDB, Firebase Firestore | 스키마 없이도 저장 가능, 동적 필드 지원 |
| 키-값 (Key-Value) | 단순 Key-Value 쌍 저장, 매우 빠른 조회 | Redis, DynamoDB | 스키마 개념 없음, Key 네이밍 규칙 중심 |
| 벡터(Vector) DB | 데이터의 임베딩 벡터 기반 유사도 검색 | FAISS, PGVector, Weaviate, Milvus, Qdrant | 벡터 차원, 인덱스 구조 정의 중심 |
관계형 데이터베이스(RDB) 스키마 예시
고객-주문 관계 스키마
| Customers | ||
|---|---|---|
| id (PK) | name | |
| INT(자동 증가) | VARCHAR(50) | VARCHAR(100) |
| Orders | ||
|---|---|---|
| id (PK) | customer_id (FK) | total_price |
| INT(자동 증가) | INT(고객 테이블 참조) | DECIMAL(10,2) |
id (PK): 고유 식별자(Primary Key)customer_id (FK): 외래 키(Foreign Key), 고객-주문 관계 연결- 사전 정의된 스키마에 따라 데이터 무결성 유지
문서형 데이터베이스(NoSQL) 스키마 예시
문서형 데이터베이스는 데이터를 JSON 또는 BSON 형태의 문서 단위로 저장합니다.
관계형 DB처럼 엄격한 스키마를 강제하지 않으며, 문서 구조를 필요에 따라 자유롭게 변경할 수 있습니다.
json
{
"customer_id": 123,
"name": "김철수",
"email": "chulsu@example.com",
"orders": [
{
"order_id": 1001,
"total_price": 25000
},
{
"order_id": 1002,
"total_price": 40000
}
]
}
- 한 문서에 고객·주문 데이터를 함께 저장 가능
- 필드 추가·삭제가 자유로움
- 데이터 조회 시 조인(Join) 없이 한 번에 읽기 가능
- JSON vs XML: 문서형 DB에서 가장 흔히 사용하는 데이터 포맷은 JSON이며, 과거 일부 시스템은 XML을 사용했습니다.
JSON 예시
json
{"name": "John", "age": 30}
XML 예시
xml
<person><name>John</name><age>30</age></person>
키-값(Key-Value) 데이터베이스 스키마 예시
키-값 DB는 데이터 저장 방식이 Key → Value 단일 매핑 구조입니다.
전통적인 스키마가 존재하지 않으며, Key 네이밍 규칙과 Value 포맷만 설계 요소로 사용됩니다.
json
{
"customer:123": {
"name": "김철수",
"email": "chulsu@example.com"
},
"order:1001": {
"customer_id": 123,
"total_price": 25000
}
}
- 매우 빠른 읽기/쓰기 성능
- 조인 기능 없음 → 관계형 연산은 애플리케이션에서 처리
- 캐시·세션·실시간 데이터에 최적화
문서형 DB vs 키-값 DB 차이점
| 구분 | 문서형 DB | 키-값 DB |
|---|---|---|
| 데이터 단위 | 문서(Document) | Key-Value 쌍 |
| 내부 구조 | JSON/BSON 등 구조화된 데이터 | Value는 보통 비구조 데이터(Blob) |
| 스키마 유연성 | 높음 (필드 동적 추가 가능) | 스키마 없음 (Key 네이밍만 규칙) |
| 관계 표현 | 한 문서에 관계 데이터 포함 가능 | 관계 표현 불가 (애플리케이션에서 처리) |
| 조회 방식 | 필드 기반 쿼리 가능 (ex: MongoDB find) | Key 직접 조회만 가능 |
| 적합 사례 | 복잡한 데이터 구조 저장, 검색 | 초고속 조회·캐싱·세션 관리 |
벡터(Vector) 데이터베이스 스키마 예시
sql
CREATE TABLE documents (
id SERIAL PRIMARY KEY,
content TEXT,
embedding VECTOR(1536)
);
embedding: 벡터 차원 수 (예: 1536차원)- 검색: Cosine Similarity, Dot Product 기반