2/11 환경세팅

AI·2026년 2월 11일

jira github랑 연동

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

github 설정

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은 2명 이상 확인 받고 합치고 devlop은 1명 이상 확인으로 설정



main은 lock을 걸어서 아무도 push를 못하게 하였음

slack pr 및 commit 연동

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 actions

.github/workflows 아래에 ci.yml 파일 생성!
이벤트(Event) → 워크플로우(Workflow) → 잡(Job) → 스텝(Step)으로 작동함

작성할 워크 플로우

  1. main 브랜치에 코드가 push 되거나 pull_request가 생성될 때 실행됩니다.
  2. Node.js (TypeScript) 프로젝트를 빌드합니다.
  3. npm 의존성 설치 속도를 높이기 위해 캐싱(caching)을 활용합니다.
  4. 빌드된 결과물과 환경 변수를 포함하여 Docker 이미지를 빌드하고 Docker Hub에 푸시합니다 (docker compose 사용).
  5. 워크플로우 실행 결과를 Slack으로 알림 받습니다.
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()

도커 설정

fast api 생성

https://brotherdan.tistory.com/40 에 따라 파일 구조 만듦
main.py에는 아래 내용을 넣음

# app/main.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

Dockerfile 생성

fast api

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

spring

# ---------- 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 를 실행시켜 작동하는지 확인

0개의 댓글