Notice
Recent Posts
Recent Comments
Link
관리 메뉴

λͺ©λ‘μ „체 κΈ€ (1078)

KoreanFoodie's Study

[C++ κ²Œμž„ μ„œλ²„] 7-3. XML Parser

[C++ κ²Œμž„ μ„œλ²„] 7-3. XML Parser 핡심 : 1. DB 도 버전 관리가 ν•„μš”ν•˜λ©°, λ”°λΌμ„œ ν…Œμ΄λΈ”κ³Ό μΏΌλ¦¬λŠ” 버전에 맞게 μ‘΄μž¬ν•΄μ•Ό ν•œλ‹€. 이λ₯Ό μœ„ν•œ XML Parser λ₯Ό λ§Œλ“€μ–΄ λ³Έλ‹€. ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ‹€ 보면 μžμ—°μŠ€λŸ½κ²Œ 버전 관리가 ν•„μš”ν•˜λ‹€. μ΄λŠ” 사싀 DB 에도 λ§ˆμ°¬κ°€μ§€μΈλ°, μ–΄λ–€ λ²„μ „μ—μ„œλŠ” νŠΉμ • ν…Œμ΄λΈ”μ— νŠΉμ • 컬럼이 μ—†λ‹€λ˜μ§€, μΆ”ν›„ λ²„μ „μ—μ„œ ν…Œμ΄λΈ”μ΄ μΆ”κ°€λœλ‹€λ˜μ§€ ν•˜λŠ” κ²½μš°κ°€ 생길 것이닀. λ”°λΌμ„œ 쿼리도 그런 DB 의 변동에 맞게 λ‚΄μš©λ¬Όμ΄ λ°”λ€Œμ–΄μ•Ό ν•˜λŠ”λ°... 보톡 이λ₯Ό 관리해 μ£ΌλŠ” 직ꡰ이 DBA 이닀(λ¬Όλ‘  μ„œλ²„ λ‹΄λ‹Ήμžκ°€ ν•˜κΈ°λ„ ν•œλ‹€). μš°λ¦¬λŠ” μ•žμœΌλ‘œ 이런 DB 쿼리λ₯Ό XML 둜 κ΄€λ¦¬ν•œ λ‹€μŒ, μ‹€μ œλ‘œ GameServer μ—μ„œ 쿼리λ₯Ό 날렀쀄 λ•Œ XML Parser λ₯Ό μ΄μš©ν•΄ ν•΄λ‹Ή 쿼리가 μžλ™..

Game Dev/Game Server 2023. 12. 21. 19:13
[C++ κ²Œμž„ μ„œλ²„] 7-1. DB Connection

[C++ κ²Œμž„ μ„œλ²„] 7-1. DB Connection 핡심 : 1. μ‹€μ œλ‘œ DB λ₯Ό 연동해 보자. 연결을 μœ„ν•œ DBConnection/DBConnectionPool 을 λ§Œλ“€μ–΄ 보자. 2. μ‹€μŠ΅μ—μ„œλŠ” ODBC μ„œλ²„λ₯Ό μ‚¬μš©ν•  것이닀. λ˜ν•œ λ‘œκ·ΈλŠ” 파일 μ‹œμŠ€ν…œμ— 남겨야 μΆ”ν›„ 버그λ₯Ό νŠΈλž˜ν‚Ήν•  수 μžˆμ„ 것이닀. 이제 κ²Œμž„ μ„œλ²„κ°€ λ§ˆμ§€λ§‰ νŽ˜μ΄μ¦ˆμ— λ“€μ–΄μ„°λ‹€. κΈ°μ‘΄κΉŒμ§€λŠ” λ‘œμ§μ„ κ΅¬ν˜„ν–ˆλ‹€λ©΄, 이제 DB μ„œλ²„λ₯Ό μ—°κ²°ν•΄ λ³΄λ©΄μ„œ κ°•μ˜λ₯Ό λ§ˆλ¬΄λ¦¬ν•˜κ² λ‹€. 그런데... 이제 정말 νž˜λ“€λ‹€. 😹 ν›„.. 그리고 사싀 DB 연동을 ν•˜λŠ” 뢀뢄은 λͺ¨λ“  API λ₯Ό λ‹€ μ™ΈμšΈ ν•„μš”λ„ μ—†κ³ , μ΄ˆκΈ°μ— μ„ΈνŒ…μ„ ν•œ 번만 ν•΄μ£Όλ©΄ λ˜λŠ” 뢀뢄이라, 큰 ν‹€μ—μ„œ 원리 μ •λ³΄λ§Œ 보고 λ„˜μ–΄κ°€λ„λ‘ ν•˜κ² λ‹€. λ¨Όμ €, DBConnection μ—μ„œ μ—¬λŸ¬ λ™μž‘μ„ μˆ˜ν–‰ν•˜λŠ” DBC..

