Search

์ •์  ์š”์ฒญ vs ๋™์  ์š”์ฒญ

์ •์  ์š”์ฒญ vs ๋™์  ์š”์ฒญ

๊ฐœ์š”

์ •์  ์š”์ฒญ์€ ์„œ๋ฒ„์— ์ด๋ฏธ ์ €์žฅ๋œ ํŒŒ์ผ์„ ๊ทธ๋Œ€๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด๊ณ , ๋™์  ์š”์ฒญ์€ ์„œ๋ฒ„๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•ด ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์›น ์„œ๋ฒ„์— ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์€ ํฌ๊ฒŒ ๋‘ ์ข…๋ฅ˜๋กœ ๋‚˜๋‰˜์–ด์š”. ์ •์ (Static) ์š”์ฒญ๊ณผ ๋™์ (Dynamic) ์š”์ฒญ์ด์—์š”.
๋น„์œ ๋ฅผ ๋“ค๋ฉด ์ด๋ž˜์š”: ํŽธ์˜์ ์—์„œ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” ์‚ผ๊ฐ๊น€๋ฐฅ์„ ์‚ฌ๋Š” ๊ฑด ์ •์  ์š”์ฒญ, ์‹๋‹น์—์„œ ์ฃผ๋ฌธํ•˜๋ฉด ๊ทธ๋•Œ ์š”๋ฆฌํ•ด์„œ ๋‚˜์˜ค๋Š” ๊ฑด ๋™์  ์š”์ฒญ์ด์—์š”. ๋‘˜ ๋‹ค ์Œ์‹์„ ๋ฐ›๋Š” ๊ฑด ๊ฐ™์ง€๋งŒ, ๊ณผ์ •์ด ์™„์ „ํžˆ ๋‹ค๋ฅด์ฃ !

์ •์  ์š”์ฒญ vs ๋™์  ์š”์ฒญ ํ•œ๋ˆˆ์— ๋น„๊ต

๊ตฌ๋ถ„
์ •์  ์š”์ฒญ (Static)
๋™์  ์š”์ฒญ (Dynamic)
์ •์˜
๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ ํŒŒ์ผ์„ ๊ทธ๋Œ€๋กœ ์ „๋‹ฌ
์š”์ฒญ๋งˆ๋‹ค ์„œ๋ฒ„๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฒฐ๊ณผ ์ƒ์„ฑ
์ฒ˜๋ฆฌ ์ฃผ์ฒด
์›น ์„œ๋ฒ„ ๋‹จ๋… (Nginx, Apache)
์›น ์„œ๋ฒ„ + ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ (WAS)
์‘๋‹ต ์†๋„
๋งค์šฐ ๋น ๋ฆ„
์ƒ๋Œ€์ ์œผ๋กœ ๋А๋ฆผ
์„œ๋ฒ„ ๋ถ€ํ•˜
๋‚ฎ์Œ
๋†’์Œ
์บ์‹ฑ
์‰ฌ์›€
์–ด๋ ค์›€ (๋ฐ์ดํ„ฐ๊ฐ€ ๊ณ„์† ๋ณ€ํ•˜๋ฏ€๋กœ)
์ฝ˜ํ…์ธ  ์˜ˆ์‹œ
HTML, CSS, JS, ์ด๋ฏธ์ง€, ํฐํŠธ
๋กœ๊ทธ์ธ ๊ฒฐ๊ณผ, ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ, ๊ฒŒ์‹œํŒ ๊ธ€ ๋ชฉ๋ก
URL ์˜ˆ์‹œ
/images/logo.png
/api/users?id=123
๋น„์œ 
ํŽธ์˜์  ์‚ผ๊ฐ๊น€๋ฐฅ
์‹๋‹น ์ฃผ๋ฌธ ์š”๋ฆฌ

์ •์  ์š”์ฒญ ์ฒ˜๋ฆฌ ํ๋ฆ„

