์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - ๐Ÿš€ ์›น ์„œ๋ฒ„์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ์ฐจ์ด์  ์™„๋ฒฝ ์ •๋ณต! Nginx, Apache, Tomcat ๋น„๊ต ๋ถ„์„ ๐Ÿ”

๐Ÿš€ ์›น ์„œ๋ฒ„์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ์ฐจ์ด์  ์™„๋ฒฝ ์ •๋ณต! Nginx, Apache, Tomcat ๋น„๊ต ๋ถ„์„ ๐Ÿ”

์นœ๊ตฌ์ฒ˜๋Ÿผ ์‰ฝ๊ฒŒ ํ’€์–ด์ฃผ๋Š” ์„œ๋ฒ„ ์ด์•ผ๊ธฐ

์•ˆ๋…•! ๐Ÿ‘‹ ์˜ค๋Š˜์€ ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ๊ผญ ์•Œ์•„์•ผ ํ•˜๋Š” ์›น ์„œ๋ฒ„์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด๋ณผ๊ฒŒ. Nginx, Apache, Tomcat... ์ด๋ฆ„์€ ๋งŽ์ด ๋“ค์–ด๋ดค๋Š”๋ฐ ์ •ํ™•ํžˆ ๋ญ๊ฐ€ ๋‹ค๋ฅธ์ง€ ํ—ท๊ฐˆ๋ฆฌ์ง€ ์•Š์•„? ๐Ÿ˜…

๊ฑฑ์ • ๋งˆ! ์˜ค๋Š˜ ์ด ๊ธ€์„ ๋‹ค ์ฝ๊ณ  ๋‚˜๋ฉด ์นœ๊ตฌ๋“คํ•œํ…Œ ์ž์‹ ์žˆ๊ฒŒ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์•ผ. ์ปคํ”ผ ํ•œ ์ž” โ˜• ์ค€๋น„ํ•˜๊ณ  ํŽธํ•˜๊ฒŒ ์ฝ์–ด๋ด!

WEB Server APP Server DB Nginx Apache Tomcat ๐Ÿ‘ค Client

๐ŸŽฏ ์›น ์„œ๋ฒ„ vs ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„: ํ•ต์‹ฌ๋ถ€ํ„ฐ ํŒŒ์•…ํ•˜๊ธฐ

์ž, ๋จผ์ € ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐœ๋…๋ถ€ํ„ฐ ์ •๋ฆฌํ•˜๊ณ  ๊ฐ€์ž! ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์›น ์„œ๋ฒ„์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋ฅผ ํ—ท๊ฐˆ๋ คํ•˜๋Š”๋ฐ, ์‚ฌ์‹ค ์—ญํ• ์ด ์™„์ „ํžˆ ๋‹ค๋ฅด๊ฑฐ๋“ . ๐Ÿค”

๊ฐ„๋‹จํ•˜๊ฒŒ ๋น„์œ ํ•˜์ž๋ฉด, ์›น ์„œ๋ฒ„๋Š” "๋ฐฐ๋‹ฌ์›"์ด๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” "์š”๋ฆฌ์‚ฌ"๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ผ!

๐Ÿ“Œ ์›น ์„œ๋ฒ„ (Web Server)๋ž€?

์›น ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)์˜ ์š”์ฒญ์„ ๋ฐ›์•„์„œ ์ •์ ์ธ ์ฝ˜ํ…์ธ ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์—ญํ• ์„ ํ•ด. ์—ฌ๊ธฐ์„œ ์ •์  ์ฝ˜ํ…์ธ ๋ž€ ๋ญ˜๊นŒ? ๐Ÿคทโ€โ™‚๏ธ

โ€ข HTML ํŒŒ์ผ ๐Ÿ“„
โ€ข CSS ์Šคํƒ€์ผ์‹œํŠธ ๐ŸŽจ
โ€ข JavaScript ํŒŒ์ผ โšก
โ€ข ์ด๋ฏธ์ง€ ํŒŒ์ผ (JPG, PNG, GIF) ๐Ÿ–ผ๏ธ
โ€ข ๋น„๋””์˜ค, ์˜ค๋””์˜ค ํŒŒ์ผ ๐ŸŽฌ

์ด๋Ÿฐ ํŒŒ์ผ๋“ค์€ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ ์žˆ์–ด์„œ ๊ทธ๋ƒฅ ๊ฐ€์ ธ๋‹ค ์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋Š” ๊ฑฐ์•ผ. ๋งˆ์น˜ ํŽธ์˜์ ์—์„œ ์ด๋ฏธ ํฌ์žฅ๋œ ์ƒŒ๋“œ์œ„์น˜๋ฅผ ์‚ฌ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์•ผ! ๐Ÿฅช

๐Ÿ“Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ (Application Server)๋ž€?

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

์˜ˆ๋ฅผ ๋“ค์–ด๋ณผ๊ฒŒ:
โ€ข ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ ๐Ÿ”
โ€ข ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐํšŒ ๋ฐ ์ˆ˜์ • ๐Ÿ’พ
โ€ข ๊ฒฐ์ œ ์ฒ˜๋ฆฌ ๐Ÿ’ณ
โ€ข ๊ฐœ์ธํ™”๋œ ์ถ”์ฒœ ์‹œ์Šคํ…œ ๐ŸŽฏ
โ€ข ๋ณต์žกํ•œ ๊ณ„์‚ฐ ๋ฐ ๋ฐ์ดํ„ฐ ๊ฐ€๊ณต ๐Ÿงฎ

์ด๋Ÿฐ ์ž‘์—…๋“ค์€ ๊ทธ๋•Œ๊ทธ๋•Œ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜์ž–์•„? ๋งˆ์น˜ ๋ ˆ์Šคํ† ๋ž‘์—์„œ ์ฃผ๋ฌธ์„ ๋ฐ›์•„ ์š”๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ! ๐Ÿ‘จโ€๐Ÿณ

โš–๏ธ ์›น ์„œ๋ฒ„ vs ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ ๋น„๊ตํ‘œ

๊ตฌ๋ถ„ ์›น ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„
์ฃผ์š” ์—ญํ•  ์ •์  ์ฝ˜ํ…์ธ  ์ œ๊ณต ๋™์  ์ฝ˜ํ…์ธ  ์ƒ์„ฑ ๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ
ํ”„๋กœํ† ์ฝœ HTTP/HTTPS HTTP/HTTPS + ๋‹ค์–‘ํ•œ ํ”„๋กœํ† ์ฝœ
์ฒ˜๋ฆฌ ๋‚ด์šฉ ํŒŒ์ผ ์ „์†ก ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰, DB ์—ฐ๋™
๋Œ€ํ‘œ ์˜ˆ์‹œ Nginx, Apache HTTP Server Tomcat, JBoss, WebLogic
๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ ์ƒ๋Œ€์ ์œผ๋กœ ์ ์Œ ์ƒ๋Œ€์ ์œผ๋กœ ๋งŽ์Œ

๐ŸŒ Nginx: ํ˜„๋Œ€์ ์ด๊ณ  ๋น ๋ฅธ ์›น ์„œ๋ฒ„์˜ ๊ฐ•์ž

Nginx(์—”์ง„์—‘์Šค๋ผ๊ณ  ์ฝ์–ด)๋Š” 2004๋…„์— ๋Ÿฌ์‹œ์•„ ๊ฐœ๋ฐœ์ž Igor Sysoev๊ฐ€ ๋งŒ๋“  ์›น ์„œ๋ฒ„์•ผ. ์ฒ˜์Œ์—๋Š” C10K ๋ฌธ์ œ(๋™์‹œ์— 10,000๊ฐœ์˜ ์—ฐ๊ฒฐ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฌธ์ œ)๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ์–ด. ๐Ÿš€

์š”์ฆ˜ ์›น ๊ฐœ๋ฐœ ํŠธ๋ Œ๋“œ์—์„œ Nginx๋Š” ์ •๋ง ํ•ซํ•œ ์„ ํƒ์ด์•ผ! ์™œ ๊ทธ๋Ÿด๊นŒ?

๐Ÿ’ช Nginx์˜ ๊ฐ•๋ ฅํ•œ ์žฅ์ ๋“ค

1. ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋น„๋™๊ธฐ ์•„ํ‚คํ…์ฒ˜ โšก
Nginx๋Š” ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜(Event-Driven) ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ด. ์ด๊ฒŒ ๋ฌด์Šจ ๋ง์ด๋ƒ๋ฉด, ํ•œ ๋ช…์˜ ์ง์›์ด ์—ฌ๋Ÿฌ ์†๋‹˜์„ ๋™์‹œ์— ์‘๋Œ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑฐ์•ผ!

์ „ํ†ต์ ์ธ ๋ฐฉ์‹(Apache์˜ ํ”„๋กœ์„ธ์Šค ๊ธฐ๋ฐ˜)์€ ์†๋‹˜ ํ•œ ๋ช…๋‹น ์ง์› ํ•œ ๋ช…์„ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฑฐ๋ผ๋ฉด, Nginx๋Š” ํ•œ ๋ช…์˜ ์ง์›์ด ์—ฌ๋Ÿฌ ์†๋‹˜์˜ ์ฃผ๋ฌธ์„ ๋ฐ›๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด์ง€. ํ›จ์”ฌ ํšจ์œจ์ ์ด์ง€? ๐Ÿ˜Ž

2. ์ ์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ๐Ÿ’พ
๋™์‹œ ์ ‘์†์ž๊ฐ€ 10,000๋ช…์ด์–ด๋„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ๊ฒŒ ๋จน์–ด. ์ด๊ฑด ์„œ๋ฒ„ ๋น„์šฉ ์ ˆ๊ฐ์— ์—„์ฒญ๋‚œ ๋„์›€์ด ๋ผ!

3. ๋›ฐ์–ด๋‚œ ์ •์  ํŒŒ์ผ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ ๐Ÿ“
์ด๋ฏธ์ง€, CSS, JavaScript ๊ฐ™์€ ์ •์  ํŒŒ์ผ์„ ์ œ๊ณตํ•˜๋Š” ์†๋„๊ฐ€ ์ •๋ง ๋นจ๋ผ. ํŠนํžˆ ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ์„ ๋งŽ์ด ์„œ๋น„์Šคํ•˜๋Š” ๊ฒฝ์šฐ Nginx๊ฐ€ ์ตœ๊ณ ์•ผ!

4. ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ๊ธฐ๋Šฅ ๐Ÿ”„
Nginx๋Š” ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋กœ๋„ ๋งŽ์ด ์‚ฌ์šฉ๋ผ. ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ๋ฐ›์•„์„œ ๋’ค์— ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•˜๋Š” ์ค‘๊ฐ„ ๋‹ค๋ฆฌ ์—ญํ• ์„ ํ•˜๋Š” ๊ฑฐ์ง€.

5. ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ โš–๏ธ
์—ฌ๋Ÿฌ ๋Œ€์˜ ์„œ๋ฒ„๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด. ์„œ๋ฒ„ ํ•œ ๋Œ€๊ฐ€ ์ฃฝ์–ด๋„ ์„œ๋น„์Šค๊ฐ€ ๊ณ„์† ๋Œ์•„๊ฐ€๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€!

๐ŸŽ“ Nginx ์„ค์ • ์˜ˆ์‹œ

๊ฐ„๋‹จํ•œ Nginx ์„ค์ • ํŒŒ์ผ์„ ํ•œ๋ฒˆ ๋ณผ๊นŒ?

server {
    listen 80;
    server_name example.com;
    
    location / {
        root /var/www/html;
        index index.html;
    }
    
    location /api {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
    
    location ~* \.(jpg|jpeg|png|gif|css|js)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }
}

์ด ์„ค์ •์€ ๋ญ˜ ํ•˜๋Š” ๊ฑธ๊นŒ? ๐Ÿค”
โ€ข 80๋ฒˆ ํฌํŠธ๋กœ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ๋ฐ›์•„
โ€ข ์ผ๋ฐ˜ ์š”์ฒญ์€ /var/www/html ํด๋”์˜ ํŒŒ์ผ์„ ๋ณด์—ฌ์ฃผ๊ณ 
โ€ข /api๋กœ ์‹œ์ž‘ํ•˜๋Š” ์š”์ฒญ์€ 8080ํฌํŠธ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•˜๊ณ 
โ€ข ์ด๋ฏธ์ง€๋‚˜ CSS, JS ํŒŒ์ผ์€ 30์ผ๊ฐ„ ์บ์‹œํ•˜๋„๋ก ์„ค์ •ํ•œ ๊ฑฐ์•ผ!

๐Ÿ’ก ์‹ค๋ฌด ํŒ: Nginx๋Š” ์„ค์ •์ด ์ง๊ด€์ ์ด๊ณ  ๊ฐ„๋‹จํ•ด์„œ ์ดˆ๋ณด์ž๋„ ์‰ฝ๊ฒŒ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์–ด. ์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ Nginx ์ „๋ฌธ๊ฐ€๋ฅผ ์ฐพ์•„ 1:1 ๋ฉ˜ํ† ๋ง์„ ๋ฐ›์œผ๋ฉด ๋” ๋น ๋ฅด๊ฒŒ ์‹ค๋ ฅ์„ ํ‚ค์šธ ์ˆ˜ ์žˆ์ง€! ๐ŸŽฏ

๐Ÿ”ฅ Apache HTTP Server: ๊ฒ€์ฆ๋œ ์›น ์„œ๋ฒ„์˜ ์ „์„ค

Apache๋Š” 1995๋…„์— ํƒ„์ƒํ•œ ์›น ์„œ๋ฒ„์˜ ํ• ์•„๋ฒ„์ง€ ๊ฐ™์€ ์กด์žฌ์•ผ. ๐Ÿ‘ด ์˜ค๋ž˜๋๋‹ค๊ณ  ๋ฌด์‹œํ•˜๋ฉด ์•ˆ ๋ผ! ์ง€๊ธˆ๋„ ์ „ ์„ธ๊ณ„ ์ˆ˜๋งŽ์€ ์›น์‚ฌ์ดํŠธ๊ฐ€ Apache๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ฑฐ๋“ .

Apache์˜ ์ •์‹ ์ด๋ฆ„์€ "Apache HTTP Server"์ธ๋ฐ, ์•„ํŒŒ์น˜ ์žฌ๋‹จ(Apache Software Foundation)์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์–ด.

๐ŸŽฏ Apache์˜ ํŠน์ง•๊ณผ ์žฅ์ 

1. ํ”„๋กœ์„ธ์Šค ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜ ๐Ÿ—๏ธ
Apache๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ MPM(Multi-Processing Module) ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด. ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ํ”„๋กœ์„ธ์Šค๋‚˜ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด์•ผ.

โ€ข Prefork MPM: ๊ฐ ์š”์ฒญ๋งˆ๋‹ค ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ
โ€ข Worker MPM: ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ๋” ํšจ์œจ์ 
โ€ข Event MPM: ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ Nginx์™€ ๋น„์Šทํ•œ ๋ฐฉ์‹

2. ๊ฐ•๋ ฅํ•œ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ ๐Ÿงฉ
Apache์˜ ์ง„์งœ ๊ฐ•์ ์€ ๋ฐ”๋กœ ๋ชจ๋“ˆ์ด์•ผ! ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ๋ชจ๋“ˆ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์—„์ฒญ๋‚˜๊ฒŒ ์œ ์—ฐํ•ด.

โ€ข mod_rewrite: URL ์žฌ์ž‘์„ฑ (SEO์— ํ•„์ˆ˜!)
โ€ข mod_ssl: HTTPS ์ง€์›
โ€ข mod_security: ์›น ๋ฐฉํ™”๋ฒฝ ๊ธฐ๋Šฅ
โ€ข mod_php: PHP๋ฅผ Apache์— ์ง์ ‘ ํ†ตํ•ฉ

3. .htaccess ํŒŒ์ผ ์ง€์› ๐Ÿ“
์ด๊ฑด Apache๋งŒ์˜ ๋…ํŠนํ•œ ๊ธฐ๋Šฅ์ด์•ผ. ๋””๋ ‰ํ† ๋ฆฌ๋ณ„๋กœ ์„ค์ •์„ ๋‹ค๋ฅด๊ฒŒ ํ•  ์ˆ˜ ์žˆ์–ด์„œ ๊ณต์œ  ํ˜ธ์ŠคํŒ… ํ™˜๊ฒฝ์—์„œ ํŠนํžˆ ์œ ์šฉํ•ด!

4. ๊ด‘๋ฒ”์œ„ํ•œ ๋ฌธ์„œ์™€ ์ปค๋ฎค๋‹ˆํ‹ฐ ๐Ÿ“š
20๋…„ ๋„˜๊ฒŒ ์‚ฌ์šฉ๋˜๋‹ค ๋ณด๋‹ˆ ๋ฌธ์„œ๊ฐ€ ์ •๋ง ๋ฐฉ๋Œ€ํ•ด. ์–ด๋–ค ๋ฌธ์ œ๋“  ๊ฒ€์ƒ‰ํ•˜๋ฉด ํ•ด๊ฒฐ์ฑ…์ด ๋‚˜์™€! ์ดˆ๋ณด์ž์—๊ฒŒ๋Š” ์ด๊ฒŒ ํฐ ์žฅ์ ์ด์ง€.

๐Ÿ” Apache vs Nginx ์„ฑ๋Šฅ ๋น„๊ต

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ถ๊ธˆํ•ดํ•˜๋Š” ๋ถ€๋ถ„์ด์ง€? ์‹ค์ œ๋กœ ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ์„๊นŒ? ๐Ÿ“Š

์ •์  ์ฝ˜ํ…์ธ  ์ฒ˜๋ฆฌ:
โ€ข Nginx: ์ดˆ๋‹น ์•ฝ 12,000 ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ โšก
โ€ข Apache: ์ดˆ๋‹น ์•ฝ 4,000 ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ ๐Ÿข
โ†’ Nginx๊ฐ€ ์•ฝ 3๋ฐฐ ๋น ๋ฆ„!

๋™์‹œ ์ ‘์† ์ฒ˜๋ฆฌ:
โ€ข Nginx: 10,000๊ฐœ ์—ฐ๊ฒฐ์— ๋ฉ”๋ชจ๋ฆฌ ์•ฝ 2.5MB ์‚ฌ์šฉ ๐Ÿ’ช
โ€ข Apache (Prefork): 10,000๊ฐœ ์—ฐ๊ฒฐ์— ๋ฉ”๋ชจ๋ฆฌ ์•ฝ 500MB ์‚ฌ์šฉ ๐Ÿ˜ฐ
โ†’ Nginx๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ 200๋ฐฐ ์ ๊ฒŒ ์‚ฌ์šฉ!

ํ•˜์ง€๋งŒ! ๐Ÿคš
๋™์  ์ฝ˜ํ…์ธ  ์ฒ˜๋ฆฌ๋‚˜ ๋ณต์žกํ•œ ์„ค์ •์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ, Apache์˜ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์ด ๋” ํŽธํ•  ์ˆ˜ ์žˆ์–ด. ํŠนํžˆ PHP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Apache์™€ ๊ถํ•ฉ์ด ์ข‹์ง€!

๐ŸŽ“ Apache ์„ค์ • ์˜ˆ์‹œ

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html
    
    <Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    </IfModule>
    
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

์ด ์„ค์ •์€:
โ€ข ๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ๋ฅผ ์„ค์ •ํ•˜๊ณ 
โ€ข ๋””๋ ‰ํ† ๋ฆฌ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๊ณ 
โ€ข HTTP๋ฅผ HTTPS๋กœ ์ž๋™ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธํ•˜๊ณ 
โ€ข ๋กœ๊ทธ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๊ฑฐ์•ผ!

โ˜• Apache Tomcat: ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋“ ๋“ ํ•œ ํŒŒํŠธ๋„ˆ

์ž, ์ด์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ ์ด์•ผ๊ธฐ๋ฅผ ํ•ด๋ณผ๊นŒ! Tomcat์€ Apache ์žฌ๋‹จ์—์„œ ๋งŒ๋“  ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์•ผ. ๐ŸŽฏ

"์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ญ์•ผ?" ํ•˜๊ณ  ๋ฌผ์–ด๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ์ž๋ฐ”๋กœ ๋งŒ๋“  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰์‹œ์ผœ์ฃผ๋Š” ํ™˜๊ฒฝ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ผ!

๐ŸŽฏ Tomcat์˜ ํ•ต์‹ฌ ๊ฐœ๋…

