| doc_id | DBS-ARCH-001 |
|---|---|
| doc_title | Database System Architecture |
| doc_version | 1.0.0 |
| doc_date | 2026-04-04 |
| doc_status | Released |
| project | database_system |
| category | ARCH |
SSOT: This document is the single source of truth for Database System Architecture.
Language: English | ํ๊ตญ์ด
- ๊ฐ์
- ์ํคํ ์ฒ ๋ ์ด์ด
- ํต์ฌ ์ปดํฌ๋ํธ
- ๋์์ธ ์์น
- ์ค๋ ๋ ์์ ์ฑ
- Common System Result ํตํฉ
- ๋ค๋ฅธ ๋ชจ๋๊ณผ์ ์ํธ ์ด์ฉ์ฑ
- ์๋ฌ ์ฒ๋ฆฌ
- ์ฑ๋ฅ ํน์ฑ
- ํ์ฅ์ฑ
- ๋ชจ๋ํฐ๋ง ๋ฐ ๊ด์ฐฐ์ฑ
- ํฅํ ํ์ฅ
- ์์กด์ฑ
- ๋น๋ ๊ตฌ์ฑ
์ด ๋ฌธ์๋ Database System Phase 4 ๊ตฌํ์ ์ํคํ ์ฒ์ ๋์์ธ ํจํด์ ์ค๋ช ํฉ๋๋ค.
Database System์ ํ๋ก๋์ ํ๊ฒฝ์ ์ํ ๊ณ ๊ธ ๊ธฐ๋ฅ๊ณผ ํจ๊ป ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฑ์๋์ ๋ํ ํตํฉ ์ก์ธ์ค๋ฅผ ์ ๊ณตํ๋ ๋ชจ๋์ ์ํฐํ๋ผ์ด์ฆ๊ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ถ์ํ ๋ ์ด์ด๋ก ์ค๊ณ๋์์ต๋๋ค.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Application Layer โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ ORM Framework โ Security Layer โ Async Operations โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Performance Monitoring โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Query Builders โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Connection Pooling โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Database Manager โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ PostgreSQL โ SQLite โ MongoDB โ Redis โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฑ์๋์ ๋ํ ๊ณตํต ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ ์ถ์ ๊ธฐ๋ณธ ํด๋์ค์ ๋๋ค.
class database_base {
public:
virtual database_types database_type() = 0;
virtual bool connect(const std::string& connect_string) = 0;
virtual bool execute_query(const std::string& query_string) = 0;
virtual database_result select_query(const std::string& query_string) = 0;
// ... other virtual methods
};์ฌ์ฉ๋ ๋์์ธ ํจํด:
- Strategy Pattern: ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฑ์๋๊ฐ ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํ
- Template Method Pattern: ๊ธฐ๋ณธ ํด๋์ค์ ๊ณตํต ์์ ์ ์
- RAII: ์ฐ๊ฒฐ์ ๋ํ ์๋ ๋ฆฌ์์ค ๊ด๋ฆฌ
postgres_manager: libpqxx๋ฅผ ์ฌ์ฉํ๋ PostgreSQL ๋ฐฑ์๋sqlite_manager: sqlite3๋ฅผ ์ฌ์ฉํ๋ SQLite ๋ฐฑ์๋mongodb_manager: mongocxx๋ฅผ ์ฌ์ฉํ๋ MongoDB ๋ฐฑ์๋redis_manager: hiredis๋ฅผ ์ฌ์ฉํ๋ Redis ๋ฐฑ์๋
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๋ฐ ๋ชจ๋ ์ ํ์ ์ฒ๋ฆฌํ๋ ์ฑ๊ธํค ๋งค๋์ ์ ๋๋ค.
class database_manager {
public:
static database_manager& handle();
bool set_mode(database_types db_type);
bool connect(const std::string& connection_string);
// ... database operations
};์ฌ์ฉ๋ ๋์์ธ ํจํด:
- Singleton Pattern: ์ ์ญ ์ก์ธ์ค ํฌ์ธํธ
- Factory Pattern: ์ ์ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฑ์๋ ์์ฑ
- Command Pattern: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์บก์ํ
์ ์ํ ํฌ๊ธฐ ์กฐ์ ๋ฐ ๋ชจ๋ํฐ๋ง์ ๊ฐ์ถ ์ํฐํ๋ผ์ด์ฆ๊ธ ์ฐ๊ฒฐ ํ๋ง์ ๋๋ค.
class connection_pool {
private:
std::queue<std::unique_ptr<database_base>> available_connections_;
std::vector<std::unique_ptr<database_base>> active_connections_;
mutable std::mutex pool_mutex_;
std::condition_variable pool_condition_;
};๊ธฐ๋ฅ:
- ๋์ ์ฐ๊ฒฐ ์์ฑ/์๋ฉธ
- ์ฐ๊ฒฐ ์ํ ๋ชจ๋ํฐ๋ง
- ์ค๋ ๋ ์์ ์์
- ๊ตฌ์ฑ ๊ฐ๋ฅํ ํ ํฌ๊ธฐ
- ์ฐ๊ฒฐ ํ์์์ ์ฒ๋ฆฌ
์ํคํ ์ฒ:
Entity Definition โ Metadata Generation โ Schema Management โ Query Execution
์ฃผ์ ์ปดํฌ๋ํธ:
entity_base: ๋ชจ๋ ORM ์ํฐํฐ์ ๊ธฐ๋ณธ ํด๋์คfield_metadata: ์ํฐํฐ ํ๋์ ๋ํ ํ์ ์ ๋ณด ๋ฐ ์ ์ฝ ์กฐ๊ฑดentity_metadata: ์์ ํ ํ ์ด๋ธ ์คํค๋ง ์ ๋ณดquery_builder<Entity>: ํ์ ์์ ์ฟผ๋ฆฌ ๊ตฌ์ฑentity_manager: ์คํค๋ง ๋๊ธฐํ ๋ฐ ์ํฐํฐ ์๋ช ์ฃผ๊ธฐ
์ฌ์ฉ๋ C++20 ๊ธฐ๋ฅ:
- Concepts: ํ์ ์์ ์ํฐํฐ ์ ์
- Template Metaprogramming: ์ปดํ์ผ ํ์ ์คํค๋ง ๊ฒ์ฆ
- SFINAE: ํ์ ํน์ฑ ๊ธฐ๋ฐ ํ๋ ๊ฐ์ง
template<typename T>
concept Entity = requires(T t) {
typename T::primary_key_type;
{ t.table_name() } -> std::convertible_to<std::string>;
{ t.get_metadata() } -> std::same_as<const entity_metadata&>;
};์ํคํ ์ฒ:
Metrics Collection โ Aggregation โ Alerting โ Export (Prometheus)
์ปดํฌ๋ํธ:
performance_monitor: ํต์ฌ ๋ฉํธ๋ฆญ ์์ง ๋ฐ ๋ถ์connection_metrics: ์ฐ๊ฒฐ ํ ์ฌ์ฉ๋ฅ ์ถ์ query_metrics: ์ฟผ๋ฆฌ ์ฑ๋ฅ ํต๊ณperformance_alert: ๊ตฌ์ฑ ๊ฐ๋ฅํ ์๋ฆผ ์์คํ
์ค๋ ๋ ์์ ์ฑ:
- ๊ณ ๋น๋ ๋ฉํธ๋ฆญ์ ์ํ ์์์ ์นด์ดํฐ
- ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ํ ๋ฎคํ ์ค ๋ณดํธ
- ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ฝ ํ๋ฆฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ
๋ค์ธต ๋ณด์:
Application โ Authentication โ Authorization โ Audit โ Encryption
์ปดํฌ๋ํธ:
credential_manager: ์ํธํ๋ฅผ ์ฌ์ฉํ ์์ ํ ์๊ฒฉ ์ฆ๋ช ์ ์ฅaccess_control: ์ญํ ๊ธฐ๋ฐ ์ก์ธ์ค ์ ์ด (RBAC)audit_logger: ํฌ๊ด์ ์ธ ๋ณด์ ์ด๋ฒคํธ ๋ก๊นsecurity_monitor: ์ค์๊ฐ ์ํ ๊ฐ์งquery_security: SQL ์ธ์ ์ ๋ฐฉ์ง
๋ณด์ ๊ธฐ๋ฅ:
- ์๊ฒฉ ์ฆ๋ช ์ ๋ํ ๋ง์คํฐ ํค ์ํธํ
- ํ์์์์ ์ฌ์ฉํ ์ธ์ ๊ด๋ฆฌ
- ๋ณ์กฐ ๊ฐ์ง๋ฅผ ์ฌ์ฉํ ๊ฐ์ฌ ์ถ์
- ์ํ ํจํด ์ธ์
Async ์ํคํ ์ฒ:
std::future โ C++20 Coroutines โ Stream Processing
์ปดํฌ๋ํธ:
async_executor: ๋น๋๊ธฐ ์์ ์ ์ํ ์ค๋ ๋ ํasync_database: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ํ ๋น๋๊ธฐ ๋ํผdatabase_awaitable: C++20 ์ฝ๋ฃจํด ์ง์stream_processor: ์ค์๊ฐ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ
๋์์ฑ ํจํด:
- Actor Model: ๋น๋๊ธฐ ์์ ์ ์ํ ๋ฉ์์ง ์ ๋ฌ
- Future/Promise: ๋น๋๊ธฐ ๊ฒฐ๊ณผ ์ฒ๋ฆฌ
- Coroutines: ํ๋์ ์ธ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ
- Two-Phase Commit: ๋ถ์ฐ ํธ๋์ญ์ ์ผ๊ด์ฑ
- S: ๋จ์ผ ์ฑ ์ - ๊ฐ ํด๋์ค๋ ํ๋์ ๋ณ๊ฒฝ ์ด์ ๋ฅผ ๊ฐ์ง
- O: ๊ฐ๋ฐฉ/ํ์ - ์์ ์์ด ํ์ฅ ๊ฐ๋ฅ
- L: ๋ฆฌ์ค์ฝํ ์นํ - ์ํธ ๊ตํ ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฑ์๋
- I: ์ธํฐํ์ด์ค ๋ถ๋ฆฌ - ์ง์ค๋ ์ธํฐํ์ด์ค
- D: ์์กด์ฑ ์ญ์ - ์ถ์ํ์ ์์กด
- RAII: ์๋ ๋ฆฌ์์ค ๊ด๋ฆฌ
- Smart Pointers: ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ
- Move Semantics: ์ฑ๋ฅ ์ต์ ํ
- Constexpr: ์ปดํ์ผ ํ์ ๊ณ์ฐ
- Template Metaprogramming: ํ์ ์์ ์ฑ
- Layered Architecture: ๋ช ํํ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ
- Plugin Architecture: ํ์ฅ ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฑ์๋
- Event-Driven Architecture: ๋น๋๊ธฐ ์์ ๋ฐ ๋ชจ๋ํฐ๋ง
- Microservices Ready: ๋ถ์ฐ ํธ๋์ญ์ ์ง์
- std::mutex: ๊ณต์ ์ํ ๋ณดํธ
- std::atomic: ๋ฝ ํ๋ฆฌ ์นด์ดํฐ ๋ฐ ํ๋๊ทธ
- std::condition_variable: ์ค๋ ๋ ์กฐ์
- std::shared_mutex: ์ฝ๊ธฐ ์ค์ฌ ์์ ์ ์ํ ์ฝ๊ธฐ-์ฐ๊ธฐ ์ ๊ธ
- ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ค๋ ๋ ์์
- ์ฐ๊ฒฐ ํ์ ๋์ ์ก์ธ์ค ์ง์
- ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง์ ์์์ ์์ ์ฌ์ฉ
common_systemResult ํ์ ๊ณผ์ ์ปดํ์ผ ํ์ ์ ํ์ ํตํฉcommon::Result<T>/common::VoidResult๋ํผ๋ฅผ ํ์ฑํํ๋ ค๋ฉดDATABASE_USE_COMMON_SYSTEM์ ์:connect_result(const std::string&)disconnect_result()create_query_result(const std::string&)
- ์ด์ : ์์ธ ์๋ ์ค๋ฅ ์ ํ, ํ์คํ๋ error_info
container_system๊ณผ ํจ๊ป: ํด๋น๋๋ ๊ฒฝ์ฐ app๊ณผ DB ๋ ์ด์ด ๊ฐ์ ํ์ ์ง๋ ฌํ๋ฅผ ์ํด ์ปจํ ์ด๋ ์ฌ์ฉ- ๋ณด์ ๊ฐ์ฌ ๋ก๊น ์ ์ค๋ ๋ ์์
- No-throw: ์ฑ๋ฅ ์ค์ฌ ์์
- Strong: ํธ๋์ญ์ ์์
- Basic: ๋ฆฌ์์ค ์ ๋ฆฌ ๋ณด์ฅ
// ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์ ์ํ๋ฅผ ๋ฐํ
bool success = db.execute_query("INSERT ...");
// ์ค์ํ ์ค๋ฅ๋ ์์ธ๋ฅผ ๋์ง
try {
auto result = db.select_query("SELECT ...");
} catch (const database_exception& e) {
// ๋ฐ์ดํฐ๋ฒ ์ด์ค ํน์ ์ค๋ฅ ์ฒ๋ฆฌ
}- O(1) ์ฐ๊ฒฐ ํ๋/ํด์
- ๋ถํ์ ๋ฐ๋ฅธ ๊ตฌ์ฑ ๊ฐ๋ฅํ ํ ํฌ๊ธฐ ์กฐ์
- ์ ์ํ ์ฐ๊ฒฐ ์์ฑ/์๋ฉธ
- SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ํ Prepared statements
- ์ค๋ฒํค๋๋ฅผ ์ต์ํํ๊ธฐ ์ํ Connection reuse
- ์ฒ๋ฆฌ๋ ํฅ์์ ์ํ Bulk operations
- ์์ฃผ ์์ฑ๋๋ ๊ฐ์ฒด๋ฅผ ์ํ Object pooling
- ์๋ ์ ๋ฆฌ๋ฅผ ์ํ Smart pointers
- ๋ณต์ฌ๋ฅผ ์ต์ํํ๊ธฐ ์ํ Move semantics
- ํตํฉ ์ธํฐํ์ด์ค๋ฅผ ํตํ ๋ฉํฐ ๋ฐฑ์๋ ์ง์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค๋น Connection pooling
- ๋ ผ๋ธ๋กํน I/O๋ฅผ ์ํ Async operations
- ํ๋์จ์ด ๊ธฐ๋ฐ Thread pool ํฌ๊ธฐ ์กฐ์
- ๊ฐ๋ฅํ ๊ฒฝ์ฐ Lock-free data structures
- ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ
- ์ฟผ๋ฆฌ ์คํ ์๊ฐ ๋ฐ ํ์
- ์ฐ๊ฒฐ ํ ์ฌ์ฉ๋ฅ
- ์ค๋ฅ ๋น์จ ๋ฐ ์ ํ
- ๋ณด์ ์ด๋ฒคํธ ๋ฐ ์ํ
- Prometheus: ์๊ณ์ด ๋ฉํธ๋ฆญ
- JSON: REST API ์๋ํฌ์ธํธ
- Logs: ๊ตฌ์กฐํ๋ ๋ก๊น ์ถ๋ ฅ
- GraphQL Support: ํ๋์ ์ธ ์ฟผ๋ฆฌ ์ธํฐํ์ด์ค
- Caching Layer: Redis ๊ธฐ๋ฐ ์ฟผ๋ฆฌ ์บ์ฑ
- Schema Migrations: ์๋ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฒ์ ๊ด๋ฆฌ
- Multi-tenant Support: ํ ๋ํธ ๊ฒฉ๋ฆฌ
- Custom Database Backends:
database_base๊ตฌํ - Custom Security Providers: ๋ณด์ ์ธํฐํ์ด์ค ๊ตฌํ
- Custom Metrics Exporters: ๋ชจ๋ํฐ๋ง ์์คํ ํ์ฅ
- Custom Query Languages: ์ฟผ๋ฆฌ ๋น๋ ํ์ฅ
- C++20 Standard Library: ํต์ฌ ๊ธฐ๋ฅ
- Database Client Libraries: ๋ฐฑ์๋๋ณ (์ ํ ์ฌํญ)
- OpenSSL: ์ํธํ ๋ฐ TLS ์ง์
- libpqxx: PostgreSQL ์ง์
- sqlite3: SQLite ์ง์
- mongocxx: MongoDB ์ง์
- hiredis: Redis ์ง์
option(ENABLE_POSTGRESQL "Enable PostgreSQL support" ON)
option(ENABLE_SQLITE "Enable SQLite support" OFF)
option(ENABLE_MONGODB "Enable MongoDB support" OFF)
option(ENABLE_REDIS "Enable Redis support" OFF)- Header-only: ํต์ฌ ์ปดํฌ๋ํธ
- Optional linking: ๋ฐ์ดํฐ๋ฒ ์ด์ค ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- Mock implementations: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ด ํ ์คํธ
์ด ์ํคํ ์ฒ๋ ํ๋์ ์ธ C++ ๊ธฐ๋ฅ, ํฌ๊ด์ ์ธ ๋ณด์ ๋ฐ ๊ณ ํ์ง ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง์ ๊ฐ์ถ ์ํฐํ๋ผ์ด์ฆ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๊ฒฌ๊ณ ํ ๊ธฐ๋ฐ์ ์ ๊ณตํฉ๋๋ค.
Last Updated: 2025-10-20