Linux ๋„คํŠธ์›Œํฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ. ์†Œ๊ฐœ

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ด์ œ ๋ชจ๋“  ๊ณณ์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋ชจ๋“  ์ „์†ก ํ”„๋กœํ† ์ฝœ ์ค‘์—์„œ HTTP๊ฐ€ ๊ฐ€์žฅ ํฐ ๋น„์ค‘์„ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์˜ ๋ฏธ๋ฌ˜ํ•œ ์ฐจ์ด๋ฅผ ์—ฐ๊ตฌํ•  ๋•Œ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ ์ด๋Ÿฌํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹ค์ œ๋กœ ์‹คํ–‰๋˜๋Š” ์šด์˜ ์ฒด์ œ์—๋Š” ๊ฑฐ์˜ ๊ด€์‹ฌ์„ ๊ธฐ์šธ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ(Dev)๊ณผ ์šด์˜(Ops)์ด ๋ถ„๋ฆฌ๋˜๋ฉด์„œ ์ƒํ™ฉ์€ ๋”์šฑ ์•…ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ DevOps ๋ฌธํ™”๊ฐ€ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ๊ฐœ๋ฐœ์ž๋Š” ํด๋ผ์šฐ๋“œ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ์ฑ…์ž„์„ ๊ฐ–๊ฒŒ ๋˜๋ฏ€๋กœ ์šด์˜ ์ฒด์ œ์˜ ๋ฐฑ์—”๋“œ์— ์™„์ „ํžˆ ์ต์ˆ™ํ•ด์ง€๋Š” ๊ฒƒ์ด ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ˆ˜์ฒœ ๋˜๋Š” ์ˆ˜๋งŒ ๊ฐœ์˜ ๋™์‹œ ์—ฐ๊ฒฐ์„ ์œ„ํ•ด ์‹œ์Šคํ…œ์„ ๋ฐฐํฌํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์›น ์„œ๋น„์Šค์˜ ์ œํ•œ ์‚ฌํ•ญ์€ ๋‹ค๋ฅธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ œํ•œ ์‚ฌํ•ญ๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์ด๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์ด๋“  ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ณ ์„ฑ๋Šฅ ํ™˜๊ฒฝ์—์„œ ๋น„์Šทํ•œ ๋ฌธ์ œ๋ฅผ ์•ˆ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ทผ๋ณธ์ ์ธ ํ•œ๊ณ„์™€ ์ผ๋ฐ˜์ ์ธ ๊ทน๋ณต ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•˜๋ฉด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ๊ณผ ํ™•์žฅ์„ฑ์„ ํ‰๊ฐ€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋ฐ•์‹ํ•œ ์‹œ์Šคํ…œ ์„ค๊ณ„์ž๊ฐ€ ๋˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์ Š์€ ๊ฐœ๋ฐœ์ž๋“ค์˜ ์งˆ๋ฌธ์— ์‘๋‹ตํ•˜์—ฌ ์ด ๊ธฐ์‚ฌ ์‹œ๋ฆฌ์ฆˆ๋ฅผ ์“ฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šด์˜ ์ฒด์ œ ์ˆ˜์ค€์—์„œ ์ž‘๋™ ๋ฐฉ์‹์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์‚ฌํ•ญ์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณด์ง€ ์•Š๊ณ  Linux ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ตœ์ ํ™” ๊ธฐ์ˆ ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์žˆ์ง€๋งŒ ์ด ์‹œ๋ฆฌ์ฆˆ์—์„œ๋Š” ๋ธŒ๋ผ์šฐ์ €๋‚˜ ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ์™€ ๊ฐ™์€ ๋ฐ์Šคํฌํ†ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋ณด๋‹ค๋Š” ์›น ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ดํŽด๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด ์ž๋ฃŒ๋Š” Linux ๋˜๋Š” Unix ํ”„๋กœ๊ทธ๋žจ์˜ ์ž‘๋™ ๋ฐฉ์‹๊ณผ ๊ณ ์„ฑ๋Šฅ์„ ์œ„ํ•ด ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•˜๋ ค๋Š” ๊ฐœ๋ฐœ์ž ๋ฐ ์„ค๊ณ„์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌ๋ˆ…์Šค๋Š” ์„œ๋ฒ„ ๋ฃธ ์šด์˜ ์ฒด์ œ์ด๋ฉฐ ๋Œ€๋ถ€๋ถ„์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ์ด OS์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ "Linux"๋ผ๊ณ  ๋งํ–ˆ์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ชจ๋“  Unix ๊ณ„์—ด ์šด์˜ ์ฒด์ œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์—์„œ๋Š” ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ FreeBSD๋‚˜ OpenBSD์— ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” Linux์™€ ๊ด€๋ จ๋œ ๊ฒƒ์„ ์‹œ๋„ํ•  ๋•Œ ๊ทธ๊ฒƒ์„ ์ง€์ ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ง€์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜์Œ๋ถ€ํ„ฐ ์•ฑ์„ ๊ตฌ์ถ•ํ•˜๋ฉด ์™„๋ฒฝํ•˜๊ฒŒ ์ตœ์ ํ™”๋  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค. ์กฐ์ง์˜ ๋น„์ฆˆ๋‹ˆ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•ด C ๋˜๋Š” C++๋กœ ์ƒˆ ์›น ์„œ๋ฒ„๋ฅผ ์ž‘์„ฑํ•œ๋‹ค๋ฉด ์˜ค๋Š˜์ด ์ž‘์—…์˜ ๋งˆ์ง€๋ง‰ ๋‚ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ตฌ์กฐ๋ฅผ ์•„๋Š” ๊ฒƒ์€ ๊ธฐ์กด ํ”„๋กœ๊ทธ๋žจ์„ ์„ ํƒํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์„ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ ๋ฐ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ๊ณผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Nginx๊ฐ€ Apache httpd๋ณด๋‹ค ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•˜๋Š” ์ด์œ ์™€ Tornado ๊ธฐ๋ฐ˜ Python ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด Django ๊ธฐ๋ฐ˜ Python ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋น„ํ•ด ๋” ๋งŽ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•˜๊ณ  ๊ฐ์‚ฌํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ZeroHTTPd: ํ•™์Šต ๋„๊ตฌ

