Skip to content

Latest commit

ย 

History

History
406 lines (327 loc) ยท 14.8 KB

File metadata and controls

406 lines (327 loc) ยท 14.8 KB
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

Database System Architecture

SSOT: This document is the single source of truth for Database System Architecture.

Language: English | ํ•œ๊ตญ์–ด

๋ชฉ์ฐจ

์ด ๋ฌธ์„œ๋Š” 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   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ

1. Database Abstraction Layer

database_base

๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฑ์—”๋“œ์— ๋Œ€ํ•œ ๊ณตํ†ต ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ์ถ”์ƒ ๊ธฐ๋ณธ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

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 ๋ฐฑ์—”๋“œ

2. Connection Management

database_manager

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๋ฐ ๋ชจ๋“œ ์ „ํ™˜์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹ฑ๊ธ€ํ†ค ๋งค๋‹ˆ์ €์ž…๋‹ˆ๋‹ค.

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: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—… ์บก์Аํ™”

Connection Pooling

์ ์‘ํ˜• ํฌ๊ธฐ ์กฐ์ • ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ๊ฐ–์ถ˜ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์—ฐ๊ฒฐ ํ’€๋ง์ž…๋‹ˆ๋‹ค.

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_;
};

๊ธฐ๋Šฅ:

  • ๋™์  ์—ฐ๊ฒฐ ์ƒ์„ฑ/์†Œ๋ฉธ
  • ์—ฐ๊ฒฐ ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง
  • ์Šค๋ ˆ๋“œ ์•ˆ์ „ ์ž‘์—…
  • ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ํ’€ ํฌ๊ธฐ
  • ์—ฐ๊ฒฐ ํƒ€์ž„์•„์›ƒ ์ฒ˜๋ฆฌ

3. Phase 4 ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ปดํฌ๋„ŒํŠธ

ORM Framework (database/orm/)

์•„ํ‚คํ…์ฒ˜:

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&>;
};

Performance Monitoring (database/monitoring/)

์•„ํ‚คํ…์ฒ˜:

Metrics Collection โ†’ Aggregation โ†’ Alerting โ†’ Export (Prometheus)

์ปดํฌ๋„ŒํŠธ:

  • performance_monitor: ํ•ต์‹ฌ ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘ ๋ฐ ๋ถ„์„
  • connection_metrics: ์—ฐ๊ฒฐ ํ’€ ์‚ฌ์šฉ๋ฅ  ์ถ”์ 
  • query_metrics: ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ํ†ต๊ณ„
  • performance_alert: ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ์•Œ๋ฆผ ์‹œ์Šคํ…œ

์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ:

  • ๊ณ ๋นˆ๋„ ๋ฉ”ํŠธ๋ฆญ์„ ์œ„ํ•œ ์›์ž์  ์นด์šดํ„ฐ
  • ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๋ฎคํ…์Šค ๋ณดํ˜ธ
  • ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๋ฝ ํ”„๋ฆฌ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

Security Framework (database/security/)

๋‹ค์ธต ๋ณด์•ˆ:

Application โ†’ Authentication โ†’ Authorization โ†’ Audit โ†’ Encryption

์ปดํฌ๋„ŒํŠธ:

  • credential_manager: ์•”ํ˜ธํ™”๋ฅผ ์‚ฌ์šฉํ•œ ์•ˆ์ „ํ•œ ์ž๊ฒฉ ์ฆ๋ช… ์ €์žฅ
  • access_control: ์—ญํ•  ๊ธฐ๋ฐ˜ ์•ก์„ธ์Šค ์ œ์–ด (RBAC)
  • audit_logger: ํฌ๊ด„์ ์ธ ๋ณด์•ˆ ์ด๋ฒคํŠธ ๋กœ๊น…
  • security_monitor: ์‹ค์‹œ๊ฐ„ ์œ„ํ˜‘ ๊ฐ์ง€
  • query_security: SQL ์ธ์ ์…˜ ๋ฐฉ์ง€

๋ณด์•ˆ ๊ธฐ๋Šฅ:

  • ์ž๊ฒฉ ์ฆ๋ช…์— ๋Œ€ํ•œ ๋งˆ์Šคํ„ฐ ํ‚ค ์•”ํ˜ธํ™”
  • ํƒ€์ž„์•„์›ƒ์„ ์‚ฌ์šฉํ•œ ์„ธ์…˜ ๊ด€๋ฆฌ
  • ๋ณ€์กฐ ๊ฐ์ง€๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐ์‚ฌ ์ถ”์ 
  • ์œ„ํ˜‘ ํŒจํ„ด ์ธ์‹

Async Operations (database/async/)

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: ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜ ์ผ๊ด€์„ฑ

๋””์ž์ธ ์›์น™

