관리 메뉴

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

KoreanFoodie's Study

[C++ κ²Œμž„ μ„œλ²„] 3-5. UDP μ„œλ²„ μ‹€μŠ΅

[C++ κ²Œμž„ μ„œλ²„] 3-5. UDP μ„œλ²„ μ‹€μŠ΅ 핡심 : 1. UDP λŠ” TCP 와 λ‹€λ₯΄κ²Œ, νŒ¨ν‚· κ°„μ˜ 경계가 있고 속도가 λΉ λ₯΄λ‹€. λ‹€λ§Œ νŒ¨ν‚·μ˜ μˆœμ„œκ°€ 보μž₯λ˜μ§€ μ•ŠμœΌλ©°, 데이터가 μœ μ‹€λ  μœ„ν—˜μ΄ μ‘΄μž¬ν•œλ‹€. 2. UDP μ‹€μŠ΅μ˜ 경우, TCP μ‹€μŠ΅ μ½”λ“œμ—μ„œ ::connect 와 ::listen 만 μ—†μœΌλ©΄ λ‘œμ§μ€ 거의 λ™μΌν•˜λ‹€. 3. UDP λŠ” Connected UDP(μΌμ’…μ˜ 즐겨찾기 κΈ°λŠ₯)을 ν™œμš©ν•˜λ©΄, sendto λŒ€μ‹  send λ₯Ό, recvfrom λŒ€μ‹  recv λ₯Ό μ‚¬μš©ν•˜μ—¬ API λ₯Ό 더 κ°„λ‹¨ν•˜κ²Œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€. μ €λ²ˆμ—λŠ” TCP λ°©μ‹μœΌλ‘œ 데이터λ₯Ό μ „μ†‘ν•˜λŠ” μ‹€μŠ΅μ„ ν–ˆμœΌλ‹ˆ, μ΄λ²ˆμ—λŠ” UDP λ°©μ‹μœΌλ‘œ 데이터λ₯Ό 전솑해 보자. 사싀 그리 λ‹€λ₯΄μ§€λŠ” μ•Šλ‹€. 쑰금 κ°„μ†Œν™”λ˜μ—ˆλ‹€κ³  ν•˜λ©΄ 될까? 3-2 에 보면 기본적으둜 μ†ŒμΌ“..

Game Dev/Game Server 2023. 9. 22. 14:18
[C++ κ²Œμž„ μ„œλ²„] 3-4. TCP vs UDP

[C++ κ²Œμž„ μ„œλ²„] 3-4. TCP vs UDP 핡심 : 1. TCP 와 UDP λŠ” λ„€νŠΈμ›Œν¬ ν”„λ‘œν† μ½œ 쀑, 트랜슀포트 λ ˆμ΄μ–΄μ— ν•΄λ‹Ήν•˜λŠ” κ·œμΉ™μ΄λ‹€. 2. TCP λŠ” μ•ˆμ „ν•˜λ©°(데이터 μœ μ‹€μ΄ μ—†μŒ), λ°μ΄ν„°μ˜ μˆœμ„œκ°€ 보μž₯λœλ‹€. ν•˜μ§€λ§Œ 각 νŒ¨ν‚·μ˜ 경계(Boundary)κ°€ μ—†μ–΄ 데이터가 ν•©μ³μ§€κ±°λ‚˜ μͺΌκ°œμ§ˆ 수 있으며, UDP 에 λΉ„ν•΄ μƒλŒ€μ μœΌλ‘œ λŠλ¦¬λ‹€. 3. UDP λŠ” λΉ λ₯΄λ©°(일단 데이터λ₯Ό 보내고 λ΄„), νŒ¨ν‚·μ˜ 경계가 μžˆμ–΄ 데이터가 μͺΌκ°œμ§€κ±°λ‚˜ 합쳐지지 μ•ŠλŠ”λ‹€. ν•˜μ§€λ§Œ νŒ¨ν‚· μ „μ†‘μ˜ μˆœμ„œκ°€ 보μž₯λ˜μ§€ μ•ŠμœΌλ©°, 데이터가 μœ μ‹€λ  μœ„ν—˜μ„±μ΄ μžˆλ‹€. 이번 κΈ€μ—μ„œλŠ” κ°„λ‹¨νžˆ TCP 와 UDP 의 차이에 λŒ€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜μž. λ„€νŠΈμ›Œν¬ 곡뢀λ₯Ό 깊게 ν•˜μ§€ μ•Šμ•˜μ–΄λ„, μ˜€λ©°κ°€λ©° κ·Έ λ‘˜μ˜ 차이에 λŒ€ν•΄μ„œλŠ” μ•Œκ²Œ λ˜λŠ”λ°, 이번 κΈ€μ—μ„œλŠ” 그에 ..

