๋ชฉ๋ก์ ์ฒด ๊ธ (1099)
KoreanFoodie's Study
[C++ ๊ฒ์ ์๋ฒ] 7-4. ORM ํต์ฌ : 1. ORM ์ ์ฌ์ฉํ๋ฉด, DB ๋ฅผ ๊ฐํธํ๊ฒ ๊ด๋ฆฌํ ์ ์๋ค. ์ด๋ฒ ๊ธ์์๋ ๊ฐ๋จํ ORM ์ ๋ง๋ค์ด ๋ณด๋๋ก ํ๊ฒ ๋ค. ์ฐธ๊ณ ๋ก ORM ์ด๋... ๋ผ๊ณ ํ๋ค. ์์ธํ ์ค๋ช ์ ์ด ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์. ์.. ์ผ๋จ DB ๋ชจ๋ธ์ ํํํ๋ DBModel ๊ณผ, ํ์ฌ DBModel ์ ๋ง๊ฒ Table ์ ๊ตฌ์ฑํด ์ฃผ๋ DBSynchronizer ํด๋์ค๋ฅผ ๋ง๋ค ๊ฒ์ด๋ค. ๊ทธ๋ฐ๋ฐ... ์ด๊ฒ ํ๋ํ๋ ์ค๋ช ํ๊ธฐ์๋ ์์ด ๋ง๊ณ , ๊ตณ์ด ์๊ธฐํ ํ์๋ ์๊ธฐ์... ๋์ค์ ํ์ํ ๋ ์ฌ์ฉ(?) ๋ค์ถฐ๋ณด๋ ๊ฒ์ผ๋ก ํ๊ณ , ์์ ์ฝ๋๋ง ๊ธฐ๋กํ๊ณ ๋์ด๊ฐ๋๋ก ํ๊ฒ ๋ค. ์ ๋ ๊ท์ฐฎ์์ ๋์ฐ๋ ค๊ณ ํ๋๊ฒ ์๋๋ค. ๐ ๋๋ณด๊ธฐ DBModel #pragma once #include "Types.h" NAMESPAC..
[C++ ๊ฒ์ ์๋ฒ] 7-3. XML Parser ํต์ฌ : 1. DB ๋ ๋ฒ์ ๊ด๋ฆฌ๊ฐ ํ์ํ๋ฉฐ, ๋ฐ๋ผ์ ํ ์ด๋ธ๊ณผ ์ฟผ๋ฆฌ๋ ๋ฒ์ ์ ๋ง๊ฒ ์กด์ฌํด์ผ ํ๋ค. ์ด๋ฅผ ์ํ XML Parser ๋ฅผ ๋ง๋ค์ด ๋ณธ๋ค. ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค ๋ณด๋ฉด ์์ฐ์ค๋ฝ๊ฒ ๋ฒ์ ๊ด๋ฆฌ๊ฐ ํ์ํ๋ค. ์ด๋ ์ฌ์ค DB ์๋ ๋ง์ฐฌ๊ฐ์ง์ธ๋ฐ, ์ด๋ค ๋ฒ์ ์์๋ ํน์ ํ ์ด๋ธ์ ํน์ ์ปฌ๋ผ์ด ์๋ค๋์ง, ์ถํ ๋ฒ์ ์์ ํ ์ด๋ธ์ด ์ถ๊ฐ๋๋ค๋์ง ํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์ฟผ๋ฆฌ๋ ๊ทธ๋ฐ DB ์ ๋ณ๋์ ๋ง๊ฒ ๋ด์ฉ๋ฌผ์ด ๋ฐ๋์ด์ผ ํ๋๋ฐ... ๋ณดํต ์ด๋ฅผ ๊ด๋ฆฌํด ์ฃผ๋ ์ง๊ตฐ์ด DBA ์ด๋ค(๋ฌผ๋ก ์๋ฒ ๋ด๋น์๊ฐ ํ๊ธฐ๋ ํ๋ค). ์ฐ๋ฆฌ๋ ์์ผ๋ก ์ด๋ฐ DB ์ฟผ๋ฆฌ๋ฅผ XML ๋ก ๊ด๋ฆฌํ ๋ค์, ์ค์ ๋ก GameServer ์์ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ ค์ค ๋ XML Parser ๋ฅผ ์ด์ฉํด ํด๋น ์ฟผ๋ฆฌ๊ฐ ์๋..
[C++ ๊ฒ์ ์๋ฒ] 7-2. DB Bind ํต์ฌ : 1. TMP ๋ฅผ ํ์ฉํ์ฌ BindParam/BindCol ์ ๊ฐ๋ตํํด ๋ณด์. ์ด์ ์ DBConnection ์ ๋ง๋ค๋ฉด์, BindParam ์ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , BindCol ์ ์ด์ฉํด DB ์์ ๊ฐ์ ์กฐํํ๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ์ค ์ด๋ฐ ํจ์๋ค์ ํ์ ๋ณ๋ก ๋ง๋ค์ด ์ค์ผ ํ๋ค. ๊ทธ๋์ DBConnection ์ ๋ค์ ํจ์๋ค์ ์ถ๊ฐํ๊ณ , ๊ธฐ์กด BindParam/BindCol ์ private ์ผ๋ก ๋นผ ์คฌ๋ค. public: boolBindParam(int32 paramIndex, bool* value, SQLLEN* index); boolBindParam(int32 paramIndex, float* value, SQLLEN* index); boolBindP..
[C++ ๊ฒ์ ์๋ฒ] 7-1. DB Connection ํต์ฌ : 1. ์ค์ ๋ก DB ๋ฅผ ์ฐ๋ํด ๋ณด์. ์ฐ๊ฒฐ์ ์ํ DBConnection/DBConnectionPool ์ ๋ง๋ค์ด ๋ณด์. 2. ์ค์ต์์๋ ODBC ์๋ฒ๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค. ๋ํ ๋ก๊ทธ๋ ํ์ผ ์์คํ ์ ๋จ๊ฒจ์ผ ์ถํ ๋ฒ๊ทธ๋ฅผ ํธ๋ํนํ ์ ์์ ๊ฒ์ด๋ค. ์ด์ ๊ฒ์ ์๋ฒ๊ฐ ๋ง์ง๋ง ํ์ด์ฆ์ ๋ค์ด์ฐ๋ค. ๊ธฐ์กด๊น์ง๋ ๋ก์ง์ ๊ตฌํํ๋ค๋ฉด, ์ด์ DB ์๋ฒ๋ฅผ ์ฐ๊ฒฐํด ๋ณด๋ฉด์ ๊ฐ์๋ฅผ ๋ง๋ฌด๋ฆฌํ๊ฒ ๋ค. ๊ทธ๋ฐ๋ฐ... ์ด์ ์ ๋ง ํ๋ค๋ค. ๐น ํ.. ๊ทธ๋ฆฌ๊ณ ์ฌ์ค DB ์ฐ๋์ ํ๋ ๋ถ๋ถ์ ๋ชจ๋ API ๋ฅผ ๋ค ์ธ์ธ ํ์๋ ์๊ณ , ์ด๊ธฐ์ ์ธํ ์ ํ ๋ฒ๋ง ํด์ฃผ๋ฉด ๋๋ ๋ถ๋ถ์ด๋ผ, ํฐ ํ์์ ์๋ฆฌ ์ ๋ณด๋ง ๋ณด๊ณ ๋์ด๊ฐ๋๋ก ํ๊ฒ ๋ค. ๋จผ์ , DBConnection ์์ ์ฌ๋ฌ ๋์์ ์ํํ๋ DBC..
[C++ ๊ฒ์ ์๋ฒ] 6-7. JobTimer ํต์ฌ : 1. JobTimer ๋ฅผ ์ฌ์ฉํ๋ฉด, Job ์ ๋ฐฐ๋ถ์ ์ผ์ ์ฃผ๊ธฐ ์ดํ ์คํํ๋๋ก ๊ท ๋ฑํ๊ฒ ๋ฐฐ๋ถํ ์ ์๋ค. 2. ์ธ์ ์ด ์ข ๋ฃ๋ ๋ Memory Leak ์ด ์ผ์ด๋์ง ์๋๋ก ์ข ๋ฃ ์ฒ๋ฆฌ๋ฅผ ์ ํด์ฃผ์. ์ด์ ์ Job ์ ์ฒ๋ฆฌ๋ฅผ ์ฐ๋ ๋์๊ฒ ์ด๋ ์ ๋ ๊ท ๋ฑํ๊ฒ ๋ถ๋ฐฐํ๊ธฐ ์ํด Tick ๊ณผ ์์ ๊ถ์ ๋ํ ๊ฐ๋ ์ ๋์ ํ๋ค. ๊ทธ๋ฐ๋ฐ ๊ฐ ์ฐ๋ ๋ ๋ณ๋ก Tick ์ ๋ฃจํ๋ฅผ ๋๋ฉฐ ์ฒดํฌํ๋ ์ผ์ ์์ฒญ๋ ๋ญ๋น๊ฐ ์๋ ์ ์๋ค. ๐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, Global ํ๊ฒ JobTimer ๋ผ๋ ๋ ์์ ๋์ ํด ์ผ์ ์๊ฐ ํ, Job ์ ์์์ ์ฒ๋ฆฌํ๋๋ก ๋ง๋ค์ด ๋ณด์. JobTimer.h struct JobData { JobData(weak_ptr owner, JobRef jo..
[C++ ๊ฒ์ ์๋ฒ] 6-6. JobQueue #5 ํต์ฌ : 1. JobQueue ๋ฐฉ์์ ์ด์ฉํด ์ฐ๋ ๋๊ฐ Job ์ ์ฒ๋ฆฌํ ๋ ๋ฐ์ํ๋ ๋ณ๋ชฉ ํ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ๋ณด์. 2. GlobalQueue ์ Tick ์ ๊ฐ๋ ์ ํ์ฉํด, ์ด์ ๊ธ์์ ์ธ๊ธํ๋ ๋ ๊ฐ์ง ๋ณ๋ชฉ ํ์์ ํด๊ฒฐํ ์ ์๋ค. 3. ์๋ฒ ๋ก์ง๊ณผ ํด๋ผ ๋ก์ง์ ๊ฐ๊ฐ ๋ถ๋ฆฌํ์ฌ ๋์๊ฐ๋๋ก ๊ตฌํํ๋ ๊ฒ์ด ์ข๋ค. ๋ค๋ง ์ด๋ฒ ๊ธ์์๋, DoWorkerJob ํจ์์์ ๋ชจ๋ ๋ก์ง์ ํ๊บผ๋ฒ์ ์ฒ๋ฆฌํ๋๋ก ๊ตฌํํ์๋ค. ์ด๋ฒ ์๊ฐ์๋ ์ ๋ฒ ๊ธ์์ ์ง์ ํ๋ ๋ณ๋ชฉ ํ์์ ํด๊ฒฐํ๊ธฐ ์ํด, GlobalQueue ์ ์๊ฐ ์ ํ์ ์ฃผ๋ ๋ฐฉ์์ ๋์ ํด ๋ณด์. ์ผ๋จ Job ๋ถ๋ถ์ ๋ฌ๋ผ์ง ๊ฒ์ด ์๋๋ฐ... JobQueue ์์ Execute ๋ฅผ ํด์ฃผ๋ ๋ก์ง์ ์ผ๋ถ ์์ ํ ๊ฒ์ด๋ค. ๊ฑฐ..
[C++ ๊ฒ์ ์๋ฒ] 6-5. JobQueue #4 ํต์ฌ : 1. JobQueue ๋ฅผ ํ ํ๋ฆฟ ๋ฒ์ ์ผ๋ก ๋ง๋ค์ด LockQueue ๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ๋ณด์. 2. Job ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ Push ๋ฅผ ํ๋ ์ฐ๋ ๋ ์ค ์ผ๋ถ๊ฐ ์ค์ ๋ก ์ฒ๋ฆฌํ๋๋ก ๋ง๋ค ์ ์๋ค. ๊ทธ๋ผ ๋ฉ์ธ ์๋ฒ์์ FlushJob ์ ํ๋ ๋ถ๋ถ์ ํน์ ์ฐ๋ ๋๊ฐ ๋ด๋นํ ๊ฒ์ด๋ค. 3. 2๋ฒ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ํ ๋๋, ๋๊ธฐํ์ ๋ํ ๋ถ๋ถ๊ณผ ๋ณ๋ชฉ ํ์์ ๋ํ ๋ถ๋ถ์ ๋ชจ๋ ๊ณ ๋ คํด์ผ ํ๋ค. ์ด๋ฒ ์๊ฐ์๋, Job ์ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ์ ์กฐ๊ธ ๋ ๊ณ ๋ํ์์ผ๋ณผ ๊ฒ์ด๋ค. ๋ํ, ์ด์ ์๋ GameServer ์์ ํ ๋ ์์ด FlushJob ์ ํธ์ถํ๋ฉด์ Job ์ ๊บผ๋ด ํ๋ํ๋ ์ฒ๋ฆฌํ๋๋ฐ, ์ด ๋ถ๋ถ์ ๊ทธ๋ฅ Job ์ ์ถ๊ฐํ๋ ์ฐ๋ ๋ ์ค ํ๋๊ฐ ์์์ ์ฒ๋ฆฌํ๋๋ก ๋ง๋ค ๊ฒ์ด๋ค..
[C++ ๊ฒ์ ์๋ฒ] 6-4. JobQueue #3 ํต์ฌ : 1. ์ด๋ฒ ๊ธ์์๋ JobSerializer ๋ฅผ ์ด์ฉํด, ๋๋ค ํจ์๋ฅผ SharedPtr ๋ก ๋ง๋ค์ด Push ํด ์ค์ผ๋ก์จ ์ข ๋ ๊ฐํธํ๊ฒ Job ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์. 2. ๋๋ค์ SharedPtr ๋ฅผ ํจ๊ป ์ด๋ค๊ณ ํด์ Memory Leak ์ด ์ผ์ด๋์ง๋ ์๋๋ค. ๋ง์ฝ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ๋๋ค์ SharedPtr ๋ฅผ ํจ๊ป ์ฌ์ฉํด์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ ๊ฒ์ด ์๋๋ผ, ๊ธฐ๋ณธ์ ์ธ ์ค๊ณ๊ฐ ์๋ชป๋ ๊ฒ์ด๋ค. ์ด๋ฒ ์๊ฐ์๋ ๊ธฐ์กด์ ๋ง๋ค์๋ Job ์ ์ข ๋ ๊ฐํธํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๊ตฌ์กฐ๋ฅผ ์ฝ๊ฐ ์์ ํด ๋ณด์. ๋จผ์ Job ์ ์๋์ ๊ฐ์ด ServerCore ์ ๋ง๋ค์ด์ค ๊ฒ์ด๋ค. /*--------- Job ----------*/ using CallbackType = ..
[C++ ๊ฒ์ ์๋ฒ] 6-3. JobQueue #2 ํต์ฌ : 1. Job ๋ณ๋ก ํด๋์ค ์์์ ๋ฌดํํ ๋๋ ค๋๊ฐ๊ธฐ ๋ณด๋ค, Functor ์ Tuple ์ ์ด์ฉํด ๊ฐ Job ์ ๊ฐํธํ๊ฒ ์ถ๊ฐํด ๋ณด์. 2. C++ 17 ์์๋ std::apply ๋ฅผ, C++ 11 ์์๋ Template Meta Programming ์ ์ด์ฉํด ํน์ Functor ์ ์์์ ๊ฐฏ์์ ์ธ์๋ฅผ ๋๊ฒจ์ฃผ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋ค. ์ ๋ฒ ์๊ฐ์๋ Job ๊ณผ JobQueue ์ ๋ํ ๊ฐ๋ ์ ๊ฐ๋จํ๊ฒ ์๊ฐํ๋ค. ๊ทธ๋ฐ๋ฐ, ์ฌ์ค Job ์ด ๋์ด๋ ๋๋ง๋ค ์ด๋ฅผ ์์ํด์ ํด๋์ค๋ฅผ ๋ฌดํํ ๋๋ ค๋๊ฐ๋ ๋ฐฉ์์... Job ์ ๊ฐฏ์๊ฐ ๋์ด๋๋ค๊ณ ํ๋ฉด ๋งค์ฐ ๋์ฐํ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ์ ์๋ค. Job ์ ์ถ๊ฐํ๋ ๊ณผ์ ์ ์กฐ๊ธ ๊ฐ๋ตํํ๊ธฐ ์ํด, ํ ํ๋ฆฟ์ ์ด์ฉํด ๊ฐ ..
[C++ ๊ฒ์ ์๋ฒ] 6-2. JobQueue #1 ํต์ฌ : 1. Command ํจํด์, ์คํ๋ ๋์์ ๋ํ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค์ด ๊ตฌ์ฒด์ ์ธ ๋์์ ํด๋น ์ธํฐํ์ด์ค๋ฅผ ์์ ๋ฐ์ ๊ฐ์ฒด์์ ๊ฒฐ์ ํ๋๋ก ํ๋ ์ค๊ณ ๊ธฐ๋ฒ์ด๋ค. 2. Command ํจํด๊ณผ JobQueue ๋ฅผ ์ด์ฉํ๋ฉด, ์ด์ ์ Broadcast ๋ก ์ธํ ๋์์ ๋ณ๋ชฉ ํ์(LOCK ์ผ๋ก ์ธํ)์ ์ค์ผ ์ ์๋ค. ์ด์ ์๊ฐ์ ๊ฐ๋จํ ์ฑํ ์๋ฒ๋ฅผ ๋ง๋ค์ด ๋ณด์๋ค. ๋ค๋ง ์ด์ ๋ฐฉ์์ Broadcast ๋ฅผ ํ๋ ๋ถ๋ถ์์ ๋ณ๋ชฉ ํ์์ด ์ฌ๊ฐํ ์ ์๋ค๋ ๋จ์ ์ด ์์๋๋ฐ... ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, ์ฐ๋ฆฌ๋ JobQueue ๋ฅผ ๋ง๋ค์ด ์์ฐจ์ ์ผ๋ก ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋ณผ ๊ฒ์ด๋ค. ์ผ๋จ ์ด๋ฒ ์๊ฐ์๋ Command ํจํด์ ์ด์ฉํด ์กฐ์ ํ๊ฒ๋๋ง JobQueue ๋ฅผ ๊ตฌ์ถํด ๋ณด์. Com..