회고
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