Game Dev/Game Server 2023. 9. 21. 20:13
[C++ κ²Œμž„ μ„œλ²„] 3-3. TCP μ„œλ²„ μ‹€μŠ΅

[C++ κ²Œμž„ μ„œλ²„] 3-3. TCP μ„œλ²„ μ‹€μŠ΅ 핡심 : 1. TCP μ—μ„œλŠ” μ†‘μˆ˜μ‹  버퍼가 μ‘΄μž¬ν•˜λ©°, 톡신을 ν•  λ•Œ 버퍼에 데이터λ₯Ό λ‹΄κ³  κΊΌλ‚΄λŠ” λ°©μ‹μœΌλ‘œ 톡신이 이루어진닀. 2. ν΄λΌμ—μ„œ 솑신을 ν•˜λ €κ³  ν•˜λŠ”λ° 솑신 버퍼가 가득 μ°¨ μžˆκ±°λ‚˜, μ„œλ²„μ—μ„œ μˆ˜μ‹ μ„ ν•˜λ €κ³  ν•˜λŠ”λ° μˆ˜μ‹  버퍼가 λΉ„μ–΄ 있으면 Blocking μƒνƒœμ— λŒμž…ν•œλ‹€. 3. μ‹ κΈ°ν•˜κ²Œλ„, 버퍼 λ‚΄ 각 데이터 λ³„λ‘œλŠ” λͺ…ν™•ν•œ 경계가 μ—†μ–΄ λ°μ΄ν„°λŠ” ν•©μ³μ§€κ±°λ‚˜ μͺΌκ°œμ Έμ„œ 인식될 수 μžˆλ‹€. μ €λ²ˆμ— μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ° 기초λ₯Ό λ‹€λ£¨λ©΄μ„œ, μ†ŒμΌ“μ„ λ§Œλ“€κ³ , μ£Όμ†Œλ₯Ό ν• λ‹Ήν•˜κ³ , μ†ŒμΌ“κ³Ό μ£Όμ†Œλ₯Ό ν• λ‹Ήν•œ ν›„, μ‹€μ œλ‘œ 톡신을 ν•΄λ³΄λŠ” μ‹€μŠ΅μ„ μ§„ν–‰ν–ˆλ‹€. 이번 μ‹œκ°„μ—λŠ” TCP μ‹€μŠ΅μ„ ν•΄ λ³Ό μ˜ˆμ •μ΄λ‹€. μ½”λ“œμ™€ PPT λ₯Ό λ³΄λ©΄μ„œ, μ‹€μŠ΅μ„ 진행해 보자. 일단 μ €λ²ˆ μ‹œκ°„μ— μ†ŒμΌ“ 바인딩 μž‘μ—… ..

Game Dev/Game Server 2023. 9. 21. 13:29
[C++ κ²Œμž„ μ„œλ²„] 3-2. μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ° 기초 #2

