๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
BackEnd๐ŸŒฑ/Etc

Nginx๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

by ์•ˆ์ฃผํ˜• 2022. 4. 20.

์„œ๋ก 

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

 

Web Server์™€ WAS์˜ ์ฐจ์ด

์„œ๋ก  ์›น ์„œ๋ฒ„(Web Server)์™€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„(Web Application Server)์˜ ํ‚ค์›Œ๋“œ๋งŒ ๋‘๊ณ  ๋ณด์•˜์„ ๋•Œ ๋‘ ๊ฐœ์˜ ์ฐจ์ด๊ฐ€ ๋ญ”๊ฐ€์— ๋Œ€ํ•ด ํ™•์‹  ์žˆ๊ฒŒ ๋Œ€๋‹ต์„ ๋ชปํ• ๋ฟ๋”๋Ÿฌ ์•„์ง ์ดํ•ด๊ฐ€ ์ž˜ ๊ฐ€์ง€ ์•Š์•„์„œ ํ•œ๋ฒˆ ์ •๋ฆฌ๋ฅผ

dkswnkk.tistory.com

๋˜ํ•œ Nginx๋ฅผ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด์„  ๋˜ ๋‹ค๋ฅธ ์›น ์„œ๋ฒ„์ธ Apache์™€ ๋น„๊ตํ•˜๊ฒŒ ๋˜๋Š” ๋  ์ˆ˜๋ฐ–์— ์—†๊ธฐ์—, ์ด๋ฒˆ ๊ฒŒ์‹œ๊ธ€์—์„œ๋Š” Nginx์™€ Apache์˜ ์„ฑ๋Šฅ์„ ๋น„๊ตํ•˜๋ฉด์„œ Nginx์— ๋Œ€ํ•ด ํ•œ๋ฒˆ ์ •๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชฉ์ฐจ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. Nginx๋ž€?
  2. Nginx๊ฐ€ ๋งŒ๋“ค์–ด์ง„ ๋ฐฐ๊ฒฝ
  3. Nginx์˜ ๊ตฌ์กฐ
  4. Nginx์˜ ์žฅ๋‹จ์ 
  5. Apache์™€ Nginx์˜ ์„ฑ๋Šฅ ๊ฒฐ๊ณผ
  6. ์ •๋ฆฌ

 

Nginx๋ž€?

Nginx๋ž€ ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์€ ์›น์‚ฌ์ดํŠธ์˜ ์„œ๋ฒ„(WAS)๋ฅผ ๋„์™€์ฃผ๋Š” ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜๊ตฌ์กฐ์˜ ๊ฒฝ๋Ÿ‰ํ™” ์›น ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์„ ๋ฐ›์•˜์„ ๋•Œ ์š”์ฒญ์— ๋งž๋Š” ์ •์  ํŒŒ์ผ์„ ์‘๋‹ตํ•ด์ฃผ๋Š” HTTP Web Server๋กœ ํ™œ์šฉ๋˜๊ธฐ๋„ ํ•˜๊ณ , ๋˜๋Š” Reverse Proxy Server๋กœ ํ™œ์šฉํ•˜์—ฌ WAS์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ์—ญํ• ์„ ํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

 Reverse Proxy์™€ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์— ๋Œ€ํ•œ ๊ฐœ๋…์€ ์•„๋ž˜ ๊ฒŒ์‹œ๊ธ€์—์„œ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

 

Forward Proxy์™€ Reverse Proxy

์„œ๋ก  ์ด์ „ ๊ฒŒ์‹œ๊ธ€์—์„œ WebServer์™€ WAS์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌ๋ฅผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ Forward Proxy์™€ Reverse Proxy์˜ ๊ฐœ๋…๋„ ๋‚˜์˜ค๋Š”๋ฐ ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ์ด๋Ÿฌํ•œ ํ”„๋ก์‹œ์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. WebServer์™€ WAS

dkswnkk.tistory.com

 

Nginx๊ฐ€ ๋งŒ๋“ค์–ด์ง„ ๋ฐฐ๊ฒฝ

Apache์˜ ๊ตฌ์กฐ

์ตœ์ดˆ์˜ ์›น ์„œ๋ฒ„๋Š” 1995๋…„ UNIX ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ NCSA HTTPd์ž…๋‹ˆ๋‹ค(CERN httpd ์›น ์„œ๋ฒ„๊ฐ€ ๋จผ์ € ๋‚˜์™”์Šต๋‹ˆ๋‹ค) .ํ•˜์ง€๋งŒ ์ด ํ”„๋กœ๊ทธ๋žจ์€ ๋ฒ„๊ทธ๊ฐ€ ๊ต‰์žฅํžˆ ๋งŽ์•„์„œ ๊ฐœ๋ฐœ์ž๋“ค์ด ์‚ฌ์šฉํ•  ๋•Œ ๋ถˆํŽธํ•จ์„ ๋งŽ์ด ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด ๋ฐ”๋กœ Apache Server์ž…๋‹ˆ๋‹ค. Apache ๊ฐ™์€ ๊ฒฝ์šฐ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด connection์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ƒˆ๋กœ์šด ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ์˜ฌ ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด process๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

