Server์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๊ณ  ์šด์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Web Server์™€ Application Server์˜ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ์‰ฝ๊ฒŒ ๋น„์œ ํ•˜์ž๋ฉด:

  • Web Server๋Š” ์Œ์‹์ ์˜ ํ™€ ์„œ๋ฒ„์™€ ๊ฐ™๋‹ค (์ฃผ๋ฌธ ์ ‘์ˆ˜, ์Œ์‹ ์„œ๋น™)
  • Application Server๋Š” ์ฃผ๋ฐฉ ์…ฐํ”„์™€ ๊ฐ™๋‹ค (์‹ค์ œ ์Œ์‹ ์กฐ๋ฆฌ)

Web Server ์ดํ•ดํ•˜๊ธฐ

๊ธฐ๋ณธ ์—ญํ• 

Web server๋Š” client(์›น ๋ธŒ๋ผ์šฐ์ €)์˜ ์š”์ฒญ์„ ๊ฐ€์žฅ ๋จผ์ € ๋ฐ›์•„๋“ค์ด๋Š” ๊ด€๋ฌธ์ด๋‹ค.

graph LR
    Browser[๋ธŒ๋ผ์šฐ์ €] -->|HTTP Request| WebServer[Web Server]
    WebServer -->|HTTP Response| Browser

Static content ์ฒ˜๋ฆฌ

# Nginx static file ์„ค์ • ์˜ˆ์‹œ
location /images/ {
    root   /var/www/static;  # ์‹ค์ œ ํŒŒ์ผ ์œ„์น˜
    expires 30d;             # ๋ธŒ๋ผ์šฐ์ € ์บ์‹ฑ ์„ค์ •
}

์ž˜๋ชป๋œ ์˜ˆ์‹œ์™€ ์˜ฌ๋ฐ”๋ฅธ ์˜ˆ์‹œ

์ž˜๋ชป๋œ ๊ตฌ์„ฑ:

# ์ž˜๋ชป๋œ ์˜ˆ์‹œ - ๋ชจ๋“  ์š”์ฒญ์„ Application Server๋กœ ์ „๋‹ฌ
location / {
    proxy_pass http://app_server;
}

์˜ฌ๋ฐ”๋ฅธ ๊ตฌ์„ฑ:

# ์˜ฌ๋ฐ”๋ฅธ ์˜ˆ์‹œ - static file์€ Web Server๊ฐ€ ์ง์ ‘ ์ฒ˜๋ฆฌ
location /static/ {
    root /var/www;
}
location / {
    proxy_pass http://app_server;
}

Application Server ์ดํ•ดํ•˜๊ธฐ

๊ธฐ๋ณธ ์—ญํ• 

Application server๋Š” business logic์„ ์‹คํ–‰ํ•˜๊ณ  ๋™์  ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

Database ์—ฐ๋™ ์˜ˆ์‹œ

# Application Server์—์„œ์˜ ๋™์  ์ฒ˜๋ฆฌ ์˜ˆ์‹œ
@app.route('/users')
def get_users():
    users = database.query("SELECT * FROM users")
    return generate_response(users)

Server ๊ฐ„ ํ†ต์‹ 

sequenceDiagram
    Browser->>Web Server: HTTP Request
    Web Server->>Application Server: Forward Request
    Application Server->>Database: Query Data
    Database->>Application Server: Return Data
    Application Server->>Web Server: Process & Return
    Web Server->>Browser: HTTP Response

์‹ค์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€

1. Blog ์„œ๋น„์Šค ๊ตฌ์„ฑ

  • Web Server (Nginx)

    • ์ด๋ฏธ์ง€, CSS, JS ํŒŒ์ผ ์„œ๋น™
    • SSL/TLS ์ฒ˜๋ฆฌ
    • Caching ์„ค์ •
  • Application Server (Django)

    • ๊ฒŒ์‹œ๊ธ€ CRUD ์ฒ˜๋ฆฌ
    • ์‚ฌ์šฉ์ž ์ธ์ฆ
    • ๋Œ“๊ธ€ ์‹œ์Šคํ…œ

2. E-commerce ์‹œ์Šคํ…œ

  • Web Server (Apache)

    • Product ์ด๋ฏธ์ง€ ์„œ๋น™
    • Security header ์„ค์ •
    • Load balancing
  • Application Server (Spring Boot)

    • ์ƒํ’ˆ ๊ฒ€์ƒ‰/ํ•„ํ„ฐ๋ง
    • ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ด€๋ฆฌ
    • ๊ฒฐ์ œ ์ฒ˜๋ฆฌ

Performance ๊ณ ๋ ค์‚ฌํ•ญ

1. Caching ์ „๋žต

# Web Server caching ์„ค์ •
location /static/ {
    expires 1h;
    add_header Cache-Control "public";
}

2. Load Balancing

# Load balancing ์„ค์ •
upstream app_servers {
    server app1:8000;
    server app2:8000;
    server app3:8000;
}

์ฃผ์˜์‚ฌํ•ญ

Security ๊ด€๋ จ

  1. Web Server

    • ์™ธ๋ถ€ ์ ‘๊ทผ ์ œํ•œ
    • SSL/TLS ์„ค์ •
    • Security header ์„ค์ •
  2. Application Server

    • ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ์—๋งŒ ๋…ธ์ถœ
    • ์ ‘๊ทผ ๊ถŒํ•œ ์ตœ์†Œํ™”
    • ๋ฏผ๊ฐ ์ •๋ณด ์•”ํ˜ธํ™”

๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •

๊ธฐ๋ณธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

# ๊ฐœ๋ฐœ์šฉ Web Server ์„ค์ •
python -m http.server 8000  # ๊ฐ„๋‹จํ•œ static file ์„œ๋ฒ„
 
# ๊ฐœ๋ฐœ์šฉ Application Server ์‹คํ–‰
python manage.py runserver  # Django ๊ฐœ๋ฐœ ์„œ๋ฒ„

๋ฐฐํฌ ์‹œ ๊ณ ๋ ค์‚ฌํ•ญ

Checklist

  1. Security

    • SSL/TLS ์„ค์ • ํ™•์ธ
    • ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™ ๊ฒ€ํ† 
    • ์ ‘๊ทผ ๊ถŒํ•œ ์„ค์ •
  2. Performance

    • Caching ์„ค์ •
    • Resource limit ์„ค์ •
    • Monitoring ๊ตฌ์„ฑ

๊ฒฐ๋ก 

Web Server์™€ Application Server๋Š” ๊ฐ๊ฐ์˜ ์—ญํ• ์ด ๋ช…ํ™•ํ•˜๋‹ค:

  • Web Server: Front-end ์š”์ฒญ ์ฒ˜๋ฆฌ, ๋ณด์•ˆ, static content ๊ด€๋ฆฌ
  • Application Server: Business logic ์ฒ˜๋ฆฌ, ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ, ๋™์  ์ปจํ…์ธ  ์ƒ์„ฑ

ํšจ์œจ์ ์ธ ์›น ์„œ๋น„์Šค๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋‘ ์„œ๋ฒ„์˜ ํŠน์„ฑ์„ ์ดํ•ดํ•˜๊ณ  ์ ์ ˆํžˆ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.