์ œ๋กœHTTPd ๋Š” ๊ต์œก ๋„๊ตฌ๋กœ ์ฒ˜์Œ๋ถ€ํ„ฐ C๋กœ ์ž‘์„ฑํ•œ ์›น ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. Redis์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ํฌํ•จํ•˜์—ฌ ์™ธ๋ถ€ ์ข…์†์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ž์ฒด Redis ์ ˆ์ฐจ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ด๋ก ์„ ๊ธธ๊ฒŒ ๋…ผ์˜ํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ณ  ๋ชจ๋“  ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„œ๋กœ ๋น„๊ตํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ์ข‹์€ ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊ฐ€์žฅ ํ™•์‹คํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค ๊ธฐ๋ฐ˜, ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜, ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์˜ ๊ฐ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ZeroHTTPd ์›น ์„œ๋ฒ„๋ฅผ ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ ์„œ๋ฒ„๋ฅผ ํ™•์ธํ•˜๊ณ  ์„œ๋กœ ๋น„๊ตํ•˜์—ฌ ์„ฑ๋Šฅ์ด ์–ด๋–ค์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ZeroHTTPd๋Š” ๋‹จ์ผ C ํŒŒ์ผ๋กœ ๊ตฌํ˜„๋˜๋ฉฐ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์„œ๋ฒ„์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์šฐํƒ€์‰ฌ, ๋‹จ์ผ ํ—ค๋” ํŒŒ์ผ๋กœ ์ œ๊ณต๋˜๋Š” ํ›Œ๋ฅญํ•œ ํ•ด์‹œ ํ…Œ์ด๋ธ” ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณต์žกํ•˜๊ฒŒ ํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ์ข…์†์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ์—๋Š” ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•œ ๋งŽ์€ ์ฃผ์„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ์ค„์˜ ์ฝ”๋“œ๋กœ ๊ตฌ์„ฑ๋œ ๊ฐ„๋‹จํ•œ ์›น ์„œ๋ฒ„์ธ ZeroHTTPd๋Š” ์›น ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์ตœ์†Œํ•œ์˜ ํ”„๋ ˆ์ž„์›Œํฌ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์ด ์ œํ•œ๋˜์–ด ์žˆ์ง€๋งŒ ์ •์  ํŒŒ์ผ๊ณผ ๋งค์šฐ ๊ฐ„๋‹จํ•œ "๋™์ " ํŽ˜์ด์ง€๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ZeroHTTPd๋Š” ๊ณ ์„ฑ๋Šฅ Linux ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๋Š” ๋ฐ ์ข‹๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋Œ€์ฒด๋กœ ๋Œ€๋ถ€๋ถ„์˜ ์›น ์„œ๋น„์Šค๋Š” ์š”์ฒญ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ํ™•์ธํ•˜๊ณ  ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ZeroHTTPd๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ƒ์‚ฐ์„ ์œ„ํ•œ ๋„๊ตฌ๊ฐ€ ์•„๋‹Œ ํ•™์Šต์„ ์œ„ํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ์ด ๋›ฐ์–ด๋‚˜์ง€ ์•Š์œผ๋ฉฐ ์ตœ๊ณ ์˜ ๋ณด์•ˆ ์‚ฌ๋ก€๋ฅผ ์ž๋ž‘ํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. strcpy) ๋˜๋Š” C ์–ธ์–ด์˜ ์˜๋ฆฌํ•œ ํŠธ๋ฆญ์ด์ง€๋งŒ ๊ทธ๊ฒƒ์ด ์ž˜ ์ž‘๋™ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