Game Dev/Game Server 2023. 12. 21. 16:49
[C++ κ²Œμž„ μ„œλ²„] 6-6. JobQueue #5

[C++ κ²Œμž„ μ„œλ²„] 6-6. JobQueue #5 핡심 : 1. JobQueue 방식을 μ΄μš©ν•΄ μ“°λ ˆλ“œκ°€ Job 을 μ²˜λ¦¬ν•  λ•Œ λ°œμƒν•˜λŠ” 병λͺ© ν˜„μƒ 문제λ₯Ό ν•΄κ²°ν•΄ 보자. 2. GlobalQueue 와 Tick 의 κ°œλ…μ„ ν™œμš©ν•΄, 이전 κΈ€μ—μ„œ μ–ΈκΈ‰ν–ˆλ˜ 두 가지 병λͺ© ν˜„μƒμ„ ν•΄κ²°ν•  수 μžˆλ‹€. 3. μ„œλ²„ 둜직과 클라 λ‘œμ§μ€ 각각 λΆ„λ¦¬ν•˜μ—¬ λŒμ•„κ°€λ„λ‘ κ΅¬ν˜„ν•˜λŠ” 것이 μ’‹λ‹€. λ‹€λ§Œ 이번 κΈ€μ—μ„œλŠ”, DoWorkerJob ν•¨μˆ˜μ—μ„œ λͺ¨λ“  λ‘œμ§μ„ ν•œκΊΌλ²ˆμ— μ²˜λ¦¬ν•˜λ„λ‘ κ΅¬ν˜„ν•˜μ˜€λ‹€. 이번 μ‹œκ°„μ—λŠ” μ €λ²ˆ κΈ€μ—μ„œ μ§€μ ν–ˆλ˜ 병λͺ© ν˜„μƒμ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄, GlobalQueue 와 μ‹œκ°„ μ œν•œμ„ μ£ΌλŠ” 방식을 λ„μž…ν•΄ 보자. 일단 Job 뢀뢄은 달라진 것이 μ—†λŠ”λ°... JobQueue μ—μ„œ Execute λ₯Ό ν•΄μ£ΌλŠ” λ‘œμ§μ„ 일뢀 μˆ˜μ •ν•  것이닀. κ±°..

Game Dev/Game Server 2023. 12. 20. 22:46
[C++ κ²Œμž„ μ„œλ²„] 6-5. JobQueue #4