sequenceDiagram
    participant ๋ธŒ๋ผ์šฐ์ € as ๐Ÿ‘ค ๋ธŒ๋ผ์šฐ์ €
    participant Nginx as ๐Ÿ–ฅ๏ธ Nginx (์›น ์„œ๋ฒ„)
    participant ํŒŒ์ผ as ๐Ÿ“ ํŒŒ์ผ ์‹œ์Šคํ…œ

    ๋ธŒ๋ผ์šฐ์ €->>Nginx: GET /index.html
    Nginx->>ํŒŒ์ผ: /var/www/html/index.html ์ฐพ๊ธฐ
    ํŒŒ์ผ-->>Nginx: ํŒŒ์ผ ๋‚ด์šฉ ๋ฐ˜ํ™˜
    Nginx-->>๋ธŒ๋ผ์šฐ์ €: HTTP 200 + index.html

    Note over Nginx: ์›น ์„œ๋ฒ„ ํ˜ผ์ž์„œ ์ฒ˜๋ฆฌ ์™„๋ฃŒ!<br/>๋ณ„๋„ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์—†์Œ
Mermaid
๋ณต์‚ฌ
์ •์  ์š”์ฒญ์€ ์ •๋ง ์‹ฌํ”Œํ•ด์š”. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ "์ด ํŒŒ์ผ ์ฃผ์„ธ์š”!" ํ•˜๋ฉด, Nginx๊ฐ€ ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ํ•ด๋‹น ํŒŒ์ผ์„ ์ฐพ์•„์„œ ๊ทธ๋Œ€๋กœ ์ „๋‹ฌํ•˜๋ฉด ๋์ด์—์š”. ์ค‘๊ฐ„์— ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ํ•˜๋Š” ๊ณผ์ •์ด ์ „ํ˜€ ์—†์–ด์š”.
๊ทธ๋ž˜์„œ ์†๋„๊ฐ€ ์—„์ฒญ ๋น ๋ฅด๊ณ , ์„œ๋ฒ„ ๋ถ€ํ•˜๋„ ๊ฑฐ์˜ ์—†์–ด์š”. Nginx๊ฐ€ ์ •์  ํŒŒ์ผ ์„œ๋น™์— ํŠนํžˆ ๋›ฐ์–ด๋‚œ ์ด์œ ์ด๊ธฐ๋„ ํ•ด์š”!

๋™์  ์š”์ฒญ ์ฒ˜๋ฆฌ ํ๋ฆ„

sequenceDiagram
    participant ๋ธŒ๋ผ์šฐ์ € as ๐Ÿ‘ค ๋ธŒ๋ผ์šฐ์ €
    participant Nginx as ๐Ÿ–ฅ๏ธ Nginx (์›น ์„œ๋ฒ„)
    participant WAS as โš™๏ธ WAS (Spring Boot ๋“ฑ)
    participant DB as ๐Ÿ—„๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

    ๋ธŒ๋ผ์šฐ์ €->>Nginx: GET /api/users/123
    Nginx->>WAS: ์š”์ฒญ ์ „๋‹ฌ (๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ)
    WAS->>DB: SELECT * FROM users WHERE id=123
    DB-->>WAS: ์œ ์ € ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜
    WAS-->>Nginx: JSON ์‘๋‹ต ์ƒ์„ฑ
    Nginx-->>๋ธŒ๋ผ์šฐ์ €: HTTP 200 + JSON ๋ฐ์ดํ„ฐ

    Note over Nginx,WAS: ์›น ์„œ๋ฒ„๊ฐ€ WAS์—๊ฒŒ ๋„˜๊ธฐ๊ณ <br/>WAS๊ฐ€ DB ์กฐํšŒ ํ›„ ์‘๋‹ต ์ƒ์„ฑ