1. ์„œ๋ธ”๋ฆฟ(Servlet)์ด๋ž€? ๐Ÿค”
์„œ๋ธ”๋ฆฟ์€ ์ž๋ฐ”๋กœ ์ž‘์„ฑ๋œ ์„œ๋ฒ„ ์ธก ํ”„๋กœ๊ทธ๋žจ์ด์•ผ. ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ด.

2. JSP(JavaServer Pages) ๐Ÿ“„
JSP๋Š” HTML ์•ˆ์— ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ์ˆ ์ด์•ผ. Tomcat์€ JSP๋ฅผ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์‹คํ–‰์‹œ์ผœ์ค˜.

3. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์—ญํ•  ๐Ÿญ
โ€ข ์„œ๋ธ”๋ฆฟ์˜ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ (์ƒ์„ฑ, ์ดˆ๊ธฐํ™”, ์‹คํ–‰, ์†Œ๋ฉธ)
โ€ข ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ์ง€์›
โ€ข ์„ ์–ธ์  ๋ณด์•ˆ ๊ด€๋ฆฌ
โ€ข JSP ์ง€์›
โ€ข ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ๋ฐ ๊ด€๋ฆฌ

๐Ÿ’Ž Tomcat์˜ ์žฅ์ 

1. ๊ฐ€๋ณ๊ณ  ๋น ๋ฅธ ์‹œ์ž‘ ๐Ÿš€
๋‹ค๋ฅธ WAS(WebLogic, JBoss)์— ๋น„ํ•ด ํ›จ์”ฌ ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘๋ผ. ๊ฐœ๋ฐœํ•  ๋•Œ ์ •๋ง ํŽธํ•ด!

2. ๋ฌด๋ฃŒ ์˜คํ”ˆ์†Œ์Šค ๐Ÿ’ฐ
์™„์ „ ๋ฌด๋ฃŒ์•ผ! ์ƒ์—…์šฉ์œผ๋กœ ์‚ฌ์šฉํ•ด๋„ ๋ผ์ด์„ ์Šค ๋น„์šฉ์ด ์—†์–ด. ์Šคํƒ€ํŠธ์—…์ด๋‚˜ ๊ฐœ์ธ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ตœ๊ณ ์ง€!

3. ๊ฐ„๋‹จํ•œ ์„ค์ • โš™๏ธ
XML ํŒŒ์ผ๋กœ ์„ค์ •์„ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ, ๊ตฌ์กฐ๊ฐ€ ์ง๊ด€์ ์ด์–ด์„œ ๋ฐฐ์šฐ๊ธฐ ์‰ฌ์›Œ.

4. ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํ‘œ์ค€ ๐Ÿ“Š
์ „ ์„ธ๊ณ„์ ์œผ๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์•ผ. ๊ทธ๋งŒํผ ์ž๋ฃŒ๋„ ๋งŽ๊ณ  ์ปค๋ฎค๋‹ˆํ‹ฐ๋„ ํ™œ๋ฐœํ•ด!

5. Spring Boot์™€ ์™„๋ฒฝํ•œ ํ˜ธํ™˜ ๐ŸŒฑ
์š”์ฆ˜ ์ž๋ฐ” ๊ฐœ๋ฐœ์˜ ํ‘œ์ค€์ธ Spring Boot๋Š” ๋‚ด์žฅ Tomcat์„ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•ด. ๋ณ„๋„ ์„ค์น˜ ์—†์ด ๋ฐ”๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ!

๐ŸŽ“ Tomcat ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ์ดํ•ดํ•˜๊ธฐ

tomcat/
โ”œโ”€โ”€ bin/          # ์‹คํ–‰ ํŒŒ์ผ๋“ค (startup.sh, shutdown.sh)
โ”œโ”€โ”€ conf/         # ์„ค์ • ํŒŒ์ผ๋“ค
โ”‚   โ”œโ”€โ”€ server.xml      # ๋ฉ”์ธ ์„ค์ • ํŒŒ์ผ
โ”‚   โ”œโ”€โ”€ web.xml         # ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋ณธ ์„ค์ •
โ”‚   โ””โ”€โ”€ tomcat-users.xml # ์‚ฌ์šฉ์ž ๊ถŒํ•œ ์„ค์ •
โ”œโ”€โ”€ lib/          # Tomcat ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
โ”œโ”€โ”€ logs/         # ๋กœ๊ทธ ํŒŒ์ผ๋“ค
โ”œโ”€โ”€ temp/         # ์ž„์‹œ ํŒŒ์ผ
โ”œโ”€โ”€ webapps/      # ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ๋””๋ ‰ํ† ๋ฆฌ
โ”‚   โ”œโ”€โ”€ ROOT/     # ๊ธฐ๋ณธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
โ”‚   โ””โ”€โ”€ myapp/    # ์‚ฌ์šฉ์ž ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
โ””โ”€โ”€ work/         # JSP๋ฅผ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜ํ•œ ํŒŒ์ผ๋“ค

webapps ํด๋”๊ฐ€ ํ•ต์‹ฌ์ด์•ผ! ๐ŸŽฏ
์—ฌ๊ธฐ์— WAR ํŒŒ์ผ์„ ๋„ฃ์œผ๋ฉด ์ž๋™์œผ๋กœ ๋ฐฐํฌ๋ผ. ์˜ˆ๋ฅผ ๋“ค์–ด myapp.war๋ฅผ ๋„ฃ์œผ๋ฉด http://localhost:8080/myapp ์œผ๋กœ ์ ‘์†ํ•  ์ˆ˜ ์žˆ์–ด!

