week 6 leekyunghee - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki

Nginx์™€ Apache์ค‘ ์–ด๋–ค๊ฑธ ์„ ํƒํ• ๊ฒƒ์ธ๊ฐ€?

์šฐ์„  ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ์„œ๋น„์Šค(์‹œ์Šคํ…œ)์˜ ํŠน์„ฑ์— ๋Œ€ํ•ด์„œ ๋‚˜์—ดํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • ์„œ๋น„์Šค์˜ ์‚ฌ์šฉ์ž
    • ๋ถˆํŠน์ • ๋‹ค์ˆ˜์˜ ์ผ๋ฐ˜์ธ์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์„œ๋น„์Šค
    • ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ‘์ž๊ธฐ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ scalability ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•จ.
  • ์„œ๋น„์Šค ์ œ๊ณต ๋ฐฉ์‹
    • ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ๋ชจ๋ฐ”์ผ App์„ ํ†ตํ•œ UI์ œ๊ณต
    • UI์—์„œ(Client) Http ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•œ RESTful ๋ฐฉ์‹์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ์š”์ฒญํ•จ.
  • ๊ฐœ๋ฐœ ์–ธ์–ด
    • ๋นจ๋ฆฌ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?์˜ ์ธก๋ฉด์—์„œ๋Š” ์ƒ๋Œ€์  ์ด๊ฒ ์ง€๋งŒ, ๊ฐœ๋ฐœ ์กฐ์ง์—๊ฒŒ ๊ฐ€์žฅ ์ต์ˆ™ํ•˜๊ณ  ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ํ™œ์„ฑํ™” ๋˜์–ด ์žˆ๋Š” Java๋ฅผ ์„ ํƒํ•˜๊ณ  WAS(Servlet container)๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ
  • ์ธํ”„๋ผ ํ™˜๊ฒฝ
    • Amazon AWS์˜ EC2 ๋‚˜ Google AppEngine์„ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์Œ.
    • ๊ฐ€์šฉํ•  ์ˆ˜ ์žˆ๋Š” resource๊ฐ€ ํ’์กฑํ•˜์ง€ ์•Š๊ณ  ์ œํ•œ์  ์ž„

์œ„์™€ ๊ฐ™์€ ํŠน์„ฑ์„ ๊ธฐ์ค€์œผ๋กœ ์›น์„œ๋ฒ„ ์„ ํƒ์— ์ค‘์š”ํ•œ ์กฐ๊ฑด๋“ค์„ ๋‚˜์—ดํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ(Load Balancing)์„ ์ง€์›ํ•ด์•ผ ํ•จ.
  • Micro Services Concept ์„ ์œ ์—ฐํ•˜๊ฒŒ ์ง€์›ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ํŒจํ„ด์— ์˜ํ•œ URL Redirect, Virtual ๊ธฐ๋Šฅ๋“ฑ์„ ์ง€์›ํ•ด์•ผ ํ•จ
  • WAS ์™€ ์—ฐ๊ณ„๊ฐ€ ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ.(Tomcat ๋“ฑ์˜ Servlet Container ์™€์˜ bridge ์ œ๊ณต)
  • Static Resource serving์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•˜์ง€๋งŒ ์ฃผ ์‚ฌ์šฉ๋ชฉ์ ์€ WAS๋กœ์˜ bridge ๋ฐ load balancer ๊ธฐ๋Šฅ ์ œ๊ณต์ž„
  • ๋ถˆํŠน์ • ๋‹ค์ˆ˜์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋Œ€์ƒ์ด๋ฏ€๋กœ ๋ณด์•ˆ(Http Authentication) ๋ฐ SSL ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ
  • ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ ์„œ๋น„์Šค ๋˜๋ฏ€๋กœ System Resource๋ฅผ ์ตœ๋Œ€ํ•œ ์ ๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•จ

์›น ์„œ๋ฒ„๋ฅผ ์‹ ์ค‘ํ•˜๊ฒŒ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•œ ์ด์œ 

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