[C++ κ²Œμž„ μ„œλ²„] 3-2. μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ° 기초 #2 핡심 : 1. μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ° μ…‹μ—…μ—λŠ” μ—¬λŸ¬ API 듀을 ν†΅ν•œ μ„ΈνŒ…μ΄ ν•„μš”ν•˜λ‹€. ν•˜μ§€λ§Œ λ„ˆλ¬΄ 겁먹지 말고, νλ¦„λ§Œ μ΄ν•΄ν•˜μž. 2. ν΄λΌμ΄μ–ΈνŠΈ μͺ½μ—μ„œλŠ” ν•Έλ“œν° κ΅¬μž…(clientμ†ŒμΌ“ μ„ΈνŒ…)κ³Ό κ°€κ²Œμ˜ μœ„μΉ˜μ™€ 번호(μ„œλ²„ IP μ£Όμ†Œμ™€ 포트)λ₯Ό μ•Œμ•„λ‚Έ ν›„, μ—°κ²°(::connect)을 μ‹œλ„ν•˜κΈ°λ§Œ ν•˜λ©΄ λœλ‹€. 3. μ„œλ²„ μͺ½μ—μ„œλŠ” ν•Έλ“œν° κ΅¬μž…(listen μ†ŒμΌ“ μ„ΈνŒ…) ν›„, κ°€κ²Œμ˜ μœ„μΉ˜μ™€ 번호(μ„œλ²„ IP μ£Όμ†Œμ™€ 포트)λ₯Ό μ„€μ •ν•œ ν›„, μ•ˆλ‚΄μ›μ˜ 폰을 κ°œν†΅(μ†ŒμΌ“κ³Ό μ„œλ²„ μ£Όμ†Œ ::bind)ν•˜κ³  μ˜μ—…μ„ μ‹œμž‘(::listen)ν•˜λ©΄ λœλ‹€. 이제 μ €λ²ˆμ— μ΄μ•ΌκΈ°ν–ˆλ˜ κ°œλ…μ„ λ°”νƒ•μœΌλ‘œ, μ‹€μ œ μ½”λ“œλ₯Ό 보자. μ•„λ§ˆ μ΅μˆ™μΉ˜ μ•Šμ€ μ½”λ“œκ°€ μž”λœ© λ“±μž₯을 ν•˜κ²Œ 될 텐데, ν•˜λ‚˜ν•˜λ‚˜ μ „λΆ€ μ•Œμ•„μ•Ό ν•œλ‹€..

Game Dev/Game Server 2023. 9. 20. 23:42
[C++ κ²Œμž„ μ„œλ²„] 3-1. μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ° 기초 #1

[C++ κ²Œμž„ μ„œλ²„] 3-1. μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ° 기초 #1 핡심 : 1. μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ°μ„ 고객(ν΄λΌμ΄μ–ΈνŠΈ)와 κ°€κ²Œ(μ„œλ²„) 관계에 λΉ„μœ ν•˜μ—¬ κ°œλ…μ„ 이해해 λ‘μž. λ“œλ””μ–΄ κΈ°λ‚˜κΈ΄ Memory κ΄€λ ¨ ν¬μŠ€νŒ…μ„ 마치고, 이제 λ„€νŠΈμ›Œν¬ ν”„λ‘œκ·Έλž˜λ°μœΌλ‘œ λ“€μ–΄κ°„λ‹€. λ¨Όμ € μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ°μ„ 본격적으둜 μ‹œμž‘ν•˜κΈ° 전에, κ°„λ‹¨ν•œ κ°œλ…μ„ 짚고 λ„˜μ–΄κ°€ 보자. 참고둜, μ΄ν•΄μ—λŠ” μ˜ˆμ‹œκ°€ μ΅œκ³ λ‹€. λ¨Όμ €, μš°λ¦¬κ°€ 쀑ꡭ집에 μ „ν™”λ₯Ό ν•œλ‹€κ³  ν•΄ 보자. 그런데 이 쀑ꡭ집은 유λͺ…ν•˜κ³  큰 곳이라, μ „ν™”λ₯Ό λ°›λŠ” μ•ˆλ‚΄ μš”μ›μ΄ λ”°λ‘œ μ‘΄μž¬ν•œλ‹€. μš°λ¦¬λŠ” 쀑ꡭ집에 λ“±λ‘λœ λŒ€ν‘œ μ „ν™”λ‘œ μ „ν™”λ₯Ό κ±Έκ³ , μš©κ±΄μ„ μ „λ‹¬ν•œλ‹€. 그러면 μ•ˆλ‚΄μ›μ€ μš©κ±΄μ— λ§žλŠ” μž‘μ—…μžμ˜ 번호λ₯Ό μ•Œλ €μ€€λ‹€. 그럼 이제 λ‹€μŒλΆ€ν„°λŠ” λŒ€ν‘œ μ „ν™”λ₯Ό 톡해 쀑ꡭ집에 연락할 ν•„μš” 없이, ν…Œμ΄λΈ”μ— 앉아 μžˆλŠ” μž‘μ—…..

Game Dev/Game Server 2023. 9. 19. 17:48
[C++ κ²Œμž„ μ„œλ²„] 2-9. Object Pool