Apache์˜ PREFORK

๊ทธ๋Ÿฐ๋ฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์€ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋†“๋Š” PREFORK๋ผ๋Š” ๋ฐฉ์‹์„ ์ด์šฉํ–ˆ์Šต๋‹ˆ ๋‹ค. ๊ทธ๋ž˜์„œ ์ƒˆ๋กœ์šด ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ์˜ค๋ฉด ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋†“์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ• ๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋งŒ๋“ค์–ด๋†“์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†๋‹ค๋ฉด ์ถ”๊ฐ€๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

APACHE์˜ ํ™•์žฅ์„ฑ

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

ํ•˜์ง€๋งŒ 1999๋…„์— ๋“ค์–ด์˜ค๋ฉด์„œ ์ปดํ“จํ„ฐ๊ฐ€ ๋งŽ์ด ๋ณด๊ธ‰๋จ์— ๋”ฐ๋ผ ์š”์ฒญ์ด ๋งŽ์•„์ ธ์„œ ์„œ๋ฒ„์— ๋™์‹œ์— ์—ฐ๊ฒฐ๋œ connection์ด ๋งŽ์„ ๋•Œ ๋” ์ด์ƒ ์ƒˆ๋กœ์šด connection์„ ์ƒ์„ฑํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋” ์ด์ƒ ์ƒˆ๋กœ์šด connetion์„ ์ƒ์„ฑํ•˜์ง€ ๋ชปํ•จ

 ์ด๋ฅผ C10K(connection 10000 problem)๋ฌธ์ œ๋ผ๊ณ  ํ•˜๋Š”๋ฐ connection 10000๊ฐœ์˜ ๋ฌธ์ œ๋ผ๋Š” ๋œป ์ž…๋‹ˆ๋‹ค. Apache Server๋Š” ๊ตฌ์กฐ์ ์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ์ œ์ ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  1. ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ: connection์ด ์—ฐ๊ฒฐ๋  ๋•Œ๋งˆ๋‹ค ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑ
  2. ๋ฌด๊ฑฐ์šด ํ”„๋กœ๊ทธ๋žจ: ํ™•์žฅ์„ฑ์ด ์ข‹๋‹ค๋Š”๊ฑด ๊ณง ๋ฆฌ์†Œ์Šค๊ฐ€ ์•Š๋‹ค๋Š” ๊ฑธ ์˜๋ฏธ
  3. CPU ๋ถ€ํ•˜ ์ฆ๊ฐ€:  ๋งŽ์€ connection ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด context switching์„ ๋งŽ์ด ํ•˜๊ธฐ์— CPU ๋ถ€ํ•˜๊ฐ€ ์ฆ๊ฐ€

Apache Server์˜ ๋ฌธ์ œ์ 

์ฆ‰, Apache Server๋Š” ํ˜„๋Œ€๋กœ ์˜ฌ์ˆ˜๋ก ์‚ฌ์šฉํ•˜๊ธฐ ๊บผ๋ ค์กŒ๊ณ , ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ์  ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•œ Nginx๊ฐ€ 2004๋…„์— ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

์ดˆ์ฐฝ๊ธฐ Nginx๋Š” Apache์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์›น ์„œ๋ฒ„์ด๊ธฐ๋Š” ํ•˜์ง€๋งŒ ์•„ํŒŒ์น˜ ์„œ๋ฒ„๋ฅผ ์™„์ „ํžˆ ๋Œ€์ฒดํ•  ๋ชฉ์ ์€ ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์•„ํŒŒ์น˜ ์„œ๋ฒ„๊ฐ€ ์ง€๋‹Œ ๊ตฌ์กฐ์  ํ•œ๊ณ„๋ฅผ Nginx๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๊ทน๋ณตํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. 

Nginx + Apache

์œ„ ์ด๋ฏธ์ง€์™€ ๊ฐ™์ด ์ˆ˜๋งŽ์€ ๋™์‹œ connection์„ Nginx๊ฐ€ ์œ ์ง€ํ•˜๊ณ , Nginx๋„ ์›น ์„œ๋ฒ„์ด๊ธฐ์— ์ •์  ํŒŒ์ผ์— ๋Œ€ํ•œ ์š”์ฒญ์€ ์Šค์Šค๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋™์  ํŒŒ์ผ์˜ ์š”์ฒญ์„ ๋ฐ›์•˜์„ ๋•Œ๋งŒ ์•„ํŒŒ์น˜ ์„œ๋ฒ„์™€ connection์„ ํ˜•์„ฑํ•˜์—ฌ ์•„ํŒŒ์น˜ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์˜€์Šต๋‹ˆ๋‹ค.

 

