Apache && Nginx
๐Ÿ™‰

Apache && Nginx

Created
Jan 17, 2024 05:17 AM
Last edited time
Last updated January 23, 2024
Tags
CS
Language
None
URL

Apache

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

๊ตฌ์กฐ์  ์žฅ์ 

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

๊ตฌ์กฐ์  ๋‹จ์ 

  • ์„œ๋ฒ„์— ๋™์‹œ์— ์—ฐ๊ฒฐ๋œ connection์ด ๋งŽ์„ ๋•Œ ๋” ์ด์ƒ ์ƒˆ๋กœ์šด connection์„ ์ƒ์„ฑํ•˜์ง€ ๋ชปํ•œ๋‹ค.
    • ์ด๋ฅผย C10K(connection 10000 problem)๋ฌธ์ œ๋ผ๊ณ  ํ•˜๋Š”๋ฐย connection 10000๊ฐœ์˜ ๋ฌธ์ œ๋ผ๋Š” ๋œป์ด๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ
    • connection์ด ์—ฐ๊ฒฐ๋  ๋•Œ ๋งˆ๋‹ค ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑ
  • ๋ฌด๊ฑฐ์šด ํ”„๋กœ๊ทธ๋žจ
    • ํ™•์žฅ์„ฑ์ด ์ข‹๋‹ค๋Š”๊ฒƒ์€ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋งŽ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ
  • CPU ๋ถ€ํ•˜ ์ฆ๊ฐ€
    • ๋งŽ์€ connection ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด Context Switching์„ ๋งŽ์ด ํ•˜๊ธฐ์— CPU ๋ถ€ํ•˜ ์ฆ๊ฐ€
ย 
๐Ÿ’ก
์ด๋Ÿฌํ•œ ๊ตฌ์กฐ์  ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Ngnix๊ฐ€ ๋“ฑ์žฅํ•˜์˜€๋‹ค. โ†’ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ

Nginx

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

NGINX ํ๋ฆ„

Nginx๋Š”ย Event-Driven ๊ตฌ์กฐ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๊ฐœ ๋˜๋Š” ๊ณ ์ •๋œ ํ”„๋กœ์„ธ์Šค๋งŒ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ณ ,๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์š”์ฒญ๋“ค์„ Concurrency ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. Nginx๋Š” ์ƒˆ๋กœ์šด ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋”๋ผ๋„ ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค์™€ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—(๋น„๋™๊ธฐ) ํ”„๋กœ์„ธ์Šค์™€ ์“ฐ๋ ˆ๋“œ ์ƒ์„ฑ ๋น„์šฉ์ด ์กด์žฌํ•˜์ง€ ์•Š๊ณ ,์ ์€ ์ž์›์œผ๋กœ๋„ ํšจ์œจ์ ์ธ ์šด์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.์ด๋Ÿฌํ•œ Nginx์˜ ์žฅ์  ๋•๋ถ„์— ๋‹จ์ผ ์„œ๋ฒ„์—์„œ๋„ ๋™์‹œ์— ๋งŽ์€ ์—ฐ๊ฒฐ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ย 
  1. Nginx๋Š” ์„ค์ •ํŒŒ์ผ์„ ์ฝ๊ณ , ์„ค์ •์— ๋งž๊ฒŒย worker process๋ฅผ ์ƒ์„ฑํ•˜๋Š”ย master process๊ฐ€ ์žˆ๋‹ค.
  1. worker process๋Š”ย ์‹ค์ œ๋กœ ์ผ์„ ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ด๋ฉฐย worker process๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ๋•Œ ์ง€์ •๋œ listen ์†Œ์ผ“์„ ๋ฐฐ์ •๋ฐ›๋Š”๋‹ค.
  1. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์†Œ์ผ“์—ย ์ƒˆ๋กœ์šด ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด connection์„ ํ˜•์„ฑํ•˜๊ณ  ์ฒ˜๋ฆฌํ•œ๋‹ค.
  1. connection์€ ์ •ํ•ด์ง„ Keep-Alive ์‹œ๊ฐ„๋งŒํผ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒย connection์ด ํ˜•์„ฑ๋˜์—ˆ๋‹ค๊ณ  ํ•ด์„œย worker process๊ฐ€ ํ•ด๋‹นย connectionย ํ•˜๋‚˜๋งŒ ๋‹ด๋‹นํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.
  1. ํ˜•์„ฑ๋œย connection์œผ๋กœ๋ถ€ํ„ฐ ์•„๋ฌด๋Ÿฐ ์š”์ฒญ์ด ์—†๋‹ค๋ฉด ์ƒˆ๋กœ์šดย connection์„ ํ˜•์„ฑํ•˜๊ฑฐ๋‚˜ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ๋‹ค๋ฅธย connection์œผ๋กœ๋ถ€ํ„ฐ ๋“ค์–ด์˜จ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