๐Ÿ“ ๊ฐ„๋‹จํ•œ ์„œ๋ธ”๋ฆฟ ์˜ˆ์ œ

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class HelloServlet extends HttpServlet {
    
    @Override
    protected void doGet(HttpServletRequest request, 
                        HttpServletResponse response) 
            throws ServletException, IOException {
        
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        
        out.println("<html>");
        out.println("<body>");
        out.println("<h1>Hello, Tomcat!</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}

์ด ์„œ๋ธ”๋ฆฟ์€ GET ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด "Hello, Tomcat!" ๋ฉ”์‹œ์ง€๋ฅผ HTML๋กœ ์‘๋‹ตํ•ด์ฃผ๋Š” ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ์•ผ. ์‹ค์ œ๋กœ๋Š” ์ด๋ ‡๊ฒŒ ์ง์ ‘ HTML์„ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  JSP๋‚˜ ํ…œํ”Œ๋ฆฟ ์—”์ง„์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ๋Š” ์ด๊ฒŒ ์ตœ๊ณ ์•ผ! ๐Ÿ˜Š

๐Ÿ”— ์›น ์„œ๋ฒ„์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ํ˜‘์—…

์‹ค๋ฌด์—์„œ๋Š” ์›น ์„œ๋ฒ„์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„. ์™œ ๊ทธ๋Ÿด๊นŒ? ๐Ÿค”

๊ฐ์ž์˜ ์žฅ์ ์„ ์‚ด๋ ค์„œ ๋” ํšจ์œจ์ ์ธ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด์•ผ!

์‹ค๋ฌด ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์กฐ Client Browser Nginx Web Server Port 80/443 Tomcat App Server Port 8080 Tomcat App Server Port 8081 Database MySQL HTTP ์ •์ ํŒŒ์ผ ๋™์ ์š”์ฒญ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ SQL ์žฅ์ : ์ •์  ํŒŒ์ผ์€ Nginx๊ฐ€ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ, ๋™์  ์š”์ฒญ๋งŒ Tomcat์œผ๋กœ ์ „๋‹ฌ ๊ฒฐ๊ณผ: ์„ฑ๋Šฅ ํ–ฅ์ƒ + ์„œ๋ฒ„ ๋ถ€ํ•˜ ๋ถ„์‚ฐ + ์•ˆ์ •์„ฑ ์ฆ๊ฐ€

๐ŸŽฏ Nginx + Tomcat ์กฐํ•ฉ์˜ ์žฅ์ 

1. ์—ญํ•  ๋ถ„๋‹ด์œผ๋กœ ์„ฑ๋Šฅ ์ตœ์ ํ™” โšก
โ€ข Nginx: ์ด๋ฏธ์ง€, CSS, JS ๊ฐ™์€ ์ •์  ํŒŒ์ผ ์ฒ˜๋ฆฌ
โ€ข Tomcat: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, DB ์—ฐ๋™ ๊ฐ™์€ ๋™์  ์ฒ˜๋ฆฌ
โ†’ ๊ฐ์ž ์ž˜ํ•˜๋Š” ์ผ๋งŒ ํ•˜๋‹ˆ๊นŒ ์ „์ฒด ์„ฑ๋Šฅ์ด ์˜ฌ๋ผ๊ฐ€!

2. ๋ณด์•ˆ ๊ฐ•ํ™” ๐Ÿ”’
Nginx๋ฅผ ์•ž๋‹จ์— ๋‘๋ฉด Tomcat์„ ์™ธ๋ถ€์— ์ง์ ‘ ๋…ธ์ถœ์‹œํ‚ค์ง€ ์•Š์•„๋„ ๋ผ. ๋ฐฉํ™”๋ฒฝ ์—ญํ• ์„ ํ•˜๋Š” ๊ฑฐ์ง€!

3. ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ โš–๏ธ
Nginx๊ฐ€ ์—ฌ๋Ÿฌ ๋Œ€์˜ Tomcat ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ถ„์‚ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด. ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์•„์ ธ๋„ ๊ฑฑ์ • ์—†์–ด!

4. SSL/TLS ์ฒ˜๋ฆฌ ๐Ÿ”
HTTPS ์•”ํ˜ธํ™”/๋ณตํ˜ธํ™”๋ฅผ Nginx์—์„œ ์ฒ˜๋ฆฌํ•˜๋ฉด Tomcat์˜ ๋ถ€๋‹ด์ด ์ค„์–ด๋“ค์–ด.

5. ์บ์‹ฑ ๐Ÿ’พ
์ž์ฃผ ์š”์ฒญ๋˜๋Š” ์ฝ˜ํ…์ธ ๋ฅผ Nginx์—์„œ ์บ์‹ฑํ•˜๋ฉด Tomcat๊นŒ์ง€ ๊ฐˆ ํ•„์š”๊ฐ€ ์—†์–ด์„œ ์‘๋‹ต ์†๋„๊ฐ€ ๋นจ๋ผ์ ธ!

๐ŸŽ“ Nginx์—์„œ Tomcat์œผ๋กœ ํ”„๋ก์‹œ ์„ค์ •ํ•˜๊ธฐ

upstream tomcat_servers {
    server localhost:8080 weight=3;
    server localhost:8081 weight=2;
    server localhost:8082 weight=1;
}

server {
    listen 80;
    server_name example.com;
    
    # ์ •์  ํŒŒ์ผ์€ Nginx๊ฐ€ ์ง์ ‘ ์ฒ˜๋ฆฌ
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        root /var/www/static;
        expires 30d;
        add_header Cache-Control "public, immutable";
    }
    
    # ๋™์  ์š”์ฒญ์€ Tomcat์œผ๋กœ ์ „๋‹ฌ
    location / {
        proxy_pass http://tomcat_servers;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # ํƒ€์ž„์•„์›ƒ ์„ค์ •
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }
    
    # API ์š”์ฒญ์€ ํŠน์ • Tomcat์œผ๋กœ
    location /api {
        proxy_pass http://localhost:8080;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}

์ด ์„ค์ •์˜ ํ•ต์‹ฌ ํฌ์ธํŠธ: ๐ŸŽฏ
โ€ข upstream์œผ๋กœ ์—ฌ๋Ÿฌ Tomcat ์„œ๋ฒ„๋ฅผ ์ •์˜ํ•˜๊ณ  ๊ฐ€์ค‘์น˜ ๋ถ€์—ฌ
โ€ข ์ •์  ํŒŒ์ผ์€ Nginx๊ฐ€ ์ง์ ‘ ์„œ๋น™
โ€ข ๋™์  ์š”์ฒญ์€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์œผ๋กœ ๋ถ„์‚ฐ
โ€ข ์ ์ ˆํ•œ ํ—ค๋”์™€ ํƒ€์ž„์•„์›ƒ ์„ค์ •์œผ๋กœ ์•ˆ์ •์„ฑ ํ™•๋ณด

๐ŸŽช ์‹ค์ „ ์‹œ๋‚˜๋ฆฌ์˜ค: ์–ด๋–ค ์ƒํ™ฉ์— ๋ญ˜ ์จ์•ผ ํ• ๊นŒ?

์ด๋ก ์€ ์ถฉ๋ถ„ํžˆ ๋ฐฐ์› ์œผ๋‹ˆ, ์ด์ œ ์‹ค์ „ ์ƒํ™ฉ๋ณ„๋กœ ์–ด๋–ค ์„ ํƒ์„ ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž! ๐Ÿ’ผ

๐Ÿ“ฑ ์‹œ๋‚˜๋ฆฌ์˜ค 1: ๊ฐ„๋‹จํ•œ ์ •์  ์›น์‚ฌ์ดํŠธ

์ƒํ™ฉ: HTML, CSS, JavaScript๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ํฌํŠธํด๋ฆฌ์˜ค ์‚ฌ์ดํŠธ๋‚˜ ํšŒ์‚ฌ ์†Œ๊ฐœ ํŽ˜์ด์ง€

์ถ”์ฒœ ์†”๋ฃจ์…˜: Nginx ๋‹จ๋… ์‚ฌ์šฉ โœ…

์ด์œ :
โ€ข ๋™์  ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š” ์—†์œผ๋‹ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” ๋ถˆํ•„์š”ํ•ด
โ€ข Nginx์˜ ๋น ๋ฅธ ์ •์  ํŒŒ์ผ ์„œ๋น™ ๋Šฅ๋ ฅ์„ 100% ํ™œ์šฉ
โ€ข ์„ค์ •์ด ๊ฐ„๋‹จํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋„ ์ ๊ฒŒ ๋จน์–ด
โ€ข ๋น„์šฉ ์ ˆ๊ฐ ํšจ๊ณผ ์ตœ๊ณ ! ๐Ÿ’ฐ

๐Ÿ›’ ์‹œ๋‚˜๋ฆฌ์˜ค 2: ์ „์ž์ƒ๊ฑฐ๋ž˜ ์‚ฌ์ดํŠธ

์ƒํ™ฉ: ์ƒํ’ˆ ๋ชฉ๋ก, ์žฅ๋ฐ”๊ตฌ๋‹ˆ, ๊ฒฐ์ œ, ํšŒ์› ๊ด€๋ฆฌ ๋“ฑ ๋ณต์žกํ•œ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ์‡ผํ•‘๋ชฐ

์ถ”์ฒœ ์†”๋ฃจ์…˜: Nginx + Tomcat (๋˜๋Š” Spring Boot) โœ…

์ด์œ :
โ€ข ์ƒํ’ˆ ์ด๋ฏธ์ง€ ๊ฐ™์€ ์ •์  ํŒŒ์ผ์€ Nginx๊ฐ€ ์ฒ˜๋ฆฌ
โ€ข ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ, ์žฌ๊ณ  ๊ด€๋ฆฌ ๊ฐ™์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ Tomcat์—์„œ
โ€ข ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์„ ๋•Œ Nginx์˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ํ™œ์šฉ
โ€ข ๋ณด์•ˆ์„ ์œ„ํ•ด Tomcat์„ ๋‚ด๋ถ€๋ง์— ์ˆจ๊ธธ ์ˆ˜ ์žˆ์–ด

์•„ํ‚คํ…์ฒ˜:
Client โ†’ Nginx (80/443) โ†’ Tomcat (8080) โ†’ Database

๐Ÿ“ ์‹œ๋‚˜๋ฆฌ์˜ค 3: ์›Œ๋“œํ”„๋ ˆ์Šค ๋ธ”๋กœ๊ทธ

์ƒํ™ฉ: PHP ๊ธฐ๋ฐ˜์˜ ์›Œ๋“œํ”„๋ ˆ์Šค๋กœ ๋ธ”๋กœ๊ทธ ์šด์˜

์ถ”์ฒœ ์†”๋ฃจ์…˜: Nginx + PHP-FPM ๋˜๋Š” Apache + mod_php โœ…

์ด์œ :
โ€ข ์›Œ๋“œํ”„๋ ˆ์Šค๋Š” PHP๋กœ ๋งŒ๋“ค์–ด์ ธ์„œ Tomcat์€ ํ•„์š” ์—†์–ด
โ€ข Nginx + PHP-FPM: ์„ฑ๋Šฅ ์ค‘์‹œ (์ถ”์ฒœ!) โšก
โ€ข Apache + mod_php: ์„ค์ • ๊ฐ„ํŽธ, .htaccess ํ™œ์šฉ ๊ฐ€๋Šฅ

์„ฑ๋Šฅ ํŒ:
โ€ข Nginx์—์„œ ์ด๋ฏธ์ง€ ์บ์‹ฑ ์„ค์ •
โ€ข Redis๋‚˜ Memcached๋กœ DB ์ฟผ๋ฆฌ ์บ์‹ฑ
โ€ข CDN ํ™œ์šฉ์œผ๋กœ ์ •์  ํŒŒ์ผ ๋ถ„์‚ฐ

๐Ÿข ์‹œ๋‚˜๋ฆฌ์˜ค 4: ๋Œ€๊ทœ๋ชจ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

์ƒํ™ฉ: ์ˆ˜์ฒœ ๋ช…์˜ ์ง์›์ด ์‚ฌ์šฉํ•˜๋Š” ERP, CRM ์‹œ์Šคํ…œ

์ถ”์ฒœ ์†”๋ฃจ์…˜: Nginx + ์—ฌ๋Ÿฌ ๋Œ€์˜ Tomcat + DB ํด๋Ÿฌ์Šคํ„ฐ โœ…

์•„ํ‚คํ…์ฒ˜:
โ€ข L4/L7 ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ
โ€ข Nginx ํด๋Ÿฌ์Šคํ„ฐ (๊ณ ๊ฐ€์šฉ์„ฑ)
โ€ข Tomcat ํด๋Ÿฌ์Šคํ„ฐ (์„ธ์…˜ ํด๋Ÿฌ์Šคํ„ฐ๋ง)
โ€ข DB ๋งˆ์Šคํ„ฐ-์Šฌ๋ ˆ์ด๋ธŒ ๊ตฌ์กฐ
โ€ข Redis ์„ธ์…˜ ์ €์žฅ์†Œ

๊ณ ๋ ค์‚ฌํ•ญ:
โ€ข ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ์ „๋žต (Blue-Green, Rolling)
โ€ข ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ (Prometheus, Grafana)
โ€ข ๋กœ๊ทธ ์ˆ˜์ง‘ ๋ฐ ๋ถ„์„ (ELK Stack)
โ€ข ๋ฐฑ์—… ๋ฐ ์žฌํ•ด ๋ณต๊ตฌ ๊ณ„ํš

๐Ÿš€ ์‹œ๋‚˜๋ฆฌ์˜ค 5: ์Šคํƒ€ํŠธ์—… MVP ๊ฐœ๋ฐœ

์ƒํ™ฉ: ๋น ๋ฅด๊ฒŒ ํ”„๋กœํ† ํƒ€์ž…์„ ๋งŒ๋“ค์–ด์„œ ์‹œ์žฅ ๋ฐ˜์‘์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์‹ถ์–ด

์ถ”์ฒœ ์†”๋ฃจ์…˜: Spring Boot ๋‚ด์žฅ Tomcat โœ…

์ด์œ :
โ€ข ๋ณ„๋„ ์„œ๋ฒ„ ์„ค์น˜ ์—†์ด JAR ํŒŒ์ผ ํ•˜๋‚˜๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ
โ€ข ๊ฐœ๋ฐœ๋ถ€ํ„ฐ ๋ฐฐํฌ๊นŒ์ง€ ๋น ๋ฅด๊ฒŒ ์ง„ํ–‰
โ€ข ์ดˆ๊ธฐ์—๋Š” ํŠธ๋ž˜ํ”ฝ์ด ์ ์œผ๋‹ˆ ๋‹จ์ˆœํ•œ ๊ตฌ์กฐ๋กœ ์‹œ์ž‘
โ€ข ๋‚˜์ค‘์— ํŠธ๋ž˜ํ”ฝ์ด ๋Š˜๋ฉด Nginx๋ฅผ ์•ž์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋ผ!

๋ฐฐํฌ ๋ช…๋ น์–ด:
java -jar myapp.jar ๋! ๐Ÿ˜Ž

์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ ๊ฒฝํ—˜ ๋งŽ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ์กฐ์–ธ์„ ๋ฐ›์œผ๋ฉด ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์–ด!

โš™๏ธ ์„ฑ๋Šฅ ์ตœ์ ํ™” ํŒ๊ณผ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค

์„œ๋ฒ„๋ฅผ ์ž˜ ์„ ํƒํ–ˆ๋‹ค๋ฉด, ์ด์ œ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„์•ผ๊ฒ ์ง€? ์‹ค๋ฌด์—์„œ ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š” ํŒ๋“ค์„ ๊ณต์œ ํ• ๊ฒŒ! ๐ŸŽฏ

๐Ÿš€ Nginx ์„ฑ๋Šฅ ์ตœ์ ํ™”

1. Worker ํ”„๋กœ์„ธ์Šค ์„ค์ •

worker_processes auto;  # CPU ์ฝ”์–ด ์ˆ˜๋งŒํผ ์ž๋™ ์„ค์ •
worker_connections 1024;  # ๋™์‹œ ์—ฐ๊ฒฐ ์ˆ˜

2. ์บ์‹ฑ ์„ค์ •

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m 
                 max_size=1g inactive=60m use_temp_path=off;

location / {
    proxy_cache my_cache;
    proxy_cache_valid 200 60m;
    proxy_cache_use_stale error timeout http_500 http_502 http_503;
    add_header X-Cache-Status $upstream_cache_status;
}

3. Gzip ์••์ถ• ํ™œ์„ฑํ™”

gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css text/xml text/javascript 
           application/json application/javascript application/xml+rss;

์ด๋ ‡๊ฒŒ ์„ค์ •ํ•˜๋ฉด ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ํŒŒ์ผ๋“ค์ด ์••์ถ•๋˜์–ด ์ „์†ก๋ผ์„œ ๋Œ€์—ญํญ์„ 70% ์ด์ƒ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์–ด! ๐Ÿ“‰

โ˜• Tomcat ์„ฑ๋Šฅ ์ตœ์ ํ™”

1. ์ปค๋„ฅํ„ฐ ์„ค์ • (server.xml)

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           maxThreads="200"
           minSpareThreads="25"
           maxConnections="10000"
           acceptCount="100"
           enableLookups="false"
           compression="on"
           compressionMinSize="2048"
           noCompressionUserAgents="gozilla, traviata"
           compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"/>

์ฃผ์š” ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค๋ช…: ๐Ÿ“
โ€ข maxThreads: ๋™์‹œ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€ ์š”์ฒญ ์ˆ˜
โ€ข maxConnections: ์ตœ๋Œ€ ์—ฐ๊ฒฐ ์ˆ˜
โ€ข acceptCount: ๋Œ€๊ธฐ ํ ํฌ๊ธฐ
โ€ข compression: ์‘๋‹ต ์••์ถ• ํ™œ์„ฑํ™”

2. JVM ๋ฉ”๋ชจ๋ฆฌ ์„ค์ •

CATALINA_OPTS="-Xms2048m -Xmx4096m -XX:MetaspaceSize=256m 
               -XX:MaxMetaspaceSize=512m -XX:+UseG1GC"

โ€ข Xms: ์ดˆ๊ธฐ ํž™ ๋ฉ”๋ชจ๋ฆฌ
โ€ข Xmx: ์ตœ๋Œ€ ํž™ ๋ฉ”๋ชจ๋ฆฌ
โ€ข UseG1GC: G1 ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ ์‚ฌ์šฉ (Java 9 ์ด์ƒ ๊ถŒ์žฅ)

3. ์„ธ์…˜ ํƒ€์ž„์•„์›ƒ ์„ค์ • (web.xml)

<session-config>
    <session-timeout>30</session-timeout>
</session-config>

๋ถˆํ•„์š”ํ•˜๊ฒŒ ๊ธด ์„ธ์…˜ ํƒ€์ž„์•„์›ƒ์€ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„์•ผ. ์ ์ ˆํ•œ ์‹œ๊ฐ„(๋ณดํ†ต 30๋ถ„)์œผ๋กœ ์„ค์ •ํ•˜์ž! โฐ

๐Ÿ” ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๋กœ๊ทธ ๊ด€๋ฆฌ

Nginx ๋กœ๊ทธ ๋ถ„์„:

# ์ ‘์† ํ†ต๊ณ„ ํ™•์ธ
cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10

# ์‘๋‹ต ์‹œ๊ฐ„์ด ๊ธด ์š”์ฒญ ์ฐพ๊ธฐ
cat access.log | awk '$NF > 1.0 {print $0}' | tail -20

# 404 ์—๋Ÿฌ ํ™•์ธ
grep "404" access.log | awk '{print $7}' | sort | uniq -c | sort -rn

Tomcat ๋กœ๊ทธ ๋ชจ๋‹ˆํ„ฐ๋ง:
โ€ข catalina.out: ํ‘œ์ค€ ์ถœ๋ ฅ ๋กœ๊ทธ
โ€ข localhost_access_log: ์ ‘๊ทผ ๋กœ๊ทธ
โ€ข localhost.log: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๊ทธ

์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ํ™•์ธ: tail -f catalina.out ๐Ÿ”ด

๐Ÿ›ก๏ธ ๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ

์„ฑ๋Šฅ๋„ ์ค‘์š”ํ•˜์ง€๋งŒ ๋ณด์•ˆ์€ ๋” ์ค‘์š”ํ•ด! ํ•ดํ‚น๋‹นํ•˜๋ฉด ๋ชจ๋“  ๊ฒŒ ๋ฌผ๊ฑฐํ’ˆ์ด ๋˜๋‹ˆ๊นŒ. ๐Ÿ˜ฑ
์‹ค๋ฌด์—์„œ ๊ผญ ์ฑ™๊ฒจ์•ผ ํ•  ๋ณด์•ˆ ์„ค์ •๋“ค์„ ์•Œ์•„๋ณด์ž!

๐Ÿ”’ Nginx ๋ณด์•ˆ ์„ค์ •

1. ์„œ๋ฒ„ ์ •๋ณด ์ˆจ๊ธฐ๊ธฐ

server_tokens off;  # Nginx ๋ฒ„์ „ ์ •๋ณด ์ˆจ๊น€
more_clear_headers Server;  # Server ํ—ค๋” ์™„์ „ ์ œ๊ฑฐ

2. SSL/TLS ์„ค์ • (HTTPS)

server {
    listen 443 ssl http2;
    server_name example.com;
    
    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;
    
    # ์ตœ์‹  TLS ํ”„๋กœํ† ์ฝœ๋งŒ ํ—ˆ์šฉ
    ssl_protocols TLSv1.2 TLSv1.3;
    
    # ๊ฐ•๋ ฅํ•œ ์•”ํ˜ธํ™” ์Šค์œ„ํŠธ
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
    ssl_prefer_server_ciphers on;
    
    # HSTS ํ—ค๋” ์ถ”๊ฐ€
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    
    # ๊ธฐํƒ€ ๋ณด์•ˆ ํ—ค๋”
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
}

3. Rate Limiting (DDoS ๋ฐฉ์–ด)

limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;

server {
    location /api {
        limit_req zone=mylimit burst=20 nodelay;
    }
}

์ด ์„ค์ •์€ IP๋‹น ์ดˆ๋‹น 10๊ฐœ์˜ ์š”์ฒญ๋งŒ ํ—ˆ์šฉํ•˜๊ณ , ์ˆœ๊ฐ„์ ์œผ๋กœ 20๊ฐœ๊นŒ์ง€ ๋ฒ„์ŠคํŠธ๋ฅผ ํ—ˆ์šฉํ•ด. DDoS ๊ณต๊ฒฉ์„ ํšจ๊ณผ์ ์œผ๋กœ ๋ง‰์„ ์ˆ˜ ์žˆ์–ด! ๐Ÿ›ก๏ธ

๐Ÿ” Tomcat ๋ณด์•ˆ ์„ค์ •

1. ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€ ๋ณดํ˜ธ
๊ธฐ๋ณธ ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€(/manager, /host-manager)๋Š” ๋ฐ˜๋“œ์‹œ ์ ‘๊ทผ ์ œํ•œ์„ ๊ฑธ์–ด์•ผ ํ•ด!

<Valve className="org.apache.catalina.valves.RemoteAddrValve"
       allow="127\.0\.0\.1|192\.168\.1\.\d+" />

2. ๋ถˆํ•„์š”ํ•œ ๊ธฐ๋ณธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ œ๊ฑฐ
โ€ข docs, examples, host-manager, manager ๋””๋ ‰ํ† ๋ฆฌ ์‚ญ์ œ
โ€ข ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์ ˆ๋Œ€ ํ•„์š” ์—†์–ด!

3. ์—๋Ÿฌ ํŽ˜์ด์ง€ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•
๊ธฐ๋ณธ ์—๋Ÿฌ ํŽ˜์ด์ง€๋Š” Tomcat ๋ฒ„์ „ ์ •๋ณด๋ฅผ ๋…ธ์ถœ์‹œ์ผœ. ์ปค์Šคํ…€ ์—๋Ÿฌ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์ž!

<error-page>
    <error-code>404</error-code>
    <location>/error/404.html</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>/error/500.html</location>
</error-page>

4. HTTPS ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๊ฐ•์ œ

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Entire Application</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

๐Ÿ’ก ๋ณด์•ˆ ์ฒดํฌ๋ฆฌ์ŠคํŠธ:
โœ… ์ตœ์‹  ๋ฒ„์ „ ์‚ฌ์šฉ (๋ณด์•ˆ ํŒจ์น˜ ์ ์šฉ)
โœ… ๊ธฐ๋ณธ ํฌํŠธ ๋ณ€๊ฒฝ ๊ณ ๋ ค
โœ… ๋ฐฉํ™”๋ฒฝ ์„ค์ • (ํ•„์š”ํ•œ ํฌํŠธ๋งŒ ์˜คํ”ˆ)
โœ… ์ •๊ธฐ์ ์ธ ๋กœ๊ทธ ๋ชจ๋‹ˆํ„ฐ๋ง
โœ… ๋ฐฑ์—… ์ž๋™ํ™”
โœ… SSL ์ธ์ฆ์„œ ๋งŒ๋ฃŒ์ผ ์ฒดํฌ
โœ… ์ทจ์•ฝ์  ์Šค์บ” ์ •๊ธฐ ์‹ค์‹œ

๐ŸŽ“ ํ•™์Šต ๋กœ๋“œ๋งต๊ณผ ์ถ”์ฒœ ์ž๋ฃŒ

์—ฌ๊ธฐ๊นŒ์ง€ ์ฝ์—ˆ๋‹ค๋ฉด ์ด๋ฏธ ๋งŽ์€ ๊ฑธ ๋ฐฐ์šด ๊ฑฐ์•ผ! ๐Ÿ‘ ํ•˜์ง€๋งŒ ์‹ค๋ฌด์—์„œ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•˜๋ ค๋ฉด ๊ณ„์† ๊ณต๋ถ€ํ•˜๊ณ  ์‹ค์Šตํ•ด์•ผ ํ•ด. ๋‹จ๊ณ„๋ณ„ ํ•™์Šต ๋กœ๋“œ๋งต์„ ์ œ์‹œํ•ด์ค„๊ฒŒ!

๐Ÿ“š ์ดˆ๊ธ‰ ๋‹จ๊ณ„ (1-2๊ฐœ์›”)

๋ชฉํ‘œ: ๊ธฐ๋ณธ ๊ฐœ๋… ์ดํ•ดํ•˜๊ณ  ๊ฐ„๋‹จํ•œ ์„œ๋ฒ„ ๊ตฌ์ถ•ํ•˜๊ธฐ

ํ•™์Šต ๋‚ด์šฉ:
1๏ธโƒฃ HTTP ํ”„๋กœํ† ์ฝœ ๊ธฐ์ดˆ
โ€ข ์š”์ฒญ/์‘๋‹ต ๊ตฌ์กฐ
โ€ข ์ƒํƒœ ์ฝ”๋“œ (200, 404, 500 ๋“ฑ)
โ€ข ํ—ค๋”์˜ ์—ญํ• 

2๏ธโƒฃ Nginx ๊ธฐ๋ณธ
โ€ข ์„ค์น˜ ๋ฐ ๊ธฐ๋ณธ ์„ค์ •
โ€ข ์ •์  ํŒŒ์ผ ์„œ๋น™
โ€ข ๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ ์„ค์ •

3๏ธโƒฃ Tomcat ๊ธฐ๋ณธ
โ€ข ์„ค์น˜ ๋ฐ ์‹คํ–‰
โ€ข WAR ํŒŒ์ผ ๋ฐฐํฌ
โ€ข ๊ฐ„๋‹จํ•œ ์„œ๋ธ”๋ฆฟ ์ž‘์„ฑ

์‹ค์Šต ํ”„๋กœ์ ํŠธ:
โ€ข ๊ฐœ์ธ ํฌํŠธํด๋ฆฌ์˜ค ์‚ฌ์ดํŠธ๋ฅผ Nginx๋กœ ํ˜ธ์ŠคํŒ…
โ€ข ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ช…๋ก ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Tomcat์œผ๋กœ ๊ฐœ๋ฐœ

๐Ÿ“š ์ค‘๊ธ‰ ๋‹จ๊ณ„ (3-4๊ฐœ์›”)

๋ชฉํ‘œ: ์‹ค๋ฌด ์ˆ˜์ค€์˜ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑํ•˜๊ธฐ

ํ•™์Šต ๋‚ด์šฉ:
1๏ธโƒฃ Nginx ๊ณ ๊ธ‰
โ€ข ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„ค์ •
โ€ข ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ
โ€ข SSL/TLS ์„ค์ •
โ€ข ์บ์‹ฑ ์ „๋žต

2๏ธโƒฃ Tomcat ๊ณ ๊ธ‰
โ€ข ์ปค๋„ฅํ„ฐ ํŠœ๋‹
โ€ข JVM ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ
โ€ข ์„ธ์…˜ ํด๋Ÿฌ์Šคํ„ฐ๋ง
โ€ข JNDI ๋ฐ์ดํ„ฐ์†Œ์Šค ์„ค์ •

3๏ธโƒฃ ํ†ตํ•ฉ ์•„ํ‚คํ…์ฒ˜
โ€ข Nginx + Tomcat ์—ฐ๋™
โ€ข ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ์ „๋žต
โ€ข ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ ๊ตฌ์ถ•

์‹ค์Šต ํ”„๋กœ์ ํŠธ:
โ€ข ์‡ผํ•‘๋ชฐ ์‚ฌ์ดํŠธ ๊ตฌ์ถ• (Spring Boot + Nginx + MySQL)
โ€ข ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ํ™˜๊ฒฝ ๊ตฌ์„ฑ ๋ฐ ํ…Œ์ŠคํŠธ

๐Ÿ“š ๊ณ ๊ธ‰ ๋‹จ๊ณ„ (6๊ฐœ์›” ์ด์ƒ)

๋ชฉํ‘œ: ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ ๋ฐ ์ตœ์ ํ™”

ํ•™์Šต ๋‚ด์šฉ:
1๏ธโƒฃ ์„ฑ๋Šฅ ์ตœ์ ํ™”
โ€ข ๋ณ‘๋ชฉ ์ง€์  ๋ถ„์„
โ€ข ์บ์‹ฑ ์ „๋žต ๊ณ ๋„ํ™”
โ€ข CDN ํ™œ์šฉ
โ€ข DB ์ฟผ๋ฆฌ ์ตœ์ ํ™”

2๏ธโƒฃ ๊ณ ๊ฐ€์šฉ์„ฑ ๊ตฌ์„ฑ
โ€ข Active-Active ํด๋Ÿฌ์Šคํ„ฐ
โ€ข ์ž๋™ ์žฅ์•  ๋ณต๊ตฌ
โ€ข ํ—ฌ์Šค ์ฒดํฌ ์„ค์ •

3๏ธโƒฃ DevOps ํ†ตํ•ฉ
โ€ข Docker ์ปจํ…Œ์ด๋„ˆํ™”
โ€ข Kubernetes ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜
โ€ข CI/CD ํŒŒ์ดํ”„๋ผ์ธ
โ€ข ์ธํ”„๋ผ ์ž๋™ํ™” (Ansible, Terraform)

์‹ค์Šต ํ”„๋กœ์ ํŠธ:
โ€ข ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์ถ•
โ€ข ์ดˆ๋‹น 10,000 ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ ์„ค๊ณ„

๐Ÿ“– ์ถ”์ฒœ ํ•™์Šต ์ž๋ฃŒ

๊ณต์‹ ๋ฌธ์„œ:
โ€ข Nginx ๊ณต์‹ ๋ฌธ์„œ: nginx.org/en/docs/
โ€ข Apache ๊ณต์‹ ๋ฌธ์„œ: httpd.apache.org/docs/
โ€ข Tomcat ๊ณต์‹ ๋ฌธ์„œ: tomcat.apache.org/tomcat-9.0-doc/

์˜จ๋ผ์ธ ๊ฐ•์˜:
โ€ข Udemy: "Nginx Fundamentals"
โ€ข Coursera: "Web Application Technologies and Django"
โ€ข ์ธํ”„๋Ÿฐ: "์Šคํ”„๋ง ๋ถ€ํŠธ์™€ AWS๋กœ ํ˜ผ์ž ๊ตฌํ˜„ํ•˜๋Š” ์›น ์„œ๋น„์Šค"

์ฑ…:
โ€ข "Nginx HTTP Server" - Clรฉment Nedelcu
โ€ข "Tomcat: The Definitive Guide" - Jason Brittain
โ€ข "High Performance Browser Networking" - Ilya Grigorik

์ปค๋ฎค๋‹ˆํ‹ฐ:
โ€ข Stack Overflow
โ€ข Reddit r/nginx, r/java
โ€ข ํ•œ๊ตญ ์Šคํ”„๋ง ์‚ฌ์šฉ์ž ๋ชจ์ž„

์žฌ๋Šฅ๋„ท์—์„œ ์‹ค๋ฌด ๊ฒฝํ—˜์ด ํ’๋ถ€ํ•œ ๋ฉ˜ํ† ๋ฅผ ์ฐพ์•„ 1:1 ์ฝ”์นญ์„ ๋ฐ›๋Š” ๊ฒƒ๋„ ์ •๋ง ํšจ๊ณผ์ ์ด์•ผ! ํ˜ผ์ž ๊ณต๋ถ€ํ•˜๋‹ค ๋ง‰ํž ๋•Œ ๋ฐ”๋กœ ์งˆ๋ฌธํ•˜๊ณ  ๋‹ต์„ ์–ป์„ ์ˆ˜ ์žˆ๊ฑฐ๋“ . ๐ŸŽฏ

๐Ÿ”ง ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…: ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ๋ฒ•

์‹ค๋ฌด์—์„œ ์ž์ฃผ ๋งˆ์ฃผ์น˜๋Š” ๋ฌธ์ œ๋“ค๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ด๋ดค์–ด. ์ด๊ฑฐ ์•Œ์•„๋‘๋ฉด ์ง„์งœ ๋„์›€ ๋งŽ์ด ๋ผ! ๐Ÿ’ช

๐Ÿšจ Nginx ๊ด€๋ จ ๋ฌธ์ œ

๋ฌธ์ œ 1: "502 Bad Gateway" ์—๋Ÿฌ
์›์ธ: Nginx๋Š” ์ •์ƒ์ด์ง€๋งŒ ๋’ค์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„(Tomcat)๊ฐ€ ์‘๋‹ตํ•˜์ง€ ์•Š์Œ
ํ•ด๊ฒฐ:
โ€ข Tomcat์ด ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธ: ps aux | grep tomcat
โ€ข ํฌํŠธ๊ฐ€ ์—ด๋ ค์žˆ๋Š”์ง€ ํ™•์ธ: netstat -tlnp | grep 8080
โ€ข ๋ฐฉํ™”๋ฒฝ ์„ค์ • ํ™•์ธ
โ€ข Nginx ๋กœ๊ทธ ํ™•์ธ: tail -f /var/log/nginx/error.log

๋ฌธ์ œ 2: "413 Request Entity Too Large" ์—๋Ÿฌ
์›์ธ: ์—…๋กœ๋“œ ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์ œํ•œ์„ ์ดˆ๊ณผ
ํ•ด๊ฒฐ:

client_max_body_size 100M;  # nginx.conf์— ์ถ”๊ฐ€

๋ฌธ์ œ 3: ์ •์  ํŒŒ์ผ์ด ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์Œ
์›์ธ: ๋ธŒ๋ผ์šฐ์ €๋‚˜ Nginx ์บ์‹œ
ํ•ด๊ฒฐ:
โ€ข ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ ํด๋ฆฌ์–ด (Ctrl + Shift + R)
โ€ข Nginx ์บ์‹œ ์‚ญ์ œ: rm -rf /var/cache/nginx/*
โ€ข ํŒŒ์ผ๋ช…์— ๋ฒ„์ „ ์ถ”๊ฐ€: style.css?v=1.2

๐Ÿšจ Tomcat ๊ด€๋ จ ๋ฌธ์ œ

๋ฌธ์ œ 1: "OutOfMemoryError: Java heap space"
์›์ธ: JVM ํž™ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ
ํ•ด๊ฒฐ:

# catalina.sh ๋˜๋Š” setenv.sh์— ์ถ”๊ฐ€
CATALINA_OPTS="-Xms2048m -Xmx4096m"

๋ฌธ์ œ 2: Tomcat์ด ์‹œ์ž‘๋˜์ง€ ์•Š์Œ
์›์ธ: ํฌํŠธ ์ถฉ๋Œ ๋˜๋Š” ์„ค์ • ์˜ค๋ฅ˜
ํ•ด๊ฒฐ:
โ€ข ํฌํŠธ ์‚ฌ์šฉ ํ™•์ธ: lsof -i :8080
โ€ข ๋กœ๊ทธ ํ™•์ธ: tail -f logs/catalina.out
โ€ข server.xml ๋ฌธ๋ฒ• ์˜ค๋ฅ˜ ์ฒดํฌ

๋ฌธ์ œ 3: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ํ›„ 404 ์—๋Ÿฌ
์›์ธ: Context Path ์„ค์ • ๋ฌธ์ œ
ํ•ด๊ฒฐ:
โ€ข WAR ํŒŒ์ผ๋ช… ํ™•์ธ (myapp.war โ†’ /myapp)
โ€ข server.xml์— Context ์„ค์ • ํ™•์ธ
โ€ข webapps ํด๋” ๊ถŒํ•œ ํ™•์ธ: chmod 755 webapps

๐Ÿšจ ์„ฑ๋Šฅ ๋ฌธ์ œ

๋ฌธ์ œ: ์‘๋‹ต ์†๋„๊ฐ€ ๋А๋ฆผ
์ง„๋‹จ ๋ฐฉ๋ฒ•:

# Nginx ์‘๋‹ต ์‹œ๊ฐ„ ๋กœ๊ทธ์— ์ถ”๊ฐ€
log_format timed '$remote_addr - $remote_user [$time_local] '
                 '"$request" $status $body_bytes_sent '
                 '"$http_referer" "$http_user_agent" '
                 '$request_time $upstream_response_time';

access_log /var/log/nginx/access.log timed;

ํ•ด๊ฒฐ ์ „๋žต:
1๏ธโƒฃ ๋ณ‘๋ชฉ ์ง€์  ํŒŒ์•…
โ€ข DB ์ฟผ๋ฆฌ๊ฐ€ ๋А๋ฆฐ๊ฐ€? โ†’ ์ธ๋ฑ์Šค ์ถ”๊ฐ€, ์ฟผ๋ฆฌ ์ตœ์ ํ™”
โ€ข ๋„คํŠธ์›Œํฌ๊ฐ€ ๋А๋ฆฐ๊ฐ€? โ†’ CDN ์‚ฌ์šฉ, ์••์ถ• ํ™œ์„ฑํ™”
โ€ข ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค ๋ถ€์กฑ? โ†’ ์Šค์ผ€์ผ ์—…/์•„์›ƒ

2๏ธโƒฃ ์บ์‹ฑ ์ ์šฉ
โ€ข ๋ธŒ๋ผ์šฐ์ € ์บ์‹ฑ
โ€ข Nginx ํ”„๋ก์‹œ ์บ์‹ฑ
โ€ข ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ ์บ์‹ฑ (Redis, Memcached)

3๏ธโƒฃ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ
โ€ข ๋ฌด๊ฑฐ์šด ์ž‘์—…์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ
โ€ข ๋ฉ”์‹œ์ง€ ํ ํ™œ์šฉ (RabbitMQ, Kafka)

๐ŸŒŸ ์‹ค๋ฌด ์‚ฌ๋ก€ ์—ฐ๊ตฌ

์ด๋ก ๋งŒ ์•Œ์•„์„œ๋Š” ๋ถ€์กฑํ•ด! ์‹ค์ œ ๊ธฐ์—…๋“ค์ด ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž. ๐Ÿข

๐Ÿ“ฑ ์‚ฌ๋ก€ 1: ๋„ทํ”Œ๋ฆญ์Šค (Netflix)

์•„ํ‚คํ…์ฒ˜:
โ€ข ํ”„๋ก ํŠธ์—”๋“œ: Nginx (์ •์  ์ฝ˜ํ…์ธ , SSL ์ข…๋ฃŒ)
โ€ข ๋ฐฑ์—”๋“œ: Spring Boot + Tomcat (๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค)
โ€ข ์ŠคํŠธ๋ฆฌ๋ฐ: ์ „์šฉ CDN

ํ•ต์‹ฌ ์ „๋žต:
โ€ข ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋กœ ์„œ๋น„์Šค ๋ถ„๋ฆฌ
โ€ข Zuul API Gateway๋กœ ๋ผ์šฐํŒ…
โ€ข Hystrix๋กœ ์žฅ์•  ๊ฒฉ๋ฆฌ
โ€ข ์ „ ์„ธ๊ณ„ CDN์œผ๋กœ ์ฝ˜ํ…์ธ  ๋ถ„์‚ฐ

๋ฐฐ์šธ ์ :
์„œ๋น„์Šค๋ฅผ ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„๊ณ , ๊ฐ ์„œ๋น„์Šค๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐํฌ/ํ™•์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•ด! ๐ŸŽฏ

๐Ÿ›’ ์‚ฌ๋ก€ 2: ์ฟ ํŒก (Coupang)

์•„ํ‚คํ…์ฒ˜:
โ€ข L4/L7 ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ
โ€ข Nginx ํด๋Ÿฌ์Šคํ„ฐ (์ˆ˜๋ฐฑ ๋Œ€)
โ€ข Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ (์ˆ˜์ฒœ ๋Œ€)
โ€ข ๋ถ„์‚ฐ ์บ์‹œ (Redis Cluster)
โ€ข ์ƒค๋”ฉ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

ํ•ต์‹ฌ ์ „๋žต:
โ€ข ํ”ผํฌ ํƒ€์ž„(๋กœ์ผ“๋ฐฐ์†ก ์‹œ์ž‘ ์‹œ๊ฐ„) ๋Œ€๋น„ ์˜คํ†  ์Šค์ผ€์ผ๋ง
โ€ข ์‹ค์‹œ๊ฐ„ ์žฌ๊ณ  ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜
โ€ข ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•œ Elasticsearch ํ™œ์šฉ

๋ฐฐ์šธ ์ :
๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ์ˆ˜ํ‰ ํ™•์žฅ(Scale-out)์ด ํ•„์ˆ˜! ๊ทธ๋ฆฌ๊ณ  ์บ์‹ฑ ์ „๋žต์ด ์ •๋ง ์ค‘์š”ํ•ด. ๐Ÿ’ก

๐Ÿ“ฐ ์‚ฌ๋ก€ 3: ๋„ค์ด๋ฒ„ (Naver)

์•„ํ‚คํ…์ฒ˜:
โ€ข Nginx ๊ธฐ๋ฐ˜ ์ปค์Šคํ…€ ์›น ์„œ๋ฒ„
โ€ข ์ž์ฒด ๊ฐœ๋ฐœ WAS (nGrinder, Arcus)
โ€ข ๋ถ„์‚ฐ ์บ์‹œ ์‹œ์Šคํ…œ
โ€ข ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ”Œ๋žซํผ

ํ•ต์‹ฌ ์ „๋žต:
โ€ข ์ž์ฒด ๊ฐœ๋ฐœ ๋„๊ตฌ๋กœ ์ตœ์ ํ™”
โ€ข A/B ํ…Œ์ŠคํŠธ ํ”Œ๋žซํผ์œผ๋กœ ์ง€์†์  ๊ฐœ์„ 
โ€ข ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์•Œ๋ฆผ ์‹œ์Šคํ…œ

๋ฐฐ์šธ ์ :
ํ‘œ์ค€ ๋„๊ตฌ๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋˜, ํ•„์š”ํ•˜๋ฉด ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๊ฑฐ๋‚˜ ์ž์ฒด ๊ฐœ๋ฐœ๋„ ๊ณ ๋ คํ•ด์•ผ ํ•ด! ๐Ÿ”ง

๐Ÿš€ ๋ฏธ๋ž˜ ํŠธ๋ Œ๋“œ์™€ ๋ฐœ์ „ ๋ฐฉํ–ฅ

๊ธฐ์ˆ ์€ ๊ณ„์† ๋ฐœ์ „ํ•˜๊ณ  ์žˆ์–ด. ์•ž์œผ๋กœ ์–ด๋–ค ๋ณ€ํ™”๊ฐ€ ์˜ฌ์ง€ ์•Œ์•„๋ณด์ž! ๐Ÿ”ฎ

โ˜๏ธ ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ์‹œ๋Œ€

1. ์ปจํ…Œ์ด๋„ˆํ™” (Docker)
์ „ํ†ต์ ์ธ ์„œ๋ฒ„ ์„ค์น˜ ๋ฐฉ์‹์—์„œ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜์œผ๋กœ ์ „ํ™˜ ์ค‘์ด์•ผ.

Dockerfile ์˜ˆ์‹œ:

FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY dist/ /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

2. Kubernetes ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜
์ˆ˜๋ฐฑ, ์ˆ˜์ฒœ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์‹œ์Šคํ…œ์ด์•ผ.

โ€ข ์ž๋™ ์Šค์ผ€์ผ๋ง
โ€ข ์ž๊ฐ€ ์น˜์œ  (์ปจํ…Œ์ด๋„ˆ ์ฃฝ์œผ๋ฉด ์ž๋™ ์žฌ์‹œ์ž‘)
โ€ข ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ
โ€ข ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ

3. ์„œ๋ฒ„๋ฆฌ์Šค (Serverless)
์„œ๋ฒ„ ๊ด€๋ฆฌ ์—†์ด ์ฝ”๋“œ๋งŒ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ์‹!
โ€ข AWS Lambda
โ€ข Google Cloud Functions
โ€ข Azure Functions

ํ•˜์ง€๋งŒ ์™„์ „ํžˆ ์„œ๋ฒ„๋ฆฌ์Šค๋กœ ๊ฐ€๊ธฐ๋Š” ์–ด๋ ต๊ณ , ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๋Œ€์„ธ๊ฐ€ ๋  ๊ฑฐ์•ผ! ๐ŸŽฏ

โšก HTTP/3์™€ QUIC

HTTP/2 ๋‹ค์Œ์€ HTTP/3์•ผ! QUIC ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ฐ˜์œผ๋กœ ๋” ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์ด์ง€.

์ฃผ์š” ํŠน์ง•:
โ€ข UDP ๊ธฐ๋ฐ˜ (TCP๋ณด๋‹ค ๋น ๋ฆ„)
โ€ข ์—ฐ๊ฒฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ (Wi-Fi โ†’ 4G ์ „ํ™˜ ์‹œ์—๋„ ๋Š๊น€ ์—†์Œ)
โ€ข ํ–ฅ์ƒ๋œ ๋ณด์•ˆ
โ€ข ๋” ๋‚˜์€ ๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑ

Nginx๋Š” ์ด๋ฏธ HTTP/3๋ฅผ ์ง€์›ํ•˜๊ณ  ์žˆ์–ด! ์กฐ๋งŒ๊ฐ„ ํ‘œ์ค€์ด ๋  ๊ฑฐ์•ผ. ๐Ÿš€

๐Ÿค– AI/ML ํ†ตํ•ฉ

์„œ๋ฒ„ ๊ด€๋ฆฌ์—๋„ AI๊ฐ€ ๋“ค์–ด์˜ค๊ณ  ์žˆ์–ด!

โ€ข ์ž๋™ ์„ฑ๋Šฅ ํŠœ๋‹
โ€ข ์ด์ƒ ํŠธ๋ž˜ํ”ฝ ํƒ์ง€
โ€ข ์˜ˆ์ธก ๊ธฐ๋ฐ˜ ์Šค์ผ€์ผ๋ง
โ€ข ์ง€๋Šฅํ˜• ์บ์‹ฑ

์•ž์œผ๋กœ๋Š” ์„œ๋ฒ„๊ฐ€ ์Šค์Šค๋กœ ํ•™์Šตํ•˜๊ณ  ์ตœ์ ํ™”ํ•˜๋Š” ์‹œ๋Œ€๊ฐ€ ์˜ฌ ๊ฑฐ์•ผ! ๐Ÿง 

๐Ÿ“ ํ•ต์‹ฌ ์š”์•ฝ ์ •๋ฆฌ

์ž, ๊ธด ์—ฌ์ •์ด์—ˆ์ง€? ๐Ÿ˜… ํ•ต์‹ฌ๋งŒ ๋‹ค์‹œ ์ •๋ฆฌํ•ด๋ณผ๊ฒŒ!

๐ŸŽฏ ์›น ์„œ๋ฒ„ vs ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„
โ€ข ์›น ์„œ๋ฒ„: ์ •์  ์ฝ˜ํ…์ธ  ์ œ๊ณต (HTML, CSS, JS, ์ด๋ฏธ์ง€)
โ€ข ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„: ๋™์  ์ฝ˜ํ…์ธ  ์ƒ์„ฑ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ

๐ŸŒ Nginx
โ€ข ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋น„๋™๊ธฐ ์•„ํ‚คํ…์ฒ˜
โ€ข ๋†’์€ ๋™์‹œ ์ ‘์† ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ
โ€ข ์ ์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ
โ€ข ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๊ธฐ๋Šฅ
โ€ข ํ˜„๋Œ€์ ์ธ ์›น ์„œ๋น„์Šค์— ์ตœ์ 

๐Ÿ”ฅ Apache
โ€ข ํ”„๋กœ์„ธ์Šค/์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜
โ€ข ๊ฐ•๋ ฅํ•œ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ
โ€ข .htaccess ์ง€์›
โ€ข ๋ฐฉ๋Œ€ํ•œ ๋ฌธ์„œ์™€ ์ปค๋ฎค๋‹ˆํ‹ฐ
โ€ข PHP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ถํ•ฉ ์ข‹์Œ

โ˜• Tomcat
โ€ข ์ž๋ฐ” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ
โ€ข ๊ฐ€๋ณ๊ณ  ๋น ๋ฅธ ์‹œ์ž‘
โ€ข ๋ฌด๋ฃŒ ์˜คํ”ˆ์†Œ์Šค
โ€ข Spring Boot์™€ ์™„๋ฒฝํ•œ ํ˜ธํ™˜
โ€ข ์ž๋ฐ” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ‘œ์ค€

๐Ÿ† ์‹ค๋ฌด ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค
โ€ข ์ •์  ํŒŒ์ผ์€ ์›น ์„œ๋ฒ„(Nginx)๊ฐ€ ์ฒ˜๋ฆฌ
โ€ข ๋™์  ์š”์ฒญ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„(Tomcat)๋กœ ์ „๋‹ฌ
โ€ข ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์œผ๋กœ ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ
โ€ข ์บ์‹ฑ ์ „๋žต์œผ๋กœ ์„ฑ๋Šฅ ํ–ฅ์ƒ
โ€ข ๋ณด์•ˆ ์„ค์ • ํ•„์ˆ˜ (HTTPS, ํ—ค๋”, Rate Limiting)
โ€ข ์ง€์†์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ์ตœ์ ํ™”

๐Ÿ’ก ํ•™์Šต ํŒ
โ€ข ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๊ผผ๊ผผํžˆ ์ฝ์ž
โ€ข ์ง์ ‘ ์„ค์น˜ํ•˜๊ณ  ์‹ค์Šตํ•ด๋ณด์ž
โ€ข ์ž‘์€ ํ”„๋กœ์ ํŠธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์ž
โ€ข ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์ฐธ์—ฌํ•˜์ž
โ€ข ์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ ๋ฉ˜ํ† ๋ฅผ ์ฐพ์•„ ๋ฐฐ์šฐ์ž!

๊ธฐ์–ตํ•ด! ์™„๋ฒฝํ•œ ์•„ํ‚คํ…์ฒ˜๋Š” ์—†์–ด. ์ƒํ™ฉ์— ๋งž๋Š” ์ตœ์„ ์˜ ์„ ํƒ์ด ์ค‘์š”ํ•ด. ๐ŸŽฏ
์ฒ˜์Œ์—๋Š” ์–ด๋ ต๊ฒŒ ๋А๊ปด์ง€๊ฒ ์ง€๋งŒ, ํ•˜๋‚˜์”ฉ ์ฐจ๊ทผ์ฐจ๊ทผ ๋ฐฐ์šฐ๋‹ค ๋ณด๋ฉด ์–ด๋А์ƒˆ ์ „๋ฌธ๊ฐ€๊ฐ€ ๋˜์–ด ์žˆ์„ ๊ฑฐ์•ผ!

๐ŸŽ‰ ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ

์™€! ์—ฌ๊ธฐ๊นŒ์ง€ ์ฝ์—ˆ๋‹ค๋ฉด ์ •๋ง ๋Œ€๋‹จํ•ด! ๐Ÿ‘๐Ÿ‘๐Ÿ‘

์›น ์„œ๋ฒ„์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ์ฐจ์ด, Nginx, Apache, Tomcat์˜ ํŠน์ง•๊ณผ ํ™œ์šฉ๋ฒ•๊นŒ์ง€ ๋ชจ๋‘ ๋‹ค๋ค„๋ดค์–ด. ์ด์ œ ์นœ๊ตฌ๋“คํ•œํ…Œ ์ž์‹ ์žˆ๊ฒŒ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€? ๐Ÿ˜Ž

์ด ์ง€์‹์„ ๋ฐ”ํƒ•์œผ๋กœ ๋ฉ‹์ง„ ์›น ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค์–ด๋ณด๊ธธ ๋ฐ”๋ผ! ๊ทธ๋ฆฌ๊ณ  ๋ง‰ํžˆ๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์žฌ๋Šฅ๋„ท์—์„œ ๊ฒฝํ—˜ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ๋„์›€์„ ๋ฐ›๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด์•ผ. ํ˜ผ์ž ๊ณ ๋ฏผํ•˜๋Š” ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  ๋” ๋น ๋ฅด๊ฒŒ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๊ฑฐ๋“ ! ๐Ÿš€

๊ธฐ์ˆ ์€ ๊ณ„์† ๋ฐœ์ „ํ•˜๋‹ˆ๊นŒ, ํ•ญ์ƒ ๋ฐฐ์šฐ๋Š” ์ž์„ธ๋ฅผ ์œ ์ง€ํ•˜์ž. ์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ๋„ ๋ช‡ ๋…„ ํ›„์—๋Š” ๋˜ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์–ด. ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์–ด๋–ค ๋ณ€ํ™”๋„ ๋‘๋ ต์ง€ ์•Š์„ ๊ฑฐ์•ผ! ๐Ÿ’ช

์งˆ๋ฌธ์ด๋‚˜ ํ”ผ๋“œ๋ฐฑ์ด ์žˆ๋‹ค๋ฉด ์–ธ์ œ๋“  ํ™˜์˜์ด์•ผ! ํ•จ๊ป˜ ์„ฑ์žฅํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๋งŒ๋“ค์–ด๊ฐ€์ž! ๐ŸŒŸ

ํ–‰๋ณตํ•œ ์ฝ”๋”ฉ ๋˜๊ธธ ๋ฐ”๋ผ! Happy Coding! ๐ŸŽจโœจ

๐Ÿš€ ์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต์œ ํ•ด์ฃผ์„ธ์š”! ๐Ÿš€

๋” ๋งŽ์€ ๊ฐœ๋ฐœ ์ง€์‹์€ ์žฌ๋Šฅ๋„ท '์ง€์‹์ธ์˜ ์ˆฒ'์—์„œ ๋งŒ๋‚˜์š”! ๐Ÿ’š

๋Œ“๊ธ€ ์ž‘์„ฑ

์ด ๊ธ€์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์ƒ๊ฐ์„ ๋“ค๋ ค์ฃผ์„ธ์š”

๋Œ“๊ธ€ 0
๋Œ“๊ธ€์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

์•„์ง ๋Œ“๊ธ€์ด ์—†์Šต๋‹ˆ๋‹ค.