3. Nginx์˜ ๊ตฌ์กฐ

๊ทธ๋ ‡๋‹ค๋ฉด Nginx๋Š” ์–ด๋– ํ•œ ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ๊ธธ๋ž˜ ๊ทธ ๋งŽ์€ ๋™์‹œ connection์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?

Nginx์˜ ๊ตฌ์กฐ

  • Nginx๋Š” ์„ค์ •ํŒŒ์ผ์„ ์ฝ๊ณ , ์„ค์ •์— ๋งž๊ฒŒ worker process๋ฅผ ์ƒ์„ฑํ•˜๋Š” master process๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • worker process๋Š” ์‹ค์ œ๋กœ ์ผ์„ ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ด๋ฉฐ worker process๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ๋•Œ ์ง€์ •๋œ listen ์†Œ์ผ“์„ ๋ฐฐ์ •๋ฐ›์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์†Œ์ผ“์— ์ƒˆ๋กœ์šด ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด connection์„ ํ˜•์„ฑํ•˜๊ณ  ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • connection์€ ์ •ํ•ด์ง„ Keep-Alive ์‹œ๊ฐ„๋งŒํผ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ connection์ด ํ˜•์„ฑ๋˜์—ˆ๋‹ค๊ณ  ํ•ด์„œ worker process๊ฐ€ ํ•ด๋‹น connection ํ•˜๋‚˜๋งŒ ๋‹ด๋‹นํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค
  • ํ˜•์„ฑ๋œ connection์œผ๋กœ๋ถ€ํ„ฐ ์•„๋ฌด๋Ÿฐ ์š”์ฒญ์ด ์—†๋‹ค๋ฉด ์ƒˆ๋กœ์šด connection์„ ํ˜•์„ฑํ•˜๊ฑฐ๋‚˜ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ๋‹ค๋ฅธ connection์œผ๋กœ๋ถ€ํ„ฐ ๋“ค์–ด์˜จ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Nginx์˜ ์ด๋ฒคํŠธ(event)

Nginx์—์„œ๋Š” ์ด๋Ÿฌํ•œ connection ํ˜•์„ฑ๊ณผ ์ œ๊ฑฐ, ๊ทธ๋ฆฌ๊ณ  ์ƒˆ๋กœ์šด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์ด๋ฒคํŠธ(event)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

Nginx์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ํ˜„์ƒ ํ•ด๊ฒฐ

๊ทธ๋ฆฌ๊ณ  ์ด ์ด๋ฒคํŠธ๋“ค์€ os์ปค๋„์ด queueํ˜•์‹์œผ๋กœ worker process์—๊ฒŒ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์ด๋ฒคํŠธ๋“ค์€ queue์— ๋‹ด๊ธด ์ƒํƒœ์—์„œ ๋น„๋™๊ธฐ ์ƒํƒœ๋กœ ๋Œ€๊ธฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  worker process๋Š” ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋กœ ์ด๋ฒคํŠธ๋ฅผ ๊บผ๋‚ด์„œ ์ฒ˜๋ฆฌํ•ด ๋‚˜๊ฐ‘๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฐฉ์‹์€ worker process๊ฐ€ ์‰ฌ์ง€ ์•Š๊ณ  ์ผ์„ ํ•˜๊ธฐ์—, ์š”์ฒญ์ด ์—†์„ ๋•Œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฐฉ์น˜์‹œํ‚ค๋Š” Apache Server๋ณด๋‹ค ํ›จ์”ฌ ํšจ์œจ์ ์œผ๋กœ ์ž์›์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Apache: ์Šค๋ ˆ๋“œ ๋ฐฉ์‹
Nginx: Event-driven ๋ฐฉ์‹

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

์ด๋Ÿฌํ•œ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๊ฐ€ ๋ฐ”๋กœ Nginx์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

 

4. Nginx์˜ ์žฅ๋‹จ์ 

Nginx์˜ ๋‹จ์ 

  • ๋™์  ์ปจํ…์ธ ๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์—†์Œ
  • ๋™์  ์ฝ˜ํ…์ธ ์— ๋Œ€ํ•œ PHP ๋ฐ ๊ธฐํƒ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด NGINX๊ฐ€์ด๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์™ธ๋ถ€ ํ”„๋กœ์„ธ์„œ๋กœ ์ „๋‹ฌํ•˜๊ณ  ๋ Œ๋”๋ง ๋œ ์ฝ˜ํ…์ธ ๊ฐ€ ๋‹ค์‹œ ์ „์†ก ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผํ•จ(ํ”„๋กœ์„ธ์Šค ์†๋„ ์ €ํ•˜).
  • ์ฆ‰, ๋™์  ์›น ํŽ˜์ด์ง€ ์ปจํ…์ธ ๋ฅผ ๊ฐ€์ง„ ๋ชจ๋“  ์š”์ฒญ์„ ์œ„ํ•ด ์™ธ๋ถ€ ์ž์›๊ณผ ์—ฐ๊ณ„(php-fpm)

