Language: English | ํ๊ตญ์ด
ORM ํ๋ ์์ํฌ, ์ค์๊ฐ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง, ๋น๋๊ธฐ ์ฐ์ฐ์ ํฌํจํ ํ๋์ ์ธ C++20 ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ถ์ํ ๋ ์ด์ด์ ๋๋ค.
- ๊ฐ์
- ์ฃผ์ ๊ธฐ๋ฅ
- ์๊ตฌ์ฌํญ
- ๋น ๋ฅธ ์์
- ์ค์น
- ์ํคํ ์ฒ
- ํต์ฌ ๊ฐ๋
- API ๊ฐ์
- ์์
- ์ฑ๋ฅ
- ์ํ๊ณ ํตํฉ
- ๊ธฐ์ฌํ๊ธฐ
- ๋ผ์ด์ ์ค
Database System์ PostgreSQL, SQLite, MongoDB, Redis๋ฅผ ํตํฉ๋ ํ์ ์์ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ง์ํ๋ ํฌ๊ด์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฃจ์ ์ ๋๋ค.
ํต์ฌ ๊ฐ์น: ๋ฒค๋ ์ข ์์ฑ ์ ๊ฑฐ, ์ฑ๋ฅ ๊ทน๋ํ, ํตํฉ ํ์ ์์ ์ธํฐํ์ด์ค๋ฅผ ํตํ ๊ฐ๋ฐ ๊ฐ์ํ.
์ฐ๊ฒฐ ๋ชจ๋ ์ํ:
- DirectMode: ํ๋ก๋์ ์ค๋น ์๋ฃ (์์ )
- ProxyMode: ์คํ ๊ตฌํ (
database_server๋๊ธฐ ์ค)
์ต์ ์ ๋ฐ์ดํธ:
- C++20 ๋ชจ๋ ์ง์ ์ถ๊ฐ (
kcenon.database๋ชจ๋) - ๋ก์ปฌ ์ฐ๊ฒฐ ํ๋ง ์ ๊ฑฐ (Phase 4.3) - ProxyMode ๋ง์ด๊ทธ๋ ์ด์
- C++20 Concepts ํตํฉ (SubmittableTask, ErrorHandler, QueryCallback)
- monitoring_system ํตํฉ
- ๋ถ๋ณ ์ฟผ๋ฆฌ ๋น๋ ์ถ๊ฐ
| ๊ธฐ๋ฅ | ์ค๋ช | ์ํ |
|---|---|---|
| PostgreSQL ๋ฐฑ์๋ | libpqxx ๊ธฐ๋ฐ ์ ์ฒด ์ง์ | ์์ |
| SQLite ๋ฐฑ์๋ | ๊ฒฝ๋ ๋ก์ปฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค | ์์ |
| MongoDB ๋ฐฑ์๋ | NoSQL ๋ฌธ์ ์ ์ฅ์ | ์คํ์ |
| Redis ๋ฐฑ์๋ | ํค-๊ฐ ์บ์ ์ ์ฅ์ | ์คํ์ |
| ORM ํ๋ ์์ํฌ | C++20 Concepts ๊ธฐ๋ฐ ์ํฐํฐ ๋งคํ | ์์ |
| ๋ถ๋ณ ์ฟผ๋ฆฌ ๋น๋ | ์ค๋ ๋ ์์ ํจ์ํ ์ฟผ๋ฆฌ ๊ตฌ์ฑ | ์์ |
| ๋ฐฑ์๋ ๋ ์ง์คํธ๋ฆฌ | ๋ฐํ์ ๋ฐฑ์๋ ์ ํ ํฉํ ๋ฆฌ | ์์ |
| ํตํฉ DB ์์คํ | ์ ๋ก ์ค์ ์ง์ ์ (๋น๋ ํจํด) | ์์ |
| ๋น๋๊ธฐ ์ฐ์ฐ | ์ค๋ ๋ ํ ๊ธฐ๋ฐ ๋น๋๊ธฐ ์ฟผ๋ฆฌ | ์์ |
| C++20 ๋ชจ๋ | ๋ชจ๋ ์ํฌํธ ์ง์ | ์คํ์ |
| ์ปดํ์ผ๋ฌ | ์ต์ ๋ฒ์ | ๋น๊ณ |
|---|---|---|
| GCC | 13+ | thread_system ์ ์ด ์์กด์ฑ |
| Clang | 17+ | thread_system ์ ์ด ์์กด์ฑ |
| Apple Clang | 14+ | macOS ์ง์ |
| MSVC | 2022+ | C++20 ๊ธฐ๋ฅ ํ์ |
| ์์กด์ฑ | ๋ฒ์ | ํ์ | ์ค๋ช |
|---|---|---|---|
| CMake | 3.20+ | ์ | ๋น๋ ์์คํ |
| common_system | latest | ์ | ๊ณตํต ์ธํฐํ์ด์ค ๋ฐ Result |
| thread_system | latest | ์๋์ค | ๋น๋๊ธฐ ์ฐ์ฐ์ฉ ์ค๋ ๋ ํ |
| container_system | latest | ์๋์ค | ๋ฐ์ดํฐ ์ง๋ ฌํ |
| monitoring_system | latest | ์๋์ค | ์ฑ๋ฅ ๋ฉํธ๋ฆญ |
| ๋ฐฑ์๋ | ์์กด์ฑ | ๋ฒ์ |
|---|---|---|
| PostgreSQL | libpqxx | 7.9.2 |
| SQLite | sqlite3 | 3.45.0+ |
| MongoDB | mongo-cxx-driver | 3.8.0+ |
| Redis | hiredis | 1.2.0+ |
#include <database/integrated/unified_database_system.h>
int main() {
// ํตํฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ
(์ ๋ก ์ค์ )
auto db = kcenon::database::unified_database_system::builder()
.backend("postgresql")
.connection_string("host=localhost dbname=mydb")
.build();
// ์ฟผ๋ฆฌ ์คํ
auto result = db->execute("SELECT * FROM users WHERE active = true");
if (result.is_ok()) {
for (const auto& row : result.value()) {
// ๊ฒฐ๊ณผ ์ฒ๋ฆฌ
}
}
return 0;
}# ์ํ๊ณ ์์กด์ฑ ์ค์น
./scripts/dependency.sh
# ๋น๋
./scripts/build.shcmake -B build -DCMAKE_BUILD_TYPE=Release -DUSE_POSTGRESQL=ON
cmake --build build| ์ต์ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช |
|---|---|---|
USE_POSTGRESQL |
ON | PostgreSQL ๋ฐฑ์๋ |
USE_SQLITE |
OFF | SQLite ๋ฐฑ์๋ |
USE_MONGODB |
OFF | MongoDB ๋ฐฑ์๋ |
USE_REDIS |
OFF | Redis ๋ฐฑ์๋ |
USE_THREAD_SYSTEM |
ON | ์ค๋ ๋ ํ ํตํฉ |
USE_MONITORING_SYSTEM |
ON | ๋ชจ๋ํฐ๋ง ํตํฉ |
database/
core/ - ๋ฐฑ์๋ ์ธํฐํ์ด์ค, CRTP ๋ฒ ์ด์ค, backend_registry, concepts
backends/ - postgresql, sqlite, mongodb, redis ๊ตฌํ
query/ - immutable_query_builder (์ค๋ ๋ ์์ , ํจ์ํ)
query_builder/ - condition_builder, join_builder, sql_dialect
orm/ - entity.h (ENTITY_TABLE, ENTITY_FIELD ๋งคํฌ๋ก)
integrated/ - unified_database_system (์ ๋ก ์ค์ ์ง์
์ )
async/ - async_operations
monitoring/ - performance_monitor, pool_metrics
security/ - secure_connection (TLS/SSL)
database_system
+-- common_system (ํ์)
+-- thread_system (์ ํ)
+-- container_system (์ ํ)
+-- monitoring_system (์ ํ)
์ค๋ ๋ ์์ ํ ํจ์ํ ์คํ์ผ์ ์ฟผ๋ฆฌ ๊ตฌ์ฑ:
auto query = kcenon::database::immutable_query_builder()
.select({"name", "email"})
.from("users")
.where("active = true")
.order_by("name")
.build();C++20 Concepts ๊ธฐ๋ฐ ์ํฐํฐ ๋งคํ:
struct User : kcenon::database::entity_base {
ENTITY_TABLE("users")
ENTITY_FIELD(std::string, name, "name", primary_key)
ENTITY_FIELD(std::string, email, "email", not_null)
ENTITY_FIELD(bool, active, "active", default_value(true))
};ํฉํ ๋ฆฌ ํจํด์ผ๋ก ๋ฐํ์ ๋ฐฑ์๋ ์ ํ (#ifdef ์์ด):
auto& registry = kcenon::database::backend_registry::instance();
auto backend = registry.create("postgresql", config);๋น๋ ํจํด์ ์ ๋ก ์ค์ ์ง์ ์ ์ผ๋ก, ๋ฐฑ์๋ ์ค์ , ์ฐ๊ฒฐ, ๋ชจ๋ํฐ๋ง์ ์๋์ผ๋ก ๊ตฌ์ฑํฉ๋๋ค.
| API | ํค๋ | ์ค๋ช |
|---|---|---|
database_backend |
core/database_backend.h |
์์ ๊ฐ์ ๋ฐฑ์๋ ์ธํฐํ์ด์ค |
backend_registry |
core/backend_registry.h |
๋ฐํ์ ๋ฐฑ์๋ ํฉํ ๋ฆฌ |
unified_database_system |
integrated/unified_database_system.h |
์ ๋ก ์ค์ ์ง์ ์ |
immutable_query_builder |
query/immutable_query_builder.h |
์ค๋ ๋ ์์ ์ฟผ๋ฆฌ ๋น๋ |
entity_base |
orm/entity.h |
ORM ์ํฐํฐ ๊ธฐ๋ฐ |
async_operations |
async/async_operations.h |
๋น๋๊ธฐ ์ฐ์ฐ |
| ์์ | ๋์ด๋ | ์ค๋ช |
|---|---|---|
| basic_query | ์ด๊ธ | ๊ธฐ๋ณธ SQL ์ฟผ๋ฆฌ ์คํ |
| orm_example | ์ค๊ธ | ORM ์ํฐํฐ CRUD |
| query_builder | ์ค๊ธ | ๋ถ๋ณ ์ฟผ๋ฆฌ ๋น๋ ์ฌ์ฉ |
| multi_backend | ๊ณ ๊ธ | ๋ค์ค ๋ฐฑ์๋ ์ ํ |
| async_operations | ๊ณ ๊ธ | ๋น๋๊ธฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ์ฐ |
- ๋ชจ๋ CI/CD ํ์ดํ๋ผ์ธ ์ ์ (๋ชจ๋ ํ๋ซํผ)
- ThreadSanitizer / AddressSanitizer ํด๋ฆฐ
- C++20 Concepts๋ฅผ ํ์ฉํ ์ปดํ์ผ ํ์ ํ์ ๊ฒ์ฆ
- RAII ๊ธฐ๋ฐ ๋ฆฌ์์ค ๊ด๋ฆฌ
| ๋ฐฑ์๋ | ์ต์ ์ฌ์ฉ์ฒ | ๋น๊ณ |
|---|---|---|
| PostgreSQL | ์ํฐํ๋ผ์ด์ฆ OLTP | ์ ์ฒด ๊ธฐ๋ฅ ์ง์ |
| SQLite | ์๋ฒ ๋๋/๋ก์ปฌ | ๊ฒฝ๋, ์ค์ ๋ถํ์ |
| MongoDB | ๋ฌธ์ ์ ์ฅ์ | ์คํ์ |
| Redis | ์บ์/์ธ์ | ์คํ์ |
common_system (Tier 0) [ํ์]
thread_system (Tier 1) [์ ํ]
container_system (Tier 1) [์ ํ]
monitoring_system (Tier 2) [์ ํ]
database_system (Tier 3) <-- ์ด ํ๋ก์ ํธ
| ํ๋ก์ ํธ | ๊ด๊ณ |
|---|---|
| common_system | ํ์ ์์กด์ฑ |
| thread_system | ๋น๋๊ธฐ ์ฐ์ฐ |
| container_system | ๋ฐ์ดํฐ ์ง๋ ฌํ |
| monitoring_system | ์ฑ๋ฅ ๋ฉํธ๋ฆญ |
| pacs_system | ํ์ ์๋น์ |
| ํ๋ซํผ | ์ปดํ์ผ๋ฌ | ์ํ |
|---|---|---|
| Linux | GCC 13+, Clang 17+ | ์์ ์ง์ |
| macOS | Apple Clang 14+ | ์์ ์ง์ |
| Windows | MSVC 2022+ | ์์ ์ง์ |
๊ธฐ์ฌ๋ฅผ ํ์ํฉ๋๋ค! ์์ธํ ๋ด์ฉ์ ๊ธฐ์ฌ ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ธ์.
- ๋ฆฌํฌ์งํ ๋ฆฌ ํฌํฌ
- ๊ธฐ๋ฅ ๋ธ๋์น ์์ฑ
- ํ ์คํธ์ ํจ๊ป ๋ณ๊ฒฝ ์ฌํญ ์์ฑ
- ๋ก์ปฌ์์ ํ ์คํธ ์คํ
- Pull Request ์ด๊ธฐ
์ด ํ๋ก์ ํธ๋ BSD 3-Clause ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค - ์์ธํ ๋ด์ฉ์ LICENSE ํ์ผ์ ์ฐธ์กฐํ์ธ์.
Made with โค๏ธ by ๐โ๐๐ฅ ๐