Apache์™€ Nginx ์†Œ๊ฐœ

Apache

  • ํ˜„์žฌ HTTP ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•˜๋„๋ก ๊ตฌ์ถ• ๋œ ์˜คํ”ˆ ์†Œ์Šค, ๊ณ ์„ฑ๋Šฅ์˜ ์•ˆ์ „ํ•œ ์›น ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.
  • ๊ฑฐ์˜ ๋ชจ๋“  OS์—์„œ ์‹คํ–‰ ๋˜๋ฉฐ ๋‹ค๋ฅธ ์œ ๋ช…ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ์ ํŠธ์™€์˜ ํ›Œ๋ฅญํ•œ ๋ฌธ์„œํ™” ๋ฐ ํ†ตํ•ฉ ์ง€์›์˜ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Apache์˜ ๋˜ ๋‹ค๋ฅธ ์ฃผ์š” ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ๋ฐฉ์‹์„ ๋”ฐ๋ฆ„
  • ์›น ์„œ๋ฒ„ ์ž์ฒด ๋‚ด์—์„œ ๋™์  ์ปจํ…์ธ ๋ฅผ ์ฒ˜๋ฆฌ
  • ๋ชจ๋“ˆ์„ ๋™์ ์œผ๋กœ๋กœ๋“œ ๋ฐ ์–ธ๋กœ๋“œ (๋” ์œ ์—ฐํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ)
  • ์ฒ˜์Œ๋ถ€ํ„ฐ ์›น ์„œ๋ฒ„๋กœ ์„ค๊ณ„๋จ

Apache์˜ ๋‹จ์ 

์›น ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์•„์ง€๋ฉด Apache๊ฐ€ ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์— ์œ ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

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

Nginx

Nginx๋Š” ์ตœ์‹  ์›น ์š”๊ตฌ๋ฅผ ์ถฉ์กฑํ•˜๋„๋ก ์„ค๊ณ„๋œ ์›น ์„œ๋ฒ„ ํ”Œ๋žซํผ ์ž…๋‹ˆ๋‹ค .

  • ์ด ์›น ์‚ฌ์ดํŠธ๋Š” ์„ฑ์žฅํ•˜๋Š” ์›น์˜ ์š”๊ตฌ ์‚ฌํ•ญ ์ธ 1 ๋งŒ ๊ฐœ์˜ ์—ฐ๊ฒฐ ์„ ์ œ๊ณต ํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๋‹ต์œผ๋กœ ์„ค๊ณ„
  • ํšจ์œจ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๋งŽ์€ ์ˆ˜์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋™์‹œ์— ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํšจ์œจ์„ฑ์— ์ค‘์ ์„ ๋‘๊ณ  ์žˆ์œผ๋ฉฐ ๊ฒฝ๋Ÿ‰ ์•„ํ‚คํ…์ฒ˜์™€ ๋†’์€ ๋™์‹œ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Nginx์˜ ์ฃผ์š” ์ด์  ์ค‘ ์ผ๋ถ€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

Nginx ๋‹จ์ 

Nginx์˜ ์ฃผ์š” ๋‹จ์ ์€ ๋™์  ์ปจํ…์ธ ๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

๋™์  ์ฝ˜ํ…์ธ ์— ๋Œ€ํ•œ PHP ๋ฐ ๊ธฐํƒ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ ํ•˜๋ ค๋ฉด Nginx๊ฐ€ ์ด๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์™ธ๋ถ€ ํ”„๋กœ์„ธ์„œ๋กœ ์ „๋‹ฌํ•˜๊ณ 

๋ Œ๋”๋ง ๋œ ์ฝ˜ํ…์ธ ๊ฐ€ ๋‹ค์‹œ ์ „์†ก ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค (ํ”„๋กœ์„ธ์Šค ์†๋„ ์ €ํ•˜).

Nginx๊ฐ€ ์™ธ๋ถ€์˜ ์š”์ฒญ์„ ๋ฐ›์•„ ๋’ท๋‹จ ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๋Š” ํ–‰์œ„๋ฅผ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.


