ํฐ์คํ ๋ฆฌ ๋ทฐ
๐๏ธ 100๋ง ์ฌ์ฉ์ ํ์ฅ์ ์ํ ์ํคํ ์ฒ: ๋ด๊ฐ ๋ฏธ๋ฆฌ ์์๋๋ผ๋ฉด ์ข์์ ๊ฒ๋ค
octo54 2025. 5. 20. 10:59
๐๏ธ 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
- ํ๋ก ํธ์๋
- fastapi
- ์น๊ฐ๋ฐ
- github
- SEO์ต์ ํ
- ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ
- Python
- ํ๋ก ํธ์๋๋ฉด์
- REACT
- ๋ฐฑ์๋๊ฐ๋ฐ
- Docker
- gatsbyjs
- PostgreSQL
- nextJS
- Prisma
- CI/CD
- Next.js
- AI์ฑ๋ด
- App Router
- LangChain
- seo ์ต์ ํ 10๊ฐ
- NestJS
- Ktor
- ๊ฐ๋ฐ๋ธ๋ก๊ทธ
- nodejs
- kotlin
- rag
- SEO ์ต์ ํ
- llm
- Webpack
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |