๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐ŸŽ› Others.../- infra [linux, aws, docker, k8s]

[Nginx] ์™œ Nginx ์ด์–ด์•ผ ํ•˜๋Š”๊ฐ€? Nginx์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์œผ๋กœ ์•Œ์•„๋ณด์ž.

by Wonit 2020. 11. 29.

์˜ค๋Š˜์€ ์šฐ๋ฆฌ๊ฐ€ ์™œ Nginx์— ๋Œ€ํ•ด์„œ ์•Œ์•„์•ผ ํ•˜๊ณ  ๋ฐฐ์›Œ์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค.

 

Nginx์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๋Š” ๋ชจ๋“  ๊ธ€์€ Nginx์— ๋Œ€ํ•œ ์ ์œ ์œจ๋กœ Apache๋ฅผ ๋น„๊ตํ•˜๊ณค ํ•œ๋‹ค.

 

์ตœ๊ทผ์— Apache์™€ Nginx์˜ ์ ์œ ์œจ์ด ๋น„์Šทํ•ด์กŒ๋‹ค๊ณ  ํ•œ๋‹ค.

 

2013๋…„์˜ Egoing ๋‹˜์˜ ๊ฐ•์˜์— ๋ณด๋ฉด *_์ฐจ์„ธ๋Œ€ ์›น ์„œ๋ฒ„ *_๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

 

๊ทธ๋กœ ๋ถ€ํ„ฐ 7๋…„์ด ์ง€๋‚œ ํ˜„ ์‹œ์ ์—์„œ Nginx์˜ ๋ฐœ์ „์„ ๋ณธ๋‹ค๋ฉด 2013๋…„ ๋‹น์‹œ์— ์ฐจ์„ธ๋Œ€ ์›น ์„œ๋ฒ„๋ผ๊ณ  ๋ถˆ๋ฆด๋งŒ ํ•˜๋‹ค.

 

2013๋…„์˜ ์ƒํ™œ์ฝ”๋”ฉ nginx ํŒŒํŠธ

์ด ๋•Œ ๊นŒ์ง€๋งŒ ํ•ด๋„ Apache์˜ ์ ์œ ์œจ์ด 55 %๋ฅผ ๋„˜์–ด๊ฐ€๊ณ  Nginx๋Š” 12 %์˜€์ง€๋งŒ ํ˜„์žฌ๋Š” Apache 27% nginx 25%๋กœ ์–‘๋Œ€ ์‚ฐ๋งฅ์„ ์ด๋ฃจ๊ณ  ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

 

์ด๋Ÿฐ Nginx๊ฐ€ ์ „๋ถ€ํ„ฐ ๊ฐ๊ด‘ ๋ฐ›๊ณ  ๊พธ์ค€ํžˆ ์‚ฌ๋ž‘๋ฐ›์•„์˜จ ์ด์œ ์— ๋Œ€ํ•ด์„œ ์ด์•ผ๊ธฐ ํ•ด๋ณด์ž.

Nginx

Nginx๋Š” ๋‹จ์ˆœํžˆ ์ •์  ํŒŒ์ผ์„ ํ˜ธ์ŠคํŒ… ํ•ด์ฃผ๋Š” ์›น์„œ๋ฒ„์ด๋‹ค.


ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์›น์„œ๋ฒ„์™€ ๋‹ค๋ฅด๊ฒŒ ์–ด๋–ค ๋น„๋ฐ€๋กœ ์ธํ•ด์„œ ์•„์ฃผ ์•„๋ฆ„๋‹ค์šด ์›น์„œ๋ฒ„๊ฐ€ ๋˜์—ˆ๋‹ค.

 

nginx์˜ ์ปจ์…‰์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์ ์€ ์ž์›์œผ๋กœ ๋” ๋น ๋ฅด๊ฒŒ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณต

