๋ชฉ๋ก์ ์ฒด ๊ธ (1104)
KoreanFoodie's Study

[์ธ๋ฆฌ์ผ] ์ด๋ค ๊ฐ๋ : ์ด๋ป๊ฒ ํ๊ธฐ ํต์ฌ : 1. UObject ๋ผ๋ฉด, UWorld::GetRealTimeSeconds() ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค. 2. C++ ํด๋์ค๋ผ๋ฉด, FDateTime::Now() ๋ฅผ ์ธ ์๋ ์๋ค. 3. milisecond ๋ฅผ ์ํ๋ค๋ฉด FDateTime::UtcNow() ๋ฅผ ์ฐ์. 1. UObject ์ผ ๊ฒฝ์ฐ UWorld* World = GetWorld(); float PrevSeconds; float ElapsedSeconds; if (World) { ElapsedSeconds = MyWorld->GetRealTimeSeconds() - PrevSeconds; PrevSeconds = MyWorld->GetRealTimeSeconds(); UE_LOG(LogTemp, Warn..

์ธ๋ฆฌ์ผ UI ์ต์ ํ ํต์ฌ : 1. UI ์ต์ ํ๋ฅผ ์ํด์๋ ๋จผ์ UI ๊ตฌ์กฐ์ ๋ ๋๋ง ํ๋ก์ธ์ค๋ฅผ ์ดํดํด์ผ ํ๋ค. 2. UI ์ต์ ํ์ ํต์ฌ์ ๊ฒฐ๊ตญ Tick ์ด๋ค. Tick ์ ํ์ํ ๋๋ง ํธ์ถํ๊ฒ ๋ง๋ค๊ฑฐ๋, Tick ๋น ๋ด๊ธฐ๋ ์ฐ์ฐ์ ํฌ๊ธฐ๋ฅผ ์ค์ฌ์ผ ํ๋ค. ์ ์๋ ๊ฒ์์ฐ๋ ๋์, ํ์๋ ๋ ๋๋ง ์ฐ๋ ๋์ ์ฐ๊ด์ด ๊น๋ค. 3. ๊ฒ์ ์ฐ๋ ๋ ์ต์ ํ์๋ Invalidation Box, Visibility, Widget Binding ๋ฑ์ด ์๊ณ , ๋ ๋๋ง ์ฐ๋ ๋ ์ต์ ํ์๋ Merging Batches, Retainer Box ๋ฑ์ด ์๋ค. ์ธ๋ฆฌ์ผ์์ UMG ๋ฅผ ์ด์ฉํ UI ์์ ์ ์๋นํ ๋ง์ด ํ๋๋ฐ, ์ผ์ ์ ์ซ๊ธฐ๋ค ๋ณด๋ ํ๋ก์ ํธ ์ฐจ์์์ ์ต์ ํ๋ฅผ ๊ณ ๋ คํ๋ฉด์ ๋ง๋๋ ๊ฒฝ์ฐ๊ฐ ์ ์๋ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ๋ํ ์ต์ ํ๋ฅผ ํ๋ค๊ณ ..

2023๋ ์ ๊ทธ ์ด๋๋ ๋ณด๋ค ๋ ๋น ๋ฅด๊ฒ ์ง๋๊ฐ ๊ฒ ๊ฐ๋ค. ํํ ๋์ด๊ฐ ๋ค๋ฉด ๋ค์๋ก ์๊ฐ์ด ๋ ๋น ๋ฅด๊ฒ ํ๋ฌ๊ฐ๋ค์ง๋ง, 2023๋ ์ ๊ทธ๋ฐ ๊ฒ์ ๊ฐ์ํ๋๋ผ๋ ์กฐ๊ธ ๋น์์์ (?)์ผ๋ก ๋น ๋ฅด๊ฒ ์ง๋๊ฐ์ง ์์๋ ํ๋ ์๊ฐ์ด ๋ ๋ค. ์ฌ๋๋ค์ ๋งค๋ ์ฅ๋ํ ๋ชฉํ๋ฅผ ์ค์ ํ๊ณ , ์๋ก์ด ๊ณํ์ ์ธ์ฐ์ง๋ง ๋๋ถ๋ถ์ ๊ณํ์ ํ ์ฌ๋ฆ๋ฐค์ ๊ฟ์ฒ๋ผ ํ ๋ฌ์ด ์ฑ ์ง๋๊ธฐ๋ ์ ์ ์ํ์ง๊ณ ๋ง๋ค. ๋ ๋ํ ๊ทธ๋ ๊ฒ ๋์ง ์์๊น ํ๋ ๋ง์์, ์ด๋ฒ์๋ ์ง๋ ํ ํด๋ฅผ ๋๋์ ๋ณด๋ฉฐ ๋ด๊ฐ ๋ฌด์์ ๋ชฉํ๋ก ํ๊ณ ์ด๋ค ๊ฒ์ ๋ฐฐ์ ๋์ง ๋๋์ ๋ณด๋ ์๊ฐ์ ๊ฐ์ง๋ ค ํ๋ค. 2023๋ ์ ๋ชฉํ ํ๊ณ ํ๊ณ ๋ฅผ ํ๊ธฐ ์ํด, ์์ ์ ๊ตฌ๊ธ ๋๋ผ์ด๋ธ์ ์ ๋ฆฌํ ๋ชฉํ๋ฅผ ๋ค์ ๊บผ๋ด ์๋ค. ๋์ด์ผ ๋ณด๋ฉด, 2023๋ ์ '๊ธฐ๋ณธ๊ธฐ ๋ค์ง๊ธฐ'์ ํด๋ก ๋ณด๋ด๊ธฐ๋ก ๋ค์งํ๋ ๊ฒ ๊ฐ๋ค. ๊ฐ๋ฐ์ ๋จ์ํ ์ทจ๋ฏธ..

[C++ ๊ฒ์ ์๋ฒ] 7-5. Procedure Generator ํต์ฌ : 1. Python ์ ์ด์ฉํด Procedures ๋ฅผ ์๋ ์์ฑํด ๋ณด์. ์ฐ๋ฆฌ๋ ์ด์ ์ BindParam/BindCol ์ ์ด์ฉํด์ ํ ์ด๋ธ์ ์ ๊ทผ์ ํ๊ณค ํ๋ค. ์ด๋ฐ ๋ถ๋ถ์ ์กฐ๊ธ ๋, ์๋ํ ์ํค๊ธฐ ์ํด ProcedureGenerator ๋ฅผ ๋ง๋ค์ด ๋ณด์. ์ฐ๋ฆฌ๋ XML ๋ก๋ถํฐ, ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์กฐํํ๋ API ๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด ์ค ๊ฒ์ด๋ค. ๋จผ์ XmlDBParser ๊ฐ ํ์ํ๋ค. ์ด๊ฑด ์ฐธ๊ณ ์ฉ์ด๋, ์ ์ ๊ธ์ ๋ฃ๋๋ก ํ๊ฒ ๋ค. ๐ ๋๋ณด๊ธฐ XmlDBParser.py import xml.etree.ElementTree as ET class XmlDBParser: def __init__(self): self.tables = {..

[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 ๋ฅผ ํด์ฃผ๋ ๋ก์ง์ ์ผ๋ถ ์์ ํ ๊ฒ์ด๋ค. ๊ฑฐ..