Linux ๋„คํŠธ์›Œํฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ. ์†Œ๊ฐœ
ZeroHTTPd ํ™ˆํŽ˜์ด์ง€. ์ด๋ฏธ์ง€๋ฅผ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ํŒŒ์ผ ํ˜•์‹์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๋ช…๋ก ์‹ ์ฒญ

์ตœ์‹  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ •์  ํŒŒ์ผ์—๋งŒ ๊ตญํ•œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์บ์‹œ ๋“ฑ๊ณผ ๋ณต์žกํ•œ ์ƒํ˜ธ ์ž‘์šฉ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ๋ฐฉ๋ฌธ์ž๊ฐ€ ์ž์‹ ์˜ ์ด๋ฆ„ ์•„๋ž˜์— ํ•ญ๋ชฉ์„ ๋‚จ๊ธฐ๋Š” "Guest Book"์ด๋ผ๋Š” ๊ฐ„๋‹จํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐฉ๋ช…๋ก์—๋Š” ์ด์ „์— ๋‚จ๊ฒจ์ง„ ํ•ญ๋ชฉ์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ํŽ˜์ด์ง€ ํ•˜๋‹จ์—๋„ ๋ฐฉ๋ฌธ์ž ์นด์šดํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Linux ๋„คํŠธ์›Œํฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ. ์†Œ๊ฐœ
์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ "Guest Book" ZeroHTTPd

๋ฐฉ๋ฌธ์ž ์นด์šดํ„ฐ์™€ ๋ฐฉ๋ช…๋ก ํ•ญ๋ชฉ์€ Redis์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. Redis์™€์˜ ํ†ต์‹ ์„ ์œ„ํ•ด ์ž์ฒด ์ ˆ์ฐจ๊ฐ€ ๊ตฌํ˜„๋˜๋ฉฐ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ณต๊ฐœ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ  ์ž˜ ํ…Œ์ŠคํŠธ๋œ ์†”๋ฃจ์…˜์ด ์žˆ์„ ๋•Œ ํ™ˆ๋ธŒ๋ฅ˜ ์ฝ”๋“œ๋ฅผ ์ถœ์‹œํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ZeroHTTPd์˜ ๋ชฉ์ ์€ Linux ์„ฑ๋Šฅ๊ณผ ์™ธ๋ถ€ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์—ฐ๊ตฌํ•˜๋Š” ๋ฐ˜๋ฉด, HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์„ฑ๋Šฅ์— ์‹ฌ๊ฐํ•œ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ฐ ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜์—์„œ Redis์™€์˜ ํ†ต์‹ ์„ ์™„์ „ํžˆ ์ œ์–ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” ์ฐจ๋‹จ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์ ˆ์ฐจ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ Redis ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด ์ œ์–ด ๊ธฐ๋Šฅ์ด ์ œ๊ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์šฐ๋ฆฌ์˜ ์ž‘์€ Redis ํด๋ผ์ด์–ธํŠธ๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋Šฅ(ํ‚ค ๊ฐ€์ ธ์˜ค๊ธฐ, ์„ค์ • ๋ฐ ์ฆ๊ฐ€, ๋ฐฐ์—ด ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฐ ์ถ”๊ฐ€)๋งŒ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ Redis ํ”„๋กœํ† ์ฝœ์€ ๋งค์šฐ ์šฐ์•„ํ•˜๊ณ  ๋‹จ์ˆœํ•ฉ๋‹ˆ๋‹ค. ํŠน๋ณ„ํžˆ ๊ฐ€๋ฅด์น  ํ•„์š”๋„ ์—†์Šต๋‹ˆ๋‹ค. ํ”„๋กœํ† ์ฝœ์ด ์•ฝ XNUMX์ค„์˜ ์ฝ”๋“œ๋กœ ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์€ ํ”„๋กœํ† ์ฝœ์ด ์–ผ๋งˆ๋‚˜ ์ž˜ ๊ณ ์•ˆ๋˜์—ˆ๋Š”์ง€๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๋‹ค์Œ ๊ทธ๋ฆผ์€ ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)๊ฐ€ ์š”์ฒญํ•  ๋•Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. /guestbookURL.