Nginx์˜ ์ปจ์…‰์— ์ ์€ ์ž์›์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ๋น ๋ฅด๊ฒŒ ์ œ๊ณตํ•œ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, ์–ด๋–ป๊ฒŒ ๊ทธ๊ฒŒ ๊ฐ€๋Šฅํ• ๊นŒ?

 

๋ฐ”๋กœ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์— ์žˆ๋‹ค.

Event-Driven

https://berb.github.io/diploma-thesis/original/042_serverarch.html

Event-Driven ๋ฐฉ์‹์ด ์‚ฌ์šฉ๋˜์–ด ์ ์€ ์ž์›์œผ๋กœ ๋น ๋ฅธ ์ œ๊ณต์ด ๊ฐ€๋Šฅํ•ด ์ง„ ๊ฒƒ์ด๋‹ค.

 

์ด๊ฒŒ ์™œ ๋น ๋ฅธ ์„œ๋น„์Šค ์ œ๊ณต๊ณผ ๊ด€๋ จ์ด ์žˆ์„๊นŒ?

 

Nginx๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์›น ์„œ๋ฒ„๋Š” Thread Programming์ด๋‹ค.

 

๋งค ์š”์ฒญ๋‹น ํ•˜๋‚˜์˜ Thread๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ์š”์ฒญ์ด ์žˆ์„ ๋•Œ CPU์˜ ๋ถ€ํ•˜๋ฅผ ๊ฑฑ์ •ํ•ด์•ผ ํ•˜์ง€๋งŒ Nginx์˜ ๋น„๋™๊ธฐ Event-Driven ๋ฐฉ์‹์€ ์š”์ฒญ์„ ํ•˜๋‚˜์˜ Event๋ผ ๋ณด๊ณ  Event Handler์œผ๋กœ ๊ด€๋ฆฌ๋ฅผ ํ•˜๊ธฐ ๋–„๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‚ญ๋น„๊ฐ€ ์ ๋‹ค.

 

๊ฒฐ๊ตญ ๋งŽ์€ ์š”์ฒญ์—์„œ ๋‹ค๋ฅธ ์›น์„œ๋ฒ„๋ณด๋‹ค ์„ฑ๋Šฅ์  ์šฐ์œ„๋ฅผ ์ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋น ๋ฅธ ์„œ๋น„์Šค๋ฅผ ์ ์€ ์ž์›์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ Event Driven ๋ฐฉ์‹์ด๋‹ค๋ณด๋‹ˆ ๋ถ€ํ•˜์— ๋Œ€ํ•œ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ํŠน์ง•๋„ ์žˆ๋‹ค.

๋‹ค๋ฅธ ์„œ๋ฒ„๋กœ์˜ ์œ„์ž„

Nginx๋ฅผ ๋ฐฐ์›Œ์•ผ ํ•˜๋Š” ๋‹ค๋ฅธ ์ด์œ ๋Š”


์ •์  ์ฒ˜๋ฆฌ๋ฅผ ์œ„์™€ ๊ฐ™์ด Event-Driven์œผ๋กœ ๋น ๋ฅธ ์†๋„๋กœ ์ œ๊ณตํ•˜๋ฉฐ, ๋™์  ํŒŒ์ผ์„ FastCGI๋‚˜ ์•„ํŒŒ์น˜์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์„œ๋ฒ„์— ์ฒ˜๋ฆฌ๋ฅผ ์œ„์ž„ํ•  ์ˆ˜ ์žˆ๋‹ค.

Nginx์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๋“ค

