백엔드 서비스 AKS 배포 및 설정 완료

- Kubernetes 매니페스트 파일 생성 (7개 서비스)
  * user-service, event-service, ai-service, content-service
  * participation-service, analytics-service, distribution-service
  * 공통 리소스: Ingress, ConfigMap, Secret, ImagePullSecret

- analytics-service 배포 문제 해결
  * Hibernate PostgreSQL dialect 추가
  * DB 자격증명 수정 (eventuser/Hi5Jessica!)
  * analytics_db 데이터베이스 생성

- content-service Probe 경로 수정
  * Context path 포함 (/api/v1/content/actuator/health)

- distribution-service 신규 배포
  * Docker 이미지 빌드 및 ACR 푸시
  * K8s 매니페스트 생성 및 배포
  * Ingress 경로 추가 (/distribution)

- Gradle bootJar 설정 추가
  * 5개 서비스에 archiveFileName 설정

- 배포 가이드 문서 추가
  * deployment/k8s/deploy-k8s-guide.md
  * claude/deploy-k8s-back.md
  * deployment/container/build-image.md 업데이트

배포 완료: 모든 백엔드 서비스(7개) 정상 실행 중

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
wonho
2025-10-29 10:59:09 +09:00
parent 23265b5849
commit df04f85346
57 changed files with 3478 additions and 353 deletions
+43 -43
View File
@@ -5,23 +5,23 @@ spring:
# Redis Configuration
data:
redis:
host: 20.214.210.71
port: 6379
password: Hi5Jessica!
database: 3
timeout: 3000
host: ${REDIS_HOST:20.214.210.71}
port: ${REDIS_PORT:6379}
password: ${REDIS_PASSWORD:Hi5Jessica!}
database: ${REDIS_DATABASE:3}
timeout: ${REDIS_TIMEOUT:3000}
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 2
max-wait: -1ms
max-active: ${REDIS_POOL_MAX:8}
max-idle: ${REDIS_POOL_IDLE:8}
min-idle: ${REDIS_POOL_MIN:2}
max-wait: ${REDIS_POOL_WAIT:-1ms}
# Kafka Consumer Configuration
kafka:
bootstrap-servers: 4.230.50.63:9092
bootstrap-servers: ${KAFKA_BOOTSTRAP_SERVERS:4.230.50.63:9092}
consumer:
group-id: ai-service-consumers
group-id: ${KAFKA_CONSUMER_GROUP:ai-service-consumers}
auto-offset-reset: earliest
enable-auto-commit: false
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
@@ -35,7 +35,7 @@ spring:
# Server Configuration
server:
port: 8083
port: ${SERVER_PORT:8083}
servlet:
context-path: /
encoding:
@@ -45,17 +45,17 @@ server:
# JWT Configuration
jwt:
secret: kt-event-marketing-secret-key-for-development-only-please-change-in-production
access-token-validity: 604800000
refresh-token-validity: 86400
secret: ${JWT_SECRET:kt-event-marketing-secret-key-for-development-only-please-change-in-production}
access-token-validity: ${JWT_ACCESS_TOKEN_VALIDITY:604800000}
refresh-token-validity: ${JWT_REFRESH_TOKEN_VALIDITY:86400}
# CORS Configuration
cors:
allowed-origins: http://localhost:*
allowed-methods: GET,POST,PUT,DELETE,OPTIONS,PATCH
allowed-headers: "*"
allow-credentials: true
max-age: 3600
allowed-origins: ${CORS_ALLOWED_ORIGINS:http://localhost:*}
allowed-methods: ${CORS_ALLOWED_METHODS:GET,POST,PUT,DELETE,OPTIONS,PATCH}
allowed-headers: ${CORS_ALLOWED_HEADERS:*}
allow-credentials: ${CORS_ALLOW_CREDENTIALS:true}
max-age: ${CORS_MAX_AGE:3600}
# Actuator Configuration
management:
@@ -91,39 +91,39 @@ springdoc:
# Logging Configuration
logging:
level:
root: INFO
com.kt.ai: DEBUG
org.springframework.kafka: INFO
org.springframework.data.redis: INFO
io.github.resilience4j: DEBUG
root: ${LOG_LEVEL_ROOT:INFO}
com.kt.ai: ${LOG_LEVEL_AI:DEBUG}
org.springframework.kafka: ${LOG_LEVEL_KAFKA:INFO}
org.springframework.data.redis: ${LOG_LEVEL_REDIS:INFO}
io.github.resilience4j: ${LOG_LEVEL_RESILIENCE4J:DEBUG}
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
file:
name: logs/ai-service.log
name: ${LOG_FILE_NAME:logs/ai-service.log}
logback:
rollingpolicy:
max-file-size: 10MB
max-history: 7
total-size-cap: 100MB
max-file-size: ${LOG_FILE_MAX_SIZE:10MB}
max-history: ${LOG_FILE_MAX_HISTORY:7}
total-size-cap: ${LOG_FILE_TOTAL_CAP:100MB}
# Kafka Topics Configuration
kafka:
topics:
ai-job: ai-event-generation-job
ai-job-dlq: ai-event-generation-job-dlq
ai-job: ${KAFKA_TOPICS_AI_JOB:ai-event-generation-job}
ai-job-dlq: ${KAFKA_TOPICS_AI_JOB_DLQ:ai-event-generation-job-dlq}
# AI API Configuration (실제 API 사용)
ai:
provider: CLAUDE
provider: ${AI_PROVIDER:CLAUDE}
claude:
api-url: https://api.anthropic.com/v1/messages
api-key: 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
anthropic-version: 2023-06-01
model: claude-sonnet-4-5-20250929
max-tokens: 4096
temperature: 0.7
timeout: 300000
api-url: ${AI_CLAUDE_API_URL:https://api.anthropic.com/v1/messages}
api-key: ${AI_CLAUDE_API_KEY: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}
anthropic-version: ${AI_CLAUDE_ANTHROPIC_VERSION:2023-06-01}
model: ${AI_CLAUDE_MODEL:claude-sonnet-4-5-20250929}
max-tokens: ${AI_CLAUDE_MAX_TOKENS:4096}
temperature: ${AI_CLAUDE_TEMPERATURE:0.7}
timeout: ${AI_CLAUDE_TIMEOUT:300000}
# Circuit Breaker Configuration
resilience4j:
@@ -162,7 +162,7 @@ resilience4j:
# Redis Cache TTL Configuration (seconds)
cache:
ttl:
recommendation: 86400 # 24 hours
job-status: 86400 # 24 hours
trend: 3600 # 1 hour
fallback: 604800 # 7 days
recommendation: ${CACHE_TTL_RECOMMENDATION:86400} # 24 hours
job-status: ${CACHE_TTL_JOB_STATUS:86400} # 24 hours
trend: ${CACHE_TTL_TREND:3600} # 1 hour
fallback: ${CACHE_TTL_FALLBACK:604800} # 7 days