Linux ๋„คํŠธ์›Œํฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ. ์†Œ๊ฐœ
๋ฐฉ๋ช…๋ก ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘๋™ ๋ฐฉ์‹

๋ฐฉ๋ช…๋ก ํŽ˜์ด์ง€๋ฅผ ๋ฐœํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ํ…œํ”Œ๋ฆฟ์„ ๋ฉ”๋ชจ๋ฆฌ๋กœ ์ฝ์–ด๋“ค์ด๊ธฐ ์œ„ํ•ด ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ํ•œ ๋ฒˆ ํ˜ธ์ถœํ•˜๊ณ  Redis๋ฅผ ์„ธ ๋ฒˆ ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ์—๋Š” ์œ„ ์Šคํฌ๋ฆฐ์ƒท์— ์žˆ๋Š” ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ๋Œ€๋ถ€๋ถ„์˜ HTML ์ฝ˜ํ…์ธ ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ˜ํ…์ธ ์˜ ๋™์  ๋ถ€๋ถ„(๊ฒŒ์‹œ๋ฌผ ๋ฐ ๋ฐฉ๋ฌธ์ž ์นด์šดํ„ฐ)์„ ์œ„ํ•œ ํŠน๋ณ„ํ•œ ์ž๋ฆฌ ํ‘œ์‹œ์ž๋„ ์žˆ์Šต๋‹ˆ๋‹ค. Redis์—์„œ ์ด๋ฅผ ๋ฐ›์•„ ํŽ˜์ด์ง€์— ์‚ฝ์ž…ํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์™„์ „ํ•œ ์ฝ˜ํ…์ธ ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Redis๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฉด ์ƒˆ ํ‚ค ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ Redis์— ๋Œ€ํ•œ ์„ธ ๋ฒˆ์งธ ํ˜ธ์ถœ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฐ–์ถ˜ ์šฐ๋ฆฌ ์„œ๋ฒ„์˜ ๊ฒฝ์šฐ ๋งŽ์€ ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ์€ ํ•™์Šต ๋ชฉ์ ์œผ๋กœ ์ข‹์€ ํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ๋ฐฉ๋ฌธ์ž ์ˆ˜์˜ Redis ๋ฐ˜ํ™˜ ๊ฐ’์„ ๋ฒ„๋ฆฌ๊ณ  ๋ณ„๋„์˜ ํ˜ธ์ถœ๋กœ ์ฟผ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜ ZeroHTTPd

์šฐ๋ฆฌ๋Š” ๊ธฐ๋Šฅ์€ ๋™์ผํ•˜์ง€๋งŒ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๋‹ค๋ฅธ XNUMX๊ฐ€์ง€ ๋ฒ„์ „์˜ ZeroHTTPd๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฐ˜๋ณต์  ์ธ
  • ํฌํฌ ์„œ๋ฒ„(์š”์ฒญ๋‹น ํ•˜๋‚˜์˜ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค)
  • ํ”„๋ฆฌํฌํฌ ์„œ๋ฒ„(ํ”„๋กœ์„ธ์Šค ํ”„๋ฆฌํฌํฌ)
  • ์‹คํ–‰ ์Šค๋ ˆ๋“œ๊ฐ€ ์žˆ๋Š” ์„œ๋ฒ„(์š”์ฒญ๋‹น ์Šค๋ ˆ๋“œ XNUMX๊ฐœ)
  • ์‚ฌ์ „ ์Šค๋ ˆ๋“œ ์ƒ์„ฑ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ์„œ๋ฒ„
  • ์•„ํ‚คํ…์ฒ˜ ๊ธฐ๋ฐ˜ poll()
  • ์•„ํ‚คํ…์ฒ˜ ๊ธฐ๋ฐ˜ epoll

์šฐ๋ฆฌ๋Š” HTTP ์š”์ฒญ์œผ๋กœ ์„œ๋ฒ„๋ฅผ ๋กœ๋“œํ•˜์—ฌ ๊ฐ ์•„ํ‚คํ…์ฒ˜์˜ ์„ฑ๋Šฅ์„ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ณ ๋„๋กœ ๋ณ‘๋ ฌํ™”๋œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋น„๊ตํ•  ๋•Œ๋Š” ์ฟผ๋ฆฌ ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์„ธ ๋ฒˆ ํ…Œ์ŠคํŠธํ•˜๊ณ  ํ‰๊ท ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•๋ก 

