Nginx
Apache์ ๊ตฌ์กฐ
์ํ์น๋ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ปค๋ฅ์ ์ ํ์ฑํ๊ธฐ ์ํด์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ค.
์ฆ, ํ๋ก์ธ์ค๋ฅผ ํ์ฑํ๊ณ ์ปค๋ฅ์ ์ ๋งบ๋๋ค. -> ์๋ก์ด ํด๋ผ์ธํธ ์์ฒญ์ด ๋ค์ด์ฌ ๋๋ง๋ค ์๋ก์ด ์ปค๋ฅ์ ์ ๋ง๋ ๋ค.
ํ๋ก์ธ์ค๋ฅผ ๋ง๋๋ ๊ฒ์ ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์์ฒญ์ด ๋ค์ด์ค๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๋ prefor ๋ชจ๋๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ๊ทธ๋์ ์๋ก์ด ํด๋ผ์ด์ธํธ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ๋ง๋ค์ด๋์ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ๋ค.
perfork : ์์ ํ๋ก์ธ์ค๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํ๋ ๋ฐฉ์์ผ๋ก ์ต๋ 1024๊ฐ ์์ฑ์ด ๊ฐ๋ฅํ๊ณ , ํ ๊ฐ์ ์ค๋ ๋๋น ํ ๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ์ฐ๊ฒฐํ๋ค. ์ค๋ ๋๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ์ง ์์์ ๋ ๋ฆฝ์ ์ฌ์ฉ์ ์์ ์ ์ด์ง๋ง ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ง์ด ์ฌ์ฉ๋๋ค.

๐ C10K ๋ฌธ์ . (Connection 10,000 problem)
https://en.wikipedia.org/wiki/C10k_problem

(1) ๋์์ ์ฐ๊ฒฐ๋ ์ปค๋ฅ์ ์ : ์๋ฒ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ผ๋ง๋ ๋ง์ ํด๋ผ์ด์ธํธ์ ์ปค๋ฅ์ ์ ํ์ฑํ๋์ง๋ฅผ ๋ํ๋
(2) ์ด๋น ์์ฒญ ์ฒ๋ฆฌ ์ : ์๋ฒ๊ฐ ์ผ๋ง๋ ๋นจ๋ฆฌ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋์ง๋ฅผ ๋ํ๋ด๋ ์งํ
ํ ์ปค๋ฅ์ ์์ ์ฌ๋ฌ ์์ฒญ์ ๋ณด๋ผ ์ ์๊ธฐ๋๋ฌธ์ ๋ ์งํ๋ ์๋ก ๊ฐ์ง ์๋ค. (1) โ (2)
http ํค๋์๋ Keep-Alive๋ผ๋ ํค๋๊ฐ ์๋๋ฐ client์ server๋ ์ฌ๊ธฐ ์ ํ ์๊ฐ๋งํผ ์ปค๋ฅ์ ์ ์ ์งํ๋ค.
client์ ์๊ฐ ๋ง์์ง๋ฉด ๋์์ ์ฐ๊ฒฐ๋ ์ปค๋ฅ์ ์๊ฐ ๋ง์์ง ๊ฒ์ด๋ค. ๋์ ์ปค๋ฅ์ ์ด 10,000 ๋จ์๊ฐ ๋์ด๊ฐ๋ ์๊ฐ์ server๋ ๋์ด์ ์ปค๋ฅ์ ์ ํ์ฑํ ์ ์๋ ๋ฌธ์ ์ด๋ค. H/W์ ๋ฌธ์ ๊ฐ ์๋๋ผ ์ํ์น ์๋ฒ์ ๊ตฌ์กฐ์๋ค.
์ํ์น๋ ๊ตฌ์กฐ์ ์ปค๋ฅ์ ์ด ํ์ฑ๋ ๋๋ง๋ค ํ๋ก์ธ์ค๋ฅผ ํ ๋นํ๊ธฐ ๋๋ฌธ์ ๋์์ ์ฒ๋ฆฌํ๋ ์ปค๋ฅ์ ์ด ๋ง์์ง๋ฉด ๊ทธ๋งํผ ํ๋ก์ธ์ค๊ฐ ๋ง์ด ์๋๊ฒ์ด๊ณ ๊ฒฐ๊ตญ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑํ์์ผ๋ก ์ด์ด์ง๋ค.
๋, ๋ง์ connection์์ ์์ฒญ์ด ๋ค์ด์ค๊ธฐ ์์ํ๋ฉด CPU ์ฝ์ด๋ ๊ณ์ ํ๋ก์ธ์ค๋ฅผ ๋ฐ๊ฟ๊ฐ๋ฉฐ ๋์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ CPU๊ฐ ํ ์ผ์ด ๋ง์์ก๋ค. (CPU ๋ถํ)
์ปจํ ์คํธ ์ค์์นญ์ ๋ง์ด ํด์ผํ๋ค.
์ฆ, ์๋ง์ ๋์ ์ปค๋ฅ์ ์ ๊ฐ๋นํ๊ธฐ ์ํด์๋ ์ํ์น ์๋ฒ์ ๊ตฌ์กฐ๊ฐ ์ ํฉํ์ง ์์๋ค.
Nginx์ ๋ฑ์ฅ
2004๋ ์ํ์น ์๋ฒ๋ฅผ ๋ณด์ํ๊ธฐ ์ํ S/W๊ฐ ๋ฑ์ฅํ๋๋ฐ ์ด๊ฒ์ด Nginx์ด๋ค. ์ด์ฐฝ๊ธฐ ์์ง์์ค๋ ์ํ์น์ ํจ๊ป ์ฌ์ฉํ๊ธฐ ์ํด์ ๋ง๋ค์ด์ก๋๋ฐ, ์ํ์น๋ฅผ ์์ ํ ๋์ฒดํ ๋ชฉ์ ์ ์๋์๋ค. ์์ ๊ฐ์ ์ํ์น์ ๊ตฌ์กฐ์ ๋ฌธ์ ๋ฅผ Nginx๋ฅผ ํจ๊ป ์ฌ์ฉํจ์ผ๋ก์จ ๊ทน๋ณตํ๋ ค๊ณ ํ๋ค.

