pr올릴때마다 같이 티겟번호를 같이 작성해야해서 key 값을 pr로 설정함



## #️⃣ 요청 유형
> 해당되는 항목을 선택해주세요.
- [ ] 새로운 기능 추가
- [ ] 기존 기능 개선
- [ ] 성능 개선
## #️⃣ 어떤 기능인가요?
> 추가하려는 기능 또는 개선하려는 부분에 대해 간결하게 설명해주세요.
## #️⃣ 이 기능이 필요한 이유는 무엇인가요?
> 이 기능이 왜 필요한지, 또는 개선/성능 향상이 필요한 이유에 대해 설명해주세요.
## 구현 방안 (선택)
> 이 기능을 어떻게 구현할 수 있을지에 대한 아이디어를 간단히 설명해주세요.
## #️⃣ 작업 상세 내용
- [ ] TODO
- [ ] TODO
- [ ] TODO
## 📎 참고할만한 자료 (선택)
> 관련 문서, 스크린샷, 또는 예시 등이 있다면 여기에 첨부해주세요.
로 만들었다
title은 [Feat], label은 feature
bug
## #️⃣ 어떤 버그인가요?
> #어떤 버그인지 간결하게 설명해주세요.
## #️⃣ 어떤 상황에서 발생한 버그인가요?
> (가능하면) Given-When-Then 형식으로 서술해주세요.
## #️⃣ 예상 결과
> 예상했던 정상적인 결과가 어떤 것이었는지 설명해주세요.
## #️⃣ 실제 결과
> 실제로 어떤 결과가 발생했는지 설명해주세요.
## 📎 참고할만한 자료(선택)
> 관련 문서, 스크린샷, 또는 예시 등이 있다면 여기에 첨부해주세요
유지보수
## #️⃣ 작업 내용
> 수행해야 할 작업 내용을 간략하게 설명해주세요.
## #️⃣ 작업이 필요한 이유
> 왜 이 작업이 필요한지 설명해주세요. 유지 보수 작업의 목적과 기대 효과를 기술해주세요.
## #️⃣ 작업 상세 내용
- [ ] TODO
- [ ] TODO
- [ ] TODO
## 📎 참고 자료 (선택)
> 관련 문서, 스크린샷, 또는 예시 등이 있다면 여기에 첨부해주세요
이렇게 했는데 전부 이슈에서만 되는 거였다.
그래서 그냥 git에서 바로 create file로 pr 템플릿을 만들어 넣었다.
## #️⃣ 연관된 이슈
> 관련된 이슈 번호를 적어주세요. 예: #이슈번호
## #️⃣ 작업 내용
> 이번 PR에서 작업한 내용을 간략히 설명해주세요. (이미지 첨부 가능)
## #️⃣ 테스트 결과
> 코드 변경에 대해 테스트를 수행한 결과를 요약해주세요. 예: 모든 테스트 통과 여부, 새로 작성한 테스트 케이스 등
## #️⃣ 변경 사항 체크리스트
- [ ] 코드에 영향이 있는 모든 부분에 대한 테스트를 작성하고 실행했나요?
- [ ] 문서를 작성하거나 수정했나요? (필요한 경우)
- [ ] 코드 컨벤션에 따라 코드를 작성했나요?
- [ ] 본 PR에서 발생할 수 있는 모든 의존성 문제가 해결되었나요?
## #️⃣ 스크린샷 (선택)
> 관련된 스크린샷이 있다면 여기에 첨부해주세요.
## #️⃣ 리뷰 요구사항 (선택)
> 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요.
> 예시: 이 부분의 코드가 잘 작동하는지 테스트해 주실 수 있나요?
## 📎 참고 자료 (선택)
> 관련 문서, 스크린샷, 또는 예시 등이 있다면 여기에 첨부해주세요
템플릿 설정 완료
git hook을 사용하면 티겟 번호를 계속해서 안작성해도 된다고 하여 진행해보고자 함


가 아니라 오른쪽에 있는 classic branch protection rule로 main 설정해주기



main은 lock을 걸어서 아무도 push를 못하게 하였음
https://velog.io/@codingmaster/15-%EC%8A%AC%EB%9E%99-api-%EC%97%B0%EB%8F%99
방식으로 slack에 pr 자동 연동도 해두었다
채널 생성 -> /invite @GitHub -> /github subscribe {org}/{repo} -> /github subscribe list로 확인 -> (추가사항) /github subscribe {org}/{repo} commits:* 까지 해주어여 commits 내용도 받을 수 있음. 너무 많은 거 같더면 삭제
.github/workflows 아래에 ci.yml 파일 생성!
이벤트(Event) → 워크플로우(Workflow) → 잡(Job) → 스텝(Step)으로 작동함
name: CI/CD - Spring Boot to EC2
on:
push:
branches: [ main ] # main 브랜치 푸시 시 실행
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout Source
uses: actions/checkout@v3
# 1. Java 17 세팅
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
# 2. Gradle 권한 부여 및 빌드 (테스트 제외)
- name: Build with Gradle
run: |
chmod +x ./gradlew
./gradlew clean build -x test
# 3. Docker 이미지 빌드 및 푸시 (Docker Hub 사용 시)
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Docker Build and Push
run: |
docker build -t ${{ secrets.DOCKER_USERNAME }}/myapp:latest .
docker push ${{ secrets.DOCKER_USERNAME }}/myapp:latest
# 4. EC2에 배포 (SSH 접속 후 Docker 실행)
- name: Deploy to EC2
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_KEY }}
script: |
docker pull ${{ secrets.DOCKER_USERNAME }}/myapp:latest
docker stop myapp || true
docker rm myapp || true
docker run -d --name myapp -p 8080:8080 ${{ secrets.DOCKER_USERNAME }}/myapp:latest
# 5. Slack 알림 (성공/실패 여부)
- name: Slack Notification
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
fields: repo,message,commit,author,took
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
if: always()
https://brotherdan.tistory.com/40 에 따라 파일 구조 만듦
main.py에는 아래 내용을 넣음
# app/main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
https://brunch.co.kr/@5c684f75c47e4a9/54
https://hub.docker.com/_/python 를 참고하여 작성함
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
# ---------- build stage ----------
FROM gradle:8.14.2-jdk17 AS builder
WORKDIR /app
COPY . .
RUN chmod +x gradlew
RUN ./gradlew clean build -x test
# ---------- run stage ----------
FROM gradle:8.14.2-jdk17
WORKDIR /app
COPY --from=build /app/build/libs/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
가장 기본적인 방식으로 작성
docker-compose.yml 생성해서 로컬에서만 테스트

힘겹게 잘 돌아가는 거 확인
http://localhost:8080 랑 http://localhost:8000/docs 를 실행시켜 작동하는지 확인