Linux ๋„คํŠธ์›Œํฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ. ์†Œ๊ฐœ
ZeroHTTPd ๋กœ๋“œ ํ…Œ์ŠคํŠธ ์„ค์ •

ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋™์ผํ•œ ์‹œ์Šคํ…œ์—์„œ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ CPU๋ฅผ ๋†“๊ณ  ๊ฒฝ์Ÿํ•˜๋ฏ€๋กœ OS์— ์ถ”๊ฐ€ ์Šค์ผ€์ค„๋ง ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒํ•œ ๊ฐ ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜์˜ ์šด์˜ ์ฒด์ œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ธก์ •ํ•˜๋Š” ๊ฒƒ์€ ์ด ์—ฐ์Šต์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ชฉํ‘œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค์— ํ•ด๋กœ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„ ๊ทธ๋ฆผ์˜ ์„ค์ •์ด ๊ฐ€์žฅ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ์„œ๋ฒ„๋Š” ์–ด๋–ค ์—ญํ• ์„ ํ•ฉ๋‹ˆ๊นŒ?

  • load.unixism.net: ์—ฌ๊ธฐ๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ์‹คํ–‰ํ•˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ab, Apache ๋ฒค์น˜๋งˆํฌ ์œ ํ‹ธ๋ฆฌํ‹ฐ. ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋กœ๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • nginx.unixism.net: ๋•Œ๋กœ๋Š” ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋‘ ๊ฐœ ์ด์ƒ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์ ์ ˆํ•œ ์„ค์ •์„ ๊ฐ–์ถ˜ Nginx ์„œ๋ฒ„๋Š” ๋‹ค์Œ์—์„œ ์˜ค๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ab ์šฐ๋ฆฌ ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค์—.
  • zerohttpd.unixism.net: ์—ฌ๊ธฐ์—์„œ๋Š” ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ XNUMX๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์•„ํ‚คํ…์ฒ˜์—์„œ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • redis.unixism.net: ์ด ์„œ๋ฒ„๋Š” ๋ฐฉ๋ช…๋ก ํ•ญ๋ชฉ๊ณผ ๋ฐฉ๋ฌธ์ž ์นด์šดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” Redis ๋ฐ๋ชฌ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ์„œ๋ฒ„๋Š” ๋™์ผํ•œ ํ”„๋กœ์„ธ์„œ ์ฝ”์–ด์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์•„์ด๋””์–ด๋Š” ๊ฐ ์•„ํ‚คํ…์ฒ˜์˜ ์ตœ๋Œ€ ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์€ ๋™์ผํ•œ ํ•˜๋“œ์›จ์–ด์—์„œ ํ…Œ์ŠคํŠธ๋˜๋ฏ€๋กœ ์ด๋Š” ๋น„๊ต๋ฅผ ์œ„ํ•œ ๊ธฐ์ค€์ด ๋ฉ๋‹ˆ๋‹ค. ๋‚ด ํ…Œ์ŠคํŠธ ์„ค์ •์€ Digital Ocean์—์„œ ์ž„๋Œ€ํ•œ ๊ฐ€์ƒ ์„œ๋ฒ„๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์„ ์ธก์ •ํ•˜๊ณ  ์žˆ๋‚˜์š”?

๋‹ค์–‘ํ•œ ์ง€ํ‘œ๋ฅผ ์ธก์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹ค์–‘ํ•œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ์ˆ˜์ค€์˜ ์š”์ฒญ์œผ๋กœ ์„œ๋ฒ„๋ฅผ ๋กœ๋“œํ•˜์—ฌ ํŠน์ • ๊ตฌ์„ฑ์—์„œ ๊ฐ ์•„ํ‚คํ…์ฒ˜์˜ ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋กœ๋“œ๋Š” ๋™์‹œ ์‚ฌ์šฉ์ž 20๋ช…์—์„œ 15๋ช…์œผ๋กœ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์‹œํ—˜ ๊ฒฐ๊ณผ

๋‹ค์Œ ์ฐจํŠธ๋Š” ๋‹ค์–‘ํ•œ ์ˆ˜์ค€์˜ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ์—์„œ ๋‹ค์–‘ํ•œ ์•„ํ‚คํ…์ฒ˜์˜ ์„œ๋ฒ„ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. y์ถ•์€ ์ดˆ๋‹น ์š”์ฒญ ์ˆ˜์ด๊ณ  x์ถ•์€ ๋ณ‘๋ ฌ ์—ฐ๊ฒฐ์ž…๋‹ˆ๋‹ค.

