[AWS/배포] Nginx + GitHub Actions로 Spring Boot & FastAPI CI/CD 자동 배포하기 (1) - 인스턴스 생성
2025. 8. 7. 00:42ㆍCS
AI 프로젝트를 진행하다 보면, Spring Boot로 구현한 백엔드 서버와 FastAPI로 구현한 AI 서버를 동시에 배포해야 하는 상황이 자주 발생합니다.
저희 프로젝트에서는 BE(Backend)와 AI 서버를 별도의 GitHub 레포지토리로 분리하여 관리하고 있으며, 이 구조를 기반으로 GitHub Actions를 활용한 CI/CD 파이프라인을 구축했습니다.
하나의 EC2 인스턴스 내에서 BE, AI, Nginx 서버를 함께 운영하고 CI/CD자동 배포하는 과정을 자세히 소개해보겠습니다.
인스턴스 생성
1. 할당량 요청
프로젝트에서 openAI(ChatGPT API) / hugging face(stable diffusion, controlnet) 등 GPU가 필요한 API를 사용하기 때문에 프리티어만으로는 부족합니다.
따라서 Running On-Demand G and VT instances 할당량 증가를 요청합니다.
저는 프로젝트 크기를 고려하여 8로 증가해 주었습니다.


할당량을 신청하면 위처럼 사례가 개설되고, 요청이 승인될 때까지 며칠이 요소됩니다.
저는 3일 정도 요소 되었습니다. 서울이 GPU 사용량이 많아서 조금 늦은 편인 것 같습니다.
(중간 중간 이메일로 진행상황을 받아보실 수 있습니다.)
2. Amazon Machine Image : 애플리케이션 및 OS 이미지
각자 자신의 프로젝트에 맞는 AMI를 선택합니다.
저는 Deep Learning AMI GPU PyTorch 1.13.1 (Ubuntu 20.04) 20231107를 선택해 주었습니다.

3. 인스턴스 유형 & 키 페어 설정
인스턴스 유형 또한 각자의 프로젝트에 맞게 설정합니다. 저는 g5.xlarge를 선택해주었습니다.
키 페어는 인스턴스 연결을 위해서 설정해줍니다.

4. 인바운드 보안 그룹 규칙
SpringBoot와 FastAPI를 각각 다른 port에서 실행하기 때문에 해당 연결에 대한 인바운드 보안 그룹 규칙을 추가합니다.
- SpringBoot API server : 사용자 지정 TCP / 위치 무관 / 8000
- FastAPI server : 사용자 지정 TCP / 위치 무관 / 8080
Nginx는 따로 설정할 필요 없이 기본적으로 설정되어있는 HTTP 80 포트를 사용합니다.
프로젝트 테스트 단계이기 때문에 소스 유형은 위치 무관 설정해줍니다.


5. 스토리지 구성
스토리지는 사용되는 만큼 비용이 청구 되기 때문에 넉넉히 100으로 설정해줍니다.

이렇게 인스턴스 생성이 완료되었습니다!
저는 인스턴스 생성 후 Elastic IP도 설정해서 인스턴스를 중단하고 재실행하더라도 IP 주소가 유지되도록 설정하였습니다
[AWS 배포 가이드] Nginx + GitHub Actions로 Spring Boot & FastAPI CI/CD 자동 배포하기 (2) - deploy.yml 및 DockerFile
저번 시간에 인스턴스를 생성하였으니,이번 시간에는 본격적으로 GitHub Actions를 사용한 CI/CD 자동 배포 환경을 구축해보겠습니다.저는 Docker를 사용하여 하나의 EC2 안에 SpringBoot, FastAPI, Nginx 컨테
hhongyeahh.tistory.com