Apache ๋ฐ Nginx ์„œ๋ฒ„์˜ ์žฅ๋‹จ์ 

  • ํŠน์ • ์›น ์‚ฌ์ดํŠธ์˜ ์š”๊ตฌ๋ฅผ ์ถฉ์กฑ์‹œํ‚ค๋Š” ์›น ์„œ๋ฒ„๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”
  • ์˜ˆ๋ฅผ ๋“ค์–ด Apache๋Š” ๊ธฐ๋Šฅ์ด ํ’๋ถ€ํ•œ ์˜ต์…˜์ด์ง€๋งŒ Nginx๋Š” ๋›ฐ์–ด๋‚œ ๋ฆฌ์†Œ์Šค ํšจ์œจ์„ฑ์„ ์ œ๊ณต
  • Nginx ์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ๋น„๋™๊ธฐ Event Driven ์— ์˜ํ•œ Non Blocking ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ๋™์‹œ ์ ‘์†์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚  ์ˆ˜๋ก ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ๊ธฐ๋ฐ˜์˜ apache ์„œ๋ฒ„ ์— ๋น„ํ•ด ์†Œ๋น„ ๋ฉ”๋ชจ๋ฆฌ ๋Ÿ‰์ด ์ ์–ด์ง€๋ฉด์„œ ๋™์‹œ ์ฒ˜๋ฆฌ ์ˆ˜๋ฅผ ๊ธ‰๊ฒฉํ•˜๊ฒŒ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋˜ํ•œ single Thread ๊ธฐ๋ฐ˜์œผ๋กœ ๋งˆ์Šคํ„ฐ / worker ํ”„๋กœ์„ธ์Šค ๊ตฌ๋™ ๋ฐฉ์‹์„ ์ฑ„ํƒํ•˜์—ฌ context switching ๋ฅผ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— CPU ์‚ฌ์šฉ๋ฅ ์„ ๊ฐ์†Œ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹ค๋งŒ ๊ฒฐ๊ตญ ํ•˜๋“œ์›จ์–ด ์ž์›์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ nginx ์—์„œ ์ฝ๊ธฐ/์“ฐ๊ธฐ๊ฐ€ ์ž์ฃผ ์ผ์–ด๋‚œ๋‹ค๋ฉด ์•„ํŒŒ์น˜๊ฐ€ ๋” ์ข‹์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ์›น ์„œ๋ฒ„์—์„œ๋Š” ํ•˜๋“œ์›จ์–ด ์ฝ๊ธฐ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ์บ์‹œ ์ œ๊ณต๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„œ๋ฒ„๋กœ๋“œ ๋ฒจ๋Ÿฐ์„œ ๋“ฑ์˜ ์—ญํ• ์„ ์ฃผ๋กœ ๋‹ด๋‹นํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ์ตœ๊ทผ๋“ค์–ด ๋” ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ๊ทธ ์™ธ์—๋„ nginx ๋Š” ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ๋ชจ๋“ˆ ๋‹จ์œ„๋กœ ๊ฐœ๋ฐœํ•˜์—ฌ nginx ๋ฅผ ์ปดํŒŒ์ผํ•  ๋•Œ ํ•„์š”ํ•œ ๋ชจ๋“ˆ๋“ค๋งŒ ์กฐํ•ฉํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›น ์‚ฌ์ดํŠธ์— ์ ํ•ฉํ•œ ์„œ๋ฒ„ ์œ ํ˜•์„ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•