Linux ๋„คํŠธ์›Œํฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ. ์†Œ๊ฐœ

Linux ๋„คํŠธ์›Œํฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ. ์†Œ๊ฐœ

Linux ๋„คํŠธ์›Œํฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ. ์†Œ๊ฐœ

์•„๋ž˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋‹ด์€ ํ‘œ์ž…๋‹ˆ๋‹ค.

์ดˆ๋‹น ์š”์ฒญ

๋™์‹œ์„ฑ
๋ฐ˜๋ณต์  ์ธ
ํฌํฌ
ํ”„๋ฆฌํฌํฌ
์ŠคํŠธ๋ฆฌ๋ฐ
์‚ฌ์ „ ์ŠคํŠธ๋ฆฌ๋ฐ
ํˆฌํ‘œ
Epoll

20
7
112
2100
1800
2250
1900
2050

50
7
190
2200
1700
2200
2000
2000

100
7
245
2200
1700
2200
2150
2100

200
7
330
2300
1750
2300
2200
2100

300
-
380
2200
1800
2400
2250
2150

400
-
410
2200
1750
2600
2000
2000

500
-
440
2300
1850
2700
1900
2212

600
-
460
2400
1800
2500
1700
2519

700
-
460
2400
1600
2490
1550
2607

800
-
460
2400
1600
2540
1400
2553

900
-
460
2300
1600
2472
1200
2567

1000
-
475
2300
1700
2485
1150
2439

1500
-
490
2400
1550
2620
900
2479

2000
-
350
2400
1400
2396
550
2200

2500
-
280
2100
1300
2453
490
2262

3000
-
280
1900
1250
2502
ํฐ ํ™•์‚ฐ
2138

5000
-
ํฐ ํ™•์‚ฐ
1600
1100
2519
-
2235

8000
-
-
1200
ํฐ ํ™•์‚ฐ
2451
-
2100

10
-
-
ํฐ ํ™•์‚ฐ
-
2200
-
2200

11
-
-
-
-
2200
-
2122

12
-
-
-
-
970
-
1958

13
-
-
-
-
730
-
1897

14
-
-
-
-
590
-
1466

15
-
-
-
-
532
-
1281

๊ทธ๋ž˜ํ”„์™€ ํ‘œ๋ฅผ ๋ณด๋ฉด ๋™์‹œ ์š”์ฒญ์ด 8000๊ฐœ๋ฅผ ๋„˜์œผ๋ฉด ํ”„๋ฆฌํฌํฌ์™€ epoll์ด๋ผ๋Š” ๋‘ ๋ช…์˜ ํ”Œ๋ ˆ์ด์–ด๋งŒ ๋‚จ์•„ ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๋“œ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฉด ํด๋ง ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋Š” ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋ฒ„๋ณด๋‹ค ์„ฑ๋Šฅ์ด ์ €ํ•˜๋ฉ๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ ์‚ฌ์ „ ์ƒ์„ฑ ์•„ํ‚คํ…์ฒ˜๋Š” Linux ์ปค๋„์ด ๋งŽ์€ ์ˆ˜์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์–ผ๋งˆ๋‚˜ ์ž˜ ์˜ˆ์•ฝํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ฆ๊ฑฐ์ธ epoll์˜ ๊ฐ€์น˜ ์žˆ๋Š” ๊ฒฝ์Ÿ์ž์ž…๋‹ˆ๋‹ค.

ZeroHTTPd ์†Œ์Šค ์ฝ”๋“œ

ZeroHTTPd ์†Œ์Šค ์ฝ”๋“œ ์—ฌ๊ธฐ์—. ๊ฐ ์•„ํ‚คํ…์ฒ˜๋งˆ๋‹ค ๋ณ„๋„์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ZeroHTTPd โ”‚ โ”œโ”€โ”€ 01_iterative โ”‚ โ”œโ”€โ”€ main.c โ”œโ”€โ”€ 02_forking โ”‚ โ”œโ”€โ”€ main.c โ”œโ”€โ”€ 03_preforking โ”‚ โ”œโ”€โ”€ main.c โ”œโ”€โ”€ 04_ ์Šค๋ ˆ๋”ฉ โ”‚ โ”œโ”€โ”€ main.c โ”œโ”€โ”€ 05_prethreading โ”‚ โ”œโ”€โ”€ main.c โ”œโ”€โ”€ 06_poll โ”‚ โ”œโ”€โ”€ main.c โ”œโ”€โ”€ 07_epoll โ”‚ โ””โ”€โ”€ main.c โ”œโ”€โ”€ Makefile โ”œโ”€โ”€ public โ”‚ โ”œโ”€โ”€ index .html โ”‚ โ””โ”€โ”€ tux .png โ””โ”€โ”€ ํ…œํ”Œ๋ฆฟ โ””โ”€โ”€ ๋ฐฉ๋ช…๋ก โ””โ”€โ”€ index.html