ย 
๐Ÿ’ก
Nginx์—์„œ๋Š” ์ด๋Ÿฌํ•œย connection ํ˜•์„ฑ๊ณผ ์ œ๊ฑฐ, ๊ทธ๋ฆฌ๊ณ ย ์ƒˆ๋กœ์šด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ย ์ด๋ฒคํŠธ(event)๋ผ๊ณ  ํ•œ๋‹ค.
ย 
๐Ÿ’ก
์ด ์ด๋ฒคํŠธ๋“ค์€ย queue์— ๋‹ด๊ธด ์ƒํƒœ์—์„œย ๋น„๋™๊ธฐ ์ƒํƒœ๋กœ ๋Œ€๊ธฐํ•˜๊ณ , ย os์ปค๋„์ดย queueํ˜•์‹์œผ๋กœย worker process์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ ย worker process๋Š”ย ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋กœ ์ด๋ฒคํŠธ๋ฅผ ๊บผ๋‚ด์„œ ์ฒ˜๋ฆฌํ•ด ๋‚˜๊ฐ‘๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฐฉ์‹์€ย worker process๊ฐ€ ์‰ฌ์ง€ ์•Š๊ณ  ์ผ์„ ํ•˜๊ธฐ์—, ์š”์ฒญ์ด ์—†์„ ๋•Œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฐฉ์น˜์‹œํ‚ค๋Š”ย Apache Server๋ณด๋‹คย ํ›จ์”ฌ ํšจ์œจ์ ์œผ๋กœ ์ž์›์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
ย 
notion image
ย 

NGINX์˜ ์žฅ์ 

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

NGINX์˜ ๋‹จ์ 

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

์ฐธ์กฐ

Nginx๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
์„œ๋ก  ํ† ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์›น ์„œ๋ฒ„๋กœ Nginx๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ๋‹จ์ˆœํžˆ ์‚ฌ์šฉ๋งŒ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐœ๋…๋ถ€ํ„ฐ ํ™•์‹คํ•˜๊ฒŒ ์žก๊ณ  ๊ฐ€๊ธฐ ์œ„ํ•ด์„œ ์ •๋ฆฌ๋ฅผ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์›น ์„œ๋ฒ„์— ๋Œ€ํ•œ ๊ฐœ๋…์€ ์•„๋ž˜ ๊ฒŒ์‹œ๊ธ€์—์„œ ์ •๋ฆฌํ•œ ์ ์ด ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Web Server์™€ WAS์˜ ์ฐจ์ด ์„œ๋ก  ์›น ์„œ๋ฒ„(Web Server)์™€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„(Web Application Server)์˜ ํ‚ค์›Œ๋“œ๋งŒ ๋‘๊ณ  ๋ณด์•˜์„ ๋•Œ ๋‘ ๊ฐœ์˜ ์ฐจ์ด๊ฐ€ ๋ญ”๊ฐ€์— ๋Œ€ํ•ด ํ™•์‹  ์žˆ๊ฒŒ ๋Œ€๋‹ต์„ ๋ชปํ• ๋ฟ๋”๋Ÿฌ ์•„์ง ์ดํ•ด๊ฐ€ ์ž˜ ๊ฐ€์ง€ ์•Š์•„์„œ ํ•œ๋ฒˆ ์ •๋ฆฌ๋ฅผ dkswnkk.tistory.com ๋˜ํ•œ Nginx๋ฅผ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด์„  ๋˜ ๋‹ค๋ฅธ ์›น ์„œ๋ฒ„์ธ Apache์™€ ๋น„๊ตํ•˜๊ฒŒ ๋˜๋Š” ๋  ์ˆ˜๋ฐ–์— ์—†๊ธฐ์—, ์ด๋ฒˆ ๊ฒŒ์‹œ๊ธ€์—์„œ๋Š” Nginx์™€ Apache์˜ ์„ฑ๋Šฅ์„ ๋น„..
Nginx๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
ย 

Loading Comments...