์ ๋ฐฉ์์ฒ๋ผ ์ํ์น ์๋ฒ ์๋จ์ Nginx๋ฅผ ๋๋ค๋ฉด, ๊ธฐ์กด ์ํ์น์์ ๊ฐ๋นํด์ผ ํ๋ ์๋ง์ ๋์ ์ปค๋ฅ์ ์ Nginx๊ฐ ๋์ ์ ์งํ ์ ์๋ค. ๊ตฌ์กฐ์ ์ผ๋ก ๋์ ์ปค๋ฅ์ ์ ๋ง์ด ์ ์ง ๋ชปํ๋ ์ํ์น ์๋ฒ์ ๋ถํ๋ฅผ Nginx๋ฅผ ์ด์ฉํด์ ๋ง์ด ์ค์ผ ์ ์๋ค. Nginx๋ ์น ์๋ฒ์ด๊ธฐ ๋๋ฌธ์ ์ ์ ํ์ผ(image, html, css, js)์ ๋ํ ์์ฒญ์ ์ค์ค๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
์น ์๋ฒ๋ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋์ ํ์ผ ์์ฒญ์ ๋ฐ์ ๊ฒฝ์ฐ์๋ง ๋ค์ ์๋ ์๋ฒ์ ์ปค๋ฅ์ ์ ํ์ฑํ๋ค. ์ด๋ ๊ฒ ๋์ ์์ฒญ์๋ง ์ํ์น ์๋ฒ์ ์ปค๋ฅ์ ์ ๊ฐ์ง๋ฉด์ ์ํ์น ์๋ฒ์ ๋ฆฌ์์ค๋ฅผ ์ปค๋ฅ์ ์ ์ง์ ์ฌ์ฉํ์ง ์๊ณ ๊ฐ๋ฐ์์ ๋ก์ง ์ฒ๋ฆฌ์ ์ฐ๋๋ก ๋์์ค๋ค.
๊ทธ๋ผ Nginx๋ ์ด๋ค ๊ตฌ์กฐ์ด๊ธฐ์ ๋ง์ ๋์ ์ปค๋ฅ์
์ ์ ์งํ ์ ์์๊น?