๋ชจ๋“  ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ XNUMX๊ฐœ์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ ์™ธ์—๋„ ์ตœ์ƒ์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ์—๋Š” public๊ณผ template์ด๋ผ๋Š” ๋‘ ๊ฐœ์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ๋” ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ์—๋Š” index.html ํŒŒ์ผ๊ณผ ์ฒซ ๋ฒˆ์งธ ์Šคํฌ๋ฆฐ์ƒท์˜ ์ด๋ฏธ์ง€๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋‹ค๋ฅธ ํŒŒ์ผ๊ณผ ํด๋”๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ZeroHTTPd๋Š” ๋ฌธ์ œ ์—†์ด ์ด๋Ÿฌํ•œ ์ •์  ํŒŒ์ผ์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์˜ ๊ฒฝ๋กœ๊ฐ€ ๊ณต์šฉ ํด๋”์˜ ๊ฒฝ๋กœ์™€ ์ผ์น˜ํ•˜๋ฉด ZeroHTTPd๋Š” ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ index.html ํŒŒ์ผ์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ๋ฐฉ๋ช…๋ก์˜ ์ฝ˜ํ…์ธ ๋Š” ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ํ™ˆ ํŽ˜์ด์ง€๋งŒ ์žˆ๊ณ  ํ•ด๋‹น ์ฝ˜ํ…์ธ ๋Š” 'templates/guestbook/index.html' ํŒŒ์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ZeroHTTPd๋Š” ํ™•์žฅ์„ ์œ„ํ•œ ๋™์  ํŽ˜์ด์ง€๋ฅผ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์•„์ด๋””์–ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ์— ํ…œํ”Œ๋ฆฟ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ํ•„์š”์— ๋”ฐ๋ผ ZeroHTTPd๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

XNUMX๊ฐœ์˜ ์„œ๋ฒ„๋ฅผ ๋ชจ๋‘ ๊ตฌ์ถ•ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์„ธ์š”. make all ์ตœ์ƒ์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ - ๋ชจ๋“  ๋นŒ๋“œ๊ฐ€ ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ํŒŒ์ผ์€ ์‹คํ–‰๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ๊ณต์šฉ ๋ฐ ํ…œํ”Œ๋ฆฟ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

๋ฆฌ๋ˆ…์Šค API

์ด ๊ธฐ์‚ฌ ์‹œ๋ฆฌ์ฆˆ์˜ ์ •๋ณด๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด Linux API์— ์ •ํ†ตํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ธํ„ฐ๋„ท์— ๋งŽ์€ ์ฐธ๊ณ  ์ž๋ฃŒ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ด ์ฃผ์ œ์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ์ฝ์–ด ๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. Linux API์˜ ์—ฌ๋Ÿฌ ๋ฒ”์ฃผ๋ฅผ ๋‹ค๋ฃจ๊ฒ ์ง€๋งŒ ์ฃผ๋กœ ํ”„๋กœ์„ธ์Šค, ์Šค๋ ˆ๋“œ, ์ด๋ฒคํŠธ ๋ฐ ๋„คํŠธ์›Œํฌ ์Šคํƒ์— ์ค‘์ ์„ ๋‘˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Linux API์— ๊ด€ํ•œ ์ฑ…๊ณผ ๊ธฐ์‚ฌ ์™ธ์—๋„ ์‹œ์Šคํ…œ ํ˜ธ์ถœ๊ณผ ์‚ฌ์šฉ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ๋งˆ๋‚˜(mana)๋„ ์ฝ์–ด๋ณผ ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

์„ฑ๋Šฅ ๋ฐ ํ™•์žฅ์„ฑ

