λͺ©λ‘μ 체 κΈ (1096)
KoreanFoodie's Study
[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..
[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..