๋Œ€๋ถ€๋ถ„์˜ ์ง€์—ญ์—์„œ ์ด ๋‘ ์„œ๋ฒ„๋Š” ์„œ๋กœ ์ž˜ ๊ฒฝ์Ÿํ•ฉ๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ, ๊ทธ๋“ค์€ ๋šœ๋ ทํ•œ ๊ฐ•์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 

  • Apache์—๋Š” ๋‹ค์–‘ํ•œ ๋™์  ๋ชจ๋“ˆ์„ ๋กœ๋“œ ํ•˜๊ธฐ ์œ„ํ•œ ๋” ๋งŽ์€ ๋ฌธ์„œ์™€ ๋” ๋‚˜์€ ์ง€์›์ด ์ œ๊ณต๋˜๋Š” ๋ฐ˜๋ฉด Nginx๋Š” ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์€ ์›น ์‚ฌ์ดํŠธ๋ฅผ ์œ„ํ•œ ๋งŽ์€ ์ •์  ์ปจํ…์ธ  ๋ฐ ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆผ์„ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ณต์œ  ํ˜ธ์ŠคํŒ…์„ ์‚ฌ์šฉํ•˜๋Š” ๋งŽ์€ ์›น ๊ฐœ๋ฐœ์ž ๋Š” Apache์˜ ํŽธ๋ฆฌํ•จ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.  ๋ฐ˜๋ฉด Nginx๋Š” ์ฃผ๋กœ VPS ํ˜ธ์ŠคํŒ… ๋ฐ ์ „์šฉ ํ˜ธ์ŠคํŒ…์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ณ ๋ คํ•ด์•ผ ํ•  ๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์€ Apache์™€ Nginx๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Nginx๋Š” Apache ์•ž์— ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋กœ ๋ฐฐ์น˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” Nginx์˜ ๋น ๋ฅธ ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์˜ ๋ชจ๋“  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. PHP ํŒŒ์ผ๊ณผ ๊ฐ™์€ ๋™์  ์ปจํ…์ธ ์˜ ๊ฒฝ์šฐ Nginx๋Š” ์š”์ฒญ์„ Apache๋กœ ํ”„๋ก์‹œ ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ Œ๋”๋ง ๋œ ํŽ˜์ด์ง€๋ฅผ ๋ฆฌํ„ด ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์€ ์ •์  ์ฝ˜ํ…์ธ ๊ฐ€ ๋งŽ์€ ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์€ ์›น ์‚ฌ์ดํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ Nginx๊ฐ€ ํ˜„๋ช…ํ•œ ์˜ต์…˜์ด ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ๋˜๋Š” ์ง€์› ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํ’๋ถ€ํ•œ ์ž์›์„ ์†Œ์ค‘ํžˆ ์ƒ๊ฐํ•˜๋Š” ๊ฒฝ์šฐ Apache๊ฐ€ ํŽธ๋ฆฌํ•œ ์„ ํƒ ์ž…๋‹ˆ๋‹ค. 

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a3b43b62-5f3f-46e0-834d-f6eae268012f/Untitled.png

Nginx์˜ ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์ธ ์ƒํ™ฉ์—์„œ ์•„ํŒŒ์น˜ ๋ณด๋‹ค ์กฐ๊ธˆ ๋” ๋งŽ์€ ์ปค๋„ฅ์…˜์„ ์ฒ˜๋ฆฌ ํ•˜๋Š”๋ฐ ๊ทธ ์ด์œ ๋Š”?

  • ์•„ํŒŒ์น˜์˜ ๊ฒฝ์šฐ ์ปค๋„ฅ์…˜ ๋‹น ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ์™€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑ
  • Nginx์˜ ๊ฒฝ์šฐ listener ๊ฐ€ request๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ request ๋งˆ๋‹ค ์Šค๋ ˆ๋“œ์™€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ณต์ œ ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ด ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ์ ์ธ ์ธก๋ฉด์—์„œ Nginx๋Š” System Resource๋ฅผ ์ ๊ฒŒ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
  • NetFlix๋ฅผ ๋น„๋กฏํ•œ ๋Œ€๋Ÿ‰์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋งŽ์€ ์„œ๋น„์Šค๋“ค์ด Apache์—์„œ Nginx๋กœ ์˜ฎ๊ฒจ๊ฐ€๊ณ  ์žˆ๋Š” ์ถ”์„ธ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด Apche์™€ Nginx๋Š” ์™œ ๊ทธ๋ ‡๊ฒŒ ์„ฑ๋Šฅ์˜ ์ฐจ์ด๊ฐ€ ๋‚ ๊นŒ์š”?