Nginx์—๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๋“ค์ด ์ œ๊ณต๋˜๋Š”๋ฐ, ํฌ๊ฒŒ 5๊ฐ€์ง€์˜ ๋Œ€ํ‘œ์ ์ธ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค

  • ์žฅ์• ์— ๋Œ€ํ•œ ๋Œ€์‘
  • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ
  • Keep Alive ์„ค์ •
  • Sub Domain ์ฒ˜๋ฆฌ
  • Cache ์ฒ˜๋ฆฌ
    ์ด๋Ÿฐ ๊ธฐ๋Šฅ๋“ค์˜ ์ž์„ธํ•œ ์‚ฌ์šฉ์€ ๋‹ค์Œ ์‹œ๊ฐ„์— ์•Œ์•„๋ณด๊ณ  ์˜ค๋Š˜์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์–ด๋–ค ๊ธฐ๋Šฅ์„ Nginx์—์„œ ์ œ๊ณตํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž.

์žฅ์• ์— ๋Œ€ํ•œ ๋Œ€์‘

Nginx ๋Š” ์žฅ์• ์— ๋Œ€ํ•œ ๋Œ€์‘์„ upstream module๋กœ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ

ํด๋Ÿฌ์Šคํ„ฐ์— ์„ค์ •๋˜๋Š” ์„œ๋ฒ„ ์ •๋ณด์™€ ํฌํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ์–ด๋–ค ์„œ๋ฒ„๊ฐ€ ์–ด๋–ค ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ์ง€๋ฅผ ์ง€์ •ํ•ด์„œ ๋ถ€ํ•˜ ๋ถ„์‚ฐ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

Keep Alive ์„ค์ •

Http ์„ค์ •์œผ๋กœ Http ์—ฐ๊ฒฐ ์†Œ์ผ“์ด ์–ผ๋งˆ๋‚˜ ์ง€์†๋˜์–ด ์—ฐ๊ฒฐ๋  ์ง€๋ฅผ ์„ค์ •ํ•œ๋‹ค.
Keep ALive์œผ๋กœ ์šฐ๋ฆฌ๋Š” CPU์„ ์ข€ ๋” ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์—ฐ๊ฒฐ ์‹œ๊ฐ„์— ๋Œ€ํ•œ ์ด๋“์„ ์ฑ™๊ธธ ์ˆ˜ ์žˆ๋‹ค.

Sub Domain ์ฒ˜๋ฆฌ

๊ฐ€์ƒ ํ˜ธ์ŠคํŒ…๊ณผ ๊ด€๋ จ๋œ ๋‚ด์šฉ์œผ๋กœ ํ•˜๋‚˜์˜ ์›น์„œ๋ฒ„์—์„œ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ŠคํŒ…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

Cache ์ฒ˜๋ฆฌ

ํŠน์ • ์ž์›์ด๋‚˜ ์ด๋ฏธ์ง€, CSS, JS์™€ ๊ฐ™์€ ์ •์  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด์„œ ์›น ์„œ๋น„์Šค์˜ ์‘๋‹ต ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

 

Nginx๋กœ ์‹ค์ œ๋กœ ๋“์„ ๋ณธ ๊ฒฝ์šฐ

 

๋„ค์ด๋ฒ„๋Š” 2009๋…„ DDOS ๊ณต๊ฒฉ์œผ๋กœ๋ถ€ํ„ฐ ๋‹ค์–‘ํ•œ ๋ณด์•ˆ ์ธ๋ ฅ๊ณผ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ๊ฐ•ํ™”ํ•˜์˜€์ง€๋งŒ ๊ทผ๋ณธ์ ์œผ๋กœ ๋…ธํ›„ํ™”๋œ Apache์˜ ์ทจ์•ฝ์ ์„ ์ธ์ •ํ•˜๊ณ  Apache์—์„œ Nginx๋กœ ๊ฐˆ์•„ํƒ€๋ฉฐ TPS 3๋ฐฐ์ฆ๊ฐ€, ์„œ๋ฒ„ ๋Œ€์ˆ˜ 1/3์œผ๋กœ ๊ฐ์†Œ Nginx ์žฅ์•  0๊ฑด์œผ๋กœ ์—„์ฒญ๋‚œ ์ด๋“์„ ๋ณด์•˜๋‹ค๊ณ  ํ•œ๋‹ค.

๋Œ“๊ธ€