배포 가이드 및 명령어 추가

- 배포 관련 slash 명령어 추가 (컨테이너 이미지 빌드, 실행, K8s 배포, CI/CD)
- 백엔드/프론트엔드 각각에 대한 배포 가이드 문서 추가
- 프롬프트 파일 추가 (think, design, develop)
- deployment 디렉토리 생성
- 기존 명령어 파일 업데이트

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
doyeon 2025-10-27 15:03:36 +09:00
parent 6465719b2c
commit e70f121db5
39 changed files with 1078 additions and 19 deletions

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,6 @@
---
command: "/deploy-build-image-back"
---
@cicd
'백엔드컨테이너이미지작성가이드'에 따라 컨테이너 이미지를 작성해 주세요.

View File

@ -0,0 +1,6 @@
---
command: "/deploy-build-image-front"
---
@cicd
'프론트엔드컨테이너이미지작성가이드'에 따라 컨테이너 이미지를 작성해 주세요.

View File

@ -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 중 선택하여 사용합니다

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,16 @@
---
command: "/deploy-k8s-guide-back"
---
@cicd
'백엔드배포가이드'에 따라 백엔드 서비스 배포 방법을 작성해 주세요.
프롬프트에 '[실행정보]'항목이 없으면 수행을 중단하고 안내 메시지를 표시해 주세요.
{안내메시지}
'[실행정보]'섹션 하위에 아래 예와 같이 필요한 정보를 제시해 주세요.
[실행정보]
- ACR명: acrdigitalgarage01
- k8s명: aks-digitalgarage-01
- 네임스페이스: tripgen
- 파드수: 2
- 리소스(CPU): 256m/1024m
- 리소스(메모리): 256Mi/1024Mi

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,3 +1,6 @@
---
command: "/design-api"
---
@architecture
API를 설계해 주세요:
- '공통설계원칙'과 'API설계가이드'를 준용하여 설계
- '공통설계원칙'과 'API설계가이드'를 준용하여 설계

View File

@ -1,3 +1,6 @@
---
command: "/design-class"
---
@architecture
'공통설계원칙'과 '클래스설계가이드'를 준용하여 클래스를 설계해 주세요.
프롬프트에 '[클래스설계 정보]'항목이 없으면 수행을 중단하고 안내 메시지를 표시합니다.
@ -9,4 +12,4 @@
- User: Layered
- Trip: Clean
- Location: Layered
- AI: Layered
- AI: Layered

View File

@ -1,3 +1,6 @@
---
command: "/design-data"
---
@architecture
데이터 설계를 해주세요:
- '공통설계원칙'과 '데이터설계가이드'를 준용하여 설계
- '공통설계원칙'과 '데이터설계가이드'를 준용하여 설계

View File

@ -1,5 +1,8 @@
---
command: "/design-fix-prototype"
---
@fix as @front
'[오류내용]'섹션에 제공된 오류를 해결해 주세요.
프롬프트에 '[오류내용]'섹션이 없으면 수행 중단하고 안내 메시지 표시
{안내메시지}
'[오류내용]'섹션 하위에 오류 내용을 제공
'[오류내용]'섹션 하위에 오류 내용을 제공

View File

@ -1,3 +1,6 @@
---
command: "/design-front"
---
@plan as @front
'프론트엔드설계가이드'를 준용하여 **프론트엔드설계서**를 작성해 주세요.
프롬프트에 '[백엔드시스템]'항목이 없으면 수행을 중단하고 안내 메시지를 표시합니다.
@ -13,4 +16,4 @@
- ai service: http://localhost:8084/v3/api-docs
[요구사항]
- 각 화면에 Back 아이콘 버튼과 화면 타이틀 표시
- 하단 네비게이션 바 아이콘화: 홈, 새여행, 주변장소검색, 여행보기
- 하단 네비게이션 바 아이콘화: 홈, 새여행, 주변장소검색, 여행보기

View File

@ -1,6 +1,9 @@
---
command: "/design-high-level"
---
@architecture
'HighLevel아키텍처정의가이드'를 준용하여 High Level 아키텍처 정의서를 작성해 주세요.
'CLOUD' 정보가 없으면 수행을 중단하고 안내메시지를 표시하세요.
{안내메시지}
아래 예와 같이 CLOUD 제공자를 Azure, AWS, Google과 같이 제공하세요.
- CLOUD: Azure
- CLOUD: Azure

View File

@ -1,5 +1,8 @@
---
command: "/design-improve-prototype"
---
@improve as @front
'[개선내용]'섹션에 있는 내용을 개선해 주세요.
프롬프트에 '[개선내용]'항목이 없으면 수행을 중단하고 안내 메시지 표시
{안내메시지}
'[개선내용]'섹션 하위에 개선할 내용을 제공
'[개선내용]'섹션 하위에 개선할 내용을 제공

