์ฌ์ฉ์์ ์ค๋งํธํฐ ์ฌ์ฉ ๋ฐ์ดํฐ๋ฅผ ์์ง, ๋ถ์ํ์ฌ ์๋ฏธ ์๋ ์ธ์ฌ์ดํธ๋ฅผ ์ ๊ณตํ๋ MSA ๊ธฐ๋ฐ ๋ฐฑ์๋ ์๋น์ค์ ๋๋ค.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Client (Mobile) โ
โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Spring Cloud Gateway (8088) โ
โ - Routing โ
โ - Load Balancing โ
โ - API Aggregation โ
โโโโโฌโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
โ โ โ
โผ โผ โผ
โโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ
โ User โ โ Usage โ โ Insight โ
โ Service โ โ Service โ โ Service โ
โ (8080) โ โ (8080) โ โ (8080) โ
โโโโโโฌโโโโโ โโโโโโโโฌโโโโโโโโ โโโโโโโโฌโโโโโโโ
โ โ โ
โผ โผ โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Infrastructure Layer โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โPostgreSQLโ โ Redis โ โ Kafka (Event Bus) โ โ
โ โ (DB) โ โ (Cache) โ โ - user_signup โ โ
โ โ โ โ โ โ - user_login โ โ
โ โ โ โ โ โ - usage_events โ โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
- ์ฌ์ฉ์ ์ธ์ฆ ๋ฐ ๊ด๋ฆฌ
- JWT ๊ธฐ๋ฐ ์ธ์ฆ
- Redis ์ธ์ ๊ด๋ฆฌ (DB 0)
- Kafka ์ด๋ฒคํธ ๋ฐํ (user_signup, user_login, user_logout ๋ฑ)
์ฃผ์ ๊ธฐ๋ฅ:
- ํ์๊ฐ์ /๋ก๊ทธ์ธ
- ํ๋กํ ๊ด๋ฆฌ
- ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ
- ๊ณ์ ๋นํ์ฑํ
- ์ฑ ์ฌ์ฉ ๋ฐ์ดํฐ ์์ง ๋ฐ ๋ถ์
- ์ค์๊ฐ ์ฌ์ฉ๋ ์ง๊ณ
- ์ผ์ผ ๋ฐฐ์น ์ฒ๋ฆฌ
- Redis ์บ์ฑ (DB 1)
์ฃผ์ ๊ธฐ๋ฅ:
- ์ฑ ์ฌ์ฉ ์ด๋ฒคํธ ์์ง (FOREGROUND/BACKGROUND)
- ์ค์๊ฐ ํต๊ณ (24์๊ฐ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ)
- ์นดํ ๊ณ ๋ฆฌ๋ณ ์ฌ์ฉ ์๊ฐ ์ง๊ณ
- Top 3 ์ฑ ์ถ์
- Spring Cloud Gateway
- ๋ผ์ฐํ ๋ฐ ๋ก๋ ๋ฐธ๋ฐ์ฑ
- API ๊ฒ์ดํธ์จ์ด
๋ผ์ฐํ ๊ท์น:
/users/**โ UserService/usage/**โ UsageService/insights/**โ InsightService
- Python AI ๋ชจ๋ธ๋ง ํ๋ก์ ํธ์์ ์ด์๋ ํต๊ณ ๊ธฐ๋ฐ ์ฌ์ฉ์ ๋ถ๋ฅ ๋ก์ง์ ๋ด๋นํฉ๋๋ค.
- ์ฌ์ฉ์ ํจํด ๋ถ์ ๋ฐ ์ธ์ฌ์ดํธ ์์ฑ
| ๋ถ๋ฅ | ๊ธฐ์ |
|---|---|
| ์ธ์ด | Java 21 |
| ํ๋ ์์ํฌ | Spring Boot 3.2.0, Spring Cloud Gateway |
| ๋น๋ ๋๊ตฌ | Gradle 8.5 |
| ๋ฐ์ดํฐ๋ฒ ์ด์ค | PostgreSQL 15, TimescaleDB |
| ์บ์ | Redis 7 |
| ๋ฉ์์ง ํ | Apache Kafka 3.6 |
| ์ปจํ ์ด๋ | Docker, Kubernetes |
| ๋ชจ๋ํฐ๋ง | Spring Actuator, Prometheus, Grafana |
- Java 21
- Docker & Docker Compose
- Kubernetes (Docker Desktop ๋๋ Minikube)
- kubectl
# ์ธํ๋ผ ์๋น์ค ์คํ (PostgreSQL, Redis, Kafka)
docker-compose -f build-docker-compose.yml up -d# 1. Docker ์ด๋ฏธ์ง ๋น๋
./build-images.sh
# 2. ๋ค์์คํ์ด์ค ์์ฑ
kubectl apply -f k8s/namespace.yaml
# 3. Secrets ์์ฑ
kubectl apply -f k8s/secrets/
# 4. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฐํฌ
kubectl apply -f k8s/databases/
# 5. ์ ํ๋ฆฌ์ผ์ด์
๋ฐฐํฌ
kubectl apply -f k8s/apps/
# 6. ๋ฐฐํฌ ์ํ ํ์ธ
kubectl get pods -n screentimeai
kubectl get svc -n screentimeai# Gateway๋ฅผ ํตํ ์ฌ์ฉ์ ๋ฑ๋ก
curl -X POST http://localhost:30088/users/signup \
-H "Content-Type: application/json" \
-d '{
"nickname": "testuser",
"password": "password123",
"category": "STUDENT"
}'
# ๋ก๊ทธ์ธ
curl -X POST http://localhost:30088/users/login \
-H "Content-Type: application/json" \
-d '{
"nickname": "testuser",
"password": "password123"
}'backend/
โโโ UserService/ # ์ฌ์ฉ์ ์๋น์ค
โ โโโ src/
โ โโโ build.gradle
โ โโโ Dockerfile
โ โโโ README.md
โโโ UsageService/ # ์ฌ์ฉ๋ ์ถ์ ์๋น์ค
โ โโโ src/
โ โโโ build.gradle
โ โโโ Dockerfile
โ โโโ README.md
โโโ InsightService/ # ์ธ์ฌ์ดํธ ์๋น์ค (์งํ์ค)
โ โโโ src/
โ โโโ build.gradle
โ โโโ README.md
โโโ gateway/ # API Gateway
โ โโโ src/
โ โโโ build.gradle
โ โโโ Dockerfile
โ โโโ README.md
โโโ k8s/ # Kubernetes ๋ฐฐํฌ ์ค์
โ โโโ namespace.yaml
โ โโโ secrets/
โ โโโ databases/
โ โโโ apps/
โ โโโ README.md
โโโ scripts/ # ์ ํธ๋ฆฌํฐ ์คํฌ๋ฆฝํธ
โโโ build-images.sh # Docker ์ด๋ฏธ์ง ๋น๋ ์คํฌ๋ฆฝํธ
โโโ build-docker-compose.yml
โโโ settings.gradle # Multi-module Gradle ์ค์
โโโ README.md # ์ด ๋ฌธ์
๊ฐ ์๋น์ค์ application.yml์์ ๋ค์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉ:
| ํ๊ฒฝ ๋ณ์ | ์ค๋ช | ๊ธฐ๋ณธ๊ฐ |
|---|---|---|
SPRING_PROFILES_ACTIVE |
ํ์ฑ ํ๋กํ์ผ | default |
SPRING_DATA_REDIS_HOST |
Redis ํธ์คํธ | localhost |
SPRING_DATA_REDIS_PORT |
Redis ํฌํธ | 6379 |
SPRING_DATA_REDIS_PASSWORD |
Redis ๋น๋ฐ๋ฒํธ | - |
SPRING_DATASOURCE_URL |
DB ์ฐ๊ฒฐ URL | - |
SPRING_KAFKA_BOOTSTRAP_SERVERS |
Kafka ๋ธ๋ก์ปค | localhost:9092 |
๊ฐ ์๋น์ค๋ Spring Actuator๋ฅผ ํตํด ํฌ์ค ์ฒดํฌ ์๋ํฌ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค:
# UserService
curl http://localhost:8081/actuator/health
# UsageService
curl http://localhost:8082/actuator/health
# Gateway
curl http://localhost:8088/actuator/health# Pod ์ํ ํ์ธ
kubectl get pods -n screentimeai
# ์๋น์ค ๋ก๊ทธ ํ์ธ
kubectl logs -f <pod-name> -n screentimeai
# Pod ๋๋ฒ๊น
kubectl describe pod <pod-name> -n screentimeai# ์ธํ๋ผ ์๋น์ค ์คํ
docker-compose -f build-docker-compose.yml up -d
# ํ
์คํธ ์คํ
cd UserService
./gradlew testcd UsageService
./gradlew test# ๋ฃจํธ ๋๋ ํ ๋ฆฌ์์
./gradlew test# 1. ์ด๋ฏธ์ง ๋น๋
./build-images.sh
# 2. Kubernetes ๋ฆฌ์์ค ์ ์ฉ
kubectl apply -f k8s/namespace.yaml
kubectl apply -f k8s/secrets/
kubectl apply -f k8s/databases/
kubectl apply -f k8s/apps/
# 3. ๋ฐฐํฌ ํ์ธ
kubectl get all -n screentimeai
kubectl get all -n db# Gateway (NodePort)
curl http://localhost:30088/users/health
# Port Forward๋ก ๊ฐ๋ณ ์๋น์ค ์ ๊ทผ
kubectl port-forward svc/userservice 8081:8080 -n screentimeai
curl http://localhost:8081/actuator/health- Event Storming Model: MSAez
- Database Setup: README_DB.md
- Kubernetes ๋ฐฐํฌ ๊ฐ์ด๋: k8s/README.md
- Kubernetes ๋ก์ปฌ ๋ฐฐํฌ: k8s/DEPLOY.md
- ADR-001 JVM ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ: docs/adr/ADR-001
- UserService: UserService/README.md
- UsageService: UsageService/README.md
- Gateway: gateway/README.md
# 1. ์ด๋ฏธ์ง ์ฌ๋น๋
./build-images.sh
# 2. Deployment ์ฌ์์ (์ด๋ฏธ์ง๋ latest ํ๊ทธ ์ฌ์ฉ)
kubectl rollout restart deployment userservice -n screentimeai
kubectl rollout restart deployment usageservice -n screentimeai
kubectl rollout restart deployment gateway -n screentimeai
# 3. ์ฌ์์ ์ํ ํ์ธ
kubectl rollout status deployment userservice -n screentimeai# ConfigMap ์์ ํ ์ ์ฉ
kubectl apply -f k8s/apps/userservice.yaml
# Pod ์ฌ์์ (ConfigMap ๋ณ๊ฒฝ์ฌํญ ๋ฐ์)
kubectl rollout restart deployment userservice -n screentimeai- Feature ๋ธ๋์น ์์ฑ (
git checkout -b feature/amazing-feature) - ๋ณ๊ฒฝ ์ฌํญ ์ปค๋ฐ (
git commit -m 'Add amazing feature') - ๋ธ๋์น ํธ์ (
git push origin feature/amazing-feature) - Pull Request ์์ฑ
- โ UserService: ์ฌ์ฉ์ ์ธ์ฆ ๋ฐ ๊ด๋ฆฌ
- โ UsageService: ์ฑ ์ฌ์ฉ ๋ฐ์ดํฐ ์์ง ๋ฐ ๋ถ์
- โ Gateway: API Gateway ๊ตฌ์ฑ
- โ Kubernetes ๋ฐฐํฌ ์ค์
- โ Redis ์ฐ๊ฒฐ ๋ฌธ์ ํด๊ฒฐ (Config ํด๋์ค password ์ค์ )
- โ Multi-module Gradle ํ๋ก์ ํธ ๊ตฌ์ฑ
- โ
JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ ์ต์ ํ:
-Xmxํ๋์ฝ๋ฉ ์ ๊ฑฐ,-XX:MaxRAMPercentage๋์ - โ K8s QoS ์ค๊ณ: gateway/userservice Guaranteed, insightservice Burstable(๋ฎ์ ์ฐ์ ์์)
- โ
gateway Netty Off-Heap ํต์ :
MaxDirectMemorySize,MaxMetaspaceSize๋ช ์ - โ
ENTRYPOINT
exec๋ฐฉ์ ๊ต์ฒด๋ก Graceful Shutdown ๋ณด์ฅ - โ JAVA_OPTS ConfigMap ์ธ๋ถํ (์ฌ๋น๋ ์์ด JVM ํ๋ ๊ฐ๋ฅ)
- โ Prometheus + Grafana ๋ชจ๋ํฐ๋ง ์ธํ๋ผ ๊ตฌ์ฑ
- โ k6 ๋ถํ ํ ์คํธ ์คํฌ๋ฆฝํธ ์ถ๊ฐ
- โ ํ๊ฒฝ๋ณ์ ์ธ๋ถํ ์ ๋ฆฌ (Kafka broker, Redis host ํ๋์ฝ๋ฉ ์ ๊ฑฐ)
- โณ Istio Service Mesh ๋์
- โณ Istio Gateway ๋ฐ VirtualService ๊ตฌ์ฑ
- โณ ํธ๋ํฝ ๊ด๋ฆฌ ๋ฐ ์๋น์ค ๊ฐ mTLS
์ด ํ๋ก์ ํธ๋ MIT ๋ผ์ด์ ์ค๋ฅผ ๋ฐ๋ฆ ๋๋ค.
- Backend Development
- Infrastructure & DevOps
- Data Analysis
ํ๋ก์ ํธ ๊ด๋ จ ๋ฌธ์์ฌํญ์ ์ด์๋ฅผ ์์ฑํด ์ฃผ์ธ์.