Mermaid
๋ณต์‚ฌ
๋™์  ์š”์ฒญ์€ ๊ณผ์ •์ด ์ข€ ๋” ๋ณต์žกํ•ด์š”. Nginx๊ฐ€ ํ˜ผ์ž์„œ๋Š” ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๊ณ , ๋’ค์— ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„(WAS)์—๊ฒŒ ์ผ์„ ๋„˜๊ฒจ์•ผ ํ•ด์š”.
์˜ˆ๋ฅผ ๋“ค์–ด "123๋ฒˆ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค˜!"๋ผ๋Š” ์š”์ฒญ์ด ์˜ค๋ฉด, Nginx๋Š” ์ด๊ฑธ Spring Boot ๊ฐ™์€ WAS์—๊ฒŒ ์ „๋‹ฌํ•˜๊ณ , WAS๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ 123๋ฒˆ ์‚ฌ์šฉ์ž๋ฅผ ์กฐํšŒํ•ด์„œ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ JSON ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด Nginx๋ฅผ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ๋ณด๋‚ด์ฃผ๋Š” ๊ฑฐ์˜ˆ์š”.

์ „์ฒด ์•„ํ‚คํ…์ฒ˜์—์„œ์˜ ์œ„์น˜

graph LR
    A[๐Ÿ‘ค ๋ธŒ๋ผ์šฐ์ €] --> B[๐Ÿ–ฅ๏ธ Nginx<br/>์›น ์„œ๋ฒ„]

    B -->|์ •์  ์š”์ฒญ| C[๐Ÿ“ ์ •์  ํŒŒ์ผ<br/>HTML/CSS/JS/์ด๋ฏธ์ง€]
    B -->|๋™์  ์š”์ฒญ| D[โš™๏ธ WAS<br/>Spring Boot<br/>Node.js<br/>Django]
    D --> E[๐Ÿ—„๏ธ Database<br/>MySQL/PostgreSQL]

    style C fill:#90EE90
    style D fill:#FFB366
    style E fill:#87CEEB
Mermaid
๋ณต์‚ฌ
์ด ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด Nginx์˜ ์—ญํ• ์ด ํ™•์‹คํžˆ ๋ณด์ด์ฃ ? Nginx๋Š” ๊ตํ†ต์ •๋ฆฌ ๋‹ด๋‹น์ด์—์š”!
โ€ข
์ •์  ํŒŒ์ผ ์š”์ฒญ์ด ์˜ค๋ฉด โ†’ ์ง์ ‘ ํŒŒ์ผ์„ ์ฐพ์•„์„œ ์ „๋‹ฌ (์ดˆ๋ก์ƒ‰ ๊ฒฝ๋กœ)
โ€ข
๋™์  ์š”์ฒญ์ด ์˜ค๋ฉด โ†’ WAS์—๊ฒŒ ๋„˜๊ธฐ๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์„œ ์ „๋‹ฌ (์ฃผํ™ฉ์ƒ‰ ๊ฒฝ๋กœ)
์ด๋ ‡๊ฒŒ Nginx๊ฐ€ ์•ž๋‹จ์—์„œ ์š”์ฒญ์„ ๋ถ„๋ฅ˜ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ(Reverse Proxy)๋ผ๊ณ  ํ•ด์š”. ์ด๊ฑด ๋‚˜์ค‘์— ๋” ์ž์„ธํžˆ ๋ฐฐ์šธ ๊ฑฐ์˜ˆ์š”!

์ •์  ํŒŒ์ผ์˜ ์ข…๋ฅ˜

