7.3 KiB
7.3 KiB
Event Service 컨테이너 이미지 빌드 가이드
1. 빌드 일시
- 빌드 날짜: 2025-10-28
- 빌드 시간: 14:35 KST
2. 수정 사항
2.1 타입 불일치 수정
Event Service 컴파일 오류 해결을 위해 다음 파일들을 수정했습니다:
UserPrincipal.java (common 모듈)
- 파일 경로:
common/src/main/java/com/kt/event/common/security/UserPrincipal.java - 수정 내용: userId와 storeId 타입을 Long에서 UUID로 변경
- 변경 이유: EventService의 메서드 시그니처가 UUID를 기대하므로 일관성 유지
// Before
private final Long userId;
private final Long storeId;
// After
private final UUID userId;
private final UUID storeId;
JwtTokenProvider.java (common 모듈)
- 파일 경로:
common/src/main/java/com/kt/event/common/security/JwtTokenProvider.java - 수정 내용: JWT 토큰 파싱 시 Long.parseLong()을 UUID.fromString()으로 변경
- 변경 이유: UserPrincipal의 타입 변경에 따른 파싱 로직 수정
// Before
Long userId = Long.parseLong(claims.getSubject());
Long storeId = storeIdStr != null ? Long.parseLong(storeIdStr) : null;
// After
UUID userId = UUID.fromString(claims.getSubject());
UUID storeId = storeIdStr != null ? UUID.fromString(storeIdStr) : null;
event-service/build.gradle
- 수정 내용: bootJar 설정 추가
- 변경 이유: 컨테이너 이미지 빌드를 위한 JAR 파일명 명시
bootJar {
archiveFileName = 'event-service.jar'
}
3. 빌드 명령어
3.1 Common 모듈 컴파일
./gradlew common:compileJava
결과: BUILD SUCCESSFUL in 6s
3.2 Event Service 컴파일
./gradlew event-service:compileJava
결과: BUILD SUCCESSFUL in 6s
3.3 Event Service JAR 빌드
./gradlew event-service:bootJar
결과:
- BUILD SUCCESSFUL in 5s
- JAR 파일 생성:
event-service/build/libs/event-service.jar(94MB)
3.4 Docker 이미지 빌드
docker build \
--platform linux/amd64 \
--build-arg BUILD_LIB_DIR="event-service/build/libs" \
--build-arg ARTIFACTORY_FILE="event-service.jar" \
-f deployment/container/Dockerfile-backend \
-t event-service:latest .
결과: 이미지 빌드 성공
- Image ID: bbeecf2ccaf2
- Size: 1.08GB
- Created: 19 seconds ago
4. 빌드 검증
4.1 JAR 파일 확인
ls -lh event-service/build/libs/
출력:
-rw-r--r-- 1 KTDS 197121 94M 10월 28 14:35 event-service.jar
4.2 Docker 이미지 확인
docker images | grep event-service
출력:
event-service latest bbeecf2ccaf2 19 seconds ago 1.08GB
5. Dockerfile 구조
파일 위치: deployment/container/Dockerfile-backend
빌드 스테이지 (Build Stage)
- Base Image: openjdk:23-oraclelinux8
- 작업: JAR 파일 복사
실행 스테이지 (Run Stage)
- Base Image: openjdk:23-slim
- 사용자: k8s (non-root user)
- 작업 디렉토리: /home/k8s
- 진입점:
java ${JAVA_OPTS} -jar app.jar
6. 컨테이너 실행 가이드
6.1 기본 실행
docker run -d \
--name event-service \
-p 8082:8082 \
-e SPRING_PROFILES_ACTIVE=dev \
-e SERVER_PORT=8082 \
event-service:latest
6.2 환경변수 설정
Event Service 실행을 위한 주요 환경변수:
필수 환경변수
SERVER_PORT: 서버 포트 (기본값: 8082)DB_HOST: PostgreSQL 호스트DB_PORT: PostgreSQL 포트 (기본값: 5432)DB_NAME: 데이터베이스 이름DB_USERNAME: 데이터베이스 사용자명DB_PASSWORD: 데이터베이스 비밀번호REDIS_HOST: Redis 호스트REDIS_PORT: Redis 포트 (기본값: 6379)REDIS_PASSWORD: Redis 비밀번호KAFKA_BOOTSTRAP_SERVERS: Kafka 브로커 주소JWT_SECRET: JWT 서명 키 (최소 32자)
선택 환경변수
DISTRIBUTION_SERVICE_URL: Distribution Service URLJAVA_OPTS: JVM 옵션
6.3 Docker Compose 실행 예시
services:
event-service:
image: event-service:latest
container_name: event-service
ports:
- "8082:8082"
environment:
- SPRING_PROFILES_ACTIVE=prod
- SERVER_PORT=8082
- DB_HOST=your-db-host
- DB_PORT=5432
- DB_NAME=event_db
- DB_USERNAME=event_user
- DB_PASSWORD=your-password
- REDIS_HOST=your-redis-host
- REDIS_PORT=6379
- REDIS_PASSWORD=your-redis-password
- KAFKA_BOOTSTRAP_SERVERS=your-kafka:9092
- JWT_SECRET=your-jwt-secret-key-minimum-32-characters
- DISTRIBUTION_SERVICE_URL=http://distribution-service:8086
restart: unless-stopped
7. 헬스체크
7.1 Spring Boot Actuator
curl http://localhost:8082/actuator/health
예상 응답:
{
"status": "UP",
"components": {
"ping": {
"status": "UP"
},
"db": {
"status": "UP"
},
"redis": {
"status": "UP"
}
}
}
7.2 Swagger UI
http://localhost:8082/swagger-ui/index.html
8. 빌드 결과 요약
서비스 정보
- 서비스명: event-service
- 포트: 8082
- JAR 크기: 94MB
- 이미지 크기: 1.08GB
- Base Image: openjdk:23-slim
- Platform: linux/amd64
빌드 통계
- Common 컴파일: 6초
- Event Service 컴파일: 6초
- JAR 빌드: 5초
- Docker 이미지 빌드: 약 120초
주요 의존성
- Spring Boot Actuator
- Spring Kafka
- Spring Data Redis
- Spring Cloud OpenFeign
- PostgreSQL Driver
- Jackson
9. 트러블슈팅
9.1 컴파일 오류 해결
증상: userId/storeId 타입 불일치 오류
해결:
- UserPrincipal의 userId, storeId를 UUID로 변경
- JwtTokenProvider의 파싱 로직을 UUID.fromString()으로 수정
9.2 Gradle Clean 오류
증상: Unable to delete directory 'common\build'
해결: clean 없이 빌드 수행
./gradlew event-service:bootJar
9.3 Docker 빌드 컨텍스트 오류
증상: JAR 파일을 찾을 수 없음
해결:
- JAR 파일이 실제로 빌드되었는지 확인
- 빌드 아규먼트 경로가 올바른지 확인
10. 다음 단계
빌드 수행 이력
최신 빌드 (2025-10-28)
1단계: JAR 빌드
./gradlew content-service:clean content-service:bootJar
빌드 결과:
BUILD SUCCESSFUL in 8s
9 actionable tasks: 6 executed, 3 up-to-date
2단계: Docker 이미지 빌드
docker build \
--platform linux/amd64 \
--build-arg BUILD_LIB_DIR="content-service/build/libs" \
--build-arg ARTIFACTORY_FILE="content-service.jar" \
-f deployment/container/Dockerfile-backend \
-t content-service:latest .
빌드 결과:
- ✅ Build stage 완료 (openjdk:23-oraclelinux8)
- ✅ Run stage 완료 (openjdk:23-slim)
- ✅ 이미지 생성 완료
3단계: 이미지 확인
docker images | grep content-service
확인 결과:
content-service latest ff73258c94cc 15 seconds ago 393MB
빌드 정보
- 서비스명: content-service
- JAR 파일: content-service.jar
- Docker 이미지: content-service:latest
- 이미지 ID: ff73258c94cc
- 이미지 크기: 393MB
- 노출 포트: 8084
빌드 일시
- 최신 빌드: 2025-10-28
- 이전 빌드: 2025-10-27
환경
- Base Image: openjdk:23-slim
- Platform: linux/amd64
- User: k8s (non-root)
- Java Version: 23