Apache๋Š” ๊ณผ๊ฑฐ Java Servlet์ด ๋Œ€์ค‘์ ์ด์ง€ ์•Š์„ ๋‹น์‹œ์— ์›น ๊ธฐ๋ฐ˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค์ˆ˜ ์žˆ๋Š” ๊ฑฐ์˜ ์œ ์ผํ•œ ๋Œ€์•ˆ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฐ”๋กœ CGI๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, ์ด๋•Œ๋Š” ๋งŽ์€ ์›น ์„œ๋น„์Šค๋“ค์ด C๋‚˜ Perl๋กœ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” CGI๋ฅผ ์ด์šฉํ•ด์„œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณต ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌ๋‹ค ๋ณด๋‹ˆ processe-base(fork ๋ฐฉ์‹)๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ๋ฐ–์— ์—†์—ˆ๊ณ  ์ƒ๋Œ€์ ์œผ๋กœ NginX๋Š” ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„œ๋น„์Šคํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ๋ณด๋‹ค Http Proxy์˜ ๋ชฉ์ ์œผ๋กœ ๊ฐœ๋ฐœ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— event-base(๋น„๋™๊ธฐ ๋ฐฉ์‹์˜ ์š”์ฒญ ์ „๋‹ฌ)๋ฐฉ์‹์œผ๋กœ ๊ฐœ๋ฐœ๋˜์–ด ๋™์‹œ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ์ด ๋” ์ข‹์„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ Nginx๋Š” FCGI, SCGI ๊ธฐ๋Šฅ์€ ์ œ๊ณตํ•˜์ง€๋งŒ CGI๋‚˜ ISAPI๋Š” ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฆ‰, WAS๋ฅผ ๋น„๋กฏํ•œ Web Application์„ ๋ณ„๋„๋กœ ๊ฐ€์ ธ๊ฐ€์ง€ ์•Š๊ณ (Tier๋ฅผ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š๊ณ ) CGI๋ฅผ ํ†ตํ•œ lightํ•œ ์›น์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด Apache๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์˜ณ๋‹ค. Web Server๋ฅผ Http Proxy๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋‹ค๋ฉด Nginx๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์ง ํ•˜๋‹ค๋Š” ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

ํ•œ์ค„ ์ •๋ฆฌ

๋ฉ”๋ชจ๋ฆฌ ์ธก๋ฉด์—์„œ ๋™์ ‘์ž ์ฒ˜๋ฆฌ์‹œ ํšจ์œจ์ ์ธ Nginx๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค.

Apache vs Nginx Performance: Optimization Techniques - SitePoint

Nginx vs Apache: Which Web Server Is the Best? (2020 Edition)


๋Œ€์นญํ‚ค ์•”ํ˜ธํ™” ๋ฐฉ์‹๊ณผ ๊ณต๊ฐœํ‚ค ์•”ํ˜ธํ™” ๋ฐฉ์‹์˜ ์ฐจ์ด

๋Œ€์นญํ‚ค ์•”ํ˜ธํ™”

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

๊ณต๊ฐœํ‚ค(๋น„๋Œ€์นญํ‚ค) ์•”ํ˜ธํ™”

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/93ad5a82-317d-4209-8d9b-f6d04b5cbe1b/Untitled.png

