- Groovy 'services' 변수와 Bash 'services' 배열 이름 충돌 방지
- Bash 배열명을 'svc_list'로 변경하여 syntax error 해결
- 가이드에 변수 충돌 방지 방법과 문제해결 섹션 추가
- Jenkins 파이프라인 안정성 향상 및 범용 적용 가능
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- 모든 명령을 단일 sh 블록에서 실행하여 작업 디렉토리 유지
- Bash 배열과 for 루프로 서비스 처리 방식 변경
- Jenkins 쉘 세션 분리로 인한 kustomization.yaml 인식 오류 해결
- PATH 환경변수와 cd 명령 효과가 모든 후속 명령에 지속 적용
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- sh 블록과 Groovy 코드 분리하여 파싱 에러 방지
- kustomize 설치/이미지 업데이트/배포 확인을 명확한 단계로 구분
- 각 sh 블록이 독립적으로 실행되도록 구조화
- Jenkins DSL 문법 준수로 안정적인 파이프라인 보장
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- kustomize 명령어를 명시적 경로(/Users/dreamondal/bin/kustomize) 사용
- 이미지 태그 업데이트를 반복문으로 리팩토링
- 배포 상태 확인도 반복문으로 개선
- 서비스 추가/삭제 시 유지보수성 향상
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Docker Hub Credentials 필수 설정 명확화
- Rate Limit 해결을 위한 자격증명 등록 방법 강조
- Jenkins 관리자 수행 작업 구체화
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
1. JDK 버전 일치성 문제 해결
- Dockerfile OpenJDK 23 → Eclipse Temurin 21로 변경
- 프로젝트 JDK 21과 일치시킴
2. Docker Hub Rate Limit 해결
- Jenkinsfile에 Docker Hub 로그인 추가
- dockerhub-credentials 자격증명 설정 필요
- eclipse-temurin 이미지로 변경하여 안정성 향상
3. Jenkins 가이드 업데이트
- Docker Hub Credentials 설정 방법 추가
- Rate Limit 문제 해결 방안 제시
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Kustomize 기반 환경별 매니페스트 구성 (dev/staging/prod)
- Base 및 Overlay 구조로 환경별 설정 분리
- 각 환경별 Deployment, Service, ConfigMap, Secret 패치 적용
- Jenkinsfile 작성 (Gradle JDK21, SonarQube, Quality Gate 포함)
- 환경별 설정 파일 및 수동 배포 스크립트 생성
- Jenkins CI/CD 가이드 문서 및 검증 스크립트 작성
- DEV 환경 Ingress Host를 base와 동일하게 수정 (체크리스트 준수)
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- slaveConnectTimeout: 300초로 연결 타임아웃 설정
- activeDeadlineSeconds: 3600초로 Pod 최대 실행 시간 제한
- idleMinutes: 30분으로 에이전트 재사용 설정
- 컨테이너별 리소스 제한 추가 (podman: 1-2 cores, gradle: 0.5-1 core)
- hudson.remoting.RequestAbortedException 연결 에러 해결
- Context7 기반 Jenkins Kubernetes 플러그인 모범사례 적용
- Groovy 변수를 bash shell에서 사용 시 올바른 문법으로 변경
- 잘못된 형태: \${variable} → 올바른 형태: ${variable}
- 수정된 Stage별 변수 참조:
- Setup AKS: props.resource_group, props.cluster_name, environment
- SonarQube Analysis: 모든 서비스별 projectKey의 environment 변수
- Container Build: service, environment, imageTag 변수
- Kustomize Deploy: environment, imageTag 변수 및 kubectl 명령어
- bash shell에서 "syntax error: bad substitution" 오류 해결
- Jenkins 파이프라인 정상 실행 가능하도록 문법 표준화
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Kustomize 기반 환경별 매니페스트 구조 생성
- Base: 공통 리소스 및 네임스페이스 설정
- Overlays: dev/staging/prod 환경별 설정
- Patch: 환경별 replicas, resources, 도메인 설정
- Jenkins 파이프라인 구축
- 완전한 Jenkinsfile 작성 (빌드, 테스트, 배포)
- SonarQube 품질 분석 및 Quality Gate 적용
- ACR 이미지 빌드 및 푸시 자동화
- AKS 배포 자동화
- 환경별 설정 관리
- dev: 1 replica, 기본 리소스, HTTP
- staging: 2 replicas, 중간 리소스, HTTPS
- prod: 3 replicas, 고사양 리소스, HTTPS, 보안 강화
- 배포 자동화 도구
- 수동 배포 스크립트 작성 및 실행 권한 설정
- 롤백 방법 및 트러블슈팅 가이드 포함
- 완전한 구축 가이드 문서 작성
- Jenkins 환경 설정 방법
- Credentials 등록 방법
- Pipeline Job 생성 방법
- 배포 실행 및 모니터링 방법
- 체크리스트 및 트러블슈팅 가이드
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
주요 작업:
- Kustomize 기반 환경별 배포 구조 완성 (dev/staging/prod)
- deployment-patch.yaml 개선: replicas + resources 통합 관리
- Strategic Merge Patch 형식으로 변경하여 가독성 및 유지보수성 향상
- 환경별 차등 리소스 할당 정책 적용
- Jenkins 파이프라인 스크립트 및 수동 배포 스크립트 완성
- 상세한 체크리스트 및 실수 방지 가이드 추가
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Kustomize 기반 환경별 배포 구조 구축
• Base 매니페스트: deployment/cicd/kustomize/base/
• 환경별 오버레이: overlays/{dev,staging,prod}
• 기존 k8s 매니페스트를 Kustomize 구조로 마이그레이션
- Jenkins 파이프라인 설정
• Jenkinsfile: Pod Template, SonarQube, 배포 자동화
• 환경별 설정 파일: config/deploy_env_vars_{env}
• 수동 배포 스크립트: scripts/deploy.sh
- Azure 연동 설정
• ACR (acrdigitalgarage01) 및 AKS (aks-digitalgarage-01)
• 환경별 리소스 분리 및 보안 설정
- 완전한 구축 가이드 문서
• deployment/cicd/jenkins-pipeline-guide.md
• Jenkins 플러그인, RBAC, 트러블슈팅 가이드 포함
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- SecurityConfig에 CorsConfigurationSource 빈 추가
- 모든 HTTP 메소드 지원 (GET, POST, PUT, DELETE, PATCH, OPTIONS, HEAD)
- 환경변수 기반 Origin 패턴 설정 (개발환경: *, 프로덕션: 구체적 도메인)
- Preflight 요청 캐시 및 노출 헤더 설정
- application.yml에 CORS 설정 블록 추가
🔧 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- 모든 서비스(api-gateway, user-service, bill-service, product-service, kos-mock)의 환경변수 매핑
- VM 접속 및 ACR 로그인 방법 포함
- 컨테이너 실행, 상태 확인, 재배포 프로세스 완비
- CORS 설정에 프론트엔드 주소 자동 추가
- 실제 인프라 정보(ACR, VM, DB) 반영
- Redis timeout 값을 문자열('2000ms')에서 숫자(2000)로 변경
- lettuce pool max-wait 값도 동일하게 수정
- 영향 서비스: bill-service, product-service, user-service
- TypeMismatchException 해결로 런타임 오류 수정
- 5개 백엔드 서비스의 컨테이너 실행 가이드 작성
- 각 서비스의 환경변수를 .run.xml에서 추출하여 적용
- ACR(acrdigitalgarage01) 연동 및 이미지 푸시 가이드
- VM(4.230.5.6) 접속 및 컨테이너 실행 방법
- CORS 설정에 VM IP 주소 추가로 프론트엔드 호환성 확보
- 재배포, 헬스체크, 트러블슈팅 가이드 포함
대상 서비스:
- api-gateway:8080 (API Gateway)
- user-service:8081 (사용자 관리)
- bill-service:8082 (요금 조회)
- product-service:8083 (상품 변경)
- kos-mock:8084 (KOS 목업)
- 5개 백엔드 서비스의 bootJar 설정 추가/수정
- 공통 Dockerfile-backend 생성 (멀티 스테이지 빌드)
- 각 서비스별 컨테이너 이미지 빌드 완료
- 보안 강화된 컨테이너 구성 (비루트 사용자)
- 상세한 빌드 결과 문서 작성
서비스 목록:
- api-gateway:latest (329MB)
- user-service:latest (376MB)
- bill-service:latest (385MB)
- product-service:latest (392MB)
- kos-mock:latest (372MB)
- user-service: 회원등록 API를 upsert 방식으로 변경 (기존 사용자 업데이트 지원)
- user-service: userName 필드 응답 누락 문제 해결 (DB 데이터 업데이트)
- kos-mock: Mock 데이터 생성 기간을 3개월에서 6개월로 확장
- product-service: 회선번호 대시 처리 지원 (010-1234-5678, 01012345678 모두 허용)
- bill-service: 회선번호 대시 선택적 처리 지원 (유연한 입력 형식)
- api-gateway: CORS 중복 헤더 제거 필터 추가
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- 서비스 디스커버리 제거하고 직접 URL 라우팅으로 변경
- application.yml 환경변수 기반 동적 라우팅 적용
- 로그인/리프레시 API 경로 수정 (/api/v1/auth/login, /api/v1/auth/refresh)
- 사용자 관련 API 경로 추가 (/api/v1/users/**)
- JWT 인증 필터 적용 및 Circuit Breaker 설정 유지
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
User Service AuthController의 실제 경로에 맞게 라우팅 수정:
- 기존: /api/auth/** -> /auth/** (잘못된 경로)
- 수정: /api/auth/** -> /api/v1/auth/** (올바른 경로)
AuthController는 @RequestMapping("/api/v1/auth")로 설정되어 있음
이제 Gateway를 통한 인증 API 호출이 정상 동작함
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>