1. SOLID ์›์น™

  • S: ๋‹จ์ผ ์ฑ…์ž„ - ๊ฐ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ๋ณ€๊ฒฝ ์ด์œ ๋ฅผ ๊ฐ€์ง
  • O: ๊ฐœ๋ฐฉ/ํ์‡„ - ์ˆ˜์ • ์—†์ด ํ™•์žฅ ๊ฐ€๋Šฅ
  • L: ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ - ์ƒํ˜ธ ๊ตํ™˜ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฑ์—”๋“œ
  • I: ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ - ์ง‘์ค‘๋œ ์ธํ„ฐํŽ˜์ด์Šค
  • D: ์˜์กด์„ฑ ์—ญ์ „ - ์ถ”์ƒํ™”์— ์˜์กด

2. ํ˜„๋Œ€์ ์ธ C++ ๋ชจ๋ฒ” ์‚ฌ๋ก€

  • RAII: ์ž๋™ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ
  • Smart Pointers: ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์„ฑ
  • Move Semantics: ์„ฑ๋Šฅ ์ตœ์ ํ™”
  • Constexpr: ์ปดํŒŒ์ผ ํƒ€์ž„ ๊ณ„์‚ฐ
  • Template Metaprogramming: ํƒ€์ž… ์•ˆ์ „์„ฑ

3. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํŒจํ„ด

  • Layered Architecture: ๋ช…ํ™•ํ•œ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ
  • Plugin Architecture: ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฑ์—”๋“œ
  • Event-Driven Architecture: ๋น„๋™๊ธฐ ์ž‘์—… ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง
  • Microservices Ready: ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜ ์ง€์›

์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ

๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜

  1. std::mutex: ๊ณต์œ  ์ƒํƒœ ๋ณดํ˜ธ
  2. std::atomic: ๋ฝ ํ”„๋ฆฌ ์นด์šดํ„ฐ ๋ฐ ํ”Œ๋ž˜๊ทธ
  3. std::condition_variable: ์Šค๋ ˆ๋“œ ์กฐ์ •
  4. std::shared_mutex: ์ฝ๊ธฐ ์ค‘์‹ฌ ์ž‘์—…์„ ์œ„ํ•œ ์ฝ๊ธฐ-์“ฐ๊ธฐ ์ž ๊ธˆ

์Šค๋ ˆ๋“œ ์•ˆ์ „ ์ปดํฌ๋„ŒํŠธ

  • ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์€ ์Šค๋ ˆ๋“œ ์•ˆ์ „
  • ์—ฐ๊ฒฐ ํ’€์€ ๋™์‹œ ์•ก์„ธ์Šค ์ง€์›
  • ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง์€ ์›์ž์  ์ž‘์—… ์‚ฌ์šฉ

Common System Result ํ†ตํ•ฉ

  • common_system Result ํƒ€์ž…๊ณผ์˜ ์ปดํŒŒ์ผ ํƒ€์ž„ ์„ ํƒ์  ํ†ตํ•ฉ
  • 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 ๋ ˆ์ด์–ด ๊ฐ„์˜ ํƒ€์ž… ์ง๋ ฌํ™”๋ฅผ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ ์‚ฌ์šฉ
  • ๋ณด์•ˆ ๊ฐ์‚ฌ ๋กœ๊น…์€ ์Šค๋ ˆ๋“œ ์•ˆ์ „

์—๋Ÿฌ ์ฒ˜๋ฆฌ

์˜ˆ์™ธ ์•ˆ์ „์„ฑ ๋ณด์žฅ

  1. No-throw: ์„ฑ๋Šฅ ์ค‘์‹ฌ ์ž‘์—…
  2. Strong: ํŠธ๋žœ์žญ์…˜ ์ž‘์—…
  3. Basic: ๋ฆฌ์†Œ์Šค ์ •๋ฆฌ ๋ณด์žฅ

์—๋Ÿฌ ์ „ํŒŒ

// ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์€ ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜
bool success = db.execute_query("INSERT ...");

// ์ค‘์š”ํ•œ ์˜ค๋ฅ˜๋Š” ์˜ˆ์™ธ๋ฅผ ๋˜์ง
try {
    auto result = db.select_query("SELECT ...");
} catch (const database_exception& e) {
    // ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠน์ • ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ
}

์„ฑ๋Šฅ ํŠน์„ฑ

Connection Pool

  • O(1) ์—ฐ๊ฒฐ ํš๋“/ํ•ด์ œ
  • ๋ถ€ํ•˜์— ๋”ฐ๋ฅธ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ํ’€ ํฌ๊ธฐ ์กฐ์ •
  • ์ ์‘ํ˜• ์—ฐ๊ฒฐ ์ƒ์„ฑ/์†Œ๋ฉธ

Query Execution

  • SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์œ„ํ•œ Prepared statements
  • ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•œ Connection reuse
  • ์ฒ˜๋ฆฌ๋Ÿ‰ ํ–ฅ์ƒ์„ ์œ„ํ•œ Bulk operations

Memory Management

  • ์ž์ฃผ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ์œ„ํ•œ 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 ์ง€์›

๋นŒ๋“œ ๊ตฌ์„ฑ

CMake ์˜ต์…˜

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