# NGINX๋ž€

Membership

NGINX

ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์€ ์›น์‚ฌ์ดํŠธ๋ฅผ ์œ„ํ•ด ํ™•์žฅ์„ฑ์„ ๊ณ ๋ คํ•ด ์„ค๊ณ„ํ•œ ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ์˜ ์›น์„œ๋ฒ„


# โœ”๏ธNGINX๋Š”?

์›น์„œ๋ฒ„ ์†Œํ”„ํŠธ์›จ์–ด๋กœ, ๊ฐ€๋ฒผ์›€๊ณผ ๋†’์€ ์„ฑ๋Šฅ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค. ์›น ์„œ๋ฒ„, ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ๋ฐ ๋ฉ”์ผ ํ”„๋ก์‹œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„๋‹ค.

Nginx๋Š” ์š”์ฒญ์— ์‘๋‹ตํ•˜๊ธฐ ์œ„ํ•ด ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค. ์ด๊ฒƒ์€ Apache HTTP ์„œ๋ฒ„์˜ ์Šค๋ ˆ๋“œ/ํ”„๋กœ์„ธ์Šค ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒƒ๊ณผ๋Š” ๋Œ€์กฐ์ ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋Š” ์„œ๋ฒ„์— ๋งŽ์€ ๋ถ€ํ•˜๊ฐ€ ์ƒ๊ธธ ๊ฒฝ์šฐ์˜ ์„ฑ๋Šฅ์„ ์˜ˆ์ธกํ•˜๊ธฐ ์‰ฝ๊ฒŒ ํ•ด์ค€๋‹ค.

Apache๋ณด๋‹ค ๋™์ž‘์ด ๋‹จ์ˆœํ•˜๊ณ  ๋™์‹œ์ ‘์† ์ฒ˜๋ฆฌ์— ํŠนํ™” ๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

Request ์ฒ˜๋ฆฌ ๋ฐฉ์‹์—์„œ Apache ์„œ๋ฒ„์™€๋Š” ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ ์ธ ์ฐจ์ด์ด๋‹ค.

Event-Driven ๋ฐฉ์‹์„ ์ฑ„ํƒํ•˜์—ฌ ๋†’์€ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•œ๋‹ค.

ํ•œ ๋งˆ๋””๋กœ

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


์•„ํŒŒ์น˜์™€ Nginx์˜ ํŠน์ง•์„ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

# Apache

  • ์“ฐ๋ ˆ๋“œ / ํ”„๋กœ์„ธ์Šค ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋กœ ์š”์ฒญ ํ•˜๋‚˜ ๋‹น ์“ฐ๋ ˆ๋“œ ํ•˜๋‚˜๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ
  • ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์œผ๋ฉด ๋งŽ์€ ์“ฐ๋ ˆ๋“œ ์ƒ์„ฑ, ๋ฉ”๋ชจ๋ฆฌ ๋ฐ CPU ๋‚ญ๋น„
  • 1 ์“ฐ๋ ˆ๋“œ : 1 ํด๋ผ์ด์–ธํŠธ

# Nginx

  • ๋น„๋™๊ธฐ Event-Driven ๊ตฌ์กฐ
  • ๋‹ค์ˆ˜์˜ ์—ฐ๊ฒฐ์„ ํšจ๊ณผ์ ์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
  • ์ฝ”์–ด ๋ชจ๋“ˆ์ด Apache๋ณด๋‹ค ์ ์€ ๋ฆฌ์†Œ์Šค๋กœ ๋น ๋ฅด๊ฒŒ ๋™์ž‘ ๊ฐ€๋Šฅ

์“ฐ๋ ˆ๋“œ ๊ธฐ๋ฐ˜์€ ํ•˜๋‚˜์˜ ์ปค๋„ฅ์…˜ - ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋จน์ง€๋งŒ, Event-driven ๊ตฌ์กฐ๋Š” ์—ฌ๋Ÿฌ ์ปค๋„ฅ์…˜์„ Event Handler์—์„œ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์„œ ๋จผ์ € ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ๋กœ์ง์ด ์ง„ํ–‰๋˜๋„๋ก ํ•œ๋‹ค.

