์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์ ๋ชจ๋ ๊ณณ์์ ์ฌ์ฉ๋๊ณ ์์ผ๋ฉฐ, ๋ชจ๋ ์ ์ก ํ๋กํ ์ฝ ์ค์์ HTTP๊ฐ ๊ฐ์ฅ ํฐ ๋น์ค์ ์ฐจ์งํ๊ณ ์์ต๋๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ๋ฏธ๋ฌํ ์ฐจ์ด๋ฅผ ์ฐ๊ตฌํ ๋ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ ์ด๋ฌํ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ค์ ๋ก ์คํ๋๋ ์ด์ ์ฒด์ ์๋ ๊ฑฐ์ ๊ด์ฌ์ ๊ธฐ์ธ์ด์ง ์์ต๋๋ค. ๊ฐ๋ฐ(Dev)๊ณผ ์ด์(Ops)์ด ๋ถ๋ฆฌ๋๋ฉด์ ์ํฉ์ ๋์ฑ ์ ํ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ DevOps ๋ฌธํ๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ๊ฐ๋ฐ์๋ ํด๋ผ์ฐ๋์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ์ฑ ์์ ๊ฐ๊ฒ ๋๋ฏ๋ก ์ด์ ์ฒด์ ์ ๋ฐฑ์๋์ ์์ ํ ์ต์ํด์ง๋ ๊ฒ์ด ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ์ด๋ ์์ฒ ๋๋ ์๋ง ๊ฐ์ ๋์ ์ฐ๊ฒฐ์ ์ํด ์์คํ ์ ๋ฐฐํฌํ๋ ค๋ ๊ฒฝ์ฐ ํนํ ์ ์ฉํฉ๋๋ค.
์น ์๋น์ค์ ์ ํ ์ฌํญ์ ๋ค๋ฅธ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ ํ ์ฌํญ๊ณผ ๋งค์ฐ ์ ์ฌํฉ๋๋ค. ๋ก๋ ๋ฐธ๋ฐ์์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์ด๋ ์ด๋ฌํ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ณ ์ฑ๋ฅ ํ๊ฒฝ์์ ๋น์ทํ ๋ฌธ์ ๋ฅผ ์๊ณ ์์ต๋๋ค. ์ด๋ฌํ ๊ทผ๋ณธ์ ์ธ ํ๊ณ์ ์ผ๋ฐ์ ์ธ ๊ทน๋ณต ๋ฐฉ๋ฒ์ ์ดํดํ๋ฉด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ๊ณผ ํ์ฅ์ฑ์ ํ๊ฐํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๋๋ ๋ฐ์ํ ์์คํ
์ค๊ณ์๊ฐ ๋๊ธฐ๋ฅผ ์ํ๋ ์ ์ ๊ฐ๋ฐ์๋ค์ ์ง๋ฌธ์ ์๋ตํ์ฌ ์ด ๊ธฐ์ฌ ์๋ฆฌ์ฆ๋ฅผ ์ฐ๊ณ ์์ต๋๋ค. ์ด์ ์ฒด์ ์์ค์์ ์๋ ๋ฐฉ์์ ๋ํ ๊ธฐ๋ณธ ์ฌํญ์ ์์ธํ ์ดํด๋ณด์ง ์๊ณ Linux ์ ํ๋ฆฌ์ผ์ด์
์ต์ ํ ๊ธฐ์ ์ ๋ช
ํํ๊ฒ ์ดํดํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋ค์ํ ์ ํ์ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ง๋ง ์ด ์๋ฆฌ์ฆ์์๋ ๋ธ๋ผ์ฐ์ ๋ ํ
์คํธ ํธ์ง๊ธฐ์ ๊ฐ์ ๋ฐ์คํฌํฑ ์ ํ๋ฆฌ์ผ์ด์
๋ณด๋ค๋ ์น ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์ดํด๋ณด๊ณ ์ถ์ต๋๋ค. ์ด ์๋ฃ๋ Linux ๋๋ Unix ํ๋ก๊ทธ๋จ์ ์๋ ๋ฐฉ์๊ณผ ๊ณ ์ฑ๋ฅ์ ์ํด ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ๋ ค๋ ๊ฐ๋ฐ์ ๋ฐ ์ค๊ณ์๋ฅผ ๋์์ผ๋ก ํฉ๋๋ค.
๋ฆฌ๋
์ค๋ ์๋ฒ ๋ฃธ ์ด์ ์ฒด์ ์ด๋ฉฐ ๋๋ถ๋ถ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ด OS์์ ์คํ๋ฉ๋๋ค. ๋ด๊ฐ "Linux"๋ผ๊ณ ๋งํ์ง๋ง ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ Unix ๊ณ์ด ์ด์ ์ฒด์ ๋ฅผ ์๋ฏธํ๋ค๊ณ ๊ฐ์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ค๋ฅธ ์์คํ
์์๋ ํจ๊ป ์ ๊ณต๋๋ ์ฝ๋๋ฅผ ํ
์คํธํ์ง ์์์ต๋๋ค. ๋ฐ๋ผ์ FreeBSD๋ OpenBSD์ ๊ด์ฌ์ด ์๋ค๋ฉด ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. ๋๋ Linux์ ๊ด๋ จ๋ ๊ฒ์ ์๋ํ ๋ ๊ทธ๊ฒ์ ์ง์ ํฉ๋๋ค.
์ด ์ง์์ ์ฌ์ฉํ์ฌ ์ฒ์๋ถํฐ ์ฑ์ ๊ตฌ์ถํ๋ฉด ์๋ฒฝํ๊ฒ ์ต์ ํ๋ ์ ์์ง๋ง ๊ทธ๋ ๊ฒ ํ์ง ์๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค. ์กฐ์ง์ ๋น์ฆ๋์ค ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํด C ๋๋ C++๋ก ์ ์น ์๋ฒ๋ฅผ ์์ฑํ๋ค๋ฉด ์ค๋์ด ์์ ์ ๋ง์ง๋ง ๋ ์ผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐ๋ฅผ ์๋ ๊ฒ์ ๊ธฐ์กด ํ๋ก๊ทธ๋จ์ ์ ํํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ํ๋ก์ธ์ค ๊ธฐ๋ฐ ์์คํ ์ ์ค๋ ๋ ๊ธฐ๋ฐ ์์คํ ๋ฐ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์์คํ ๊ณผ ๋น๊ตํ ์ ์์ต๋๋ค. Nginx๊ฐ Apache httpd๋ณด๋ค ๋ ๋์ ์ฑ๋ฅ์ ๋ฐํํ๋ ์ด์ ์ Tornado ๊ธฐ๋ฐ Python ์ ํ๋ฆฌ์ผ์ด์ ์ด Django ๊ธฐ๋ฐ Python ์ ํ๋ฆฌ์ผ์ด์ ์ ๋นํด ๋ ๋ง์ ์ฌ์ฉ์์๊ฒ ์๋น์ค๋ฅผ ์ ๊ณตํ ์ ์๋ ์ด์ ๋ฅผ ์ดํดํ๊ณ ๊ฐ์ฌํ๊ฒ ๋ ๊ฒ์ ๋๋ค.
ZeroHTTPd: ํ์ต ๋๊ตฌ
์ด๋ก ์ ๊ธธ๊ฒ ๋
ผ์ํ ์๋ ์์ง๋ง ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์คํํ๊ณ ๋ชจ๋ ์๋ฒ ์ํคํ
์ฒ๋ฅผ ์๋ก ๋น๊ตํ๋ ๊ฒ๋ณด๋ค ๋ ์ข์ ๊ฒ์ ์์ต๋๋ค. ์ด๊ฒ์ด ๊ฐ์ฅ ํ์คํ ๋ฐฉ๋ฒ์ด๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ํ๋ก์ธ์ค ๊ธฐ๋ฐ, ์ค๋ ๋ ๊ธฐ๋ฐ, ์ด๋ฒคํธ ๊ธฐ๋ฐ์ ๊ฐ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ ZeroHTTPd ์น ์๋ฒ๋ฅผ ์์ฑํ๊ฒ ์ต๋๋ค. ๊ฐ ์๋ฒ๋ฅผ ํ์ธํ๊ณ ์๋ก ๋น๊ตํ์ฌ ์ฑ๋ฅ์ด ์ด๋ค์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค. ZeroHTTPd๋ ๋จ์ผ C ํ์ผ๋ก ๊ตฌํ๋๋ฉฐ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์๋ฒ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค.
์ฝ๋์๋ ์ดํด๋ฅผ ๋๊ธฐ ์ํ ๋ง์ ์ฃผ์์ด ์์ต๋๋ค. ๋ช ์ค์ ์ฝ๋๋ก ๊ตฌ์ฑ๋ ๊ฐ๋จํ ์น ์๋ฒ์ธ ZeroHTTPd๋ ์น ๊ฐ๋ฐ์ ์ํ ์ต์ํ์ ํ๋ ์์ํฌ์ด๊ธฐ๋ ํฉ๋๋ค. ๊ธฐ๋ฅ์ด ์ ํ๋์ด ์์ง๋ง ์ ์ ํ์ผ๊ณผ ๋งค์ฐ ๊ฐ๋จํ "๋์ " ํ์ด์ง๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. ZeroHTTPd๋ ๊ณ ์ฑ๋ฅ Linux ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ๋ ๋ฐ ์ข๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค. ๋์ฒด๋ก ๋๋ถ๋ถ์ ์น ์๋น์ค๋ ์์ฒญ์ ๊ธฐ๋ค๋ฆฌ๊ณ ํ์ธํ๊ณ ์ฒ๋ฆฌํฉ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ZeroHTTPd๊ฐ ์ํํ๋ ์์
์
๋๋ค. ์ด๋ ์์ฐ์ ์ํ ๋๊ตฌ๊ฐ ์๋ ํ์ต์ ์ํ ๋๊ตฌ์
๋๋ค. ์ค๋ฅ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ด ๋ฐ์ด๋์ง ์์ผ๋ฉฐ ์ต๊ณ ์ ๋ณด์ ์ฌ๋ก๋ฅผ ์๋ํ์ง๋ ์์ต๋๋ค. strcpy
) ๋๋ C ์ธ์ด์ ์๋ฆฌํ ํธ๋ฆญ์ด์ง๋ง ๊ทธ๊ฒ์ด ์ ์๋ํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
ZeroHTTPd ํํ์ด์ง. ์ด๋ฏธ์ง๋ฅผ ํฌํจํ ๋ค์ํ ํ์ผ ํ์์ ์ถ๋ ฅํ ์ ์์ต๋๋ค.
๋ฐฉ๋ช ๋ก ์ ์ฒญ
์ต์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ผ๋ฐ์ ์ผ๋ก ์ ์ ํ์ผ์๋ง ๊ตญํ๋์ง ์์ต๋๋ค. ๊ทธ๋ค์ ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์บ์ ๋ฑ๊ณผ ๋ณต์กํ ์ํธ ์์ฉ์ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ๋ฐฉ๋ฌธ์๊ฐ ์์ ์ ์ด๋ฆ ์๋์ ํญ๋ชฉ์ ๋จ๊ธฐ๋ "Guest Book"์ด๋ผ๋ ๊ฐ๋จํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ๊ฒ์ ๋๋ค. ๋ฐฉ๋ช ๋ก์๋ ์ด์ ์ ๋จ๊ฒจ์ง ํญ๋ชฉ์ด ์ ์ฅ๋ฉ๋๋ค. ํ์ด์ง ํ๋จ์๋ ๋ฐฉ๋ฌธ์ ์นด์ดํฐ๊ฐ ์์ต๋๋ค.
์น ์ ํ๋ฆฌ์ผ์ด์
"Guest Book" ZeroHTTPd
๋ฐฉ๋ฌธ์ ์นด์ดํฐ์ ๋ฐฉ๋ช ๋ก ํญ๋ชฉ์ Redis์ ์ ์ฅ๋ฉ๋๋ค. Redis์์ ํต์ ์ ์ํด ์์ฒด ์ ์ฐจ๊ฐ ๊ตฌํ๋๋ฉฐ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํ์ง ์์ต๋๋ค. ๋๋ ๊ณต๊ฐ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ ์ ํ ์คํธ๋ ์๋ฃจ์ ์ด ์์ ๋ ํ๋ธ๋ฅ ์ฝ๋๋ฅผ ์ถ์ํ๋ ๊ฒ์ ์ข์ํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ZeroHTTPd์ ๋ชฉ์ ์ Linux ์ฑ๋ฅ๊ณผ ์ธ๋ถ ์๋น์ค์ ๋ํ ์ก์ธ์ค๋ฅผ ์ฐ๊ตฌํ๋ ๋ฐ๋ฉด, HTTP ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์ฑ๋ฅ์ ์ฌ๊ฐํ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ฐ ์๋ฒ ์ํคํ ์ฒ์์ Redis์์ ํต์ ์ ์์ ํ ์ ์ดํด์ผ ํฉ๋๋ค. ์ผ๋ถ ์ํคํ ์ฒ์์๋ ์ฐจ๋จ ํธ์ถ์ ์ฌ์ฉํ๊ณ ๋ค๋ฅธ ์ํคํ ์ฒ์์๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ ์ฐจ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ธ๋ถ Redis ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด ์ ์ด ๊ธฐ๋ฅ์ด ์ ๊ณต๋์ง ์์ต๋๋ค. ๋ํ ์ฐ๋ฆฌ์ ์์ Redis ํด๋ผ์ด์ธํธ๋ ๋ช ๊ฐ์ง ๊ธฐ๋ฅ(ํค ๊ฐ์ ธ์ค๊ธฐ, ์ค์ ๋ฐ ์ฆ๊ฐ, ๋ฐฐ์ด ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ์ถ๊ฐ)๋ง ์ํํฉ๋๋ค. ๊ฒ๋ค๊ฐ Redis ํ๋กํ ์ฝ์ ๋งค์ฐ ์ฐ์ํ๊ณ ๋จ์ํฉ๋๋ค. ํน๋ณํ ๊ฐ๋ฅด์น ํ์๋ ์์ต๋๋ค. ํ๋กํ ์ฝ์ด ์ฝ XNUMX์ค์ ์ฝ๋๋ก ๋ชจ๋ ์์ ์ ์ํํ๋ค๋ ์ฌ์ค์ ํ๋กํ ์ฝ์ด ์ผ๋ง๋ ์ ๊ณ ์๋์๋์ง๋ฅผ ๋ณด์ฌ์ค๋๋ค.
๋ค์ ๊ทธ๋ฆผ์ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )๊ฐ ์์ฒญํ ๋ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ํํ๋ ์์
์ ๋ณด์ฌ์ค๋๋ค. /guestbookURL
.
๋ฐฉ๋ช
๋ก ์ ํ๋ฆฌ์ผ์ด์
์๋ ๋ฐฉ์
๋ฐฉ๋ช ๋ก ํ์ด์ง๋ฅผ ๋ฐํํด์ผ ํ๋ ๊ฒฝ์ฐ ํ ํ๋ฆฟ์ ๋ฉ๋ชจ๋ฆฌ๋ก ์ฝ์ด๋ค์ด๊ธฐ ์ํด ํ์ผ ์์คํ ์ ํ ๋ฒ ํธ์ถํ๊ณ Redis๋ฅผ ์ธ ๋ฒ ๋คํธ์ํฌ ํธ์ถํฉ๋๋ค. ํ ํ๋ฆฟ ํ์ผ์๋ ์ ์คํฌ๋ฆฐ์ท์ ์๋ ํ์ด์ง์ ๋ํ ๋๋ถ๋ถ์ HTML ์ฝํ ์ธ ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์ฝํ ์ธ ์ ๋์ ๋ถ๋ถ(๊ฒ์๋ฌผ ๋ฐ ๋ฐฉ๋ฌธ์ ์นด์ดํฐ)์ ์ํ ํน๋ณํ ์๋ฆฌ ํ์์๋ ์์ต๋๋ค. Redis์์ ์ด๋ฅผ ๋ฐ์ ํ์ด์ง์ ์ฝ์ ํ๊ณ ํด๋ผ์ด์ธํธ์๊ฒ ์์ ํ ์ฝํ ์ธ ๋ฅผ ์ ๊ณตํฉ๋๋ค. Redis๊ฐ ์ฆ๊ฐํ๋ฉด ์ ํค ๊ฐ์ ๋ฐํํ๋ฏ๋ก Redis์ ๋ํ ์ธ ๋ฒ์งธ ํธ์ถ์ ํผํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋น๋๊ธฐ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ๋ฅผ ๊ฐ์ถ ์ฐ๋ฆฌ ์๋ฒ์ ๊ฒฝ์ฐ ๋ง์ ๋คํธ์ํฌ ํธ์ถ์ ํ์ต ๋ชฉ์ ์ผ๋ก ์ข์ ํ ์คํธ์ ๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ๋ฐฉ๋ฌธ์ ์์ Redis ๋ฐํ ๊ฐ์ ๋ฒ๋ฆฌ๊ณ ๋ณ๋์ ํธ์ถ๋ก ์ฟผ๋ฆฌํฉ๋๋ค.
์๋ฒ ์ํคํ ์ฒ ZeroHTTPd
์ฐ๋ฆฌ๋ ๊ธฐ๋ฅ์ ๋์ผํ์ง๋ง ์ํคํ ์ฒ๊ฐ ๋ค๋ฅธ XNUMX๊ฐ์ง ๋ฒ์ ์ ZeroHTTPd๋ฅผ ๊ตฌ์ถํ๊ณ ์์ต๋๋ค.
- ๋ฐ๋ณต์ ์ธ
- ํฌํฌ ์๋ฒ(์์ฒญ๋น ํ๋์ ํ์ ํ๋ก์ธ์ค)
- ํ๋ฆฌํฌํฌ ์๋ฒ(ํ๋ก์ธ์ค ํ๋ฆฌํฌํฌ)
- ์คํ ์ค๋ ๋๊ฐ ์๋ ์๋ฒ(์์ฒญ๋น ์ค๋ ๋ XNUMX๊ฐ)
- ์ฌ์ ์ค๋ ๋ ์์ฑ ๊ธฐ๋ฅ์ด ์๋ ์๋ฒ
- ์ํคํ
์ฒ ๊ธฐ๋ฐ
poll()
- ์ํคํ
์ฒ ๊ธฐ๋ฐ
epoll
์ฐ๋ฆฌ๋ HTTP ์์ฒญ์ผ๋ก ์๋ฒ๋ฅผ ๋ก๋ํ์ฌ ๊ฐ ์ํคํ ์ฒ์ ์ฑ๋ฅ์ ์ธก์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ณ ๋๋ก ๋ณ๋ ฌํ๋ ์ํคํ ์ฒ๋ฅผ ๋น๊ตํ ๋๋ ์ฟผ๋ฆฌ ์๊ฐ ์ฆ๊ฐํฉ๋๋ค. ์ธ ๋ฒ ํ ์คํธํ๊ณ ํ๊ท ์ ๊ณ์ฐํฉ๋๋ค.
ํ ์คํธ ๋ฐฉ๋ฒ๋ก
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์ถ์ ๋ณ๋ ฌ ์ฐ๊ฒฐ์ ๋๋ค.
์๋๋ ๊ฒฐ๊ณผ๋ฅผ ๋ด์ ํ์
๋๋ค.
์ด๋น ์์ฒญ
๋์์ฑ
๋ฐ๋ณต์ ์ธ
ํฌํฌ
ํ๋ฆฌํฌํฌ
์คํธ๋ฆฌ๋ฐ
์ฌ์ ์คํธ๋ฆฌ๋ฐ
ํฌํ
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 ๋ฆฌ์์ค๊ฐ ํ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋๋ถ๋ถ์ ์์ฉ ํ๋ก๊ทธ๋จ์์๋ ๊ทธ๋ ์ง ์์ต๋๋ค.
์๋ฒ ์ํคํ ์ฒ์ ๋ํด ์์ธํ ์์๋ณด๊ธฐ
XNUMX๋ถ: ๋ฐ๋ณต์ ์ํคํ ์ฒ ํํธ II. ํฌํฌ ์๋ฒ ํํธ III. ํ๋ฆฌํฌํฌ ์๋ฒ ํํธ IV. ์คํ ์ค๋ ๋๊ฐ ์๋ ์๋ฒ ํํธ V. ์ฌ์ ์ค๋ ๋ ์๋ฒ ํํธ VI. Pol ๊ธฐ๋ฐ ์ํคํ ์ฒ ํํธ VII. epoll ๊ธฐ๋ฐ ์ํคํ ์ฒ
์ถ์ฒ : habr.com