Nginx๋ 1๊ฐ์ ๋ง์คํฐ ํ๋ก์ธ์ค(master process)์ ์ฌ๋ฌ๊ฐ์ ์์ปค ํ๋ก์ธ์ค๋ค(work process)์ ๊ฐ์ง๊ณ ์๋ค. ๋ง์คํฐ ํ๋ก์ธ์ค์ ์ฃผ์ ์ญํ ์ ์ค์ (configuration)์ ์ฝ๊ณ ์ค์ ์ ๋ง๊ฒ ์์ปค ํ๋ก์ธ์ค๋ค์ ์์ฑ, ๊ด๋ฆฌํ๋ ๊ฒ์ด๋ค. ์์ปค ํ๋ก์ธ์ค์ ์ญํ ์ ์ค์ ๋ก ์์ฒญ๋ค์ ์ฒ๋ฆฌํ๋ ์ ๋ค์ด๊ณ , ์์ฑ๋ ๋ ์ง์ ๋ listen socket์ ๋ฐฐ์ ๋ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์์ผ์ ์๋ก์ด ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ด ๋ค์ด์ค๋ฉด conntection์ ํ์ฑํ๊ณ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค.
์์ปค์์ ํ๋ฒ ์ปค๋ฅ์ ์ด ์์ฑ ๋์๋ค๊ณ ํด์ ๊ทธ ์ปค๋ฅ์ ์๋ง ์ข ์๋์ง ์๋๋ค. ์๋ฅผ๋ค์ด ํ๋ฒ ์ฐ๊ฒฐ๋ ์ปค๋ฅ์ ์์ Keep-Alive ์๊ฐ๋์ ์์ฒญ์ด ์์ผ๋ฉด ์๋ก์ด ์ปค๋ฅ์ ์ ํ์ฑํ๊ฑฐ๋ ๋ค๋ฅธ ์ปค๋ฅ์ ์ผ๋ก๋ถํฐ ๋ค์ด์ค๋ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค. Nginx์์๋ ์ด๋ฌํ ์ปค๋ฅ์ ์ ํ์ฑ, ์ ๊ฑฐ, ์๋ก์ด ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์ด๋ฒคํธ(Event)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์์ปค ํ๋ก์ธ์ค๋ ๋ณดํต CPU์ ์ฝ์ด ์ ๋งํผ ์์ฑํ๋ค. ์ด๋ ๊ฒํ๋ฉด ์ฝ์ด๊ฐ ๋ด๋นํ๋ ํ๋ก์ธ์ค๋ฅผ ๋ฐ๊พธ๋ ํ์๋ฅผ ๋ํญ ์ค์ผ ์ ์๋ค.
CPU๊ฐ ์ด์ ์ ์ํ์น์ฒ๋ผ ํ์ง ์์๋๋๋ค. โ CPU์ ์ปจํ ์คํธ ์ค์์นญ ์ฌ์ฉ์ ์ค์ธ๋ค.
์ด๋ ๊ฒ Nginx๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋ชจ๋ธ(Event-based model)์ ์ฌ์ฉํ๋ฉฐ, ์ด์์ฒด์ ์ ์์กด์ ์ธ(OS-dependent) ๋ฉ์ปค๋์ฆ์ ํ์ฉํด์ ์์ปค ํ๋ก์ธ์ค๋ค ์ฌ์ด์ ์์ฒญ์ ํจ์จ์ ์ผ๋ก ๋ถ๋ฐฐํ๋ค.
Nginx์ ๊ทธ ๋ชจ๋๋ค์ด ๋์ํ๋ ๋ฐฉ์์ configuration ํ์ผ ์์์ ๊ฒฐ์ ๋๋๋ฐ, ํ์ผ ์ด๋ฆ์ default๋ก nginx.conf์ด๋ค.
Nginx์ SSL Termination
Nginx๋ SSL ํฐ๋ฏธ๋ค์ด์ ์ ์ํํ ์ ์๋ค.
SSL Termination : Nginx๊ฐ ํด๋ผ์ด์ธํธ์๋ https ํต์ ์ ํ๊ณ , ์๋ฒ์๋ http ํต์ ์ ํ๋๊ฒ์ ์๊ธฐํ๋ค.

