AWS DVA-C02 시험에서 테스트 관련 문제는 주로 '코드를 배포하기 전에 어떻게 로컬에서 테스트하는가'를 묻습니다. 실제 AWS 환경을 매번 사용하면 비용도 들고 시간도 오래 걸리기 때문에, 개발자는 가능한 한 로컬 환경에서 먼저 테스트합니다. 그 방법을 하나씩 살펴봅시다.
SAM 로컬 테스트란 무엇인가?
AWS SAM(Serverless Application Model)은 Lambda 함수와 같은 서버리스 애플리케이션을 쉽게 만들고 배포하기 위한 도구입니다. SAM CLI를 설치하면 내 컴퓨터에서 Lambda 함수가 실제로 실행되는 것처럼 테스트할 수 있습니다.
쉽게 말하면, 마치 음식점에서 손님에게 내놓기 전에 주방에서 먼저 맛을 보는 것과 같습니다. 실제 서비스에 올리기 전에 미리 검증하는 것이죠.
SAM 로컬에서 자주 사용하는 명령어 세 가지:
sam local invoke
Lambda 함수를 내 컴퓨터에서 직접 실행합니다. 테스트할 이벤트 데이터(JSON 파일)를 함께 전달할 수 있습니다.
sam local start-api
로컬 컴퓨터에서 API Gateway를 흉내 낸 서버를 실행합니다. 브라우저나 Postman으로 로컬 주소(예: http://localhost:3000)에 요청을 보내서 테스트할 수 있습니다.
sam local generate-event
S3 파일 업로드, SQS 메시지 수신, API Gateway 요청 등 다양한 이벤트 상황을 흉내 낸 샘플 JSON 데이터를 자동으로 만들어줍니다. 테스트 시나리오를 직접 처음부터 작성하지 않아도 되어 매우 편리합니다.
테스트 이벤트란?
Lambda 함수는 혼자서 실행되지 않습니다. 반드시 어떤 사건(이벤트)이 발생해야 실행됩니다. 예를 들어 S3에 파일이 올라오면 실행되거나, SQS 대기열에 메시지가 도착하면 실행됩니다.
테스트를 할 때는 이런 이벤트를 직접 만들어서 함수에 전달해야 합니다. 각 이벤트 소스(S3, SQS, API Gateway, DynamoDB Streams 등)마다 전달되는 데이터의 구조(JSON 형식)가 다릅니다.
Lambda 콘솔 화면에서 직접 테스트 이벤트를 만들 수 있고, 앞서 소개한 sam local generate-event 명령어로도 만들 수 있습니다.
단위 테스트와 통합 테스트
단위 테스트
코드의 아주 작은 조각(함수 하나, 모듈 하나)을 따로 분리해서 테스트합니다. 이때 DynamoDB나 S3 같은 외부 서비스는 실제로 연결하지 않고, Mock(가짜)으로 대체합니다.
쉽게 말하면, 자동차를 테스트할 때 엔진만 따로 떼어내서 검사하는 것과 같습니다. Python 개발자는 moto 라이브러리, Node.js 개발자는 aws-sdk-mock 라이브러리를 많이 사용합니다.
통합 테스트
여러 서비스가 실제로 잘 연결되어 동작하는지 테스트합니다. Lambda → DynamoDB → S3로 이어지는 전체 흐름을 실제 환경에서 확인합니다.
API Gateway 스테이지
스테이지(Stage)란 같은 API를 개발(dev), 스테이징(staging), 운영(prod) 등 여러 환경으로 나누어 관리하는 방식입니다. 쉽게 말하면 같은 앱의 개발 버전, 테스트 버전, 실제 서비스 버전을 따로 운영하는 것입니다.
스테이지 변수: 각 스테이지마다 다른 Lambda 함수 주소나 DB 주소를 지정할 수 있습니다. 코드는 동일하지만 환경마다 다른 설정을 사용할 수 있죠. 카나리 릴리스: 새 버전을 배포할 때 일부 사용자(예: 전체의 10%)에게만 먼저 테스트합니다. 문제가 없으면 점차 모든 사용자에게 적용합니다.
Amazon Q Developer
Amazon Q Developer는 AI가 코드 작성을 도와주는 도구입니다. 코드 자동 생성, 버그 찾기, 테스트 코드 자동 작성 등을 지원합니다. 마치 경험 많은 동료 개발자가 옆에서 도와주는 것과 같습니다.
시험 핵심 정리
"로컬에서 Lambda 테스트" -- sam local invoke
"로컬에서 API Gateway 시뮬레이션" -- sam local start-api
"샘플 이벤트 JSON 생성" -- sam local generate-event
"외부 서비스를 Mock으로 대체" -- Mock API (moto, aws-sdk-mock)
"스테이지마다 다른 설정" -- API Gateway 스테이지 변수
"일부 트래픽만 새 버전으로" -- 카나리 릴리스
"AI 기반 코드/테스트 생성" -- Amazon Q Developer
단위 테스트 = 격리, Mock 사용 / 통합 테스트 = 실제 서비스 연동