[C++ κ²Œμž„ μ„œλ²„] 6-5. JobQueue #4 핡심 : 1. JobQueue λ₯Ό ν…œν”Œλ¦Ώ λ²„μ „μœΌλ‘œ λ§Œλ“€μ–΄ LockQueue λΌλŠ” μ΄λ¦„μœΌλ‘œ λ°”κΏ”λ³΄μž. 2. Job 에 λŒ€ν•œ 처리λ₯Ό Push λ₯Ό ν•˜λŠ” μ“°λ ˆλ“œ 쀑 일뢀가 μ‹€μ œλ‘œ μ²˜λ¦¬ν•˜λ„λ‘ λ§Œλ“€ 수 μžˆλ‹€. 그럼 메인 μ„œλ²„μ—μ„œ FlushJob 을 ν•˜λ˜ 뢀뢄을 νŠΉμ • μ“°λ ˆλ“œκ°€ λ‹΄λ‹Ήν•  것이닀. 3. 2λ²ˆμ— λŒ€ν•œ 처리λ₯Ό ν•  λ•ŒλŠ”, 동기화에 λŒ€ν•œ λΆ€λΆ„κ³Ό 병λͺ© ν˜„μƒμ— λŒ€ν•œ 뢀뢄을 λͺ¨λ‘ κ³ λ €ν•΄μ•Ό ν•œλ‹€. 이번 μ‹œκ°„μ—λŠ”, Job 을 μ²˜λ¦¬ν•˜λŠ” 뢀뢄을 쑰금 더 κ³ λ„ν™”μ‹œμΌœλ³Ό 것이닀. λ˜ν•œ, μ΄μ „μ—λŠ” GameServer μ—μ„œ ν•œ 녀석이 FlushJob 을 ν˜ΈμΆœν•˜λ©΄μ„œ Job 을 κΊΌλ‚΄ ν•˜λ‚˜ν•˜λ‚˜ μ²˜λ¦¬ν–ˆλŠ”λ°, 이 뢀뢄을 κ·Έλƒ₯ Job 을 μΆ”κ°€ν•˜λŠ” μ“°λ ˆλ“œ 쀑 ν•˜λ‚˜κ°€ μ•Œμ•„μ„œ μ²˜λ¦¬ν•˜λ„λ‘ λ§Œλ“€ 것이닀..

Game Dev/Game Server 2023. 12. 20. 18:32
[C++ κ²Œμž„ μ„œλ²„] 6-2. JobQueue #1

[C++ κ²Œμž„ μ„œλ²„] 6-2. JobQueue #1 핡심 : 1. Command νŒ¨ν„΄μ€, 싀행될 λ™μž‘μ— λŒ€ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“€μ–΄ ꡬ체적인 λ™μž‘μ€ ν•΄λ‹Ή μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속 받은 κ°μ²΄μ—μ„œ κ²°μ •ν•˜λ„λ‘ ν•˜λŠ” 섀계 기법이닀. 2. Command νŒ¨ν„΄κ³Ό JobQueue λ₯Ό μ΄μš©ν•˜λ©΄, 이전에 Broadcast 둜 μΈν•œ λ™μž‘μ˜ 병λͺ© ν˜„μƒ(LOCK 으둜 μΈν•œ)을 쀄일 수 μžˆλ‹€. 이전 μ‹œκ°„μ— κ°„λ‹¨ν•œ μ±„νŒ… μ„œλ²„λ₯Ό λ§Œλ“€μ–΄ λ³΄μ•˜λ‹€. λ‹€λ§Œ 이전 방식은 Broadcast λ₯Ό ν•˜λŠ” λΆ€λΆ„μ—μ„œ 병λͺ© ν˜„μƒμ΄ 심각할 수 μžˆλ‹€λŠ” 단점이 μžˆμ—ˆλŠ”λ°... 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄, μš°λ¦¬λŠ” JobQueue λ₯Ό λ§Œλ“€μ–΄ 순차적으둜 이 문제λ₯Ό ν•΄κ²°ν•΄λ³Ό 것이닀. 일단 이번 μ‹œκ°„μ—λŠ” Command νŒ¨ν„΄μ„ μ΄μš©ν•΄ μ‘°μ•…ν•˜κ²Œλ‚˜λ§ˆ JobQueue λ₯Ό ꡬ좕해 보자. Com..

Game Dev/Game Server 2023. 12. 19. 18:49