mirror of
https://github.com/ktds-dg0501/kt-event-marketing.git
synced 2025-12-06 22:06:23 +00:00
- 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>
268 lines
8.1 KiB
Markdown
268 lines
8.1 KiB
Markdown
# 백엔드 컨테이너 이미지 빌드 결과
|
|
|
|
## 개요
|
|
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 구성:**
|
|
```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 빌드 실행
|
|
|
|
**실행 명령:**
|
|
```bash
|
|
./gradlew clean build -x test
|
|
```
|
|
|
|
**빌드 결과:**
|
|
- 상태: ✅ BUILD SUCCESSFUL
|
|
- 소요 시간: 33초
|
|
- 실행된 태스크: 56개
|
|
|
|
## 컨테이너 이미지 빌드
|
|
|
|
### 병렬 빌드 전략
|
|
서브 에이전트를 활용하여 6개 서비스를 동시에 빌드하여 시간 단축
|
|
|
|
### 1. user-service
|
|
|
|
**빌드 명령:**
|
|
```bash
|
|
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
|
|
|
|
**빌드 명령:**
|
|
```bash
|
|
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
|
|
|
|
**빌드 명령:**
|
|
```bash
|
|
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
|
|
|
|
**빌드 명령:**
|
|
```bash
|
|
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
|
|
|
|
**빌드 명령:**
|
|
```bash
|
|
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
|
|
|
|
**빌드 명령:**
|
|
```bash
|
|
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
|
|
|
|
## 생성된 이미지 확인
|
|
|
|
**확인 명령:**
|
|
```bash
|
|
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로 빌드 필요
|