๊ณต๊ฐœ ํ‚ค์™€ ๊ฐœ์ธ ํ‚ค์˜ ๊ฐœ๋…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋น„๋Œ€์นญ ๋ฐฉ์‹์€ ๋Œ€์นญ ๋ฐฉ์‹์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.

  • ๋‘ ๊ฐ€์ง€ ํ‚ค ์ค‘ ํ•˜๋‚˜๋กœ ํ‰๋ฌธ์„ ์•”ํ˜ธํ™”ํ•˜๋ฉด ๋‹ค๋ฅธ ๋ณด์™„ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ๋ณตํ˜ธํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฐฅ์ด ์•จ๋ฆฌ์Šค์—๊ฒŒ ํšŒ์‹ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ์•จ๋ฆฌ์Šค์˜ ๊ณต๊ฐœ ํ‚ค๋ฅผ ์–ป์–ด์„œ ํ‰๋ฌธ์„ ์•”ํ˜ธํ™”ํ•ด ์•”ํ˜ธ๋ฌธ์„ ๋ณด๋‚ธ๋‹ค. ์—˜๋ฆฌ์Šค๋Š” ์ž์‹ ์˜ ๊ฐœ์ธ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด ๊ทธ ์•”ํ˜ธ๋ฌธ์„ ๋ณตํ˜ธํ™”ํ•œ๋‹ค.

์–ธ์ œ ๋Œ€์นญ ์•”ํ˜ธํ™”๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์–ธ์ œ ๋น„๋Œ€์นญ ์•”ํ˜ธํ™”๋ฅผ ์‚ฌ์šฉํ• ๊นŒ?

  • ๋‹น์‚ฌ์ž ์ค‘ ํ•œ์ชฝ์ด(์„œ๋ฒ„๋ผ๊ณ  ํ•˜์ž) ์ผ๋ จ์˜ ํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์•”ํ˜ธํ™”๋œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

  • ์ด๋Š” ๊ณต๊ฐœ ํ‚ค๋กœ ์•”ํ˜ธํ™”ํ•œ ์ •๋ณด๋Š” ๊ฐœ์ธํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ๋ณตํ˜ธํ™” ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ํ–ฅํ•˜๋Š” ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์ •๋ณด๋ฅผ ๋ณดํ˜ธํ•œ๋‹ค.

  • ์„œ๋ฒ„์—์„œ๋งŒ ๊ทธ ์ •๋ณด๋ฅผ ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์€ ๋ณดํ˜ธ๋˜์ง€ ์•Š๋Š”๋‹ค.

    • ์„œ๋ฒ„์˜ ๊ฐœ์ธ ํ‚ค๋กœ ์•”ํ˜ธํ™”๋œ ์ •๋ณด๋Š” ๊ณต๊ฐœ ํ‚ค๋ฅผ ๊ฐ€์ง„ ๋ˆ„๊ตฌ๋“ ์ง€ ๋ณตํ˜ธํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ƒ๋Œ€ํŽธ(ํด๋ผ์ด์–ธํŠธ)์€ ์„œ๋ฒ„์˜ ๊ณต๊ฐœ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด ๋ฌด์ž‘์œ„๋กœ ์ƒ์„ฑ๋œ ์„ธ์…˜ ์‹œํฌ๋ฆฟ์„ ์•”ํ˜ธํ™”ํ•ด ํ†ต์‹ ์„ ์‹œ์ž‘ํ•œ๋‹ค.

    • ๊ทธ ๋‹ค์Œ ์•”ํ˜ธ๋ฌธ์„ ๋‹ค์‹œ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๊ณ , ์„œ๋ฒ„๋Š” ๋‹ค์‹œ ์ž์‹ ์˜ ๊ฐœ์ธ ํ‚ค๋กœ ๋ณตํ˜ธํ™” ํ•˜๋ฉด ๊ทธ ์‹œํฌ๋ฆฟ์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค.

    ๋Œ€์นญํ‚ค์™€ ๊ณต๊ฐœํ‚ค ๋ฐฉ์‹์˜ ์ฐจ์ด

    • ๋Œ€์นญํ‚ค(๋น„๊ณต๊ฐœํ‚ค) ๋ฐฉ์‹

      ํŠน์ง• : ์•”๋ณตํ˜ธํ™”์— ์„œ๋กœ ๋™์ผํ•œ ํ‚ค๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ์•”ํ˜ธํ™” ๋ฐฉ์‹. ๊ทธ๋ž˜์„œ ํ‚ค๋ฅผ ๋น„๊ณต๊ฐœ ํ•œ๋‹ค.

      ์žฅ์  : ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

      ๋‹จ์  : ํ‚ค ๋ฐฐ์†ก ์œ„ํ—˜์„ฑ ์กด์žฌํ•˜์—ฌ ์†ก์‹  ์ธก์—์„œ ์ˆ˜์‹  ์ธก์— ์•”ํ˜ธ ํ‚ค๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ณผ์ •์—์„œ ๋…ธ์ถœ ์šฐ๋ ค๊ฐ€ ์žˆ๋‹ค. ํ†ต์‹  ์ƒ๋Œ€๊ฐ€ ๋งŽ์•„์งˆ ์ˆ˜๋ก ํ‚ค ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ต๋‹ค.

      ๋Œ€ํ‘œ : DES, AES

    • ๋น„๋Œ€์นญํ‚ค(๊ณต๊ฐœํ‚ค) ๋ฐฉ์‹

      ํŠน์ง• : ์•”๋ณตํ˜ธํ™”์— ์„œ๋กœ ๋‹ค๋ฅธ ํ‚ค๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ์•”ํ˜ธํ™” ๋ฐฉ์‹. ํ•˜๋‚˜์˜ ํ‚ค๋Š” ๊ณต๊ฐœํ‚ค๋กœ ์‚ฌ์šฉ.

      ์žฅ์  : ํ‚ค ๋ฐฐ์†ก์˜ ๋ฌธ์ œ๋ฅผ ๊ทผ๋ณธ์ ์œผ๋กœ ์ฐจ๋‹จํ•˜์—ฌ ์•ˆ์ „์„ฑ์ด ๋†’๋‹ค.

      ๋‹จ์  : ๋Œ€์นญํ‚ค(๋น„๊ณต๊ฐœํ‚ค)๋ฐฉ์‹์— ๋น„ํ•ด์„œ ๋Š๋ฆฌ๋‹ค.

      ๋Œ€ํ‘œ : RSA


