회고

AWS Free Tier 한계, 이렇게 극복했다 – 집 PC로 완성한 MSA + 자동 배포 환경

창따오 2025. 7. 23. 16:33
728x90

1. 들어가며

AWS 프리티어만으로는 MSA 구조나 CI/CD 자동화 구축에 명확한 한계가 있습니다. 여러 서비스 인스턴스, 데이터베이스 분리, Kafka 등 다양한 컴포넌트를 사용하려면 리소스가 부족하죠.
그래서 저는 집 PC를 서버로 삼아, AWS 프리티어와 병행하여 MSA 환경을 완성하고, GitHub Actions와 Docker Hub를 활용해 완전 자동화된 CI/CD 파이프라인까지 구축했습니다.

 


2. 왜 집 PC를 서버로 썼을까?

✅ AWS Free Tier의 한계

  • EC2 t2.micro → CPU & RAM 매우 제한적 (1GB RAM)
  • RDS는 1개 DB만 운영 가능
  • Kafka, Eureka, Gateway, Auth, User 등 여러 마이크로서비스를 동시에 돌리기에 무리
  • EKS/ECS 사용 불가 → 오케스트레이션 구축 어려움

✅ 내가 선택한 전략

개발용 백엔드 서버는 집 PC, 코드 저장소는 GitHub, 빌드/배포는 자동화!

 

                +------------------------+
                |       GitHub Repo      |
                +------------------------+
                          |
                          | push 시 자동 실행
                          ▼
                +------------------------+
                |    GitHub Actions CI   |
                | - gradle build         |
                | - docker build & push  |
                +------------------------+
                          |
                          | Docker Hub 이미지 푸시
                          ▼
                +------------------------------+
                |   집 PC (Self-hosted Runner) |
                | - 이미지 pull                |
                | - 컨테이너 자동 재시작       |
                +------------------------------+

[집 PC 내부 서비스 구조 - Docker Compose]
- Spring Cloud Gateway
- Eureka Server
- Auth-Service
- User-Service
- Kafka + Zookeeper
- PostgreSQL

 


4. CI/CD 구성 방식

✅ CI (GitHub Actions)

  • 브랜치 main에 push 시 자동으로 실행
  • Gradle로 Spring Boot 앱 build (bootJar)
  • Docker image 빌드 및 Docker Hub에 push

✅ CD (집 PC – Self-hosted Runner)

  • Docker Hub에 새 이미지가 올라오면 GitHub Actions가 실행되어
  • 집 PC에서 해당 이미지 pull
  • docker compose up -d로 컨테이너 자동 재시작

✅ 환경 변수 관리

  • .env 파일로 각 서비스의 DB 정보, JWT Secret, Kafka 설정 등 주입

5. 도전과 트러블슈팅

                   문제                                                                                                              해결 방법

 

JWT_SECRET_KEY 환경 변수 주입 오류 .env를 container 내에서 인식시키도록 compose에 env_file 명시
GitHub Runner 실행 안 됨 runner 꺼져있던 상태 → 백그라운드로 실행 (./run.sh &)
docker compose pull 실패 YAML 문법 오류 (콜론 누락 등) → 줄 단위 확인
Gateway → Auth 연결 안 됨 auth_service → auth-service로 DNS 네이밍 수정 (Eureka 등록 이름 사용)

 


6. 회고

  • AWS 프리티어만으로는 학습 목적의 MSA 환경조차 구성하기 어려웠다.
  • 집 PC를 리눅스 기반 DevOps 서버로 구성한 게 가장 현실적이고 효율적인 방법이었다.
  • 이제는 GitHub에 코드만 올리면 이미지가 자동으로 빌드되고, 집에서 돌아가는 서버가 자동으로 배포까지 해준다.
  • 소규모 SaaS 프로토타입이나, 개발자 포트폴리오용 백엔드 환경으로 추천하고 싶은 구조다.

🛠 참고자료 & 깃헙

  • GitHub Repository (옵션)
  • Docker Compose 설정 예제
  • GitHub Actions Workflow YAML