레거시 모놀리스를 AWS 서버리스로 마이그레이션
Source: Dev.to
개요
이 프로젝트는 Strangler Fig Pattern을 사용하여 레거시 모놀리식 애플리케이션을 AWS 서버리스 아키텍처로 마이그레이션하는 방법을 보여줍니다. 다음을 활용합니다:
- 인프라스트럭처를 코드로 관리하는 Terraform
- 애플리케이션 로직을 구현하는 Python
목표는 새로운 기능을 모놀리식에서 분리하여 서버리스 컴포넌트로 교체하는 과정을 기존 시스템을 중단하지 않고 시연하는 것입니다.
아키텍처
솔루션은 다음과 같은 주요 구성 요소로 이루어집니다:
- 레거시 모놀리식
- 새로운 서버리스 컴포넌트
라우트 동작
| 라우트 | 설명 |
|---|---|
/products | 마이그레이션된 라우트 |
/products/restock | 강화된(혼돈) 라우트 |
사전 요구 사항
배포하기 전에 다음을 준비하세요:
- AWS 계정 (Free Tier 사용 가능)
- AWS CLI 설치 및 설정 (
aws configure) - Terraform v1.0 이상
- 테스트용 Postman 또는
curl
프로젝트 구조
strangler-fig-aws-migration-demo/
배포 단계
1️⃣ Terraform 초기화
# infra-terraform 디렉터리 안에서
terraform init
2️⃣ 인프라 배포
terraform apply
프롬프트가 나오면 yes를 입력합니다.
배포는 약 2분 정도 소요되며, EC2 인스턴스가 의존성을 설치하고 레거시 서버를 시작하는 데 추가로 약 3분이 더 걸립니다.
3️⃣ API URL 가져오기
Terraform은 다음과 유사한 값을 출력합니다:
api_url = "https://.execute-api.us-east-1.amazonaws.com"
테스트를 위해 이 URL을 복사하세요.
테스트 시나리오
| 시나리오 | 엔드포인트 | 설명 |
|---|---|---|
| 1 | /users | 레거시 라우트 |
| 2 | /products | 마이그레이션된 라우트 |
| 3 | /products/restock | 혼돈 라우트 (POST) |
시나리오 3에 대한 예시 요청:
curl -X POST /products/restock
문제 해결 가이드
| 문제 | 원인 |
|---|---|
| 502 Bad Gateway | API Gateway가 EC2 인스턴스에 도달하지 못함. |
| 400 Bad Request | 페이로드 버전 불일치. |
| 500 Internal Server Error | 혼돈 테스트를 위한 의도된 오류. |
| 405 Method Not Allowed | POST 전용 라우트에 GET 사용. |
필요 시 요청을 다시 실행하세요:
curl -X POST /products/restock
정리 (요금 발생 방지)
작업이 끝났으면 모든 리소스를 삭제합니다:
terraform destroy