ํŒŒ์ผ ์œ ํ˜•
ํ™•์žฅ์ž
์—ญํ• 
Content-Type
HTML
.html
ํŽ˜์ด์ง€ ๊ตฌ์กฐ
text/html
CSS
.css
์Šคํƒ€์ผ, ๋””์ž์ธ
text/css
JavaScript
.js
๋™์  ๊ธฐ๋Šฅ
application/javascript
์ด๋ฏธ์ง€
.png, .jpg, .gif, .webp
์‹œ๊ฐ ์ž๋ฃŒ
image/png ๋“ฑ
ํฐํŠธ
.woff, .woff2, .ttf
๊ธ€๊ผด
font/woff2 ๋“ฑ
๋™์˜์ƒ
.mp4, .webm
๋ฏธ๋””์–ด
video/mp4
JSON ํŒŒ์ผ
.json
์„ค์ •, ๋ฐ์ดํ„ฐ
application/json
ํŒŒ๋น„์ฝ˜
favicon.ico
ํƒญ ์•„์ด์ฝ˜
image/x-icon
์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ! JavaScript ํŒŒ์ผ(.js)์€ ์ •์  ํŒŒ์ผ์ด์—์š”. "JavaScript๊ฐ€ ๋™์  ์–ธ์–ด ์•„๋‹Œ๊ฐ€์š”?"๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์„œ๋ฒ„ ์ž…์žฅ์—์„œ๋Š” .js ํŒŒ์ผ ์ž์ฒด๋Š” ์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” ํŒŒ์ผ์ด๋ผ ๊ทธ๋Œ€๋กœ ์ „๋‹ฌ๋งŒ ํ•˜๋ฉด ๋ผ์š”. ๊ทธ JS ํŒŒ์ผ์ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๋ฉด์„œ ๋™์ ์ธ ๋™์ž‘์„ ํ•˜๋Š” ๊ฑฐ์ง€, ์„œ๋ฒ„๊ฐ€ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฑด ์•„๋‹ˆ๊ฑฐ๋“ ์š”!

Nginx ์„ค์ • ์˜ˆ์‹œ

server { listen 80; server_name example.com; # ์ •์  ํŒŒ์ผ ์ฒ˜๋ฆฌ - Nginx๊ฐ€ ์ง์ ‘ ์ฒ˜๋ฆฌ location / { root /var/www/html; index index.html; try_files $uri $uri/ /index.html; } # ์ •์  ๋ฆฌ์†Œ์Šค - ์บ์‹ฑ ์ ์šฉ location ~* \\.(css|js|png|jpg|gif|ico|woff2)$ { root /var/www/html; expires 30d; # 30์ผ๊ฐ„ ์บ์‹ฑ add_header Cache-Control "public, immutable"; } # ๋™์  ์š”์ฒญ - WAS๋กœ ์ „๋‹ฌ (๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ) location /api/ { proxy_pass <http://localhost:8080>; # Spring Boot ์„œ๋ฒ„ proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
Plain Text
๋ณต์‚ฌ
์ด ์„ค์ •์„ ๋ณด๋ฉด, Nginx๊ฐ€ URL ๊ฒฝ๋กœ์— ๋”ฐ๋ผ ์š”์ฒญ์„ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒŒ ๋ณด์ด์ฃ ?
โ€ข
/ ๊ฒฝ๋กœ โ†’ ์ •์  ํŒŒ์ผ(React ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ)์„ ์ง์ ‘ ์„œ๋น™
โ€ข
/api/ ๊ฒฝ๋กœ โ†’ Spring Boot(WAS)๋กœ ์š”์ฒญ ์ „๋‹ฌ

ํ•ต์‹ฌ ์ •๋ฆฌ

์ •์  ์š”์ฒญ = ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ ํŒŒ์ผ์„ ๊ทธ๋Œ€๋กœ ์ „๋‹ฌ (๋น ๋ฅด๊ณ , ์„œ๋ฒ„ ๋ถ€ํ•˜ ์ ์Œ)
๋™์  ์š”์ฒญ = ์„œ๋ฒ„๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑ (DB ์กฐํšŒ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง)
Nginx๋Š” ์ •์  ํŒŒ์ผ ์„œ๋น™์— ๋งค์šฐ ๋›ฐ์–ด๋‚˜๊ณ , ๋™์  ์š”์ฒญ์€ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋กœ WAS์— ์ „๋‹ฌ
์‹ค๋ฌด์—์„œ๋Š” ์ •์ /๋™์  ์š”์ฒญ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ ์ตœ์ ํ™”์˜ ๊ธฐ๋ณธ!