Nginx์˜ ์žฅ์ 

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

 

5. ์„ฑ๋Šฅ ๋น„๊ต

๋™์‹œ ์ปค๋„ฅ์…˜ ์ˆ˜๋‹น ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ 

์œ„ ์ด๋ฏธ์ง€๋Š” ๋™์‹œ connection ์ˆ˜ ๋‹น ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. Apache Server์— ๋น„ํ•ด Nginx๋Š” ๋™์‹œ connection ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๋„ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ ์ด ๋‚ฎ๊ณ  ์ผ์ •ํ•œ ์‚ฌ์‹ค์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋™์‹œ ์ปค๋„ฅ์…˜ ์ˆ˜์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ๋˜๋Š” ์ดˆ๋‹น ์š”์ฒญ ์ˆ˜

โ€‹๋™์‹œ connection ์ˆ˜๊ฐ€ ๋งŽ์•„์กŒ์„ ๋•Œ ์ฒ˜๋ฆฌํ•˜๋Š” ์ดˆ๋‹น ์š”์ฒญ ์ˆ˜๋Š” Nginx๊ฐ€ Apache์— ๋น„ํ•ด ์••๋„์ ์œผ๋กœ ๋†’์€ ๋ชจ์Šต์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

 

6. ์ •๋ฆฌ

Apache์˜ ํ•œ๊ณ„

ํด๋ผ์ด์–ธํŠธ ์ ‘์†๋งˆ๋‹ค Process ํ˜น์€ Thread ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. 1๋งŒ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋™์‹œ์ ‘์† ์š”์ฒญ์ด ๋“ค์–ด์˜จ๋‹ค๋ฉด CPU ์™€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ์ฆ๊ฐ€ํ•˜๊ณ  ์ถ”๊ฐ€์ ์ธ Process/Tread ์ƒ์„ฑ๋น„์šฉ์ด ๋“œ๋Š” ๋“ฑ ๋Œ€์šฉ๋Ÿ‰ ์š”์ฒญ์—์„œ ํ•œ๊ณ„๋ฅผ ๋ณด์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ, Apache ์„œ๋ฒ„์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ blocking ๋  ๋•Œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๊ณ  ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ์ƒํƒœ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” Keep Alive(์ ‘์†๋Œ€๊ธฐ) ๋กœ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ํšจ์œจ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค.

Nginx ์˜ ์ •๋ฆฌ

Nginx ๋Š” ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด Event-Driven ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ”„๋กœ๊ทธ๋žจ ํ๋ฆ„์ด ์ด๋ฒคํŠธ์— ์˜ํ•ด ๊ฒฐ์ •์ด ๋ฉ๋‹ˆ๋‹ค. ํ•œ ๊ฐœ ๋˜๋Š” ๊ณ ์ •๋œ ํ”„๋กœ์„ธ์Šค๋งŒ ์ƒ์„ฑํ•˜๊ณ , ๊ทธ ๋‚ด๋ถ€์—์„œ ๋น„๋™๊ธฐ๋กœ ํšจ์œจ์ ์ธ ๋ฐฉ์‹์œผ๋กœ task ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Apache ์™€ ๋‹ฌ๋ฆฌ ๋™์‹œ์ ‘์†์ž ์ˆ˜๊ฐ€ ๋งŽ์•„์ ธ๋„ ์ถ”๊ฐ€์ ์ธ ์ƒ์„ฑ๋น„์šฉ์ด ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ์š”์ฒญํ•˜์—ฌ ์ ์€์–‘์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— CPU์†Œ๋ชจ๊ฐ€ ์ ์Šต๋‹ˆ๋‹ค.
  • Apache ์™€ ๋‹ฌ๋ฆฌ CPU ์™€ ๊ด€๊ณ„์—†์ด I/O ๋“ค์„ ์ „๋ถ€ Event Listener๋กœ ๋ฏธ๋ฃจ๊ธฐ ๋•Œ๋ฌธ์— ํ๋ฆ„์ด ๋Š์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • context switching ๋น„์šฉ์ด ์ ์Šต๋‹ˆ๋‹ค.

 

์ฐธ๊ณ 

https://youtu.be/6FAwAXXj5N0

๋Œ“๊ธ€