API 테스트 및 배포
AWS에서 애플리케이션 개발하기
Ricardo Sueiras
Principal Technologist
개발자를 위한 코드형 인프라
- 클라우드 네이티브 앱은 코드형 인프라(Infrastructure-as-Code, IaC)로 배포합니다.
- 구성 파일에 클라우드 리소스를 정의합니다.
- AWS 관리 콘솔에서 수동 설정(clickops)을 피할 수 있습니다.
AWS CloudFormation
- AWS의 기본 IaC 서비스입니다.
- YAML 또는 JSON 템플릿으로 AWS 리소스를 정의합니다.
AWS Cloud Development Kit (CDK)
- CDK는 코드를 사용해 IaC를 정의합니다.
- YAML이나 JSON 대신 Python, TypeScript, Java로 작성합니다.
- 앱은 배포 시점에 CloudFormation 템플릿으로 변환됩니다.
AWS Serverless Application Model (SAM)
- CloudFormation을 확장합니다.
- 서버리스 리소스와 API를 위한 간소화된 문법을 제공합니다.
- 변환 계층 역할을 합니다.
- SAM 문법을 완전한 CloudFormation 템플릿으로 변환합니다.
SAM의 주요 기능
- 최소 권한 IAM 역할을 자동 생성하며, 세부 조정도 가능합니다.
- 배포 파이프라인을 구성 파일로 정의합니다.
sam build와 sam deploy로 패키징하고 배포합니다.
sam validate로 템플릿 오류를 미리 확인합니다.
sam local start-lambda로 Lambda를 로컬에서 에뮬레이션합니다.
SAM으로 테스트하기
- 배포 전 서버리스 앱을 로컬에서 빌드, 호출, 테스트합니다.
- Lambda 함수와 API Gateway 통합을 테스트합니다.
sam local invoke로 함수를 로컬에서 호출합니다.
sam local start-api로 API Gateway를 에뮬레이션합니다.
단위 테스트
- SAM과 단위 테스트로 Lambda 동작을 검증합니다.
- 로컬 테스트는 개발 주기를 단축합니다.
pytest, JUnit, Jest 같은 프레임워크와 함께 사용합니다.
테스트 워크플로
sam local generate-event로 테스트 이벤트를 생성합니다.
- JSON 이벤트 파일을 출력합니다.
sam local invoke FunctionName -e event.json으로 로컬에서 호출합니다.
- 배포 전 프레임워크의 검증(assertion)으로 응답을 확인합니다.
AWS 서비스 모킹
moto 같은 모킹 라이브러리와 로컬 테스트를 결합합니다.
- 실제 호출 없이 시뮬레이션된 AWS 서비스와 상호작용합니다.
- 테스트 속도를 높입니다.
- 테스트 비용을 줄입니다.
- 스로틀링이나 장애 같은 오류 시나리오를 검증합니다.
지속적 통합 및 지속적 배포 (CI/CD)
- SAM 앱은 보통 CI/CD 파이프라인을 통해 배포됩니다.
- 빌드, 테스트, 패키징, 배포를 자동화합니다.
- AWS CodeCommit은 코드와 SAM 템플릿을 저장합니다.
- AWS CodeBuild는 테스트와
sam build를 실행합니다.
- AWS CodePipeline은 워크플로를 조율합니다.
CI/CD 워크플로
- 소스 코드와 SAM 템플릿을 저장소에 커밋합니다.
- 자동화된 테스트와 검증을 실행합니다.
sam build로 앱을 패키징합니다.
sam deploy로 리소스를 배포합니다.
- 배포 후 CloudWatch로 모니터링합니다.
배포 문제 해결
- 문제 해결은 핵심적인 운영 역량입니다.
- 흔한 배포 실패 원인:
- IAM 권한 문제.
- 잘못된 SAM 또는 CloudFormation 템플릿.
- Lambda 패키징 실패 또는 종속성 누락.
- 잘못된 API Gateway 구성.
배포 문제 해결
- SAM 배포는 내부적으로 CloudFormation에서 실행됩니다.
- 스택 이벤트와 자동 롤백 기능을 제공합니다.
- 배포 실패를 파악하는 데 도움이 됩니다.
- 이전 환경 상태로 복원하도록 롤백합니다.
배포 문제 해결
- 다음 항목으로 문제를 해결합니다:
- CloudWatch 로그.
- API Gateway 실행 로그.
- Lambda 로그.
- CloudWatch 지표.
연습해 봅시다!
AWS에서 애플리케이션 개발하기
Preparing Video For Download...