Collection์˜ ์ข…๋ฅ˜์™€ ํŠน์ง•์„ ์„ค๋ช…ํ•˜์‹œ์˜ค

Collection framework

  • ๊ฐ์ฒด๋‚˜ ๋ฐ์ดํ„ฐ๋“ค์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌ(์ถ”๊ฐ€, ์‚ญ์ œ, ๊ฒ€์ƒ‰, ์ €์žฅ)ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

1. collection

2. map

ํฌ๊ฒŒ ์ด ๋‘ ๊ฐ€์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋“ค, ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋“ค, ๊ทธ๋ฆฌ๊ณ  ๊ด€๋ จ ์•Œ๊ณ ๋ฆฌ์ฆ˜.

( A framework, by definition, is a set of interfaces that force you to adopt some design practices.)

Collection ๊ฐ์ฒด๋Š” ์—ฌ๋Ÿฌ ์›์†Œ๋“ค์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋œปํ•œ๋‹ค

  • ๋ฐฐ์—ด๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ์›์†Œ๋“ค์„ ๊ณ„์† ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๋ด‰ํˆฌ(resizable) (Array List, Queue, Stack, Linked List)

Call By Value / Call By Reference ์ฐจ์ด ์„ค๋ช… ๋ฐ ์˜ˆ์‹œ


AspectJ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด๋ณด์„ธ์š”

2์ฃผ์ฐจ ๋‚ด์šฉ์— ์ผ๋ถ€ ํฌํ•จ https://lkh6561.tistory.com/1

์Šคํ”„๋ง ๋นˆ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ํ†ค ๋ฐฉ์‹์œผ๋กœ ์ƒ์„ฑ๋˜๋Š”๋ฐ ๊ตณ์ด ๋‚ด๋ถ€์— ์ƒํƒœ๋ฅผ ๋‘๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ• ๊นŒ?