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/.run/EventServiceApplication.run.xml b/.run/EventServiceApplication.run.xml
deleted file mode 100644
index 38d1691..0000000
--- a/.run/EventServiceApplication.run.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/.run/analytics-service.run.xml b/.run/analytics-service.run.xml
deleted file mode 100644
index ade144d..0000000
--- a/.run/analytics-service.run.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- true
- true
-
-
-
-
-
-
-
-
-
-
-
-
- false
- false
-
-
-
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/run-container-guide-back.md b/deployment/container/run-container-guide-back.md
new file mode 100644
index 0000000..6aaa614
--- /dev/null
+++ b/deployment/container/run-container-guide-back.md
@@ -0,0 +1,502 @@
+# 백엔드 컨테이너 실행 가이드
+
+백엔드 서비스를 Azure VM에서 Docker 컨테이너로 실행하는 가이드를 제공합니다.
+
+## 📋 목차
+
+1. [사전 준비](#사전-준비)
+2. [컨테이너 이미지 확인](#컨테이너-이미지-확인)
+3. [컨테이너 실행](#컨테이너-실행)
+4. [컨테이너 관리](#컨테이너-관리)
+5. [문제 해결](#문제-해결)
+
+---
+
+## 사전 준비
+
+### 1. VM 접속 정보
+```yaml
+ACR: acrdigitalgarage01
+VM:
+ KEY파일: ~/home/bastion-dg0505
+ 사용자: azureuser
+ IP: 20.196.65.160
+```
+
+### 2. VM 접속
+```bash
+# SSH 접속
+ssh -i ~/home/bastion-dg0505 azureuser@20.196.65.160
+```
+
+### 3. Docker 및 ACR 로그인 확인
+```bash
+# Docker 실행 확인
+docker --version
+
+# ACR 로그인 (필요시)
+az acr login --name acrdigitalgarage01
+```
+
+---
+
+## 컨테이너 이미지 확인
+
+### 1. ACR에서 이미지 목록 조회
+```bash
+# 이미지 목록 확인
+az acr repository list --name acrdigitalgarage01 --output table
+
+# 특정 이미지의 태그 확인
+az acr repository show-tags --name acrdigitalgarage01 \
+ --repository {service-name} --output table
+```
+
+### 2. 실행할 이미지 Pull
+```bash
+# 이미지 다운로드
+docker pull acrdigitalgarage01.azurecr.io/{service-name}:{tag}
+
+# 예: participation-service
+docker pull acrdigitalgarage01.azurecr.io/participation-service:latest
+```
+
+---
+
+## 컨테이너 실행
+
+### 1. 환경 변수 준비
+
+각 서비스별 환경 변수를 확인하고 준비합니다.
+
+```bash
+# .env 파일 생성 (예시)
+cat > ~/event-marketing.env << EOF
+# Database
+DB_HOST=your-db-host
+DB_PORT=5432
+DB_NAME=event_marketing
+DB_USERNAME=your-username
+DB_PASSWORD=your-password
+
+# Redis
+REDIS_HOST=your-redis-host
+REDIS_PORT=6379
+
+# Kafka
+KAFKA_BOOTSTRAP_SERVERS=your-kafka:9092
+
+# Application
+SERVER_PORT=8080
+SPRING_PROFILES_ACTIVE=prod
+EOF
+```
+
+### 2. 네트워크 생성 (선택사항)
+
+여러 컨테이너를 함께 실행할 경우 네트워크를 생성합니다.
+
+```bash
+# Docker 네트워크 생성
+docker network create event-marketing-network
+```
+
+### 3. 컨테이너 실행
+
+#### 기본 실행
+```bash
+docker run -d \
+ --name {service-name} \
+ --env-file ~/event-marketing.env \
+ -p 8080:8080 \
+ acrdigitalgarage01.azurecr.io/{service-name}:latest
+```
+
+#### 네트워크 포함 실행
+```bash
+docker run -d \
+ --name {service-name} \
+ --network event-marketing-network \
+ --env-file ~/event-marketing.env \
+ -p 8080:8080 \
+ acrdigitalgarage01.azurecr.io/{service-name}:latest
+```
+
+#### 볼륨 마운트 포함 실행
+```bash
+docker run -d \
+ --name {service-name} \
+ --network event-marketing-network \
+ --env-file ~/event-marketing.env \
+ -p 8080:8080 \
+ -v ~/logs/{service-name}:/app/logs \
+ acrdigitalgarage01.azurecr.io/{service-name}:latest
+```
+
+### 4. 여러 서비스 실행 (docker-compose 사용)
+
+`docker-compose.yml` 파일 생성:
+
+```yaml
+version: '3.8'
+
+services:
+ participation-service:
+ image: acrdigitalgarage01.azurecr.io/participation-service:latest
+ container_name: participation-service
+ env_file:
+ - ./event-marketing.env
+ ports:
+ - "8080:8080"
+ networks:
+ - event-marketing-network
+ volumes:
+ - ./logs/participation:/app/logs
+ restart: unless-stopped
+
+ # 다른 서비스 추가...
+
+networks:
+ event-marketing-network:
+ driver: bridge
+
+volumes:
+ logs:
+```
+
+실행:
+```bash
+# docker-compose로 모든 서비스 시작
+docker-compose up -d
+
+# 특정 서비스만 시작
+docker-compose up -d participation-service
+```
+
+---
+
+## 컨테이너 관리
+
+### 1. 컨테이너 상태 확인
+```bash
+# 실행 중인 컨테이너 확인
+docker ps
+
+# 모든 컨테이너 확인 (중지된 것 포함)
+docker ps -a
+
+# 특정 컨테이너 상세 정보
+docker inspect {container-name}
+```
+
+### 2. 로그 확인
+```bash
+# 실시간 로그 확인
+docker logs -f {container-name}
+
+# 최근 100줄 로그 확인
+docker logs --tail 100 {container-name}
+
+# 타임스탬프 포함 로그 확인
+docker logs -t {container-name}
+```
+
+### 3. 컨테이너 중지/시작/재시작
+```bash
+# 중지
+docker stop {container-name}
+
+# 시작
+docker start {container-name}
+
+# 재시작
+docker restart {container-name}
+
+# 강제 중지
+docker kill {container-name}
+```
+
+### 4. 컨테이너 삭제
+```bash
+# 중지된 컨테이너 삭제
+docker rm {container-name}
+
+# 실행 중인 컨테이너 강제 삭제
+docker rm -f {container-name}
+
+# 중지된 모든 컨테이너 삭제
+docker container prune
+```
+
+### 5. 컨테이너 내부 접속
+```bash
+# bash 쉘로 접속
+docker exec -it {container-name} bash
+
+# 특정 명령 실행
+docker exec {container-name} ls -la /app
+```
+
+### 6. 리소스 사용량 확인
+```bash
+# 실시간 리소스 사용량
+docker stats
+
+# 특정 컨테이너의 리소스 사용량
+docker stats {container-name}
+```
+
+---
+
+## 문제 해결
+
+### 1. 컨테이너가 시작되지 않는 경우
+
+```bash
+# 로그 확인
+docker logs {container-name}
+
+# 컨테이너 상태 확인
+docker inspect {container-name}
+
+# 환경 변수 확인
+docker exec {container-name} env
+```
+
+### 2. 포트 충돌
+
+```bash
+# 포트 사용 확인
+netstat -tuln | grep {port}
+
+# 다른 포트로 매핑
+docker run -d -p 8081:8080 ...
+```
+
+### 3. 네트워크 연결 문제
+
+```bash
+# 네트워크 목록 확인
+docker network ls
+
+# 네트워크 상세 정보
+docker network inspect {network-name}
+
+# 컨테이너를 네트워크에 연결
+docker network connect {network-name} {container-name}
+```
+
+### 4. 이미지 Pull 실패
+
+```bash
+# ACR 로그인 재시도
+az acr login --name acrdigitalgarage01
+
+# 수동으로 Pull
+docker pull acrdigitalgarage01.azurecr.io/{service-name}:{tag}
+```
+
+### 5. 디스크 공간 부족
+
+```bash
+# 사용하지 않는 이미지 삭제
+docker image prune -a
+
+# 사용하지 않는 볼륨 삭제
+docker volume prune
+
+# 전체 정리 (주의!)
+docker system prune -a
+```
+
+---
+
+## 헬스체크 및 모니터링
+
+### 1. 헬스체크 엔드포인트 확인
+```bash
+# Spring Boot Actuator health endpoint
+curl http://localhost:8080/actuator/health
+
+# 상세 헬스 정보
+curl http://localhost:8080/actuator/health/readiness
+curl http://localhost:8080/actuator/health/liveness
+```
+
+### 2. 메트릭 확인
+```bash
+# 메트릭 엔드포인트
+curl http://localhost:8080/actuator/metrics
+
+# 특정 메트릭 확인
+curl http://localhost:8080/actuator/metrics/jvm.memory.used
+```
+
+### 3. 로그 모니터링 스크립트
+```bash
+#!/bin/bash
+# monitor-logs.sh
+
+SERVICE_NAME=$1
+if [ -z "$SERVICE_NAME" ]; then
+ echo "Usage: ./monitor-logs.sh {service-name}"
+ exit 1
+fi
+
+# 에러 로그 모니터링
+docker logs -f $SERVICE_NAME 2>&1 | grep -i error
+```
+
+---
+
+## 자동화 스크립트
+
+### 1. 서비스 재배포 스크립트
+```bash
+#!/bin/bash
+# redeploy.sh
+
+SERVICE_NAME=$1
+IMAGE_TAG=${2:-latest}
+
+if [ -z "$SERVICE_NAME" ]; then
+ echo "Usage: ./redeploy.sh {service-name} [tag]"
+ exit 1
+fi
+
+echo "📦 Pulling latest image..."
+docker pull acrdigitalgarage01.azurecr.io/$SERVICE_NAME:$IMAGE_TAG
+
+echo "🛑 Stopping old container..."
+docker stop $SERVICE_NAME
+docker rm $SERVICE_NAME
+
+echo "🚀 Starting new container..."
+docker run -d \
+ --name $SERVICE_NAME \
+ --env-file ~/event-marketing.env \
+ -p 8080:8080 \
+ acrdigitalgarage01.azurecr.io/$SERVICE_NAME:$IMAGE_TAG
+
+echo "✅ Deployment complete!"
+docker logs -f $SERVICE_NAME
+```
+
+### 2. 헬스체크 스크립트
+```bash
+#!/bin/bash
+# healthcheck.sh
+
+SERVICE_NAME=$1
+MAX_RETRIES=30
+RETRY_INTERVAL=2
+
+if [ -z "$SERVICE_NAME" ]; then
+ echo "Usage: ./healthcheck.sh {service-name}"
+ exit 1
+fi
+
+echo "⏳ Waiting for $SERVICE_NAME to be healthy..."
+
+for i in $(seq 1 $MAX_RETRIES); do
+ if curl -f http://localhost:8080/actuator/health > /dev/null 2>&1; then
+ echo "✅ $SERVICE_NAME is healthy!"
+ exit 0
+ fi
+ echo "Attempt $i/$MAX_RETRIES failed. Retrying in ${RETRY_INTERVAL}s..."
+ sleep $RETRY_INTERVAL
+done
+
+echo "❌ $SERVICE_NAME failed to become healthy"
+exit 1
+```
+
+---
+
+## 보안 고려사항
+
+### 1. 환경 변수 보호
+```bash
+# .env 파일 권한 설정
+chmod 600 ~/event-marketing.env
+
+# 민감 정보는 Azure Key Vault 사용 권장
+```
+
+### 2. 컨테이너 보안
+```bash
+# 읽기 전용 파일시스템으로 실행
+docker run -d --read-only ...
+
+# 리소스 제한
+docker run -d \
+ --memory="512m" \
+ --cpus="0.5" \
+ ...
+```
+
+### 3. 네트워크 보안
+```bash
+# 필요한 포트만 노출
+# 내부 통신은 Docker 네트워크 사용
+```
+
+---
+
+## 서비스별 실행 예시
+
+### Participation Service
+```bash
+docker run -d \
+ --name participation-service \
+ --network event-marketing-network \
+ --env-file ~/event-marketing.env \
+ -e SERVER_PORT=8080 \
+ -e SPRING_PROFILES_ACTIVE=prod \
+ -p 8080:8080 \
+ -v ~/logs/participation:/app/logs \
+ acrdigitalgarage01.azurecr.io/participation-service:latest
+```
+
+### Event Service
+```bash
+docker run -d \
+ --name event-service \
+ --network event-marketing-network \
+ --env-file ~/event-marketing.env \
+ -e SERVER_PORT=8081 \
+ -e SPRING_PROFILES_ACTIVE=prod \
+ -p 8081:8081 \
+ -v ~/logs/event:/app/logs \
+ acrdigitalgarage01.azurecr.io/event-service:latest
+```
+
+### User Service
+```bash
+docker run -d \
+ --name user-service \
+ --network event-marketing-network \
+ --env-file ~/event-marketing.env \
+ -e SERVER_PORT=8082 \
+ -e SPRING_PROFILES_ACTIVE=prod \
+ -p 8082:8082 \
+ -v ~/logs/user:/app/logs \
+ acrdigitalgarage01.azurecr.io/user-service:latest
+```
+
+### Analytics Service
+```bash
+docker run -d \
+ --name analytics-service \
+ --network event-marketing-network \
+ --env-file ~/event-marketing.env \
+ -e SERVER_PORT=8083 \
+ -e SPRING_PROFILES_ACTIVE=prod \
+ -p 8083:8083 \
+ -v ~/logs/analytics:/app/logs \
+ acrdigitalgarage01.azurecr.io/analytics-service:latest
+```
+
+---
+
+이 가이드를 통해 백엔드 서비스를 안전하고 효율적으로 컨테이너로 실행할 수 있습니다. 추가 질문이나 문제가 있으면 언제든지 문의해 주세요! 🚀
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 a3ce81d..5ee4fa5 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
@@ -15,6 +15,7 @@ import lombok.*;
indexes = {
@Index(name = "idx_participant_event_id", columnList = "event_id"),
@Index(name = "idx_participant_event_phone", columnList = "event_id, phone_number")
+
},
uniqueConstraints = {
@UniqueConstraint(name = "uk_event_phone", columnNames = {"event_id", "phone_number"})
diff --git a/participation-service/src/main/java/com/kt/event/participation/infrastructure/config/SecurityConfig.java b/participation-service/src/main/java/com/kt/event/participation/infrastructure/config/SecurityConfig.java
index b43fdfc..855ba0f 100644
--- a/participation-service/src/main/java/com/kt/event/participation/infrastructure/config/SecurityConfig.java
+++ b/participation-service/src/main/java/com/kt/event/participation/infrastructure/config/SecurityConfig.java
@@ -24,6 +24,8 @@ public class SecurityConfig {
.csrf(csrf -> csrf.disable())
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.authorizeHttpRequests(auth -> auth
+ // Actuator endpoints
+ .requestMatchers("/actuator/**").permitAll()
.anyRequest().permitAll()
);
diff --git a/participation-service/src/main/resources/application.yml b/participation-service/src/main/resources/application.yml
index 85752ae..f90f4c7 100644
--- a/participation-service/src/main/resources/application.yml
+++ b/participation-service/src/main/resources/application.yml
@@ -73,3 +73,19 @@ logging:
max-file-size: 10MB
max-history: 7
total-size-cap: 100MB
+# Actuator
+management:
+ endpoints:
+ web:
+ exposure:
+ include: health,info,metrics,prometheus
+ base-path: /actuator
+ endpoint:
+ health:
+ show-details: always
+ show-components: always
+ health:
+ livenessState:
+ enabled: true
+ readinessState:
+ enabled: true
\ No newline at end of file