[Book] ๊ฒŒ์ž„ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ต๊ณผ์„œ - 4์žฅ ๊ฒŒ์ž„ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ
ยท
๐Ÿ“ Book/โœ Game Server
4์žฅ ๊ฒŒ์ž„ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฒŒ์ž„ ์„œ๋ฒ„๊ฐ€ ํ•˜๋Š” ์—ญํ• ์„ ์ดํ•ดํ•˜๋ ค๋ฉด ๊ฒŒ์ž„ ์„œ๋ฒ„๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฐœ์ „ํ•ด ์™”๋Š”์ง€ ์•Œ์•„๋ณด๋ฉด ๋œ๋‹ค. 1. ํŒจํ‚ค์ง€ ๊ฒŒ์ž„์—์„œ ๊ฒŒ์ž„ ์„œ๋ฒ„ 1995๋…„ ๋‹น์‹œ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒŒ์ž„์€ ์ธํ„ฐ๋„ท์ด ์•„๋‹Œ ๊ฐ€๊ฒŒ์—์„œ ๊ตฌ๋งคํ•ด์•ผ ํ•˜๋Š” ํŒจํ‚ค์ง€ ๊ฒŒ์ž„์ด์—ˆ๋‹ค. ํŒจํ‚ค์ง€ ๊ฒŒ์ž„์€ ์ปดํ“จํ„ฐ์˜ ๋””์Šคํฌ ๋“œ๋ผ์ด๋ธŒ๋‚˜ CD-ROM ๋“œ๋ผ์ด๋ธŒ์— ๋„ฃ์€ ํ›„ ๋ฐ”๋กœ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ํ•˜๋“œ ๋””์Šคํฌ์— ์„ค์น˜ ํ›„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ด๋•Œ์˜ ํŒจํ‚ค์ง€ ๊ฒŒ์ž„์€ ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ธํ„ฐ๋„ท์ด ๋ณด๊ธ‰๋˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด์„œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์„ธ ๋ช… ์ด์ƒ ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด ํ”Œ๋ ˆ์ดํ•˜๋Š” ๋ฐฉ์‹์˜ ํŒจํ‚ค์ง€ ๊ฒŒ์ž„์ด ๋“ฑ์žฅํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ๊ฒŒ์ž„์„ ํ•˜๋ ค๋ฉด ํ”Œ๋ ˆ์ด์–ด๋“ค์˜ ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด ์ƒํƒœ(์„ธ์…˜)๋ฅผ ์ €์žฅํ•ด์•ผ ํ–ˆ๊ณ  ์ด๋ฅผ ์œ„ํ•ด ํ”Œ๋ ˆ์ด์–ด ์ค‘ ํ•œ ๋ช…์˜ ์ปดํ“จํ„ฐ๊ฐ€ ์„œ๋ฒ„๊ฐ€ ๋˜์–ด ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด์˜ ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด ์ƒํƒœ๋ฅผ ์ทจํ•ฉ..
[Book] ๊ฒŒ์ž„ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ต๊ณผ์„œ - 3์žฅ ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (2)
ยท
๐Ÿ“ Book/โœ Game Server
3์žฅ ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ 6. ๋…ผ๋ธ”๋ก ์†Œ์ผ“ ์ผ๋Œ€์ผ ๋„คํŠธ์›Œํ‚น ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” ๋ธ”๋กœํ‚น ์†Œ์ผ“์„ ์‚ฌ์šฉํ•ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค. ํ•˜์ง€๋งŒ ๋„คํŠธ์›Œํ‚น์„ ํ•ด์•ผ ํ•˜๋Š” ๋Œ€์ƒ์ด ์—ฌ๋Ÿฟ์ด๋ผ๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ? ๋‹คํ–‰ํžˆ ๋Œ€๋ถ€๋ถ„ ์šด์˜์ฒด์ œ์—์„œ๋Š” ์†Œ์ผ“ ํ•จ์ˆ˜๊ฐ€ ๋ธ”๋กœํ‚น๋˜์ง€ ์•Š๊ฒŒ ํ•˜๋Š” API๋ฅผ ์ถ”๊ฐ€๋กœ ์ œ๊ณตํ•œ๋‹ค. ์ด๋ฅผ ๋…ผ๋ธ”๋ก ์†Œ์ผ“์ด๋ผ ํ•œ๋‹ค. ๋…ผ๋ธ”๋ก ์†Œ์ผ“์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. void NonBlockSocketOperation() { s = socket(TCP); ...; s.connect(...); // ๋…ผ๋ธ”๋ก ์†Œ์ผ“์œผ๋กœ ๋ณ€๊ฒฝ s.SetNonBlocking(true); while (true) { r = s.send(dest, data); if (r == EWOULDBLOCK) { // ๋ธ”๋กœํ‚น ๊ฑธ๋ฆด ์ƒํ™ฉ์ด์—ˆ๋‹ค. ์†ก์‹ ์„ ์•ˆ ํ–ˆ๋‹ค. continu..
[Book] ๊ฒŒ์ž„ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ต๊ณผ์„œ - 3์žฅ ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (1)
ยท
๐Ÿ“ Book/โœ Game Server
3์žฅ ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์†Œ์ผ“์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํŒŒ์ผ ํ•ธ๋“ค๊ณผ ๋น„์Šทํ•˜๋‹ค. ๋””์Šคํฌ์— ๊ธฐ๋กํ•˜๊ฑฐ๋‚˜ ์ฝ์–ด ๋“ค์ผ ๋•Œ ํŒŒ์ผ ํ•ธ๋“ค์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋„คํŠธ์›Œํฌ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ฑฐ๋‚˜ ๋ฐ›์„ ๋•Œ ์†Œ์ผ“ ํ•ธ๋“ค์„ ์‚ฌ์šฉํ•œ๋‹ค. ์˜จ๋ผ์ธ ๊ฒŒ์ž„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์†Œ์ผ“์€ ํŒŒ์ผ ํ•ธ๋“ค ๋ฐฉ์‹๊ณผ๋Š” ์•ฝ๊ฐ„ ๋‹ค๋ฅด๋‹ค. TCP๋กœ ํ†ต์‹ ํ•˜๋Š” ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ ๊ฐœ์ˆ˜๋งŒํผ ์†Œ์ผ“์ด ์žˆ์–ด์•ผ ํ•˜๋ฏ€๋กœ ๊ฒŒ์ž„ ์„œ๋ฒ„์—์„œ ๋‹ค๋ฃจ์–ด์•ผ ํ•˜๋Š” ์†Œ์ผ“ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ๋‹ค. ํŒŒ์ผ ํ•ธ๋“ค์„ ํ•˜๋Š” ๋™์•ˆ ์Šค๋ ˆ๋“œ๊ฐ€ ๋Œ€๊ธฐํ•˜๋Š” ์ผ์ด ์—†์–ด์•ผ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์ง•์œผ๋กœ ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์†Œ์ผ“์€ ๋ณดํ†ต ๋น„๋™๊ธฐ ์ž…์ถœ๋ ฅ ์ƒํƒœ๋กœ ๋‹ค๋ฃฌ๋‹ค. ๋น„๋™๊ธฐ ์ž…์ถœ๋ ฅ ๋ฐฉ์‹์—๋Š” ํฌ๊ฒŒ ๋…ผ๋ธ”๋กœํ‚น ์†Œ์ผ“ ๋ฐฉ์‹๊ณผ Overlapped I/O ๋ฐฉ์‹์ด ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๋ฐฉ์‹์„ ์ง„๋ณด์‹œํ‚จ epoll๊ณผ IOCP(I/O Completion Port) ๋ฐฉ์‹์ด ๋งŽ์ด ํ™œ์šฉ๋œ๋‹ค. ..
[Book] ๊ฒŒ์ž„ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ต๊ณผ์„œ - 2์žฅ ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ (2)
ยท
๐Ÿ“ Book/โœ Game Server
2์žฅ ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ 6. ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ์—์„œ ๋ฐ์ดํ„ฐ ๋ณด๋‚ด๊ธฐ์™€ ๋ฐ›๊ธฐ UDP ๋„คํŠธ์›Œํ‚น UDP๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ๋ฐ์ดํ„ฐ๊ทธ๋žจ์„ ์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ํ†ต์‹  ๊ทœ์•ฝ(ํ”„๋กœํ† ์ฝœ)์ด๋‹ค. ์ด๋•Œ ๋ฐ์ดํ„ฐ๊ทธ๋žจ์€ 64ํ‚ฌ๋กœ๋ฐ”์ดํŠธ ์ดํ•˜์˜ ์ด์ง„ ๋ฐ์ดํ„ฐ๋กœ ๋ฉ”์‹œ์ง€ ์„ฑ์งˆ์„ ๊ฐ€์ง„๋‹ค. ์ฆ‰, ๋ฐ์ดํ„ฐ ์ผ๋ถ€๊ฐ€ ๋ญ‰์น˜๊ฑฐ๋‚˜ ์ชผ๊ฐœ์ง€์ง€ ์•Š๋Š”๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์œผ๋ ค๋ฉด ์†Œ์ผ“์„ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค. ์†Œ์ผ“์€ ๋‹จ๋ง๊ธฐ ์‚ฌ์ด์— ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์šด์˜์ฒด์ œ์—์„œ ์ œ๊ณตํ•˜๋Š” ์ž์›์ด๋‹ค. ์•„๋ž˜๋Š” ์†Œ์ผ“์„ ์ด์šฉํ•ด UDP๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. socket() ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ UDP๋ฅผ ์“ฐ๊ฒ ๋‹ค๊ณ  ์„ ์–ธํ•˜๋ฉด ์†Œ์ผ“์„ ์ƒ์„ฑํ•˜๊ณ  ์†Œ์ผ“ ํ•ธ๋“ค์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์œผ๋ ค๋ฉด ๊ทธ์ „์— ํฌํŠธ๋ฅผ ํ• ๋‹นํ•ด์•ผ ํ•˜๋Š”๋ฐ, bind() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ• ๋‹นํ•œ๋‹ค. any_port๋ฅผ ํฌํŠธ ๊ฐ’์œผ๋กœ ๋„ฃ์œผ๋ฉด ์šด์˜์ฒด์ œ๊ฐ€ ์•Œ์•„..
[Book] ๊ฒŒ์ž„ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ต๊ณผ์„œ - 2์žฅ ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ (1)
ยท
๐Ÿ“ Book/โœ Game Server
2์žฅ ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ 1. ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๊ธฐ ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ๋Š” ํฌ๊ฒŒ ๋‹จ๋ง๊ธฐ(terminal)์™€ ๋„คํŠธ์›Œํฌ ๊ธฐ๊ธฐ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ๋‹จ๋ง๊ธฐ๋ž€ ํ†ต์‹ ์„ ํ•˜๋Š” ์ฃผ์ฒด๋ฅผ ์ง€์นญํ•œ๋‹ค. ์ฆ‰, ๋ฌด์„  ํ˜น์€ ์œ ์„  ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ๋‹จ์ž๋ฅผ ๊ฐ€์ง„ ์ปดํ“จํ„ฐ, ์Šค๋งˆํŠธํฐ์„ ๋งํ•œ๋‹ค. ๋‹จ๋ง๊ธฐ๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋กœ ๊ตฌ๋ถ„ํ•˜๋Š”๋ฐ, ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ์˜ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•œ ํ›„ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ํšŒ์‹ ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ์€ ๋‘ ๋‹จ๋ง๊ธฐ๋ฅผ ์ง์ ‘ ๋„คํŠธ์›Œํฌ ์ผ€์ด๋ธ”๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ๊ตฌ์„ฑํ•˜๋ฉด ๋‹จ๋ง๊ธฐ ๋‘ ๋Œ€๋ฐ–์— ์ž‘๋™ํ•˜์ง€ ๋ชปํ•œ๋‹ค. ๋Œ€๋ถ€๋ถ„์€ ๋‹จ๋ง๊ธฐ ์‚ฌ์ด์— ๋„คํŠธ์›Œํฌ ์Šค์œ„์น˜๋ผ๋Š” ๊ธฐ๊ธฐ๋ฅผ ๋‘๊ณ  ๋‹จ๋ง๊ธฐ๋“ค๊ณผ ๋„คํŠธ์›Œํฌ ์ผ€์ด๋ธ”(๋žœ์„ )๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ๊ตฌ์„ฑํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ์„ ๋กœ์ปฌ ์ง€์—ญ ๋„คํŠธ์›Œํฌ(Local Area Ne..
[Book] ๊ฒŒ์ž„ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ต๊ณผ์„œ - 1์žฅ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ (3)
ยท
๐Ÿ“ Book/โœ Game Server
1์žฅ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ 10. ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๊ฒŒ์ž„ ์„œ๋ฒ„ ๋งŽ์€ ์ƒ์šฉ ๊ฒŒ์ž„ ์„œ๋ฒ„๋Š” CPU๊ฐ€ ์—ฌ๋Ÿฌ ์ฝ”์–ด๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฒŒ์ž„ ์„œ๋ฒ„๋ฅผ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋กœ ๊ตฌ๋™ํ•˜๋Š” ๊ฒฝ์šฐ ์ฝ”์–ด ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š” ๋น„ํšจ์œจ์„ฑ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค. ๊ทธ๋ž˜์„œ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ์„œ๋ฒ„๋ฅผ ๊ตฌ๋™ํ•˜๋Š” ๊ฒฝ์šฐ CPU ๊ฐœ์ˆ˜๋งŒํผ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋„์šฐ๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค. ๊ฐ ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฐฉ์„ ์—ฌ๋Ÿฌ ๊ฐœ ๊ฐ€์ง€๊ณ  ๋ฐฉ์—์„œ๋Š” ํ”Œ๋ ˆ์ด์–ด ํ•˜๋‚˜ ์ด์ƒ์ด ์‹ฑ๊ธ€ ํ”Œ๋ ˆ์ด ํ˜น์€ ๋ฉ€ํ‹ฐ ํ”Œ๋ ˆ์ด๋ฅผ ํ•œ๋‹ค. ํ”Œ๋ ˆ์ด์–ด ์ •๋ณด๋ฅผ ๋กœ๋”ฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋””๋ฐ”์ด์Šค ํƒ€์ž„์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์—์„œ ํฐ ์‹œ๋ฆฌ์–ผ ๋ณ‘๋ชฉ์ด ์ผ์–ด๋‚œ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋‚˜ ์ฝ”๋ฃจํ‹ด ๊ฐ™์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ๋ฐฉ ๊ฐœ์ˆ˜๋งŒํผ ์Šค๋ ˆ๋“œ๋‚˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์œผ๋ฉด ์Šค๋ ˆ๋“œ๋‚˜ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜์˜ ํšŸ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค. ๊ฐ™์€ ๋™์‹œ์ ‘์†์ž๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์„œ๋ฒ„๋ผ๊ณ  ํ•˜..