λͺ©λ‘μ 체 κΈ (1098)
KoreanFoodie's Study
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bqihnk/btsCtqfVXGi/kZ3IldiY061dzGrV6EZI80/img.png)
[C++ κ²μ μλ²] 7-3. XML Parser ν΅μ¬ : 1. DB λ λ²μ κ΄λ¦¬κ° νμνλ©°, λ°λΌμ ν μ΄λΈκ³Ό 쿼리λ λ²μ μ λ§κ² μ‘΄μ¬ν΄μΌ νλ€. μ΄λ₯Ό μν XML Parser λ₯Ό λ§λ€μ΄ λ³Έλ€. νλ‘μ νΈλ₯Ό μ§ννλ€ λ³΄λ©΄ μμ°μ€λ½κ² λ²μ κ΄λ¦¬κ° νμνλ€. μ΄λ μ¬μ€ DB μλ λ§μ°¬κ°μ§μΈλ°, μ΄λ€ λ²μ μμλ νΉμ ν μ΄λΈμ νΉμ 컬λΌμ΄ μλ€λμ§, μΆν λ²μ μμ ν μ΄λΈμ΄ μΆκ°λλ€λμ§ νλ κ²½μ°κ° μκΈΈ κ²μ΄λ€. λ°λΌμ 쿼리λ κ·Έλ° DB μ λ³λμ λ§κ² λ΄μ©λ¬Όμ΄ λ°λμ΄μΌ νλλ°... λ³΄ν΅ μ΄λ₯Ό κ΄λ¦¬ν΄ μ£Όλ μ§κ΅°μ΄ DBA μ΄λ€(λ¬Όλ‘ μλ² λ΄λΉμκ° νκΈ°λ νλ€). μ°λ¦¬λ μμΌλ‘ μ΄λ° DB 쿼리λ₯Ό XML λ‘ κ΄λ¦¬ν λ€μ, μ€μ λ‘ GameServer μμ 쿼리λ₯Ό λ λ €μ€ λ XML Parser λ₯Ό μ΄μ©ν΄ ν΄λΉ μΏΌλ¦¬κ° μλ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/btCZDF/btsCrZDnjdX/b1shBq9nKtoCoNyuIkHfHk/img.png)
[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..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bPWAb4/btsCoviJOTu/0tRyNPGaepZDpchY53mLhK/img.png)
[C++ κ²μ μλ²] 7-1. DB Connection ν΅μ¬ : 1. μ€μ λ‘ DB λ₯Ό μ°λν΄ λ³΄μ. μ°κ²°μ μν DBConnection/DBConnectionPool μ λ§λ€μ΄ 보μ. 2. μ€μ΅μμλ ODBC μλ²λ₯Ό μ¬μ©ν κ²μ΄λ€. λν λ‘κ·Έλ νμΌ μμ€ν μ λ¨κ²¨μΌ μΆν λ²κ·Έλ₯Ό νΈλνΉν μ μμ κ²μ΄λ€. μ΄μ κ²μ μλ²κ° λ§μ§λ§ νμ΄μ¦μ λ€μ΄μ°λ€. κΈ°μ‘΄κΉμ§λ λ‘μ§μ ꡬννλ€λ©΄, μ΄μ DB μλ²λ₯Ό μ°κ²°ν΄ 보면μ κ°μλ₯Ό λ§λ¬΄λ¦¬νκ² λ€. κ·Έλ°λ°... μ΄μ μ λ§ νλ€λ€. πΉ ν.. κ·Έλ¦¬κ³ μ¬μ€ DB μ°λμ νλ λΆλΆμ λͺ¨λ API λ₯Ό λ€ μΈμΈ νμλ μκ³ , μ΄κΈ°μ μΈν μ ν λ²λ§ ν΄μ£Όλ©΄ λλ λΆλΆμ΄λΌ, ν° νμμ μ리 μ λ³΄λ§ λ³΄κ³ λμ΄κ°λλ‘ νκ² λ€. λ¨Όμ , DBConnection μμ μ¬λ¬ λμμ μννλ DBC..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b7EyqA/btsCpBvaiVO/sRSZtW9QbuUHFkdN2Yx0HK/img.png)
[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..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cjRNfs/btsCoyS25rM/bIW6GsB7S7XaTui1S7gUZ0/img.png)
[C++ κ²μ μλ²] 6-6. JobQueue #5 ν΅μ¬ : 1. JobQueue λ°©μμ μ΄μ©ν΄ μ°λ λκ° Job μ μ²λ¦¬ν λ λ°μνλ λ³λͺ© νμ λ¬Έμ λ₯Ό ν΄κ²°ν΄ 보μ. 2. GlobalQueue μ Tick μ κ°λ μ νμ©ν΄, μ΄μ κΈμμ μΈκΈνλ λ κ°μ§ λ³λͺ© νμμ ν΄κ²°ν μ μλ€. 3. μλ² λ‘μ§κ³Ό ν΄λΌ λ‘μ§μ κ°κ° λΆλ¦¬νμ¬ λμκ°λλ‘ κ΅¬ννλ κ²μ΄ μ’λ€. λ€λ§ μ΄λ² κΈμμλ, DoWorkerJob ν¨μμμ λͺ¨λ λ‘μ§μ νκΊΌλ²μ μ²λ¦¬νλλ‘ κ΅¬ννμλ€. μ΄λ² μκ°μλ μ λ² κΈμμ μ§μ νλ λ³λͺ© νμμ ν΄κ²°νκΈ° μν΄, GlobalQueue μ μκ° μ νμ μ£Όλ λ°©μμ λμ ν΄ λ³΄μ. μΌλ¨ Job λΆλΆμ λ¬λΌμ§ κ²μ΄ μλλ°... JobQueue μμ Execute λ₯Ό ν΄μ£Όλ λ‘μ§μ μΌλΆ μμ ν κ²μ΄λ€. κ±°..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/coCbUb/btsCnIPecXR/dgEKMXQE86NhRW9oS1DYTk/img.png)
[C++ κ²μ μλ²] 6-5. JobQueue #4 ν΅μ¬ : 1. JobQueue λ₯Ό ν νλ¦Ώ λ²μ μΌλ‘ λ§λ€μ΄ LockQueue λΌλ μ΄λ¦μΌλ‘ λ°κΏλ³΄μ. 2. Job μ λν μ²λ¦¬λ₯Ό Push λ₯Ό νλ μ°λ λ μ€ μΌλΆκ° μ€μ λ‘ μ²λ¦¬νλλ‘ λ§λ€ μ μλ€. κ·ΈλΌ λ©μΈ μλ²μμ FlushJob μ νλ λΆλΆμ νΉμ μ°λ λκ° λ΄λΉν κ²μ΄λ€. 3. 2λ²μ λν μ²λ¦¬λ₯Ό ν λλ, λκΈ°νμ λν λΆλΆκ³Ό λ³λͺ© νμμ λν λΆλΆμ λͺ¨λ κ³ λ €ν΄μΌ νλ€. μ΄λ² μκ°μλ, Job μ μ²λ¦¬νλ λΆλΆμ μ‘°κΈ λ κ³ λνμμΌλ³Ό κ²μ΄λ€. λν, μ΄μ μλ GameServer μμ ν λ μμ΄ FlushJob μ νΈμΆνλ©΄μ Job μ κΊΌλ΄ νλνλ μ²λ¦¬νλλ°, μ΄ λΆλΆμ κ·Έλ₯ Job μ μΆκ°νλ μ°λ λ μ€ νλκ° μμμ μ²λ¦¬νλλ‘ λ§λ€ κ²μ΄λ€..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bDxGLL/btsCnNpaLz5/iICi3SYUY6MarUSJxHgHb0/img.png)
[C++ κ²μ μλ²] 6-4. JobQueue #3 ν΅μ¬ : 1. μ΄λ² κΈμμλ JobSerializer λ₯Ό μ΄μ©ν΄, λλ€ ν¨μλ₯Ό SharedPtr λ‘ λ§λ€μ΄ Push ν΄ μ€μΌλ‘μ¨ μ’ λ κ°νΈνκ² Job κ΄λ¦¬νλ λ°©λ²μ μμ보μ. 2. λλ€μ SharedPtr λ₯Ό ν¨κ» μ΄λ€κ³ ν΄μ Memory Leak μ΄ μΌμ΄λμ§λ μλλ€. λ§μ½ λ¬Έμ κ° μλ€λ©΄ λλ€μ SharedPtr λ₯Ό ν¨κ» μ¬μ©ν΄μ λ¬Έμ κ° μκΈ°λ κ²μ΄ μλλΌ, κΈ°λ³Έμ μΈ μ€κ³κ° μλͺ»λ κ²μ΄λ€. μ΄λ² μκ°μλ κΈ°μ‘΄μ λ§λ€μλ Job μ μ’ λ κ°νΈνκ² μ¬μ©ν μ μλλ‘ κ΅¬μ‘°λ₯Ό μ½κ° μμ ν΄ λ³΄μ. λ¨Όμ Job μ μλμ κ°μ΄ ServerCore μ λ§λ€μ΄μ€ κ²μ΄λ€. /*--------- Job ----------*/ using CallbackType = ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/IsPRW/btsCgxnjieP/av5GNcKjcoWDtCq6M1cKP1/img.png)
[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 μ μΆκ°νλ κ³Όμ μ μ‘°κΈ κ°λ΅ννκΈ° μν΄, ν νλ¦Ώμ μ΄μ©ν΄ κ° ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/MPT1k/btsCla5eVkG/U4awqT3nk4vno1RwdwYgU1/img.png)
[C++ κ²μ μλ²] 6-2. JobQueue #1 ν΅μ¬ : 1. Command ν¨ν΄μ, μ€νλ λμμ λν μΈν°νμ΄μ€λ₯Ό λ§λ€μ΄ ꡬ체μ μΈ λμμ ν΄λΉ μΈν°νμ΄μ€λ₯Ό μμ λ°μ κ°μ²΄μμ κ²°μ νλλ‘ νλ μ€κ³ κΈ°λ²μ΄λ€. 2. Command ν¨ν΄κ³Ό JobQueue λ₯Ό μ΄μ©νλ©΄, μ΄μ μ Broadcast λ‘ μΈν λμμ λ³λͺ© νμ(LOCK μΌλ‘ μΈν)μ μ€μΌ μ μλ€. μ΄μ μκ°μ κ°λ¨ν μ±ν μλ²λ₯Ό λ§λ€μ΄ 보μλ€. λ€λ§ μ΄μ λ°©μμ Broadcast λ₯Ό νλ λΆλΆμμ λ³λͺ© νμμ΄ μ¬κ°ν μ μλ€λ λ¨μ μ΄ μμλλ°... μ΄λ₯Ό ν΄κ²°νκΈ° μν΄, μ°λ¦¬λ JobQueue λ₯Ό λ§λ€μ΄ μμ°¨μ μΌλ‘ μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν΄λ³Ό κ²μ΄λ€. μΌλ¨ μ΄λ² μκ°μλ Command ν¨ν΄μ μ΄μ©ν΄ μ‘°μ νκ²λλ§ JobQueue λ₯Ό ꡬμΆν΄ 보μ. Com..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bDLo7Y/btsCiJAaqdY/QUcbrGHJaJruZxr4DOZqpk/img.png)
[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..