UnifiedService Docker 실행 가이드

📋 개요

UnifiedService를 Docker 환경에서 실행하는 방법을 설명합니다.

🚀 빠른 시작

1. Docker 이미지 빌드 및 실행 (원스톱)

docker-compose -f docker-compose.unified.yml up --build -d

2. 로그 확인

# 전체 로그 확인
docker-compose -f docker-compose.unified.yml logs -f

# UnifiedService 로그만 확인
docker-compose -f docker-compose.unified.yml logs -f unified-service

# MySQL 로그 확인
docker-compose -f docker-compose.unified.yml logs -f mysql

# Redis 로그 확인
docker-compose -f docker-compose.unified.yml logs -f redis

3. 서비스 상태 확인

# 컨테이너 상태 확인
docker-compose -f docker-compose.unified.yml ps

# Health Check 확인
curl http://localhost:8089/actuator/health

📝 단계별 실행 방법

Step 1: 프로젝트 빌드 (선택사항)

로컬에서 먼저 테스트하려면:

./gradlew :UnifiedService:clean :UnifiedService:build -x test

Step 2: Docker Compose로 인프라 먼저 시작 (선택사항)

MySQL과 Redis만 먼저 시작하려면:

docker-compose -f docker-compose.unified.yml up -d mysql redis

Step 3: 전체 서비스 시작

# 백그라운드 실행
docker-compose -f docker-compose.unified.yml up -d

# 포어그라운드 실행 (로그 실시간 확인)
docker-compose -f docker-compose.unified.yml up

Step 4: 서비스 중지

# 서비스 중지 (컨테이너 삭제)
docker-compose -f docker-compose.unified.yml down

# 볼륨까지 삭제 (데이터베이스 데이터도 삭제됨)
docker-compose -f docker-compose.unified.yml down -v

🔧 트러블슈팅

1. 이미지 재빌드

캐시 없이 완전히 새로 빌드:

docker-compose -f docker-compose.unified.yml build --no-cache unified-service
docker-compose -f docker-compose.unified.yml up -d

2. 특정 컨테이너 재시작

docker-compose -f docker-compose.unified.yml restart unified-service

3. 컨테이너 내부 접속

# UnifiedService 컨테이너 접속
docker exec -it akc-unified-service sh

# MySQL 컨테이너 접속
docker exec -it akc-mysql mysql -u antsome -p

4. 로그 상세 확인

# 최근 100줄만 보기
docker-compose -f docker-compose.unified.yml logs --tail=100 unified-service

# 특정 시간 이후 로그
docker-compose -f docker-compose.unified.yml logs --since 10m unified-service

5. 메모리 사용량 확인

docker stats akc-unified-service

🌐 API 엔드포인트

UnifiedService가 정상 실행되면 다음 포트로 접근 가능합니다:

📊 서비스 구성

docker-compose.unified.yml 포함 서비스

  1. mysql: MySQL 8.0 데이터베이스
  2. redis: Redis 7 캐시
  3. unified-service: 통합된 6개 마이크로서비스

메모리 설정

⚙️ 환경 변수 커스터마이징

docker-compose.unified.yml 파일에서 다음 환경 변수를 수정할 수 있습니다:

environment:
  # 프로파일
  SPRING_PROFILES_ACTIVE: docker
  
  # 데이터베이스
  DB_HOST: mysql
  DB_PORT: 3306
  DB_NAME: db_akc_b2c
  DB_USERNAME: antsome
  DB_PASSWORD: Q1w2e3r4%^
  
  # Redis
  REDIS_HOST: redis
  REDIS_PORT: 6379
  
  # External API
  EXTERNAL_PARKING_API_URL: https://api.dev.amanocloud.co.kr
  EXTERNAL_PARKING_API_TOKEN: your-token-here
  
  # JWT
  JWT_SECRET: akc-b2c-jwt-secret-key-2024-very-long-and-secure

