Open Codelabs AWS(Amazon Web Services) 배포 가이드¶
이 문서는 Open Codelabs 프로젝트를 AWS 인프라를 활용하여 배포하는 다양한 방법을 설명합니다.
🚀 AWS 배포 옵션¶
Open Codelabs는 아키텍처에 따라 크게 세 가지 방식으로 AWS에 배포할 수 있습니다.
1. AWS App Runner (추천 - 가장 쉬운 컨테이너 방식)¶
Google Cloud Run과 유사하게, 소스 코드나 Docker 이미지를 직접 배포할 수 있는 풀 관리형 서비스입니다. 인프라 관리 없이 백엔드와 프런트엔드를 실행하기에 가장 적합합니다.
🏗 아키텍처¶
- Frontend: SvelteKit -> App Runner 서비스 1
- Backend: Rust Axum -> App Runner 서비스 2
- Database:
- 간이 배포: App Runner 인스턴스 내 SQLite 사용 (재시작 시 데이터 초기화 주의)
- 권장: AWS RDS (PostgreSQL/MySQL) 사용
🛠 배포 단계¶
- ECR (Elastic Container Registry) 생성
- 이미지 빌드 및 푸시
# Backend cd backend docker build -t [ACCOUNT_ID].dkr.ecr.[REGION].amazonaws.com/open-codelabs/backend:latest . docker push [ACCOUNT_ID].dkr.ecr.[REGION].amazonaws.com/open-codelabs/backend:latest # Frontend cd ../frontend docker build -t [ACCOUNT_ID].dkr.ecr.[REGION].amazonaws.com/open-codelabs/frontend:latest . docker push [ACCOUNT_ID].dkr.ecr.[REGION].amazonaws.com/open-codelabs/frontend:latest - App Runner 서비스 생성
- AWS Console에서 App Runner로 이동하여 '서비스 생성'을 클릭합니다.
- ECR에 푸시한 이미지를 선택하고, 환경 변수를 설정합니다.
- Backend:
DATABASE_URL,ADMIN_ID,ADMIN_PW - Frontend:
VITE_API_URL(백엔드 App Runner URL)
- Backend:
2. AWS EC2 (전통적인 방식)¶
가상 머신(VM)에 직접 Docker Compose를 사용하여 배포하는 방식입니다. 가장 저렴하게(Free Tier 활용 시) 운영할 수 있는 방법입니다.
- EC2 인스턴스 생성 (Amazon Linux 2023 또는 Ubuntu 추천)
- 보안 그룹 설정: 80, 443(HTTPS), 5173(Frontend), 8080(Backend) 포트 개방
- Docker & Docker Compose 설치
- 저장소 클론 및 실행
3. AWS Amplify (프런트엔드 전용)¶
Firebase 모드(VITE_USE_FIREBASE=true)를 사용하거나, 프런트엔드만 AWS에서 호스팅하고 싶을 때 적합합니다.
- Amplify Console 접속 및 GitHub 저장소 연결
- 빌드 설정: SvelteKit 설정을 자동으로 감지합니다.
- 환경 변수 설정:
VITE_USE_FIREBASE,VITE_FIREBASE_API_KEY등 필요한 설정을 추가합니다.
💾 데이터베이스 및 스토리지 설정 (Production)¶
운영 환경에서는 데이터 영속성을 위해 다음 서비스를 연동하는 것을 권장합니다.
1. Database (RDS)¶
백엔드 DATABASE_URL 환경 변수에 RDS 주소를 입력합니다.
* PostgreSQL: postgres://user:password@host:port/dbname
* MySQL: mysql://user:password@host:port/dbname
2. Storage (S3)¶
이미지 업로드를 위해 AWS S3를 사용할 수 있습니다. * 현재 프로젝트는 로컬 파일 시스템 또는 Firebase Storage를 기본으로 지원합니다. * AWS S3 연동이 필요한 경우 별도의 SDK 구현이 필요합니다. (기본적으로는 컨테이너 모드에서 로컬 볼륨 마운트나 Firebase 모드를 권장합니다.)
💡 어떤 방식을 선택해야 하나요?¶
| 특징 | App Runner | EC2 (Docker) | Amplify (Frontend) |
|---|---|---|---|
| 난이도 | 낮음 | 보통 | 매우 낮음 |
| 비용 | 사용량 기반 | 고정 비용 (인스턴스) | 사용량 기반 |
| 관리 부담 | 매우 낮음 | 보통 | 낮음 |
| 적합한 사례 | 빠른 프로토타이핑, 자동 스케일링 필요 시 | 가장 저렴한 운영, 전체 제어 필요 시 | Firebase 모드 사용 시 |
결론: 컨테이너 기술에 익숙하다면 AWS App Runner를, 비용 최적화가 중요하다면 EC2를 추천합니다.