[C++ κ²Œμž„ μ„œλ²„] 2-9. Object Pool 핡심 : 1. ObjectPool 을 μ‚¬μš©ν•˜λ©΄, 각 νƒ€μž…λ³„λ‘œ 풀을 λ§Œλ“€κ²Œ λ˜μ–΄, λ©”λͺ¨λ¦¬ μ˜€μ—Ό μ΄μŠˆκ°€ λ°œμƒν–ˆμ„ λ•Œ 문제의 원인을 νŒŒμ•…ν•˜κΈ°κ°€ μ‰¬μ›Œμ§„λ‹€. 2. μ»€μŠ€ν…€ν•œ μ‚­μ œμžλ₯Ό 객체 λ©”λͺ¨λ¦¬λ₯Ό 풀에 λ°˜λ‚©ν•˜λŠ” ν˜•μ‹μ„ 넣은 MakeShared λ₯Ό ν™œμš©ν•˜λ©΄, ObjectPool 을 μ‚¬μš©ν•˜λŠ” 슀마트 포인터λ₯Ό μ‰½κ²Œ λ§Œλ“€ 수 μžˆλ‹€. 3. Allocator λ₯Ό StompAllocator 둜 μ‰½κ²Œ ꡐ체할 수 μžˆλ„λ‘ #define 문법을 μ‚¬μš©ν•˜λ©΄, ν…ŒμŠ€νŠΈμš©μœΌλ‘œ StompAllocator λ₯Ό μ‰½κ²Œ 적용 κ°€λŠ₯ν•˜λ‹€. μš°λ¦¬λŠ” μ΄μ „κΉŒμ§€ λ©”λͺ¨λ¦¬ 풀에 λŒ€ν•΄ μ•Œμ•„λ³΄μ•˜λŠ”λ°, λ©”λͺ¨λ¦¬ 풀은 λ©”λͺ¨λ¦¬ 크기에 따라 객체듀이 μ•Œμ•„μ„œ 풀을 같이 μ‚¬μš©ν•œλ‹€. 집단 μƒν™œμ΄ 으레 κ·Έλ ‡λ“―, κΈ°μˆ™μ‚¬ μƒν™œμ—μ„œλ„ 문제..

Game Dev/Game Server 2023. 9. 15. 11:39
C++ DevNote : μƒμ„±μžλ₯Ό private ν•˜κ²Œ λ§Œλ“œλŠ” 이유 (feat. make_shared λŒ€μ‹  new λ₯Ό μ‚¬μš©ν•œλ‹€κ³ ?)

C++ 에 λŒ€ν•΄ κ³΅λΆ€ν•œ 것과, κ°œλ°œν•˜λ©΄μ„œ μ•Œκ²Œ 된 것듀을 λ‹€λ£Ήλ‹ˆλ‹€ μƒμ„±μžλ₯Ό private ν•˜κ²Œ λ§Œλ“ λ‹€κ³ ? 슀마트 포인터에 λ°°μš°λ‹€ 보면, make_shared 와 new λ₯Ό μ΄μš©ν•΄ 슀마트 포인터λ₯Ό λ§Œλ“œλŠ” 방식에 λŒ€ν•΄ 배우게 λœλ‹€. μ΄λ•Œ, νš¨μœ¨μ„±μ„ μœ„ν•΄ make_shared λ₯Ό new 보닀 μ„ ν˜Έν•˜λΌλŠ” 말을 λ“£κ²Œ λ˜λŠ”λ°, κ·Έ μ΄μœ λŠ” λͺ…ν™•ν•˜λ‹€(νž™ 할당이 2번 λŒ€μ‹  1번 이루어지며, 같은 λ©”λͺ¨λ¦¬ 쑰각에 λ†“μ΄λŠ” 데닀가, new μ—μ„œ μ˜ˆμ™Έκ°€ λ°œμƒν–ˆμ„ λ•Œμ˜ λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ„ 막을 수 μžˆμœΌλ‹ˆκΉŒ). 그런데... κ·ΈλŸΌμ—λ„ λΆˆκ΅¬ν•˜κ³  new λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” 경우λ₯Ό 보면, 크게 2가지 μ΄μœ κ°€ λ‚˜μ˜¨λ‹€. μ»€μŠ€ν…€ μ‚­μ œμžλ₯Ό μ‚¬μš©ν•˜λŠ” 경우 μƒμ„±μžκ°€ private 인 경우 100번 μ–‘λ³΄ν•΄μ„œ, 1λ²ˆμ€ κ·Έλ ‡λ‹€ 쳐도, 2λ²ˆμ€ μ§κ΄€μ μœΌλ‘œ 와닿지가 ..

Tutorials/C++ : Expert 2023. 9. 14. 19:31