🔄 개발 서버 배포 시나리오

시나리오 1: 로컬 개발 → Docker 테스트

# 1. 로컬에서 개발 및 테스트
./gradlew :UnifiedService:bootRun

# 2. Docker로 빌드 및 실행
docker-compose -f docker-compose.unified.yml up --build -d

# 3. 로그 모니터링
docker-compose -f docker-compose.unified.yml logs -f unified-service

시나리오 2: 원격 서버 배포

# 1. 프로젝트를 원격 서버로 복사
scp -r . user@remote-server:/path/to/project

# 2. 원격 서버 접속
ssh user@remote-server

# 3. Docker Compose 실행
cd /path/to/project
docker-compose -f docker-compose.unified.yml up -d

# 4. 서비스 확인
curl http://localhost:8089/actuator/health

시나리오 3: Docker 이미지만 빌드하여 배포

# 1. 이미지 빌드
docker build -f UnifiedService/Dockerfile -t akc-unified-service:latest .

# 2. 이미지 저장 (tar 파일로)
docker save akc-unified-service:latest -o akc-unified-service.tar

# 3. 원격 서버로 전송
scp akc-unified-service.tar user@remote-server:/tmp/

# 4. 원격 서버에서 이미지 로드
ssh user@remote-server
docker load -i /tmp/akc-unified-service.tar

# 5. docker-compose.yml 수정하여 빌드 대신 이미지 사용
# image: akc-unified-service:latest 로 변경

# 6. 실행
docker-compose -f docker-compose.unified.yml up -d

🎯 성능 모니터링

1. 실시간 리소스 모니터링

# 모든 컨테이너 모니터링
docker stats

# UnifiedService만 모니터링
docker stats akc-unified-service

2. 메모리 사용량 확인

docker exec akc-unified-service sh -c "ps aux | head -1 && ps aux | grep java"

3. JVM 힙 메모리 상태

UnifiedService 컨테이너 내에서:

docker exec akc-unified-service sh -c "jstat -gc 1 1000 5"

📌 주의사항

  1. 초기 실행 시간: 첫 실행 시 데이터베이스 초기화 때문에 약 1-2분 소요
  2. Health Check: 서비스 시작 후 60초간 준비 시간 필요 (start_period: 60s)
  3. 포트 충돌: 8089, 3306, 6379 포트가 이미 사용 중이면 docker-compose.yml에서 포트 변경 필요
  4. 메모리 제한: 1GB로 제한되어 있으므로 대용량 처리 시 조정 필요

✅ 성공 확인

다음 명령어로 모든 것이 정상인지 확인:

# 1. 컨테이너 상태
docker-compose -f docker-compose.unified.yml ps

# 2. Health Check
curl http://localhost:8089/actuator/health | jq .

# 3. 로그 확인 (에러 없는지)
docker-compose -f docker-compose.unified.yml logs --tail=50 unified-service

# 4. API 테스트
curl http://localhost:8089/api/auth/health

정상적으로 실행되면 다음과 같은 응답을 받을 수 있습니다:

{
  "status": "UP",
  "components": {
    "db": {
      "status": "UP"
    },
    "diskSpace": {
      "status": "UP"
    },
    "ping": {
      "status": "UP"
    }
  }
}

🛠️ 유용한 명령어 모음

# 전체 재시작
docker-compose -f docker-compose.unified.yml restart

# 서비스별 재시작
docker-compose -f docker-compose.unified.yml restart unified-service
docker-compose -f docker-compose.unified.yml restart mysql
docker-compose -f docker-compose.unified.yml restart redis

# 로그 클리어 후 재시작
docker-compose -f docker-compose.unified.yml down
docker system prune -f
docker-compose -f docker-compose.unified.yml up -d

# 볼륨 확인
docker volume ls | grep akc

# 네트워크 확인
docker network ls | grep akc

# 이미지 확인
docker images | grep akc