๋™๊ธฐ์™€ ๋น„๋™๊ธฐ์˜ ์ฐจ์ด์ ์„ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๋ฉด

  • ๋™๊ธฐ(Synchronous) : A๊ฐ€ B์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ–ˆ์„ ๋•Œ, ์ด ์š”์ฒญ์— ๋”ฐ๋ฅธ ์‘๋‹ต์„ ์ฃผ์–ด์•ผ๋งŒ A๊ฐ€ ๋‹ค์‹œ ์ž‘์—… ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅ (ํ•˜๋‚˜์˜ ์š”์ฒญ, ํ•˜๋‚˜์˜ ์ž‘์—…์— ์ถฉ์‹ค)

  • ๋น„๋™๊ธฐ(Asynchronous) : A์˜ ์š”์ฒญ์„ B๊ฐ€ ์ฆ‰์‹œ ์ฃผ์ง€ ์•Š์•„๋„, A์˜ ์œ ํœด์‹œ๊ฐ„์œผ๋กœ ๋˜ ๋‹ค๋ฅธ ์ž‘์—… ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋ฐฉ์‹

์ž์„ธํ•œ ๋น„๋™๊ธฐ ๋ฐฉ์‹๊ณผ Event-driven ๋ฐฉ์‹ ์ •๋ฆฌ๋Š” ์•„๋ž˜ ๊ธ€์„ ์ฐธ๊ณ ํ•˜์ž

  • ๋น„๋™๊ธฐVS๋™๊ธฐ(https://blog.naver.com/jhc9639/221108496101)

Event-Driven์ด๋ž€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์ด๋ฒคํŠธ๊ฐ€ ๊ฐ์ง€๋˜์—ˆ์„ ๋•Œ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Nginx๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์ด๋ฒคํŠธ๊ฐ€ ๊ฐ์ง€๋˜์—ˆ์„ ๋•Œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋กœ ์ด๋ฒคํŠธ๊ฐ€ ์žˆ์Œ์„ ์•Œ๋ฆผ

์ด๋•Œ ์ด๋ฒคํŠธ ๊ฐ์ง€์™€ ์ด๋ฒคํŠธ๋ฅผ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์€ ์ปค๋„์ด ํ•ด๊ฒฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— Nginx๋Š” ์ ์€ ๋น„์šฉ์œผ๋กœ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌ

# ์ตœ๊ทผ ๋™ํ–ฅ

์˜ˆ์ „์—๋Š” Apache httpd๊ฐ€ ์ ์œ ์œจ์ด ๋†’์•˜์ง€๋งŒ ์ด์ œ๋Š” Nginx๊ฐ€ ๊ฐ€์žฅ ๋Œ€์ค‘์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

AWS์—์„œ WAS ์„ ํƒ์œผ๋กœ NGINX ์‚ฌ์šฉ๋Ÿ‰์ด ๊ณ„์† ๋Š˜์–ด๋‚˜๊ณ  ์žˆ๋Š” ์ถ”์„ธ์ด๋‹ค.

img

# โœ”๏ธNginx์˜ ์—ญํ• 

  1. HTTP server
  2. Reverse proxy server
  3. Mail proxy server
  4. Generic TCP/UDP proxy server

img (โ–ฒ์ถœ์ฒ˜ : https://whatisthenext.tistory.com/123)

# HTTP server

๊ธฐ๋ณธ์ ์œผ๋กœ ์ •์ ํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” web server์˜ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ž์„ธํžˆ ์„ค๋ช…ํ•˜๋ฉด HTML, CSS, JavaScript, ์ด๋ฏธ์ง€์™€ ๊ฐ™์€ ์ •๋ณด๋ฅผ ์›น ๋ธŒ๋ผ์šฐ์ €(Chrome, Iexplore, Opera, Firefox ๋“ฑ)์— ์ „์†กํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. (HTTP ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜)

# Reverse proxy server

img (โ–ฒ์ถœ์ฒ˜ : https://whatisthenext.tistory.com/123)

ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๊ฐ Application server์— ๋ฐฐ๋ถ„ํ•ด์ค€๋‹ค.

ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” 80ํฌํŠธ๋กœ๋งŒ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋Š”๋ฐ, ์ด ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ 8080, 8081 ๋“ฑ ์—ฌ๋Ÿฌ Application server๋กœ ๋ณด๋‚ด์ค€๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋Š” ๊ฐ application server์— ์š”์ฒญ์„ ๋ฐฐ๋ถ„ํ•ด์„œ ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐํ•˜๊ณ  (load balancing) ์บ์‹œ ์„œ๋ฒ„๋กœ์„œ์˜ ์—ญํ• ์„ ํ•˜์ง€๋งŒ WAS์— ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋ฅผ ๋‘๋Š” ์ด์œ ๋Š” ์ฃผ๋กœ ์š”์ฒญ์— ๋Œ€ํ•œ ๋ฒ„ํผ๋ง์ด๋‹ค.

๋‹จ์ผ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์š”์ฒญ์ˆ˜๋ฅผ ์ œํ•œํ•˜๋Š” ์„œ๋ฒ„์—์„œ๋Š” ํ†ต์‹  ์†๋„๊ฐ€ ๋Š๋ฆฐ ํด๋ผ์ด์–ธํŠธ(A)๊ฐ€ ์žˆ์œผ๋ฉด nginx๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ A ๋•Œ๋ฌธ์— 1๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‘๋‹ต ๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋Š” ์‘๋‹ต์„ ๋ฒ„ํผ๋ง ํ•ด Server๊ฐ€ ๊ฐ ํด๋ผ์ด์–ธํŠธ์™€ ํ†ต์‹ ์„ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ  ์ง€์—ฐ ์—†์ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋Š” ๊ฐ€์งœ ์„œ๋ฒ„์— ์š”์ฒญ(request)ํ•˜๋ฉด, ํ”„๋ก์‹œ ์„œ๋ฒ„๊ฐ€ ๋ฐฐํ›„ ์„œ๋ฒ„(reverse server)๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ํ”„๋ก์‹œ ์„œ๋ฒ„๊ฐ€ Nginx, ๋ฆฌ๋ฒ„์Šค ์„œ๋ฒ„๊ฐ€ ์‘์šฉํ”„๋กœ๊ทธ๋žจ ์„œ๋ฒ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์›น ์‘์šฉํ”„๋กœ๊ทธ๋žจ ์„œ๋ฒ„์— ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ(Nginx)๋ฅผ ๋‘๋Š” ์ด์œ ๋Š” ์š”์ฒญ(request)์— ๋Œ€ํ•œ ๋ฒ„ํผ๋ง์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง์ ‘ App ์„œ๋ฒ„์— ์ง์ ‘ ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ, ํ”„๋กœ์„ธ์Šค 1๊ฐœ๊ฐ€ ์‘๋‹ต ๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ๋˜์–ด์•ผ๋งŒ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ๋‘ ์œผ๋กœ์จ ์š”์ฒญ์„ ๋ฐฐ๋ถ„ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

nginx.conf ํŒŒ์ผ์—์„œ location ์ง€์‹œ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์„ ๋ฐฐ๋ถ„ํ•œ๋‹ค.

# Nginx์˜ ์‚ฌ์šฉ ์˜ˆ์‹œ

Nginx์€ ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

  1. ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์€ ์›น์„œ๋ฒ„
  2. ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ์†Œ์ผ“์„ ๊ฐ€๋ฆฌ๊ธฐ ์œ„ํ•œ ํ”„๋ก์‹œ ์„œ๋ฒ„
  3. ํด๋Ÿฌ์Šคํ„ฐ๋ง๋œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ

์œ„ ์„ธ ๊ฐ€์ง€ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์„ค์ •์„ ํ†ตํ•ด์„œ ์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

# โœ”๏ธReference

  • nginx-๊ณต์‹ํŽ˜์ด์ง€(http://nginx.org/en/)
  • ๋ธ”๋กœ๊ทธ(https://hygjob.wordpress.com/2017/05/27/nginx-%EC%97%AD%ED%95%A0/)
  • ๋ธ”๋กœ๊ทธ(https://smjeon.dev/etc/nginx/)
  • https://eggrollfactory.tistory.com/18
  • https://whatisthenext.tistory.com/123
  • https://wiserloner.tistory.com/284
  • https://hojak99.tistory.com/464
  • https://blog.naver.com/jhc9639/221108496101
Last Updated: 6/18/2023, 2:13:15 PM