์„ฑ๋Šฅ ๋ฐ ํ™•์žฅ์„ฑ์— ๋Œ€ํ•œ ์ฐธ๊ณ  ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์ด๋ก ์ ์œผ๋กœ ๊ทธ๋“ค ์‚ฌ์ด์—๋Š” ์—ฐ๊ด€์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ช‡ ๋ฐ€๋ฆฌ์ดˆ์˜ ์‘๋‹ต ์‹œ๊ฐ„์œผ๋กœ ๋งค์šฐ ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ ์ „ํ˜€ ํ™•์žฅ๋˜์ง€ ์•Š๋Š” ์›น ์„œ๋น„์Šค๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์‘๋‹ตํ•˜๋Š” ๋ฐ ๋ช‡ ์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ์ง€๋งŒ ์ˆ˜๋งŒ ๋ช…์˜ ๋™์‹œ ์‚ฌ์šฉ์ž๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜๋งŒ ๋ฐฐ๋กœ ํ™•์žฅ๋˜๋Š” ์„ฑ๋Šฅ์ด ๋‚ฎ์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ณ ์„ฑ๋Šฅ๊ณผ ํ™•์žฅ์„ฑ์˜ ์กฐํ•ฉ์€ ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ์กฐํ•ฉ์ž…๋‹ˆ๋‹ค. ๊ณ ์„ฑ๋Šฅ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ์ ๊ฒŒ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์„œ๋ฒ„์—์„œ ๋” ๋งŽ์€ ๋™์‹œ ์‚ฌ์šฉ์ž์—๊ฒŒ ํšจ์œจ์ ์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋น„์šฉ์„ ์ ˆ๊ฐํ•ฉ๋‹ˆ๋‹ค.

CPU ๋ฐ I/O ์ž‘์—…

๋งˆ์ง€๋ง‰์œผ๋กœ, ์ปดํ“จํŒ…์—๋Š” I/O์™€ CPU๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๊ฐ€๋Šฅํ•œ ์ž‘์—… ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ธํ„ฐ๋„ท์„ ํ†ตํ•œ ์š”์ฒญ ์ˆ˜์‹ (๋„คํŠธ์›Œํฌ I/O), ํŒŒ์ผ ์ œ๊ณต(๋„คํŠธ์›Œํฌ ๋ฐ ๋””์Šคํฌ I/O), ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ํ†ต์‹ (๋„คํŠธ์›Œํฌ ๋ฐ ๋””์Šคํฌ I/O)์€ ๋ชจ๋‘ I/O ํ™œ๋™์ž…๋‹ˆ๋‹ค. ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ๋Š” ์•ฝ๊ฐ„ CPU ์ง‘์•ฝ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ •๋ ฌ, ๋ฐฑ๋งŒ ๊ฐœ์˜ ๊ฒฐ๊ณผ ํ‰๊ท ํ™” ๋“ฑ). ๋Œ€๋ถ€๋ถ„์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€ I/O๋กœ ์ œํ•œ๋˜๋ฉฐ ํ”„๋กœ์„ธ์„œ๊ฐ€ ์ „์ฒด ์šฉ๋Ÿ‰์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ I/O ์ž‘์—…์ด ๋งŽ์€ CPU๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜๋ฉด ์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์ข‹์ง€ ์•Š๋‹ค๋Š” ์‹ ํ˜ธ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ ๋ฐ ์ปจํ…์ŠคํŠธ ์ „ํ™˜์— CPU ๋ฆฌ์†Œ์Šค๊ฐ€ ๋‚ญ๋น„๋œ๋‹ค๋Š” ์˜๋ฏธ์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Š” ์™„์ „ํžˆ ์œ ์šฉํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ, ์˜ค๋””์˜ค ํŒŒ์ผ ๋ณ€ํ™˜ ๋˜๋Š” ๊ธฐ๊ณ„ ํ•™์Šต๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋Š” ๊ฐ•๋ ฅํ•œ CPU ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€๋ถ€๋ถ„์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ

  1. XNUMX๋ถ€: ๋ฐ˜๋ณต์  ์•„ํ‚คํ…์ฒ˜
  2. ํŒŒํŠธ II. ํฌํฌ ์„œ๋ฒ„
  3. ํŒŒํŠธ III. ํ”„๋ฆฌํฌํฌ ์„œ๋ฒ„
  4. ํŒŒํŠธ IV. ์‹คํ–‰ ์Šค๋ ˆ๋“œ๊ฐ€ ์žˆ๋Š” ์„œ๋ฒ„
  5. ํŒŒํŠธ V. ์‚ฌ์ „ ์Šค๋ ˆ๋“œ ์„œ๋ฒ„
  6. ํŒŒํŠธ VI. Pol ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜
  7. ํŒŒํŠธ VII. epoll ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€