wonho 3da9303091 백엔드 서비스 설정 및 배포 구성 개선
- CORS 설정 업데이트 (모든 서비스)
- Swagger UI 경로 및 설정 수정
- Kubernetes 배포 설정 개선 (Ingress, Deployment)
- distribution-service SecurityConfig 및 Controller 개선
- IntelliJ 실행 프로파일 업데이트
- 컨테이너 이미지 빌드 문서화 (deployment/container/build-image.md)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-29 15:55:30 +09:00

8.1 KiB

백엔드 컨테이너 이미지 빌드 결과

개요

KT 이벤트 마케팅 서비스의 백엔드 마이크로서비스들에 대한 컨테이너 이미지를 생성하였습니다.

작업 일시

  • 날짜: 2025-10-29
  • 빌드 환경: Windows (MINGW64_NT-10.0-19045)

서비스 목록 확인

settings.gradle에서 확인한 서비스 목록:

rootProject.name = 'kt-event-marketing'

include 'common'
include 'user-service'
include 'event-service'
include 'ai-service'
include 'distribution-service'
include 'participation-service'
include 'analytics-service'

빌드 대상 서비스 (6개):

  • user-service (Java/Spring Boot)
  • event-service (Java/Spring Boot)
  • ai-service (Java/Spring Boot)
  • distribution-service (Java/Spring Boot)
  • participation-service (Java/Spring Boot)
  • analytics-service (Java/Spring Boot)

제외 대상:

  • common: 공통 라이브러리 모듈 (독립 실행 서비스 아님)
  • content-service: Python 기반 서비스 (별도 빌드 필요)

bootJar 설정 확인

모든 Java 서비스의 build.gradle에 bootJar 설정이 올바르게 구성되어 있음을 확인:

서비스명 JAR 파일명 경로
user-service user-service.jar user-service/build/libs/user-service.jar
event-service event-service.jar event-service/build/libs/event-service.jar
ai-service ai-service.jar ai-service/build/libs/ai-service.jar
distribution-service distribution-service.jar distribution-service/build/libs/distribution-service.jar
participation-service participation-service.jar participation-service/build/libs/participation-service.jar
analytics-service analytics-service.jar analytics-service/build/libs/analytics-service.jar

Dockerfile 생성

파일 위치: deployment/container/Dockerfile-backend

Dockerfile 구성:

# Build stage
FROM openjdk:23-oraclelinux8 AS builder
ARG BUILD_LIB_DIR
ARG ARTIFACTORY_FILE
COPY ${BUILD_LIB_DIR}/${ARTIFACTORY_FILE} app.jar

# Run stage
FROM openjdk:23-slim
ENV USERNAME=k8s
ENV ARTIFACTORY_HOME=/home/${USERNAME}
ENV JAVA_OPTS=""

# Add a non-root user
RUN adduser --system --group ${USERNAME} && \
    mkdir -p ${ARTIFACTORY_HOME} && \
    chown ${USERNAME}:${USERNAME} ${ARTIFACTORY_HOME}

WORKDIR ${ARTIFACTORY_HOME}
COPY --from=builder app.jar app.jar
RUN chown ${USERNAME}:${USERNAME} app.jar

USER ${USERNAME}

ENTRYPOINT [ "sh", "-c" ]
CMD ["java ${JAVA_OPTS} -jar app.jar"]

주요 특징:

  • Multi-stage 빌드: 빌드 이미지와 런타임 이미지 분리
  • Base Image: openjdk:23-slim (경량화)
  • 보안: 비root 사용자(k8s)로 실행
  • 플랫폼: linux/amd64

Gradle 빌드 실행

실행 명령:

./gradlew clean build -x test

빌드 결과:

  • 상태: BUILD SUCCESSFUL
  • 소요 시간: 33초
  • 실행된 태스크: 56개

컨테이너 이미지 빌드

병렬 빌드 전략

서브 에이전트를 활용하여 6개 서비스를 동시에 빌드하여 시간 단축

1. user-service

빌드 명령:

DOCKER_FILE=deployment/container/Dockerfile-backend
docker build \
  --platform linux/amd64 \
  --build-arg BUILD_LIB_DIR="user-service/build/libs" \
  --build-arg ARTIFACTORY_FILE="user-service.jar" \
  -f ${DOCKER_FILE} \
  -t user-service:latest .

결과:

  • 상태: SUCCESS
  • 이미지 ID: fb07547604be
  • 이미지 크기: 1.09GB
  • Image SHA: sha256:fb07547604bee7e8ff69e56e8423299b7dec277e80d865ee5013ddd876a0b4c6

2. event-service

빌드 명령:

DOCKER_FILE=deployment/container/Dockerfile-backend
docker build \
  --platform linux/amd64 \
  --build-arg BUILD_LIB_DIR="event-service/build/libs" \
  --build-arg ARTIFACTORY_FILE="event-service.jar" \
  -f ${DOCKER_FILE} \
  -t event-service:latest .

결과:

  • 상태: SUCCESS
  • 이미지 ID: 191a9882a628
  • 이미지 크기: 1.08GB
  • 빌드 시간: ~20초

3. ai-service

빌드 명령:

DOCKER_FILE=deployment/container/Dockerfile-backend
docker build \
  --platform linux/amd64 \
  --build-arg BUILD_LIB_DIR="ai-service/build/libs" \
  --build-arg ARTIFACTORY_FILE="ai-service.jar" \
  -f ${DOCKER_FILE} \
  -t ai-service:latest .

결과:

  • 상태: SUCCESS
  • 이미지 ID: 498feb888dc5
  • 이미지 크기: 1.08GB
  • Image SHA: sha256:498feb888dc58a98715841c4e50f191bc8434eccd12baefa79e82b0e44a5bc40

4. distribution-service

빌드 명령:

DOCKER_FILE=deployment/container/Dockerfile-backend
docker build \
  --platform linux/amd64 \
  --build-arg BUILD_LIB_DIR="distribution-service/build/libs" \
  --build-arg ARTIFACTORY_FILE="distribution-service.jar" \
  -f ${DOCKER_FILE} \
  -t distribution-service:latest .

결과:

  • 상태: SUCCESS
  • 이미지 ID: e0ad31c51b63
  • 이미지 크기: 1.08GB
  • Image SHA: sha256:e0ad31c51b63b44d67f017cca8a729ae9cbb5e9e9503feddb308c09f19b70fba
  • 빌드 시간: ~60초

5. participation-service

빌드 명령:

DOCKER_FILE=deployment/container/Dockerfile-backend
docker build \
  --platform linux/amd64 \
  --build-arg BUILD_LIB_DIR="participation-service/build/libs" \
  --build-arg ARTIFACTORY_FILE="participation-service.jar" \
  -f ${DOCKER_FILE} \
  -t participation-service:latest .

결과:

  • 상태: SUCCESS
  • 이미지 ID: 9bd60358659b
  • 이미지 크기: 1.04GB
  • Image SHA: sha256:9bd60358659b528190edcab699152b5126dc906070e05d355310303ac292f02b
  • 빌드 시간: ~37초

6. analytics-service

빌드 명령:

DOCKER_FILE=deployment/container/Dockerfile-backend
docker build \
  --platform linux/amd64 \
  --build-arg BUILD_LIB_DIR="analytics-service/build/libs" \
  --build-arg ARTIFACTORY_FILE="analytics-service.jar" \
  -f ${DOCKER_FILE} \
  -t analytics-service:latest .

결과:

  • 상태: SUCCESS
  • 이미지 ID: 33b53299ec16
  • 이미지 크기: 1.08GB
  • Image SHA: sha256:33b53299ec16e0021a9adca4fb32535708021073df03c30b8a0ea335348547de

생성된 이미지 확인

확인 명령:

docker images | grep -E "(user-service|event-service|ai-service|distribution-service|participation-service|analytics-service)" | grep latest

확인 결과:

event-service                                                            latest    191a9882a628   39 seconds ago   1.08GB
ai-service                                                               latest    498feb888dc5   46 seconds ago   1.08GB
analytics-service                                                        latest    33b53299ec16   46 seconds ago   1.08GB
user-service                                                             latest    fb07547604be   47 seconds ago   1.09GB
participation-service                                                    latest    9bd60358659b   48 seconds ago   1.04GB
distribution-service                                                     latest    e0ad31c51b63   48 seconds ago   1.08GB

빌드 결과 요약

서비스명 이미지 태그 이미지 ID 크기 상태
user-service user-service:latest fb07547604be 1.09GB
event-service event-service:latest 191a9882a628 1.08GB
ai-service ai-service:latest 498feb888dc5 1.08GB
distribution-service distribution-service:latest e0ad31c51b63 1.08GB
participation-service participation-service:latest 9bd60358659b 1.04GB
analytics-service analytics-service:latest 33b53299ec16 1.08GB

총 6개 서비스 이미지 빌드 성공

다음 단계

생성된 이미지를 사용하여 다음 작업을 진행할 수 있습니다:

  1. 로컬 테스트: Docker Compose 또는 개별 컨테이너 실행
  2. ACR 푸시: Azure Container Registry에 이미지 업로드
  3. AKS 배포: Kubernetes 클러스터에 배포
  4. CI/CD 통합: GitHub Actions 또는 Jenkins 파이프라인 연동

참고사항

  • 모든 이미지는 linux/amd64 플랫폼용으로 빌드됨
  • 보안을 위해 비root 사용자(k8s)로 실행 구성
  • Multi-stage 빌드로 이미지 크기 최적화
  • Java 23 (OpenJDK) 기반 런타임 사용
  • content-service(Python)는 별도의 Dockerfile로 빌드 필요