๋ชฉ๋ก์ ์ฒด ๊ธ (1103)
KoreanFoodie's Study
[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..
[C++ ๊ฒ์ ์๋ฒ] 6-1. ์ฑํ ์ค์ต ํต์ฌ : 1. Chat ์๋ฒ๋ฅผ ๋ง๋ค์ด๋ณด์. ๊ฐ๋จํ๊ฒ๋ ์ฑํ ์ด ์ ํ๋ Room ๊ณผ ์ฑํ ํจํท๋ง ๋ง๋ค์ด ์ฃผ๋ฉด ๋๋ค. 2. ์ฑํ ์ ์ ํํ ๋๋ง๋ค, Room ์์ WRITE_LOCK ์ ์ก์ผ๋ฉด ๋ณ๋ชฉํ์์ด ์๊ธธ ์ ์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, ์ถํ JobQueue ๋ฅผ ๋์ ํ ๊ฒ์ด๋ค. ์ด๋ฒ์๋ ์ฑํ ํจํท์ ๋ง๋ค์ด ๋ณด๋ฉด์, ๊ฐ๋จํ๊ฒ ์ค์ ๋ก ํจํท์ ์ถ๊ฐํ๋ ์์ ์ ์ด๋ป๊ฒ ์งํํ๋์ง ์ดํด๋ณผ ๊ฒ์ด๋ค. ์ผ๋จ, ์ฐ๋ฆฌ๊ฐ ์์ ํ๋ Protocol.proto ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์์ ํด ์ฃผ์. syntax = "proto3"; package Protocol; import "Enum.proto"; import "Struct.proto"; message C_LOGIN { } message S_LOG..
[C++ ๊ฒ์ ์๋ฒ] 5-9. ํจํท ์๋ํ #2 ํต์ฌ : 1. ํ์ด์ฌ๊ณผ jinja2 ๋ฅผ ์ด์ฉํด, ํจํท ํธ๋ค๋ฌ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํด ๋ณด์. 2. ์ด ํฌ์คํ ์์ ๋ง๋ ProtoParser ๋ Protocol.proto ์ ํจํท ๋ช ์ธ๋ฅผ ์ฝ์ด PacketHandler ์ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ค. ์ ๋ฒ ์๊ฐ์ ํจํท ์๋ํ๋ฅผ ์ํ ๋ฐ์์ (?) ์ ๋ณด์ฌ์ค ๋ฐ ์๋ค. ์ฌ์ค ์ ๋๋ก ํจํท ์๋ํ๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํด์๋, data-driven ํ๊ฒ ์์ ์ด ์ด๋ฃจ์ด์ ธ์ผ ํ ๊ฒ์ด๋ค. ๊ฐ๋จํ Flow ๋ฅผ ์๊ฐํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค : Protocol.proto ์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ํจํท(๋ฉ์์ง)์ ์ ์ธํ๋ค. ์๋ํ ํด์ด ๋์๊ฐ์ Packet ๊ณผ PacketHandler ํด๋์ค๋ฅผ ์์ฑํ๋ค. ํ๋ก๊ทธ๋๋จธ๋ ๊ฐ ํจํท์ ๋ํ ์ปค์คํ ๋์๋ง ์ง์ ๊ตฌ..
[C++ ๊ฒ์ ์๋ฒ] 5-8. ํจํท ์๋ํ #1 ํต์ฌ : 1. ํจ์จ์ ์ธ ์์ ์ ์ํด, ํจํท์ด ๋ณ๋๋ ๋ ๋น๋๋ฅผ ํ๋ฉด ๊ด๋ จ protoc ํ์ผ ๋ฑ์ด ์๋์ผ๋ก ์ ๋๋๊ฒ ๋ง๋ค๋ฉด ์ข๋ค. ๋ฐฐ์นํ์ผ๊ณผ .vcxproj ๋ฅผ ์ ์์ ํด ๋ณด์. 2. ์ด๊ธฐํ ๋จ๊ณ์์ ๊ฐ ํจํท ๋ณ๋ก ํธ์ถ๋์ด์ผ ํ๋ ํจ์๋ฅผ Functor ๋ก ๋ง๋ค์ด ๊ฐ ํจํท์ ๋์์์ผ ๋์ผ๋ฉด, ๊ฐ ์ปจํ ์ธ ๋ด๋น์๋ ํจํท์ด ์ถ๊ฐ๋ ๋ ํด๋น ํจํท์ ๋ํ ๊ตฌํ๋ง ์ ๊ฒฝ์ฐ๋ฉด ๋๋ค. ์ ๋ฒ ์๊ฐ์๋ Protobuf ๋ฅผ ์ธํ ํ๋ฉด์, ํจํท ์์ ์ ์ด๋ป๊ฒ ํ๋ฉด ๋๋์ง์ ๋ํด ๋ฐฐ์ ๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ์ค ๋์ด์ผ ๋ณด๋ฉด ๋ถํธํ ์ ์ด ์ด๊ณณ ์ ๊ณณ์ ์ฐ์ฌํ๋ค๋ ๋๋์ด ๋ ๋ค. ์๋ํ๋ฉด ๊ฒฐ๊ตญ ์ฐ๋ฆฌ๊ฐ ํจํท์ ๋ง๋ค๊ฑฐ๋ ์์ ํ๋ฉด, .protoc ํ์ผ์ ๋งค๋ฒ ์๋ก ์์ฑํด ์ค์ผ ํ๋๋ฐ, ์ฌ์ง์ด ์ด ์์ ์ Gam..
[C++ ๊ฒ์ ์๋ฒ] 5-7. Protobuf ํต์ฌ : 1. protobuf ๋ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์ง๋ ฌํํ๋ ๋ฐฉ์์ผ๋ก, ๊ตฌ๊ธ์์ ์ ๊ณตํ๋ ํด์ ์๋ฏธํ๊ธฐ๋ ํ๋ค. 2. protobuf ๋ฅผ ์ฌ์ฉํ๋ฉด ์์ ๊ฐ์ฒด์ ๋ํ ๋ณต์ฌ๋ ๋ฐ์ํ ์๋ ์์ผ๋, ์ง๋ ฌํ์ ์ญ์ง๋ ฌํ ๊ณผ์ ์ด ๋งค์ฐ ํธ๋ฆฌํด์ง๋ค๋ ์ฅ์ ์ด ์๋ค. 3. protobuf ๋ ์ธํฐํ์ด์ค๊ฐ ๊ฐ๋จํ๊ณ ๋ช ํํ๋ฉฐ, ๋ค๋ฅธ ์ธ์ด ๋ฐ OS ๋ฅผ ์ฌ์ฉํ๋ ํ ์๋ฒ์์ ์ฐ๋์ด ์ฌ์ ํ์ ์๋ ๋งค์ฐ ์ ๋ฆฌํ๋ค. ์ด๋ฒ ์๊ฐ์๋ ๊ตฌ๊ธ์์ ๋ง๋ ๋ฐ์ดํฐ ์ง๋ ฌํ ํด์ ์ง๊ธ๊น์ง ๋ง๋ ์ํ ํ๋ก์ ํธ์ ์ ์ฉํด ๋ณผ ๊ฒ์ด๋ค. ์ด๋ฒ์๋ ๊ฒฐ๊ณผ๋ง ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด ์๋๋ผ, ์ค์น ๋ฐ ์ธํ ํ๋ ๊ณผ์ ์ ์์ธํ ๊ธฐ๋กํ ๊ฒ์ด๋, ์ถํ ์ธํ ์ ์ด๋ ค์์ ๊ฒช์ ๋ ์ด ๊ธ์ด ๋์์ด ๋์์ผ๋ฉด ์ข๊ฒ ๋ค. ๐ค ๋จผ์ , protobu..
[C++ ๊ฒ์ ์๋ฒ] 5-6. ํจํท ์ง๋ ฌํ #3 ํต์ฌ : 1. ๊ฐ๋ณ ๋ฐ์ดํฐ ์์ ๊ฐ๋ณ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋ ๊ฒฝ์ฐ๋, ๊ฒฐ๊ตญ Offset ๊ณผ Count ๋ฅผ ์ด์ฉํด ๋ฒํผ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋กํ๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ค. 2. ์ถํ์ ์๊ฐํ ProtoBuf ๋ฅผ ์ด์ฉํ๋ฉด, ํจํท์ ๋ง๋ค ๋ ๊ฐ๋ณ ๋ฐ์ดํฐ๋ฅผ ์ผ์ผํ ์ฝ๋๋ก ๋ฃ๋ ๊ท์ฐฎ์์ ์ค์ผ ์ ์๋ค(๋ค๋ง ๋ถํ์ํ ๋ณต์ฌ๊ฐ ์์ ์๋ ์์). ์ ๋ฒ์๋ ๊ฐ๋ณ ๋ฐ์ดํฐ๋ฅผ ํจํท์ ๋ฃ์ด ๋ณด์๋๋ฐ... ๋ง์ฝ ๊ฐ๋ณ ๋ฐ์ดํฐ ์์ ๋ ๊ฐ๋ณ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น? ์๋ฅผ ๋ค์ด, BuffListItem ์ด๋ผ๋ ๊ตฌ์กฐ์ฒด์ ํด๋น ๋ฒํ์ ๋์๋ค ์ ๋ณด(Victims ๋ผ๊ณ ํ์)๋ฅผ ๋ด๋๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น? struct BuffsListItem { uint64 buffId; float remainTime;..
[C++ ๊ฒ์ ์๋ฒ] 5-5. ํจํท ์ง๋ ฌํ #2 ํต์ฌ : 1. ๊ฐ๋ณ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ PacketList ๋ฅผ ๋ง๋ค๋ฉด, ๋ฒํผ๋ฅผ ์ฝ์ ๋ ์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ ์บ์คํ ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฝ์ด๋ค์ผ ์ ์๋ค. ์, ์ผ๋จ ์ ๋ฒ ์๊ฐ์๋ ๊ฐ๋ณ ๋ฐ์ดํฐ ํ์์ธ buffs ์ ๋ํด ํจํท ์ง๋ ฌํ๋ฅผ ์ํํ์๋ค. ๊ทธ๋ฐ๋ฐ ์ฝ๋๋ฅผ ์ ๋ณด๋ฉด, ์กฐ๊ธ ๋ง์์ ๋ค์ง ์๋ ๋ถ๋ถ์ด ์๋ค. vector buffs; buffs.resize(pkt.buffsCount); for (int32 i = 0; i > buffs[i]; ๋ฐ๋ก buffs ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ ์์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ ๊ฒ์ธ๋ฐ... ์๊ฐํด๋ณด๋ฉด ๊ตณ์ด ๊ทธ๋ด ํ์๊ฐ ์๋ ์ถ๋ค. ๐ค ์ด ๋ถ๋ถ์ ์ต์ ํํ๊ธฐ ์ํด, ์ด๋ฒ ๊ธ์์..
[C++ ๊ฒ์ ์๋ฒ] 5-4. ํจํท ์ง๋ ฌํ #1 ํต์ฌ : 1. ํจํท ์ง๋ ฌํ๋, ํฌ์ธํฐ ๋ฐ ๊ฐ๋ณ ๋ฐ์ดํฐ ์ ๋ณด๋ฅผ ํจํท์ผ๋ก ์ฃผ๊ณ ๋ฐ์ ๋ ์ด๋ฅผ ์์ ํ๊ฒ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ฌ ์ ์๋๋ก ํ์ฑํ๋ ๊ธฐ๋ฒ์ด๋ค. 2. ๊ฐ๋ณ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ, Offset ๊ณผ Count ๋ฅผ ์ด์ฉํด ์ง๋ ฌํ๋ฅผ ์ฝ๊ฒ ์งํํ ์ ์๋ค. 3. ์ง๋ ฌํ๋ ๋ฐ์ดํฐ๋ xml ๋๋ json ํฌ๋งท์ผ๋ก ์ธ์ด๋ธ & ๋ก๋๋ฅผ ํ๋ฉฐ ๊ด๋ฆฌํ๊ฒ ๋๋ค. xml ์ ๊ฐ๋ ์ฑ์ด ์ข์ ์ ์์ผ๋ ๋ณต์กํ๋ฉฐ, json ์ ํํ๊ฐ ๊ฐ๋จํ๋ฉฐ ํ์ฑ ์๋๊ฐ ๋น ๋ฅด๋ค. ์ด๋ฒ ๊ธ์์๋ ํจํท ์ง๋ ฌํ์ ๋ํด ์์๋ณด์. ์์ด๋ก๋ ์ฌ์ค Serialization ์ธ๋ฐ, ์ง๋ ฌํ๋ผ๊ณ ํ๋ ์ด์ง ์ด์ํ๊ฒ ๋๊ปด์ง๊ธฐ๋ ํ๋ค. ๐ ์ธ๋ฆฌ์ผ์์๋ Serialization ์ด๋ผ๋ ์ฉ์ด๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๊ทธ ๋๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ ..