ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

 

๐Ÿ—๏ธ 100๋งŒ ์‚ฌ์šฉ์ž ํ™•์žฅ์„ ์œ„ํ•œ ์•„ํ‚คํ…์ฒ˜: ๋‚ด๊ฐ€ ๋ฏธ๋ฆฌ ์•Œ์•˜๋”๋ผ๋ฉด ์ข‹์•˜์„ ๊ฒƒ๋“ค

์ดˆ๊ธฐ์—๋Š” 100๋ช…์˜ ์ผ์ผ ์‚ฌ์šฉ์ž๋งŒ์œผ๋กœ๋„ ๋งŒ์กฑ์Šค๋Ÿฌ์› ์ง€๋งŒ,
๋ช‡ ๋‹ฌ ๋งŒ์— 10,000๋ช…, 100,000๋ช…์œผ๋กœ ๊ธ‰์ฆํ•˜๋ฉด์„œ ๊ธฐ์กด ์•„ํ‚คํ…์ฒ˜์˜ ํ•œ๊ณ„๊ฐ€ ๋“œ๋Ÿฌ๋‚ฌ์Šต๋‹ˆ๋‹ค.
1,000๋ช…์„ ์œ„ํ•ด ์„ค๊ณ„๋œ ์‹œ์Šคํ…œ์€ 100๋งŒ ๋ช…์˜ ์‚ฌ์šฉ์ž๋ฅผ ๊ฐ๋‹นํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด ๊ธ€์—์„œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ฒช์—ˆ๋˜ ๋ฌธ์ œ์™€ ๊ทธ ํ•ด๊ฒฐ ๊ณผ์ •์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿงฑ 1๋‹จ๊ณ„: ๋‹จ์ผ ๋ชจ๋†€๋ฆฌ์‹ ์•„ํ‚คํ…์ฒ˜์˜ ํ•œ๊ณ„

๐Ÿ’ป ์ดˆ๊ธฐ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ

  • Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
  • MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • NGINX ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ
  • ๋ชจ๋“  ๊ฒƒ์ด ํ•˜๋‚˜์˜ VM์— ๋ฐฐํฌ๋จ

โš ๏ธ ๋ฌธ์ œ์ 

  • CPU ์‚ฌ์šฉ๋ฅ  ์ตœ๋Œ€์น˜ ๋„๋‹ฌ
  • ์ฟผ๋ฆฌ ์†๋„ ์ €ํ•˜
  • ๊ฐ€์šฉ์„ฑ 99% ์ดํ•˜๋กœ ๊ฐ์†Œ
  • DB ์ž ๊ธˆ, GC ์ง€์—ฐ, ์Šค๋ ˆ๋“œ ๊ฒฝ์Ÿ ๋ฐœ์ƒ

โ— ๊ตํ›ˆ

๋‹จ์ผ ์„œ๋ฒ„์™€ ๋ชจ๋†€๋ฆฌ์‹ ๊ตฌ์กฐ๋กœ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๊ธ‰์ฆํ•  ๋•Œ ๋ณ‘๋ชฉ์ด ๋ฐœ์ƒํ•˜์—ฌ ์‹œ์Šคํ…œ์ด ๋ถˆ์•ˆ์ •ํ•ด์ง‘๋‹ˆ๋‹ค.


๐Ÿš€ 2๋‹จ๊ณ„: ์„œ๋ฒ„ ์ˆ˜ ์ฆ๊ฐ€๋กœ๋Š” ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š” ๋ณ‘๋ชฉ ํ˜„์ƒ

๐Ÿ› ๏ธ ์กฐ์น˜ ์‚ฌํ•ญ

  • ์„œ๋ฒ„ ์ˆ˜๋ฅผ ๋Š˜๋ ค ์ˆ˜ํ‰ ํ™•์žฅ ์‹œ๋„
  • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์œผ๋กœ ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ

๐Ÿ’ฅ ์—ฌ์ „ํžˆ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ˆ˜ ์ œํ•œ
  • GC ์ง€์—ฐ์œผ๋กœ ์ธํ•œ ์‘๋‹ต ์‹œ๊ฐ„ ์ฆ๊ฐ€
  • ๋ถˆ๊ท ํ˜•ํ•œ ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ ๋ฌธ์ œ

โ— ๊ตํ›ˆ

๋‹จ์ˆœํžˆ ์„œ๋ฒ„ ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ๊ทผ๋ณธ์ ์ธ ๋ณ‘๋ชฉ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™•์žฅ์„ฑ ๋ฌธ์ œ์™€ GC ํŠœ๋‹์„ ๋จผ์ € ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿงฉ 3๋‹จ๊ณ„: ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋กœ์˜ ์ „ํ™˜

๐Ÿ’ก ์ „ํ™˜ ์ „๋žต

  • ๋ชจ๋†€๋ฆฌํ‹ฑ์„ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋ถ„๋ฆฌ
  • ์„œ๋น„์Šค๋ณ„ ๋…๋ฆฝ ๋ฐฐํฌ ๋ฐ ํ™•์žฅ
  • ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•œ ๋ฉ”์‹œ์ง€ ํ ๋„์ž… (์˜ˆ: RabbitMQ, Kafka)

๐ŸŒŸ ํšจ๊ณผ

  • ์„œ๋น„์Šค๋ณ„ ๋…๋ฆฝ์  ํ™•์žฅ ๊ฐ€๋Šฅ
  • ์žฅ์•  ๋ฐœ์ƒ ์‹œ ํŠน์ • ์„œ๋น„์Šค๋งŒ ์ค‘๋‹จ
  • ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌ ์†๋„ ํ–ฅ์ƒ

๐Ÿ’ก ์˜ˆ์‹œ ์ฝ”๋“œ: FastAPI๋ฅผ ์ด์šฉํ•œ ์„œ๋น„์Šค ๋ถ„๋ฆฌ

from fastapi import FastAPI

app = FastAPI()

@app.get("/user/{user_id}")
async def get_user(user_id: int):
    return {"user_id": user_id, "status": "active"}

๐Ÿ—ƒ๏ธ 4๋‹จ๊ณ„: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒค๋”ฉ ๋ฐ ์บ์‹ฑ ์ „๋žต

๐Ÿ—„๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฌธ์ œ ํ•ด๊ฒฐ ์ „๋žต

  • ์‚ฌ์šฉ์ž ID ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒค๋”ฉ
  • Redis๋ฅผ ํ™œ์šฉํ•œ ์บ์‹ฑ์œผ๋กœ ์ฝ๊ธฐ ๋ถ€ํ•˜ ๊ฐ์†Œ
  • ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋ถ„๋ฆฌ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ€ํ•˜ ๋ถ„์‚ฐ

๐Ÿ’ก ์˜ˆ์‹œ ์ฝ”๋“œ: Redis ์บ์‹ฑ

import redis

r = redis.Redis(host='localhost', port=6379, db=0)

# ๋ฐ์ดํ„ฐ ์บ์‹ฑ
r.set("user:1001", "active")

# ์บ์‹œ ๋ฐ์ดํ„ฐ ์กฐํšŒ
status = r.get("user:1001")
print(f"User 1001 status: {status.decode()}")

๐Ÿ” 5๋‹จ๊ณ„: ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์ž๋™ ํ™•์žฅ

๐Ÿ“Š ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ

  • Prometheus: ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘ ๋ฐ ์‹œ๊ฐํ™”
  • Grafana: ๋Œ€์‹œ๋ณด๋“œ ๊ตฌ์„ฑ ๋ฐ ๊ฒฝ๊ณ  ์„ค์ •

๐ŸŒ€ ์ž๋™ ํ™•์žฅ ์„ค์ •

  • CPU ์‚ฌ์šฉ๋ฅ ์ด 80% ์ด์ƒ์ผ ๋•Œ ์ž๋™์œผ๋กœ ์ธ์Šคํ„ด์Šค ์ถ”๊ฐ€
  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ ์ด 75% ์ดํ•˜๋กœ ๋–จ์–ด์ง€๋ฉด ์ธ์Šคํ„ด์Šค ์ถ•์†Œ

๐Ÿ’ก ์˜ˆ์‹œ ์ฝ”๋“œ: Prometheus ์„ค์ •

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: "my_service"
    static_configs:
      - targets: ["localhost:8000"]

๐Ÿ’ก ์ €์˜ ์ƒ๊ฐ

์‹œ์Šคํ…œ์„ ํ™•์žฅํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ดˆ๊ธฐ ์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ ํ™•์žฅ์„ฑ์„ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ดˆ๊ธฐ์—๋Š” ๋‹จ์ˆœํ•œ ๊ตฌ์กฐ๊ฐ€ ๋น ๋ฅธ ๊ฐœ๋ฐœ๊ณผ ๋ฐฐํฌ์— ์œ ๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,
์‚ฌ์šฉ์ž ์ˆ˜๊ฐ€ ๊ธ‰์ฆํ•˜๋ฉด์„œ ๊ตฌ์กฐ์  ํ•œ๊ณ„์— ๋ถ€๋”ชํžˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒค๋”ฉ์„ ํ†ตํ•œ ํ™•์žฅ์ด
๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ด์—ˆ๋‹ค๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ, ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ์ž๋™ ํ™•์žฅ์„ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์‹œ์Šคํ…œ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด
์•ˆ์ •์ ์ธ ์„œ๋น„์Šค ์šด์˜์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

์•ž์œผ๋กœ ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ๋Š” ์ดˆ๊ธฐ๋ถ€ํ„ฐ ํ™•์žฅ์„ฑ์„ ๊ณ ๋ คํ•œ ์„ค๊ณ„๋ฅผ ํ†ตํ•ด
๋น„์šฉ ์ ˆ๊ฐ๊ณผ ์•ˆ์ •์„ฑ ํ™•๋ณด๋ฅผ ๋™์‹œ์— ์ถ”๊ตฌํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.


 

์‹œ์Šคํ…œ ํ™•์žฅ์„ฑ, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒค๋”ฉ, ์บ์‹ฑ ์ „๋žต, ์ž๋™ ํ™•์žฅ, ๋ชจ๋‹ˆํ„ฐ๋ง,
Spring Boot, FastAPI, Redis, Prometheus, Grafana


 

โ€ป ์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค.
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/05   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•