View File

@ -1,2 +1,5 @@
---
command: "/design-improve-userstory"
---
@analyze as @front 프로토타입을 웹브라우저에서 분석한 후,
@document as @scribe 수정된 프로토타입에 따라 유저스토리를 업데이트 해주십시오.
@document as @scribe 수정된 프로토타입에 따라 유저스토리를 업데이트 해주십시오.

View File

@ -1,3 +1,6 @@
---
command: "/design-logical"
---
@architecture
논리 아키텍처를 설계해 주세요:
- '공통설계원칙'과 '논리아키텍처 설계 가이드'를 준용하여 설계
- '공통설계원칙'과 '논리아키텍처 설계 가이드'를 준용하여 설계

View File

@ -1,3 +1,6 @@
---
command: "/design-pattern"
---
@design-pattern
클라우드 아키텍처 패턴 적용 방안을 작성해 주세요:
- '클라우드아키텍처패턴선정가이드'를 준용하여 작성
- '클라우드아키텍처패턴선정가이드'를 준용하여 작성

View File

@ -1,6 +1,9 @@
---
command: "/design-physical"
---
@architecture
'물리아키텍처설계가이드'를 준용하여 물리아키텍처를 설계해 주세요.
'CLOUD' 정보가 없으면 수행을 중단하고 안내메시지를 표시하세요.
{안내메시지}
아래 예와 같이 CLOUD 제공자를 Azure, AWS, Google과 같이 제공하세요.
- CLOUD: Azure
- CLOUD: Azure

View File

@ -1,3 +1,6 @@
---
command: "/design-prototype"
---
@prototype
프로토타입을 작성해 주세요:
- '프로토타입작성가이드'를 준용하여 작성
- '프로토타입작성가이드'를 준용하여 작성

View File

@ -1,3 +1,6 @@
---
command: "/design-seq-inner"
---
@architecture
내부 시퀀스 설계를 해 주세요:
- '공통설계원칙'과 '내부시퀀스설계 가이드'를 준용하여 설계
- '공통설계원칙'과 '내부시퀀스설계 가이드'를 준용하여 설계

View File

@ -1,3 +1,6 @@
---
command: "/design-seq-outer"
---
@architecture
외부 시퀀스 설계를 해 주세요:
- '공통설계원칙'과 '외부시퀀스설계가이드'를 준용하여 설계
- '공통설계원칙'과 '외부시퀀스설계가이드'를 준용하여 설계

View File

@ -1,2 +1,5 @@
---
command: "/design-test-prototype"
---
@test-front
프로토타입을 테스트 해 주세요.
프로토타입을 테스트 해 주세요.

View File

@ -1,3 +1,6 @@
---
command: "/design-uiux"
---
@uiux
UI/UX 설계를 해주세요:
- 'UI/UX설계가이드'를 준용하여 작성
- 'UI/UX설계가이드'를 준용하여 작성

View File

@ -1,2 +1,5 @@
---
command: "/design-update-uiux"
---
@document @front
현재 프로토타입과 유저스토리를 기준으로 UI/UX설계서와 스타일가이드를 수정해 주세요.
현재 프로토타입과 유저스토리를 기준으로 UI/UX설계서와 스타일가이드를 수정해 주세요.

View File

@ -1,3 +1,6 @@
---
command: "/think-help"
---
기획 작업 순서
1단계: 서비스 기획

View File

@ -1,3 +1,6 @@
---
command: "/think-planning"
---
아래 내용을 터미널에 표시만 하고 수행을 하지는 않습니다.
```
아래 가이드를 참고하여 서비스 기획을 수행합니다.

View File

@ -1,3 +1,7 @@
---
command: "/think-userstory"
---
```
@document
유저스토리를 작성하세요.
프롬프트에 '[요구사항]'섹션이 없으면 수행을 중단하고 안내 메시지를 표시합니다.
@ -16,3 +20,5 @@ Case 2) 다른 방법으로 이벤트스토밍을 한 경우는 요구사항을
2. 유저스토리 작성
- '유저스토리작성방법'과 '유저스토리예제'를 참고하여 유저스토리를 작성
- 결과파일은 'design/userstory.md'에 생성
```

View File

@ -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

220
claude/design-prompt.md Normal file
View File

@ -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 아이콘 버튼과 화면 타이틀 표시
- 하단 네비게이션 바 아이콘화: 홈, 새여행, 주변장소검색, 여행보기
```

180
claude/develop-prompt.md Normal file
View File

@ -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
```

41
claude/think-prompt.md Normal file
View File

@ -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'에 생성
```

View File

@ -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"]

View File

@ -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

View File

@ -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

View File

@ -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 = {