From e70f121db5fa492a86dd09917b369859248cd4f4 Mon Sep 17 00:00:00 2001 From: doyeon Date: Mon, 27 Oct 2025 15:03:36 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B0=B0=ED=8F=AC=20=EA=B0=80=EC=9D=B4?= =?UTF-8?q?=EB=93=9C=20=EB=B0=8F=20=EB=AA=85=EB=A0=B9=EC=96=B4=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 배포 관련 slash 명령어 추가 (컨테이너 이미지 빌드, 실행, K8s 배포, CI/CD) - 백엔드/프론트엔드 각각에 대한 배포 가이드 문서 추가 - 프롬프트 파일 추가 (think, design, develop) - deployment 디렉토리 생성 - 기존 명령어 파일 업데이트 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../deploy-actions-cicd-guide-back.md | 14 ++ .../deploy-actions-cicd-guide-front.md | 15 ++ .claude/commands/deploy-build-image-back.md | 6 + .claude/commands/deploy-build-image-front.md | 6 + .claude/commands/deploy-help.md | 81 ++++++ .../deploy-jenkins-cicd-guide-back.md | 14 ++ .../deploy-jenkins-cicd-guide-front.md | 15 ++ .claude/commands/deploy-k8s-guide-back.md | 16 ++ .claude/commands/deploy-k8s-guide-front.md | 18 ++ .../deploy-run-container-guide-back.md | 15 ++ .../deploy-run-container-guide-front.md | 16 ++ .claude/commands/design-api.md | 5 +- .claude/commands/design-class.md | 5 +- .claude/commands/design-data.md | 5 +- .claude/commands/design-fix-prototype.md | 5 +- .claude/commands/design-front.md | 5 +- .claude/commands/design-high-level.md | 5 +- .claude/commands/design-improve-prototype.md | 5 +- .claude/commands/design-improve-userstory.md | 5 +- .claude/commands/design-logical.md | 5 +- .claude/commands/design-pattern.md | 5 +- .claude/commands/design-physical.md | 5 +- .claude/commands/design-prototype.md | 5 +- .claude/commands/design-seq-inner.md | 5 +- .claude/commands/design-seq-outer.md | 5 +- .claude/commands/design-test-prototype.md | 5 +- .claude/commands/design-uiux.md | 5 +- .claude/commands/design-update-uiux.md | 5 +- .claude/commands/think-help.md | 3 + .claude/commands/think-planning.md | 3 + .claude/commands/think-userstory.md | 6 + claude/build-image-back.md | 82 +++++++ claude/design-prompt.md | 220 +++++++++++++++++ claude/develop-prompt.md | 180 ++++++++++++++ claude/think-prompt.md | 41 ++++ deployment/container/Dockerfile-backend | 25 ++ deployment/container/build-image.md | 232 ++++++++++++++++++ .../participation/domain/draw/DrawLog.java | 2 +- .../domain/participant/Participant.java | 2 +- 39 files changed, 1078 insertions(+), 19 deletions(-) create mode 100644 .claude/commands/deploy-actions-cicd-guide-back.md create mode 100644 .claude/commands/deploy-actions-cicd-guide-front.md create mode 100644 .claude/commands/deploy-build-image-back.md create mode 100644 .claude/commands/deploy-build-image-front.md create mode 100644 .claude/commands/deploy-help.md create mode 100644 .claude/commands/deploy-jenkins-cicd-guide-back.md create mode 100644 .claude/commands/deploy-jenkins-cicd-guide-front.md create mode 100644 .claude/commands/deploy-k8s-guide-back.md create mode 100644 .claude/commands/deploy-k8s-guide-front.md create mode 100644 .claude/commands/deploy-run-container-guide-back.md create mode 100644 .claude/commands/deploy-run-container-guide-front.md create mode 100644 claude/build-image-back.md create mode 100644 claude/design-prompt.md create mode 100644 claude/develop-prompt.md create mode 100644 claude/think-prompt.md create mode 100644 deployment/container/Dockerfile-backend create mode 100644 deployment/container/build-image.md diff --git a/.claude/commands/deploy-actions-cicd-guide-back.md b/.claude/commands/deploy-actions-cicd-guide-back.md new file mode 100644 index 0000000..0ec39e4 --- /dev/null +++ b/.claude/commands/deploy-actions-cicd-guide-back.md @@ -0,0 +1,14 @@ +--- +command: "/deploy-actions-cicd-guide-back" +--- + +@cicd +'백엔드GitHubActions파이프라인작성가이드'에 따라 GitHub Actions를 이용한 CI/CD 가이드를 작성해 주세요. +프롬프트에 '[실행정보]'항목이 없으면 수행을 중단하고 안내 메시지를 표시해 주세요. +{안내메시지} +'[실행정보]'섹션 하위에 아래 예와 같이 필요한 정보를 제시해 주세요. +[실행정보] +- ACR_NAME: acrdigitalgarage01 +- RESOURCE_GROUP: rg-digitalgarage-01 +- AKS_CLUSTER: aks-digitalgarage-01 +- NAMESPACE: phonebill-dg0500 diff --git a/.claude/commands/deploy-actions-cicd-guide-front.md b/.claude/commands/deploy-actions-cicd-guide-front.md new file mode 100644 index 0000000..0975422 --- /dev/null +++ b/.claude/commands/deploy-actions-cicd-guide-front.md @@ -0,0 +1,15 @@ +--- +command: "/deploy-actions-cicd-guide-front" +--- + +@cicd +'프론트엔드GitHubActions파이프라인작성가이드'에 따라 GitHub Actions를 이용한 CI/CD 가이드를 작성해 주세요. +프롬프트에 '[실행정보]'항목이 없으면 수행을 중단하고 안내 메시지를 표시해 주세요. +{안내메시지} +'[실행정보]'섹션 하위에 아래 예와 같이 필요한 정보를 제시해 주세요. +[실행정보] +- SYSTEM_NAME: phonebill +- ACR_NAME: acrdigitalgarage01 +- RESOURCE_GROUP: rg-digitalgarage-01 +- AKS_CLUSTER: aks-digitalgarage-01 +- NAMESPACE: phonebill-dg0500 diff --git a/.claude/commands/deploy-build-image-back.md b/.claude/commands/deploy-build-image-back.md new file mode 100644 index 0000000..5305a1b --- /dev/null +++ b/.claude/commands/deploy-build-image-back.md @@ -0,0 +1,6 @@ +--- +command: "/deploy-build-image-back" +--- + +@cicd +'백엔드컨테이너이미지작성가이드'에 따라 컨테이너 이미지를 작성해 주세요. diff --git a/.claude/commands/deploy-build-image-front.md b/.claude/commands/deploy-build-image-front.md new file mode 100644 index 0000000..1cfe9d1 --- /dev/null +++ b/.claude/commands/deploy-build-image-front.md @@ -0,0 +1,6 @@ +--- +command: "/deploy-build-image-front" +--- + +@cicd +'프론트엔드컨테이너이미지작성가이드'에 따라 컨테이너 이미지를 작성해 주세요. diff --git a/.claude/commands/deploy-help.md b/.claude/commands/deploy-help.md new file mode 100644 index 0000000..d6ec88f --- /dev/null +++ b/.claude/commands/deploy-help.md @@ -0,0 +1,81 @@ +--- +command: "/deploy-help" +--- + +# 배포 작업 순서 + +## 1단계: 컨테이너 이미지 작성 +### 백엔드 +``` +/deploy-build-image-back +``` +- 백엔드컨테이너이미지작성가이드를 참고하여 컨테이너 이미지를 빌드합니다 + +### 프론트엔드 +``` +/deploy-build-image-front +``` +- 프론트엔드컨테이너이미지작성가이드를 참고하여 컨테이너 이미지를 빌드합니다 + +## 2단계: 컨테이너 실행 가이드 작성 +### 백엔드 +``` +/deploy-run-container-guide-back +``` +- 백엔드컨테이너실행방법가이드를 참고하여 컨테이너 실행 방법을 작성합니다 +- 실행정보(ACR명, VM정보)가 필요합니다 + +### 프론트엔드 +``` +/deploy-run-container-guide-front +``` +- 프론트엔드컨테이너실행방법가이드를 참고하여 컨테이너 실행 방법을 작성합니다 +- 실행정보(시스템명, ACR명, VM정보)가 필요합니다 + +## 3단계: Kubernetes 배포 가이드 작성 +### 백엔드 +``` +/deploy-k8s-guide-back +``` +- 백엔드배포가이드를 참고하여 쿠버네티스 배포 방법을 작성합니다 +- 실행정보(ACR명, k8s명, 네임스페이스, 리소스 설정)가 필요합니다 + +### 프론트엔드 +``` +/deploy-k8s-guide-front +``` +- 프론트엔드배포가이드를 참고하여 쿠버네티스 배포 방법을 작성합니다 +- 실행정보(시스템명, ACR명, k8s명, 네임스페이스, Gateway Host, 리소스 설정)가 필요합니다 + +## 4단계: CI/CD 파이프라인 구성 + +### Jenkins 사용 시 +#### 백엔드 +``` +/deploy-jenkins-cicd-guide-back +``` +- 백엔드Jenkins파이프라인작성가이드를 참고하여 Jenkins CI/CD 파이프라인을 구성합니다 + +#### 프론트엔드 +``` +/deploy-jenkins-cicd-guide-front +``` +- 프론트엔드Jenkins파이프라인작성가이드를 참고하여 Jenkins CI/CD 파이프라인을 구성합니다 + +### GitHub Actions 사용 시 +#### 백엔드 +``` +/deploy-actions-cicd-guide-back +``` +- 백엔드GitHubActions파이프라인작성가이드를 참고하여 GitHub Actions CI/CD 파이프라인을 구성합니다 + +#### 프론트엔드 +``` +/deploy-actions-cicd-guide-front +``` +- 프론트엔드GitHubActions파이프라인작성가이드를 참고하여 GitHub Actions CI/CD 파이프라인을 구성합니다 + +## 참고사항 +- 각 명령 실행 전 필요한 실행정보를 프롬프트에 포함해야 합니다 +- 실행정보가 없으면 안내 메시지가 표시되며 작업이 중단됩니다 +- CI/CD 도구는 Jenkins 또는 GitHub Actions 중 선택하여 사용합니다 diff --git a/.claude/commands/deploy-jenkins-cicd-guide-back.md b/.claude/commands/deploy-jenkins-cicd-guide-back.md new file mode 100644 index 0000000..dbd3e8b --- /dev/null +++ b/.claude/commands/deploy-jenkins-cicd-guide-back.md @@ -0,0 +1,14 @@ +--- +command: "/deploy-jenkins-cicd-guide-back" +--- + +@cicd +'백엔드Jenkins파이프라인작성가이드'에 따라 Jenkins를 이용한 CI/CD 가이드를 작성해 주세요. +프롬프트에 '[실행정보]'항목이 없으면 수행을 중단하고 안내 메시지를 표시해 주세요. +{안내메시지} +'[실행정보]'섹션 하위에 아래 예와 같이 필요한 정보를 제시해 주세요. +[실행정보] +- ACR_NAME: acrdigitalgarage01 +- RESOURCE_GROUP: rg-digitalgarage-01 +- AKS_CLUSTER: aks-digitalgarage-01 +- NAMESPACE: phonebill-dg0500 diff --git a/.claude/commands/deploy-jenkins-cicd-guide-front.md b/.claude/commands/deploy-jenkins-cicd-guide-front.md new file mode 100644 index 0000000..5df6fad --- /dev/null +++ b/.claude/commands/deploy-jenkins-cicd-guide-front.md @@ -0,0 +1,15 @@ +--- +command: "/deploy-jenkins-cicd-guide-front" +--- + +@cicd +'프론트엔드Jenkins파이프라인작성가이드'에 따라 Jenkins를 이용한 CI/CD 가이드를 작성해 주세요. +프롬프트에 '[실행정보]'항목이 없으면 수행을 중단하고 안내 메시지를 표시해 주세요. +{안내메시지} +'[실행정보]'섹션 하위에 아래 예와 같이 필요한 정보를 제시해 주세요. +[실행정보] +- SYSTEM_NAME: phonebill +- ACR_NAME: acrdigitalgarage01 +- RESOURCE_GROUP: rg-digitalgarage-01 +- AKS_CLUSTER: aks-digitalgarage-01 +- NAMESPACE: phonebill-dg0500 diff --git a/.claude/commands/deploy-k8s-guide-back.md b/.claude/commands/deploy-k8s-guide-back.md new file mode 100644 index 0000000..8fccb04 --- /dev/null +++ b/.claude/commands/deploy-k8s-guide-back.md @@ -0,0 +1,16 @@ +--- +command: "/deploy-k8s-guide-back" +--- + +@cicd +'백엔드배포가이드'에 따라 백엔드 서비스 배포 방법을 작성해 주세요. +프롬프트에 '[실행정보]'항목이 없으면 수행을 중단하고 안내 메시지를 표시해 주세요. +{안내메시지} +'[실행정보]'섹션 하위에 아래 예와 같이 필요한 정보를 제시해 주세요. +[실행정보] +- ACR명: acrdigitalgarage01 +- k8s명: aks-digitalgarage-01 +- 네임스페이스: tripgen +- 파드수: 2 +- 리소스(CPU): 256m/1024m +- 리소스(메모리): 256Mi/1024Mi diff --git a/.claude/commands/deploy-k8s-guide-front.md b/.claude/commands/deploy-k8s-guide-front.md new file mode 100644 index 0000000..54a069d --- /dev/null +++ b/.claude/commands/deploy-k8s-guide-front.md @@ -0,0 +1,18 @@ +--- +command: "/deploy-k8s-guide-front" +--- + +@cicd +'프론트엔드배포가이드'에 따라 프론트엔드 서비스 배포 방법을 작성해 주세요. +프롬프트에 '[실행정보]'항목이 없으면 수행을 중단하고 안내 메시지를 표시해 주세요. +{안내메시지} +'[실행정보]'섹션 하위에 아래 예와 같이 필요한 정보를 제시해 주세요. +[실행정보] +- 시스템명: tripgen +- ACR명: acrdigitalgarage01 +- k8s명: aks-digitalgarage-01 +- 네임스페이스: tripgen +- 파드수: 2 +- 리소스(CPU): 256m/1024m +- 리소스(메모리): 256Mi/1024Mi +- Gateway Host: http://tripgen-api.20.214.196.128.nip.io diff --git a/.claude/commands/deploy-run-container-guide-back.md b/.claude/commands/deploy-run-container-guide-back.md new file mode 100644 index 0000000..c93388f --- /dev/null +++ b/.claude/commands/deploy-run-container-guide-back.md @@ -0,0 +1,15 @@ +--- +command: "/deploy-run-container-guide-back" +--- + +@cicd +'백엔드컨테이너실행방법가이드'에 따라 컨테이너 실행 가이드를 작성해 주세요. +프롬프트에 '[실행정보]'항목이 없으면 수행을 중단하고 안내 메시지를 표시해 주세요. +{안내메시지} +'[실행정보]'섹션 하위에 아래 예와 같이 필요한 정보를 제시해 주세요. +[실행정보] +- ACR명: acrdigitalgarage01 +- VM + - KEY파일: ~/home/bastion-dg0500 + - USERID: azureuser + - IP: 4.230.5.6 diff --git a/.claude/commands/deploy-run-container-guide-front.md b/.claude/commands/deploy-run-container-guide-front.md new file mode 100644 index 0000000..eb68f9a --- /dev/null +++ b/.claude/commands/deploy-run-container-guide-front.md @@ -0,0 +1,16 @@ +--- +command: "/deploy-run-container-guide-front" +--- + +@cicd +'프론트엔드컨테이너실행방법가이드'에 따라 컨테이너 실행 가이드를 작성해 주세요. +프롬프트에 '[실행정보]'항목이 없으면 수행을 중단하고 안내 메시지를 표시해 주세요. +{안내메시지} +'[실행정보]'섹션 하위에 아래 예와 같이 필요한 정보를 제시해 주세요. +[실행정보] +- 시스템명: tripgen +- ACR명: acrdigitalgarage01 +- VM + - KEY파일: ~/home/bastion-dg0500 + - USERID: azureuser + - IP: 4.230.5.6 diff --git a/.claude/commands/design-api.md b/.claude/commands/design-api.md index 5375bf7..750eae3 100644 --- a/.claude/commands/design-api.md +++ b/.claude/commands/design-api.md @@ -1,3 +1,6 @@ +--- +command: "/design-api" +--- @architecture API를 설계해 주세요: -- '공통설계원칙'과 'API설계가이드'를 준용하여 설계 +- '공통설계원칙'과 'API설계가이드'를 준용하여 설계 \ No newline at end of file diff --git a/.claude/commands/design-class.md b/.claude/commands/design-class.md index dc76da9..178bdb1 100644 --- a/.claude/commands/design-class.md +++ b/.claude/commands/design-class.md @@ -1,3 +1,6 @@ +--- +command: "/design-class" +--- @architecture '공통설계원칙'과 '클래스설계가이드'를 준용하여 클래스를 설계해 주세요. 프롬프트에 '[클래스설계 정보]'항목이 없으면 수행을 중단하고 안내 메시지를 표시합니다. @@ -9,4 +12,4 @@ - User: Layered - Trip: Clean - Location: Layered - - AI: Layered + - AI: Layered \ No newline at end of file diff --git a/.claude/commands/design-data.md b/.claude/commands/design-data.md index 8d9fd77..b5ff1dd 100644 --- a/.claude/commands/design-data.md +++ b/.claude/commands/design-data.md @@ -1,3 +1,6 @@ +--- +command: "/design-data" +--- @architecture 데이터 설계를 해주세요: -- '공통설계원칙'과 '데이터설계가이드'를 준용하여 설계 +- '공통설계원칙'과 '데이터설계가이드'를 준용하여 설계 \ No newline at end of file diff --git a/.claude/commands/design-fix-prototype.md b/.claude/commands/design-fix-prototype.md index d1ddb8a..5cc1890 100644 --- a/.claude/commands/design-fix-prototype.md +++ b/.claude/commands/design-fix-prototype.md @@ -1,5 +1,8 @@ +--- +command: "/design-fix-prototype" +--- @fix as @front '[오류내용]'섹션에 제공된 오류를 해결해 주세요. 프롬프트에 '[오류내용]'섹션이 없으면 수행 중단하고 안내 메시지 표시 {안내메시지} -'[오류내용]'섹션 하위에 오류 내용을 제공 +'[오류내용]'섹션 하위에 오류 내용을 제공 \ No newline at end of file diff --git a/.claude/commands/design-front.md b/.claude/commands/design-front.md index 67bc0a5..8dd99c9 100644 --- a/.claude/commands/design-front.md +++ b/.claude/commands/design-front.md @@ -1,3 +1,6 @@ +--- +command: "/design-front" +--- @plan as @front '프론트엔드설계가이드'를 준용하여 **프론트엔드설계서**를 작성해 주세요. 프롬프트에 '[백엔드시스템]'항목이 없으면 수행을 중단하고 안내 메시지를 표시합니다. @@ -13,4 +16,4 @@ - ai service: http://localhost:8084/v3/api-docs [요구사항] - 각 화면에 Back 아이콘 버튼과 화면 타이틀 표시 -- 하단 네비게이션 바 아이콘화: 홈, 새여행, 주변장소검색, 여행보기 +- 하단 네비게이션 바 아이콘화: 홈, 새여행, 주변장소검색, 여행보기 \ No newline at end of file diff --git a/.claude/commands/design-high-level.md b/.claude/commands/design-high-level.md index d7028b1..0debc5e 100644 --- a/.claude/commands/design-high-level.md +++ b/.claude/commands/design-high-level.md @@ -1,6 +1,9 @@ +--- +command: "/design-high-level" +--- @architecture 'HighLevel아키텍처정의가이드'를 준용하여 High Level 아키텍처 정의서를 작성해 주세요. 'CLOUD' 정보가 없으면 수행을 중단하고 안내메시지를 표시하세요. {안내메시지} 아래 예와 같이 CLOUD 제공자를 Azure, AWS, Google과 같이 제공하세요. -- CLOUD: Azure +- CLOUD: Azure \ No newline at end of file diff --git a/.claude/commands/design-improve-prototype.md b/.claude/commands/design-improve-prototype.md index 0d1b31b..22bc079 100644 --- a/.claude/commands/design-improve-prototype.md +++ b/.claude/commands/design-improve-prototype.md @@ -1,5 +1,8 @@ +--- +command: "/design-improve-prototype" +--- @improve as @front '[개선내용]'섹션에 있는 내용을 개선해 주세요. 프롬프트에 '[개선내용]'항목이 없으면 수행을 중단하고 안내 메시지 표시 {안내메시지} -'[개선내용]'섹션 하위에 개선할 내용을 제공 +'[개선내용]'섹션 하위에 개선할 내용을 제공 \ No newline at end of file diff --git a/.claude/commands/design-improve-userstory.md b/.claude/commands/design-improve-userstory.md index a1055f2..73fd453 100644 --- a/.claude/commands/design-improve-userstory.md +++ b/.claude/commands/design-improve-userstory.md @@ -1,2 +1,5 @@ +--- +command: "/design-improve-userstory" +--- @analyze as @front 프로토타입을 웹브라우저에서 분석한 후, -@document as @scribe 수정된 프로토타입에 따라 유저스토리를 업데이트 해주십시오. +@document as @scribe 수정된 프로토타입에 따라 유저스토리를 업데이트 해주십시오. \ No newline at end of file diff --git a/.claude/commands/design-logical.md b/.claude/commands/design-logical.md index 28f15e9..3d50c8f 100644 --- a/.claude/commands/design-logical.md +++ b/.claude/commands/design-logical.md @@ -1,3 +1,6 @@ +--- +command: "/design-logical" +--- @architecture 논리 아키텍처를 설계해 주세요: -- '공통설계원칙'과 '논리아키텍처 설계 가이드'를 준용하여 설계 +- '공통설계원칙'과 '논리아키텍처 설계 가이드'를 준용하여 설계 \ No newline at end of file diff --git a/.claude/commands/design-pattern.md b/.claude/commands/design-pattern.md index 06ed88d..decb145 100644 --- a/.claude/commands/design-pattern.md +++ b/.claude/commands/design-pattern.md @@ -1,3 +1,6 @@ +--- +command: "/design-pattern" +--- @design-pattern 클라우드 아키텍처 패턴 적용 방안을 작성해 주세요: -- '클라우드아키텍처패턴선정가이드'를 준용하여 작성 +- '클라우드아키텍처패턴선정가이드'를 준용하여 작성 \ No newline at end of file diff --git a/.claude/commands/design-physical.md b/.claude/commands/design-physical.md index 2dc8a51..7df5bca 100644 --- a/.claude/commands/design-physical.md +++ b/.claude/commands/design-physical.md @@ -1,6 +1,9 @@ +--- +command: "/design-physical" +--- @architecture '물리아키텍처설계가이드'를 준용하여 물리아키텍처를 설계해 주세요. 'CLOUD' 정보가 없으면 수행을 중단하고 안내메시지를 표시하세요. {안내메시지} 아래 예와 같이 CLOUD 제공자를 Azure, AWS, Google과 같이 제공하세요. -- CLOUD: Azure +- CLOUD: Azure \ No newline at end of file diff --git a/.claude/commands/design-prototype.md b/.claude/commands/design-prototype.md index f43547f..dbd24a0 100644 --- a/.claude/commands/design-prototype.md +++ b/.claude/commands/design-prototype.md @@ -1,3 +1,6 @@ +--- +command: "/design-prototype" +--- @prototype 프로토타입을 작성해 주세요: -- '프로토타입작성가이드'를 준용하여 작성 +- '프로토타입작성가이드'를 준용하여 작성 \ No newline at end of file diff --git a/.claude/commands/design-seq-inner.md b/.claude/commands/design-seq-inner.md index 5583610..d2bc4ac 100644 --- a/.claude/commands/design-seq-inner.md +++ b/.claude/commands/design-seq-inner.md @@ -1,3 +1,6 @@ +--- +command: "/design-seq-inner" +--- @architecture 내부 시퀀스 설계를 해 주세요: -- '공통설계원칙'과 '내부시퀀스설계 가이드'를 준용하여 설계 +- '공통설계원칙'과 '내부시퀀스설계 가이드'를 준용하여 설계 \ No newline at end of file diff --git a/.claude/commands/design-seq-outer.md b/.claude/commands/design-seq-outer.md index 0546370..8e05435 100644 --- a/.claude/commands/design-seq-outer.md +++ b/.claude/commands/design-seq-outer.md @@ -1,3 +1,6 @@ +--- +command: "/design-seq-outer" +--- @architecture 외부 시퀀스 설계를 해 주세요: -- '공통설계원칙'과 '외부시퀀스설계가이드'를 준용하여 설계 +- '공통설계원칙'과 '외부시퀀스설계가이드'를 준용하여 설계 \ No newline at end of file diff --git a/.claude/commands/design-test-prototype.md b/.claude/commands/design-test-prototype.md index bd45346..350788a 100644 --- a/.claude/commands/design-test-prototype.md +++ b/.claude/commands/design-test-prototype.md @@ -1,2 +1,5 @@ +--- +command: "/design-test-prototype" +--- @test-front -프로토타입을 테스트 해 주세요. +프로토타입을 테스트 해 주세요. \ No newline at end of file diff --git a/.claude/commands/design-uiux.md b/.claude/commands/design-uiux.md index 2b1c387..d68d857 100644 --- a/.claude/commands/design-uiux.md +++ b/.claude/commands/design-uiux.md @@ -1,3 +1,6 @@ +--- +command: "/design-uiux" +--- @uiux UI/UX 설계를 해주세요: -- 'UI/UX설계가이드'를 준용하여 작성 +- 'UI/UX설계가이드'를 준용하여 작성 \ No newline at end of file diff --git a/.claude/commands/design-update-uiux.md b/.claude/commands/design-update-uiux.md index 6994cd9..afd7cf9 100644 --- a/.claude/commands/design-update-uiux.md +++ b/.claude/commands/design-update-uiux.md @@ -1,2 +1,5 @@ +--- +command: "/design-update-uiux" +--- @document @front -현재 프로토타입과 유저스토리를 기준으로 UI/UX설계서와 스타일가이드를 수정해 주세요. +현재 프로토타입과 유저스토리를 기준으로 UI/UX설계서와 스타일가이드를 수정해 주세요. \ No newline at end of file diff --git a/.claude/commands/think-help.md b/.claude/commands/think-help.md index 49bc697..17ad05a 100644 --- a/.claude/commands/think-help.md +++ b/.claude/commands/think-help.md @@ -1,3 +1,6 @@ +--- +command: "/think-help" +--- 기획 작업 순서 1단계: 서비스 기획 diff --git a/.claude/commands/think-planning.md b/.claude/commands/think-planning.md index c40eaec..beec938 100644 --- a/.claude/commands/think-planning.md +++ b/.claude/commands/think-planning.md @@ -1,3 +1,6 @@ +--- +command: "/think-planning" +--- 아래 내용을 터미널에 표시만 하고 수행을 하지는 않습니다. ``` 아래 가이드를 참고하여 서비스 기획을 수행합니다. diff --git a/.claude/commands/think-userstory.md b/.claude/commands/think-userstory.md index abdcb97..a002c30 100644 --- a/.claude/commands/think-userstory.md +++ b/.claude/commands/think-userstory.md @@ -1,3 +1,7 @@ +--- +command: "/think-userstory" +--- +``` @document 유저스토리를 작성하세요. 프롬프트에 '[요구사항]'섹션이 없으면 수행을 중단하고 안내 메시지를 표시합니다. @@ -16,3 +20,5 @@ Case 2) 다른 방법으로 이벤트스토밍을 한 경우는 요구사항을 2. 유저스토리 작성 - '유저스토리작성방법'과 '유저스토리예제'를 참고하여 유저스토리를 작성 - 결과파일은 'design/userstory.md'에 생성 + +``` diff --git a/claude/build-image-back.md b/claude/build-image-back.md new file mode 100644 index 0000000..d7b822f --- /dev/null +++ b/claude/build-image-back.md @@ -0,0 +1,82 @@ +# 백엔드 컨테이너이미지 작성가이드 + +[요청사항] +- 백엔드 각 서비스를의 컨테이너 이미지 생성 +- 실제 빌드 수행 및 검증까지 완료 +- '[결과파일]'에 수행한 명령어를 포함하여 컨테이너 이미지 작성 과정 생성 + +[작업순서] +- 서비스명 확인 + 서비스명은 settings.gradle에서 확인 + + 예시) include 'common'하위의 4개가 서비스명임. + ``` + rootProject.name = 'tripgen' + + include 'common' + include 'user-service' + include 'location-service' + include 'ai-service' + include 'trip-service' + ``` + +- 실행Jar 파일 설정 + 실행Jar 파일명을 서비스명과 일치하도록 build.gradle에 설정 합니다. + ``` + bootJar { + archiveFileName = '{서비스명}.jar' + } + ``` + +- Dockerfile 생성 + 아래 내용으로 deployment/container/Dockerfile-backend 생성 + ``` + # 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"] + ``` + +- 컨테이너 이미지 생성 + 아래 명령으로 각 서비스 빌드. shell 파일을 생성하지 말고 command로 수행. + 서브에이젼트를 생성하여 병렬로 수행. + ``` + DOCKER_FILE=deployment/container/Dockerfile-backend + service={서비스명} + + docker build \ + --platform linux/amd64 \ + --build-arg BUILD_LIB_DIR="${서비스명}/build/libs" \ + --build-arg ARTIFACTORY_FILE="${서비스명}.jar" \ + -f ${DOCKER_FILE} \ + -t ${서비스명}:latest . + ``` +- 생성된 이미지 확인 + 아래 명령으로 모든 서비스의 이미지가 빌드되었는지 확인 + ``` + docker images | grep {서비스명} + ``` + +[결과파일] +deployment/container/build-image.md diff --git a/claude/design-prompt.md b/claude/design-prompt.md new file mode 100644 index 0000000..ea4ce28 --- /dev/null +++ b/claude/design-prompt.md @@ -0,0 +1,220 @@ +# 설계 프롬프트 +아래 순서대로 설계합니다. + +## UI/UX 설계 +command: "/design-uiux" +prompt: +``` +@uiux +UI/UX 설계를 해주세요: +- 'UI/UX설계가이드'를 준용하여 작성 +``` + +--- + +# 프로토타입 작성 +command: "/design-prototype" +prompt: +**1.작성** +``` +@prototype +프로토타입을 작성해 주세요: +- '프로토타입작성가이드'를 준용하여 작성 +``` + +--- + +**2.검증** +command: "/design-test-prototype" +prompt: +``` +@test-front +프로토타입을 테스트 해 주세요. +``` + +--- + +**3.오류수정** +command: "/design-fix-prototype" +prompt: +``` +@fix as @front +'[오류내용]'섹션에 제공된 오류를 해결해 주세요. +프롬프트에 '[오류내용]'섹션이 없으면 수행 중단하고 안내 메시지 표시 +{안내메시지} +'[오류내용]'섹션 하위에 오류 내용을 제공 +``` + +--- + +**4.개선** +command: "/design-improve-prototype" +prompt: +``` +@improve as @front +'[개선내용]'섹션에 있는 내용을 개선해 주세요. +프롬프트에 '[개선내용]'항목이 없으면 수행을 중단하고 안내 메시지 표시 +{안내메시지} +'[개선내용]'섹션 하위에 개선할 내용을 제공 +``` + +--- + +**5.유저스토리 품질 높이기** +command: "/design-improve-userstory" +prompt: +``` +@analyze as @front 프로토타입을 웹브라우저에서 분석한 후, +@document as @scribe 수정된 프로토타입에 따라 유저스토리를 업데이트 해주십시오. +``` + +--- + +**6.설계서 다시 업데이트** +command: "/design-update-uiux" +prompt: +``` +@document @front +현재 프로토타입과 유저스토리를 기준으로 UI/UX설계서와 스타일가이드를 수정해 주세요. +``` + +--- + +## 클라우드 아키텍처 패턴 선정 +command: "/design-pattern" +prompt: +``` +@design-pattern +클라우드 아키텍처 패턴 적용 방안을 작성해 주세요: +- '클라우드아키텍처패턴선정가이드'를 준용하여 작성 +``` + +--- + +## 논리아키텍처 설계 +command: "/design-logical" +prompt: +``` +@architecture +논리 아키텍처를 설계해 주세요: +- '공통설계원칙'과 '논리아키텍처 설계 가이드'를 준용하여 설계 + +``` + +--- + +## 외부 시퀀스 설계 +command: "/design-seq-outer" +prompt: +``` +@architecture +외부 시퀀스 설계를 해 주세요: +- '공통설계원칙'과 '외부시퀀스설계가이드'를 준용하여 설계 + +``` + +--- + +## 내부 시퀀스 설계 +command: "/design-seq-inner" +prompt: +``` +@architecture +내부 시퀀스 설계를 해 주세요: +- '공통설계원칙'과 '내부시퀀스설계 가이드'를 준용하여 설계 + +``` + +--- + +## API 설계 +command: "/design-api" +prompt: +``` +@architecture +API를 설계해 주세요: +- '공통설계원칙'과 'API설계가이드'를 준용하여 설계 + +``` + +--- + +## 클래스 설계 +command: "/design-class" +prompt: +``` +@architecture +'공통설계원칙'과 '클래스설계가이드'를 준용하여 클래스를 설계해 주세요. +프롬프트에 '[클래스설계 정보]'항목이 없으면 수행을 중단하고 안내 메시지를 표시합니다. +{안내메시지} +'[클래스설계 정보]' 섹션에 아래 예와 같은 정보를 제공해 주십시오. +[클래스설계 정보] +- 패키지 그룹: com.unicorn.tripgen +- 설계 아키텍처 패턴 + - User: Layered + - Trip: Clean + - Location: Layered + - AI: Layered +``` + +--- + +## 데이터 설계 +command: "/design-data" +prompt: +``` +@architecture +데이터 설계를 해주세요: +- '공통설계원칙'과 '데이터설계가이드'를 준용하여 설계 +``` + +--- + +## High Level 아키텍처 정의서 작성 +command: "/design-high-level" +prompt: +``` +@architecture +'HighLevel아키텍처정의가이드'를 준용하여 High Level 아키텍처 정의서를 작성해 주세요. +'CLOUD' 정보가 없으면 수행을 중단하고 안내메시지를 표시하세요. +{안내메시지} +아래 예와 같이 CLOUD 제공자를 Azure, AWS, Google과 같이 제공하세요. +- CLOUD: Azure +``` + +--- + +## 물리 아키텍처 설계 +command: "/design-physical" +prompt: +``` +@architecture +'물리아키텍처설계가이드'를 준용하여 물리아키텍처를 설계해 주세요. +'CLOUD' 정보가 없으면 수행을 중단하고 안내메시지를 표시하세요. +{안내메시지} +아래 예와 같이 CLOUD 제공자를 Azure, AWS, Google과 같이 제공하세요. +- CLOUD: Azure +``` + +## 프론트엔드 설계 +command: "/design-front" +prompt: +``` +@plan as @front +'프론트엔드설계가이드'를 준용하여 **프론트엔드설계서**를 작성해 주세요. +프롬프트에 '[백엔드시스템]'항목이 없으면 수행을 중단하고 안내 메시지를 표시합니다. +{안내메시지} +'[백엔드시스템]' 섹션에 아래 예와 같은 정보를 제공해 주십시오. +[백엔드시스템] +- 시스템: tripgen +- 마이크로서비스: user-service, location-service, trip-service, ai-service +- API문서 + - user service: http://localhost:8081/v3/api-docs + - location service: http://localhost:8082/v3/api-docs + - trip service: http://localhost:8083/v3/api-docs + - ai service: http://localhost:8084/v3/api-docs +[요구사항] +- 각 화면에 Back 아이콘 버튼과 화면 타이틀 표시 +- 하단 네비게이션 바 아이콘화: 홈, 새여행, 주변장소검색, 여행보기 +``` + diff --git a/claude/develop-prompt.md b/claude/develop-prompt.md new file mode 100644 index 0000000..57c5a06 --- /dev/null +++ b/claude/develop-prompt.md @@ -0,0 +1,180 @@ +# 개발 프롬프트 + +## 데이터베이스 설치계획서 작성 요청 +command: "/develop-db-guide" +prompt: +``` +@backing-service +"데이터베이스설치계획서가이드"에 따라 데이터베이스 설치계획서를 작성해 주십시오. +``` + +--- + +## 데이터베이스 설치 수행 요청 +command: "/develop-db-install" +prompt: +``` +@backing-service +[요구사항] +'데이터베이스설치가이드'에 따라 설치해 주세요. +'[설치정보]'섹션이 없으면 수행을 중단하고 안내 메시지를 표시하세요. +{안내메시지} +'[설치정보]'섹션 하위에 아래 예와 같이 설치에 필요한 정보를 추가해 주세요. +- 설치대상환경: 개발환경 +- AKS Resource Group: rg-digitalgarage-01 +- AKS Name: aks-digitalgarage-01 +- Namespace: tripgen-dev +``` + +--- + +## 데이터베이스 설치 제거 요청 (필요시) +command: "/develop-db-remove" +prompt: +``` +@backing-service +[요구사항] +- "데이터베이스설치결과서"를 보고 관련된 모든 리소스를 삭제 +- "캐시설치결과서"를 보고 관련된 모든 리소스를 삭제 +- 현재 OS에 맞게 수행 +- 서브 에이젼트를 병렬로 수행하여 삭제 +- 결과파일은 생성할 필요 없고 화면에만 결과 표시 +[참고자료] +- 데이터베이스설치결과서 +- 캐시설치결과서 +``` + +--- + +## Message Queue 설치 계획서 작성 요청 +command: "/develop-mq-guide" +prompt: +``` +@backing-service +"MQ설치게획서가이드"에 따라 Message Queue 설치계획서를 작성해 주세요. +``` + +--- + +## Message Queue 설치 수행 요청(필요시) +command: "/develop-mq-install" +prompt: +``` +@backing-service +[요구사항] +'MQ설치가이드'에 따라 설치해 주세요. +'[설치정보]'섹션이 없으면 수행을 중단하고 안내 메시지를 표시하세요. +{안내메시지} +'[설치정보]'섹션 하위에 아래 예와 같이 설치에 필요한 정보를 추가해 주세요. +- 설치대상환경: 개발환경 +- Resource Group: rg-digitalgarage-01 +- Namespace: tripgen-dev +``` + +--- + +## Message Queue 설치 제거 요청 +command: "/develop-mq-remove" +prompt: +``` +@backing-service +[요구사항] +- "MQ설치결과서"를 보고 관련된 모든 리소스를 삭제 +- 현재 OS에 맞게 수행 +- 서브 에이젼트를 병렬로 수행하여 삭제 +- 결과파일은 생성할 필요 없고 화면에만 결과 표시 +[참고자료] +- MQ설치결과서 +``` + +--- + +## 백엔드 개발 요청 +command: "/develop-dev-backend" +prompt: +``` +@dev-backend +"백엔드개발가이드"에 따라 개발해 주세요. +프롬프트에 '[개발정보]'항목이 없으면 수행을 중단하고 안내 메시지를 표시해 주세요. +{안내메시지} +[개발정보] +- 개발 아키텍처패턴 + - auth: Layered + - bill-inquiry: Clean + - product-change: Layered + - kos-mock: Layered +``` + +--- + +## 백엔드 오류 해결 요청 +command: "/develop-fix-backend" +prompt: +``` +@fix as @back +개발된 각 서비스와 common 모듈을 컴파일하고 에러를 해결해 주세요. +- common 모듈 우선 수행 +- 각 서비스별로 서브 에이젠트를 병렬로 수행 +- 컴파일이 모두 성공할때까지 계속 수행 +``` + +--- + +## 서비스 실행파일 작성 요청 +command: "/develop-make-run-profile" +prompt: +``` +@test-backend +'서비스실행파일작성가이드'에 따라 테스트를 해 주세요. +프롬프트에 '[작성정보]'항목이 없으면 수행을 중단하고 안내 메시지를 표시해 주세요. +DB나 Redis의 접근 정보는 지정할 필요 없습니다. 특별히 없으면 '[작성정보]'섹션에 '없음'이라고 하세요. +{안내메시지} +[작성정보] +- API Key + - Claude: sk-ant-ap... + - OpenAI: sk-proj-An4Q... + - Open Weather Map: 1aa5b... + - Kakao API Key: 5cdc24.... +``` + +--- + +## 백엔드 테스트 요청 +command: "/develop-test-backend" +prompt: +``` +@test-backend +'백엔드테스트가이드'에 따라 테스트를 해 주세요. +프롬프트에 '[테스트정보]'항목이 없으면 수행을 중단하고 안내 메시지를 표시해 주세요. +테스트 대상 서비스를 지정안하면 모든 서비스를 테스트 합니다. +{안내메시지} +'[테스트정보]'섹션 하위에 아래 예와 같이 테스트에 필요한 정보를 제시해 주세요. +테스트 대상 서비스를 콤마로 구분하여 입력할 수 있으며 전체를 테스트 할 때는 '전체'라고 입력하세요. +- 서비스: user-service +- API Key + - Claude: sk-ant-ap... + - OpenAI: sk-proj-An4Q... + - Open Weather Map: 1aa5b... + - Kakao API Key: 5cdc24.... +``` + +--- + +## 프론트엔드 개발 요청 +command: "/develop-dev-front" +prompt: +``` +@dev-front +"프론트엔드개발가이드"에 따라 개발해 주세요. +프롬프트에 '[개발정보]'항목이 없으면 수행을 중단하고 안내 메시지를 표시해 주세요. +{안내메시지} +'[개발정보]'섹션 하위에 아래 예와 같이 개발에 필요한 정보를 제시해 주세요. +[개발정보] +- 개발프레임워크: Typescript + React 18 +- UI프레임워크: MUI v5 +- 상태관리: Redux Toolkit +- 라우팅: React Router v6 +- API통신: Axios +- 스타일링: MUI + styled-components +- 빌드도구: Vite +``` \ No newline at end of file diff --git a/claude/think-prompt.md b/claude/think-prompt.md new file mode 100644 index 0000000..208728f --- /dev/null +++ b/claude/think-prompt.md @@ -0,0 +1,41 @@ +# 서비스 기획 프롬프트 + +## 서비스 기획 +command: "/think-planning" +prompt: +아래 내용을 터미널에 표시만 하고 수행을 하지는 않습니다. +``` +아래 가이드를 참고하여 서비스 기획을 수행합니다. + +https://github.com/cna-bootcamp/aiguide/blob/main/AI%ED%99%9C%EC%9A%A9%20%EC%84%9C%EB%B9%84%EC%8A%A4%20%EA%B8%B0%ED%9A%8D%20%EA%B0%80%EC%9D%B4%EB%93%9C.md + +``` + +--- + +## 유저스토리 작성 +command: "/think-userstory" +prompt: + +``` +@document +유저스토리를 작성하세요. +프롬프트에 '[요구사항]'섹션이 없으면 수행을 중단하고 안내 메시지를 표시합니다. +{안내메시지} +'[요구사항]' 섹션에 아래 예와 같은 정보를 제공해 주십시오. +[요구사항] +Case 1) 이벤트스토밍을 피그마로 수행한 경우는 피그마 채널ID를 제공 +예) 피그마 채널ID 'abcde'에 접속하여 분석 +Case 2) 다른 방법으로 이벤트스토밍을 한 경우는 요구사항을 정리한 파일 경로를 제공 +예) 요구사항문서 'design/requirement.md'를 읽어 분석 + +프롬프트에 '[요구사항]'섹션이 있으면 아래와 같이 수행합니다. +1. 요구사항 분석 +- 피그마 채널ID가 제공된 경우 figma MCP를 이용하여 해당 채널에 접속하여 분석 +- 요구사항문서 경로가 제공된 경우 해당 문서를 읽어 요구사항을 분석 +2. 유저스토리 작성 +- '유저스토리작성방법'과 '유저스토리예제'를 참고하여 유저스토리를 작성 +- 결과파일은 'design/userstory.md'에 생성 + +``` + diff --git a/deployment/container/Dockerfile-backend b/deployment/container/Dockerfile-backend new file mode 100644 index 0000000..37da239 --- /dev/null +++ b/deployment/container/Dockerfile-backend @@ -0,0 +1,25 @@ +# 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"] diff --git a/deployment/container/build-image.md b/deployment/container/build-image.md new file mode 100644 index 0000000..3dd62c4 --- /dev/null +++ b/deployment/container/build-image.md @@ -0,0 +1,232 @@ +# 백엔드 컨테이너 이미지 빌드 결과 + +## 프로젝트 정보 +- **프로젝트명**: kt-event-marketing +- **빌드 일시**: 2025-10-27 +- **빌드 대상**: 3개 마이크로서비스 (content-service, participation-service, user-service) + +## 1. 사전 준비 + +### 1.1 서비스 확인 +settings.gradle에서 확인된 구현 완료 서비스: +- ✅ content-service +- ✅ participation-service +- ✅ user-service +- ⏳ ai-service (미구현) +- ⏳ analytics-service (미구현) +- ⏳ distribution-service (미구현) +- ⏳ event-service (미구현) + +### 1.2 bootJar 설정 확인 +build.gradle에 이미 설정되어 있음 (line 101-103): +```gradle +bootJar { + archiveFileName = "${project.name}.jar" +} +``` + +## 2. Dockerfile 생성 + +### 2.1 디렉토리 생성 +```bash +mkdir -p deployment/container +``` + +### 2.2 Dockerfile-backend 작성 +파일 위치: `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 build로 이미지 크기 최적화 +- Non-root user(k8s) 생성으로 보안 강화 +- JAVA_OPTS 환경 변수로 JVM 옵션 설정 가능 + +## 3. JAR 파일 빌드 + +### 3.1 빌드 명령어 +```bash +./gradlew :content-service:bootJar :participation-service:bootJar :user-service:bootJar +``` + +### 3.2 빌드 결과 +``` +BUILD SUCCESSFUL in 15s +18 actionable tasks: 5 executed, 13 up-to-date +``` + +### 3.3 생성된 JAR 파일 +```bash +$ ls -lh */build/libs/*.jar + +-rw-r--r-- 1 KTDS 197121 78M content-service/build/libs/content-service.jar +-rw-r--r-- 1 KTDS 197121 85M participation-service/build/libs/participation-service.jar +-rw-r--r-- 1 KTDS 197121 96M user-service/build/libs/user-service.jar +``` + +## 4. Docker 이미지 빌드 + +### 4.1 content-service 이미지 빌드 +```bash +DOCKER_FILE=deployment/container/Dockerfile-backend +service=content-service + +docker build \ + --platform linux/amd64 \ + --build-arg BUILD_LIB_DIR="${service}/build/libs" \ + --build-arg ARTIFACTORY_FILE="${service}.jar" \ + -f ${DOCKER_FILE} \ + -t ${service}:latest . +``` + +**빌드 결과**: +- Image ID: 06af046cbebe +- Size: 1.01GB +- Platform: linux/amd64 +- Status: ✅ SUCCESS + +### 4.2 participation-service 이미지 빌드 +```bash +DOCKER_FILE=deployment/container/Dockerfile-backend +service=participation-service + +docker build \ + --platform linux/amd64 \ + --build-arg BUILD_LIB_DIR="${service}/build/libs" \ + --build-arg ARTIFACTORY_FILE="${service}.jar" \ + -f ${DOCKER_FILE} \ + -t ${service}:latest . +``` + +**빌드 결과**: +- Image ID: 486f2c00811e +- Size: 1.04GB +- Platform: linux/amd64 +- Status: ✅ SUCCESS + +### 4.3 user-service 이미지 빌드 +```bash +DOCKER_FILE=deployment/container/Dockerfile-backend +service=user-service + +docker build \ + --platform linux/amd64 \ + --build-arg BUILD_LIB_DIR="${service}/build/libs" \ + --build-arg ARTIFACTORY_FILE="${service}.jar" \ + -f ${DOCKER_FILE} \ + -t ${service}:latest . +``` + +**빌드 결과**: +- Image ID: 7ef657c343dd +- Size: 1.09GB +- Platform: linux/amd64 +- Status: ✅ SUCCESS + +## 5. 빌드 결과 확인 + +### 5.1 이미지 목록 조회 +```bash +$ docker images | grep -E "(content-service|participation-service|user-service)" + +participation-service latest 486f2c00811e 48 seconds ago 1.04GB +user-service latest 7ef657c343dd 48 seconds ago 1.09GB +content-service latest 06af046cbebe 48 seconds ago 1.01GB +``` + +### 5.2 빌드 요약 +| 서비스명 | Image ID | 크기 | 상태 | +|---------|----------|------|------| +| content-service | 06af046cbebe | 1.01GB | ✅ | +| participation-service | 486f2c00811e | 1.04GB | ✅ | +| user-service | 7ef657c343dd | 1.09GB | ✅ | + +## 6. 다음 단계 + +### 6.1 컨테이너 실행 테스트 +각 서비스의 Docker 이미지를 컨테이너로 실행하여 동작 확인: +```bash +docker run -d -p 8080:8080 --name content-service content-service:latest +docker run -d -p 8081:8081 --name participation-service participation-service:latest +docker run -d -p 8082:8082 --name user-service user-service:latest +``` + +### 6.2 컨테이너 레지스트리 푸시 +이미지를 Docker Hub 또는 프라이빗 레지스트리에 푸시: +```bash +# 이미지 태깅 +docker tag content-service:latest [registry]/content-service:1.0.0 +docker tag participation-service:latest [registry]/participation-service:1.0.0 +docker tag user-service:latest [registry]/user-service:1.0.0 + +# 레지스트리 푸시 +docker push [registry]/content-service:1.0.0 +docker push [registry]/participation-service:1.0.0 +docker push [registry]/user-service:1.0.0 +``` + +### 6.3 Kubernetes 배포 +Kubernetes 클러스터에 배포하기 위한 매니페스트 작성 및 적용 + +## 7. 참고 사항 + +### 7.1 보안 고려사항 +- ✅ Non-root user(k8s) 사용으로 보안 강화 +- ✅ Multi-stage build로 빌드 도구 제외 +- ⚠️ 프로덕션 환경에서는 이미지 스캔 권장 + +### 7.2 이미지 최적화 +- 현재 이미지 크기: ~1GB +- JVM 튜닝 옵션 활용 가능: `JAVA_OPTS` 환경 변수 +- 추후 경량화 검토: Alpine 기반 이미지, jlink 활용 + +### 7.3 빌드 자동화 +향후 CI/CD 파이프라인에서 자동 빌드 통합 가능: +- GitHub Actions +- Jenkins +- GitLab CI/CD +- ArgoCD + +## 8. 문제 해결 + +### 8.1 빌드 실패 시 +- Gradle clean 실행 후 재빌드 +- Docker daemon 상태 확인 +- 디스크 공간 확인 + +### 8.2 이미지 크기 문제 +- Multi-stage build 활용 (현재 적용됨) +- .dockerignore 파일 활용 +- 불필요한 의존성 제거 + +--- + +**작성자**: DevOps Engineer (송근정) +**작성일**: 2025-10-27 +**버전**: 1.0.0 diff --git a/participation-service/src/main/java/com/kt/event/participation/domain/draw/DrawLog.java b/participation-service/src/main/java/com/kt/event/participation/domain/draw/DrawLog.java index 748f68c..fb0fad9 100644 --- a/participation-service/src/main/java/com/kt/event/participation/domain/draw/DrawLog.java +++ b/participation-service/src/main/java/com/kt/event/participation/domain/draw/DrawLog.java @@ -14,7 +14,7 @@ import lombok.*; @Entity @Table(name = "draw_logs", indexes = { - @Index(name = "idx_event_id", columnList = "event_id") + @Index(name = "idx_draw_log_event_id", columnList = "event_id") } ) @Getter diff --git a/participation-service/src/main/java/com/kt/event/participation/domain/participant/Participant.java b/participation-service/src/main/java/com/kt/event/participation/domain/participant/Participant.java index 0aac1f8..f7f70d3 100644 --- a/participation-service/src/main/java/com/kt/event/participation/domain/participant/Participant.java +++ b/participation-service/src/main/java/com/kt/event/participation/domain/participant/Participant.java @@ -13,7 +13,7 @@ import lombok.*; @Entity @Table(name = "participants", indexes = { - @Index(name = "idx_event_id", columnList = "event_id"), + @Index(name = "idx_participant_event_id", columnList = "event_id"), @Index(name = "idx_event_phone", columnList = "event_id, phone_number") }, uniqueConstraints = {