Zig ๊ธฐ๋ฐ Hybrid Cache ์์ง Dunena v0.3.1์ ์ํคํ ์ฒ ๊ณ ๋ํ
Dunena Update: What Happened After I Over-Engineered My First Project ๐
AI ์์ฝ
Context
์ด๊ธฐ Zig์ TypeScript ๊ธฐ๋ฐ์ ํ์ด๋ธ๋ฆฌ๋ ์บ์ ์์ง์์ ๋ฐ์ํ ๊ธฐ๋ฅ์ ์ ์ฝ๊ณผ ๋จ์ LRU ์ ์ฑ ์ ํ๊ณ๋ฅผ ๋ถ์. ๋จ์ผ Writer ์์คํ ์ธ SQLite ๊ธฐ๋ฐ ๊ตฌ์กฐ์์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ๊ณผ ํ์ฅ์ฑ์ ํ๋ณดํด์ผ ํ๋ ๊ณผ์ ์ง๋ฉด.
Technical Solution
- Recency์ Frequency๋ฅผ ์๋ ์กฐ์ ํ๋ ARC(Adaptive Replacement Cache) ์๊ณ ๋ฆฌ์ฆ์ Zig Core์ ๊ตฌํํ์ฌ ์ํฌ๋ก๋๋ณ ์ต์ ์บ์ฑ ์ํ
- GET-Increment-SET ๊ณผ์ ์ Network Round-trip ์ ๊ฑฐ๋ฅผ ์ํด Zig Core ๋ ๋ฒจ์ Native Atomic Operations(INCR, DECR, CAS) ๋์
- Write-through Replication ๊ตฌ์กฐ ์ค๊ณ๋ฅผ ํตํ Primary-Secondary ๊ฐ ๋ฐ์ดํฐ ๋๊ธฐํ ๋ฐ Hot Standby ๊ฐ์ฉ์ฑ ํ๋ณด
- Dynamic Import ํจํด์ ์ ์ฉํ Database Proxy Connector ํ์ฅ์ ํตํด MongoDB, Redis, Elasticsearch ์ง์ ๋ฐ ์ข ์์ฑ ์ต์ ํ
- SQLite WAL mode ํ์ฉ๊ณผ In-memory Zig Cache์ ๋ถ๋ฆฌ๋ฅผ ํตํ ์ฝ๊ธฐ ์ฑ๋ฅ์ ์ํ์ ํ์ฅ ๊ตฌ์กฐ ์ค๊ณ
- ReleaseSafe ๋น๋ ์ต์ ์ ํตํ Bounds Checking ์ ์ง๋ก Undefined Behavior ๋ฐฉ์ง ๋ฐ ์์คํ ์์ ์ฑ ๊ฐํ
์ค์ฒ ํฌ์ธํธ
1. ์บ์ ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ ์ ์ ์ ์ํฌ๋ก๋ ํน์ฑ์ ๋ฐ๋ผ LRU/LFU ๋์ ARC ๋์ ๊ฒํ
2. ๋ถ์ฐ ์์คํ ์ ์ํ ์ ๋ฐ์ดํธ ์ Race Condition ๋ฐฉ์ง๋ฅผ ์ํด CAS(Compare-and-Swap) ๊ธฐ๋ฐ ๋ฒ์ ๊ด๋ฆฌ ์ ์ฉ
3. ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด์ฑ ์ฆ๊ฐ๋ฅผ ๋ง๊ธฐ ์ํด Dynamic Import ๊ธฐ๋ฐ์ ํ๋ฌ๊ทธ์ธ ์ํคํ ์ฒ ๊ณ ๋ ค
4. ์ฑ๋ฅ ์ต์ ํ ๋จ๊ณ์์๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ ์ํด Bounds Checking์ด ํฌํจ๋ ๋น๋ ํ๋กํ์ผ ์ ์ง