Notice
Recent Posts
Recent Comments
Link
관리 메뉴

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

KoreanFoodie's Study

[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
[C++ κ²Œμž„ μ„œλ²„] 5-8. νŒ¨ν‚· μžλ™ν™” #1

[C++ κ²Œμž„ μ„œλ²„] 5-8. νŒ¨ν‚· μžλ™ν™” #1 핡심 : 1. 효율적인 μž‘μ—…μ„ μœ„ν•΄, νŒ¨ν‚·μ΄ 변동될 λ•Œ λΉŒλ“œλ₯Ό ν•˜λ©΄ κ΄€λ ¨ protoc 파일 등이 μžλ™μœΌλ‘œ μ—…λŽƒλ˜κ²Œ λ§Œλ“€λ©΄ μ’‹λ‹€. 배치파일과 .vcxproj λ₯Ό 잘 μˆ˜μ •ν•΄ 보자. 2. μ΄ˆκΈ°ν™” λ‹¨κ³„μ—μ„œ 각 νŒ¨ν‚· λ³„λ‘œ ν˜ΈμΆœλ˜μ–΄μ•Ό ν•˜λŠ” ν•¨μˆ˜λ₯Ό Functor 둜 λ§Œλ“€μ–΄ 각 νŒ¨ν‚·μ— λŒ€μ‘μ‹œμΌœ λ†“μœΌλ©΄, 각 컨텐츠 λ‹΄λ‹ΉμžλŠ” νŒ¨ν‚·μ΄ 좔가될 λ•Œ ν•΄λ‹Ή νŒ¨ν‚·μ— λŒ€ν•œ κ΅¬ν˜„λ§Œ μ‹ κ²½μ“°λ©΄ λœλ‹€. μ €λ²ˆ μ‹œκ°„μ—λŠ” Protobuf λ₯Ό μ„ΈνŒ…ν•˜λ©΄μ„œ, νŒ¨ν‚· μž‘μ—…μ„ μ–΄λ–»κ²Œ ν•˜λ©΄ λ˜λŠ”μ§€μ— λŒ€ν•΄ λ°°μ› λ‹€. 그런데 사싀 돌이켜 보면 λΆˆνŽΈν•œ 점이 이곳 저곳에 μ‚°μž¬ν•œλ‹€λŠ” λŠλ‚Œμ΄ λ“ λ‹€. μ™œλƒν•˜λ©΄ κ²°κ΅­ μš°λ¦¬κ°€ νŒ¨ν‚·μ„ λ§Œλ“€κ±°λ‚˜ μˆ˜μ •ν•˜λ©΄, .protoc νŒŒμΌμ„ 맀번 μƒˆλ‘œ 생성해 μ€˜μ•Ό ν•˜λŠ”λ°, 심지어 이 μž‘μ—…μ„ Gam..

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