์ด ๊ตฌ์กฐ๋ฅผ ํ์ฑํ๋ฉด ์๋ฒ๊ฐ ๋ณตํธํ ๊ณผ์ ์ ๊ฐ๋นํ์ง ์๊ณ , ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ๋ถํ๋ฅผ ์ค์ฌ์ค๋ค. ๋ณดํต Nginx์ Server๋ ๊ฐ์ ๋คํธ์ํฌ ์์ ์กด์ฌํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ http ํต์ ์ํด๋ ๋ณด์ ์ํ์ด ์ ๋ค.
๋, Nginx๋ http ํ๋กํ ์ฝ์ ์ฌ์ฉํด์ ์บ์ฑํ ์ ์๋ค. ํ๋ฒ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ์ ๋ณด๋ฅผ ๋ณด๊ดํ๊ณ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ๋ค.
Nginx๋ ์ด์ธ์๋ ์ฌ๋ฌ ๊ธฐ๋ฅ์ด ์๋ค.
HSTS(Http Strict Transport Security)
CORS ์ฒ๋ฆฌ
TCP/UDP ์ปค๋ฅ์ ๋ถํ ๋ถ์ฐ
HTTP/2.0 ์ง์
์ ๋๋ก๋ ์ํคํ ์ฒ๋ฅผ ๊ตฌ์ถํ๋ ค๋ฉด ํ ํ๋ฆฟ๋ณด๋จ ํ๋ํด์ ์ฌ์ฉํด์ผ ํ๋ค.
๋ก๋ ๋ฐธ๋ฐ์ฑ
๋ก๋ ๋ฐธ๋ฐ์ฑ์ ์๋ฒ์ ๋ค์ด์ค๋ ํธ๋ํฝ์ ์ฌ๋ฌ ์๋ฒ๋ก ๋ถ์ฐ์์ผ ์ฒ๋ฆฌํ๋ ๊ธฐ์ ๋ก, Nginx์ ๋ผ์ฐํ ๊ธฐ๋ฅ์ ํตํด ๊ตฌํ๋๋ค.
๋ก๋ ๋ฐธ๋ฐ์ฑ์๋ L4, L7๊ฐ ์กด์ฌํ๋ค. ํด๋น ํ๋กํ ์ฝ์ ํค๋๋ฅผ ๋ถํ ๋ถ์ฐ์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ์ด๋ ๊ฒ ๋ถ๋ฅธ๋ค.
L4๋ ์ ์ก ๊ณ์ธต์ด๋ฏ๋ก TCP, UDP์ ์ ๋ณด(IP, PORT, MAC ์ฃผ์ ๋ฑ)๋ฅผ ๋ฐํ์ผ๋ก ํธ๋ํฝ์ ๋๋์ด ๋ถ์ฐ ์ฒ๋ฆฌํ๋ค.
CLB(Connection Load Balancing) ๋๋ SLB (Session Load Balancing)์ด๋ผ๊ณ ๋ถ๋ฆ
L7์ ์์ฉ ๊ณ์ธต์์ ํธ๋ํฝ์ ๋๋์ด ๋ถ์ฐ ์ฒ๋ฆฌํ๋ค.
HTTP, FTP, SMTP ๋ฑ์ ํ๋กํ ์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ํธ๋ํฝ์ ๋ถ์ฐํ๊ธฐ ๋๋ฌธ์ HTTP ํค๋, ์ฟ ํค ๋ฑ๊ณผ ๊ฐ์ ์ฌ์ฉ์ ์์ฒญ์ ๊ธฐ์ค์ผ๋ก ํน์ ์๋ฒ์ ํธ๋ํฝ์ ๋ถ์ฐํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
์ฆ, ํจํท์ ๋ด์ฉ์ ํ์ธํ๊ณ ๊ทธ ๋ด์ฉ์ ๋ฐ๋ผ์ ํธ๋ํฝ ๋ถ๋ฐฐ๊ฐ ๊ฐ๋ฅํ๋ค.
URL, ํค๋ ๋ฑ์ ํ์ธํด์ ์ธ๋ถํํ์ฌ ๋ถ์ฐํ ์ ์๋ค๋ ๊ฒ์ด ์ฅ์ ์ด๋ค.
๋ฐ์ด๋ฌ์ค๋ฅผ ๊ฐ์งํด์ ๋คํธ์ํฌ๋ฅผ ๋ณดํธํ ์ ์์ด์ Dos์ ๊ฐ์ ํธ๋ํฝ์ ํํฐ๋งํ ์ ์๋ค.
์ฐธ๊ณ :
ํ ์ฝํก ํผ์ผ์ด์ Nginx : https://www.youtube.com/watch?v=6FAwAXXj5N0
Ngninx ์ด๋ณด์ ๊ฐ์ด๋ : https://architectophile.tistory.com/11
Last updated
