AWS 미드레벨 테스트·코드품질 기술면접
새 면접Q. Lambda 함수에서 S3와 DynamoDB에 접근하는 로직을 단위 테스트해야 합니다. AWS SDK 호출을 모킹(Mocking)하는 방법을 설명하고, 실제 AWS 리소스를 사용하지 않고도 효과적인 테스트를 작성하기 위한 전략을 제시해주세요. 테스트 더블(Test Double)의 종류와 각각 어떤 상황에서 사용해야 하는지도 포함해주세요.
Mock, Stub, Fake의 차이와 의존성 주입 패턴을 고려해보세요.
AWS SDK 모킹은 aws-sdk-mock, sinon, jest.mock 등의 라이브러리를 사용하여 구현할 수 있습니다. Mock은 호출 검증이 필요할 때, Stub은 미리 정의된 응답만 필요할 때, Fake는 실제 동작과 유사한 간단한 구현이 필요할 때 사용합니다. Lambda 함수 내부에서 AWS SDK 클라이언트를 의존성 주입 패턴으로 분리하면 테스트 시 모킹이 용이합니다. LocalStack 같은 로컬 AWS 에뮬레이터를 사용하면 통합 테스트에서 실제 AWS 환경과 유사한 테스트가 가능합니다. 환경 변수를 통해 테스트/프로덕션 엔드포인트를 분리하고, 테스트에서는 모킹된 클라이언트를 주입하는 방식으로 격리된 단위 테스트를 작성할 수 있습니다.
- • Mock, Stub, Fake 등 테스트 더블의 적절한 선택
- • 의존성 주입을 통한 AWS SDK 클라이언트 분리
- • aws-sdk-mock 등 모킹 라이브러리 활용
- • LocalStack을 활용한 통합 테스트 전략
서버리스 애플리케이션에서 배포 전 Lambda 함수의 비즈니스 로직을 검증하고, AWS 비용 없이 빠른 피드백 루프를 구축할 때 사용됩니다.
LocalStack을 사용한 통합 테스트와 실제 AWS 환경을 사용한 E2E 테스트의 차이점은 무엇이며, 각각 언제 사용해야 할까요?
Q. CloudFormation 또는 Terraform으로 작성한 IaC(Infrastructure as Code)를 테스트하는 전략을 설명해주세요. cfn-lint, terraform validate 같은 정적 분석 도구와 실제 리소스를 프로비저닝하는 통합 테스트의 차이를 설명하고, CI/CD 파이프라인에서 각 단계별로 어떤 테스트를 수행해야 하는지 제시해주세요.
정적 분석, 단위 테스트, 통합 테스트, 정책 검증의 다층적 접근을 고려해보세요.
IaC 테스트는 여러 계층으로 구성됩니다. cfn-lint나 terraform validate는 문법 오류와 구조적 문제를 사전에 검증하는 정적 분석 도구입니다. cfn_nag, tfsec 같은 보안 린팅 도구로 보안 정책 위반을 사전에 탐지할 수 있습니다. Terratest, kitchen-terraform 같은 프레임워크를 사용하면 실제 리소스를 프로비저닝하고 검증하는 통합 테스트를 작성할 수 있습니다. CI/CD 파이프라인에서는 PR 단계에서 정적 분석과 보안 검증을 수행하고, 머지 후에는 개발 환경에 실제 배포하여 통합 테스트를 실행하는 것이 효과적입니다. OPA(Open Policy Agent)나 Sentinel을 사용하면 조직의 정책 준수 여부를 자동으로 검증할 수 있습니다.
- • 정적 분석 도구(cfn-lint, terraform validate)를 통한 문법 검증
- • 보안 린팅 도구(cfn_nag, tfsec)를 통한 정책 검증
- • Terratest 같은 프레임워크를 사용한 통합 테스트
- • CI/CD 파이프라인에서 단계별 테스트 전략
인프라 변경 사항이 프로덕션에 배포되기 전에 보안 정책 위반이나 구성 오류를 사전에 탐지하여 장애를 예방할 때 사용됩니다.
Terratest로 작성한 통합 테스트에서 리소스 프로비저닝 실패 시 어떻게 정리(cleanup)를 보장할 수 있을까요?
Q. API Gateway와 Lambda로 구성된 REST API의 통합 테스트를 작성하려고 합니다. 로컬 환경에서 SAM Local이나 LocalStack을 사용하는 방법과 실제 AWS 환경에 테스트 스택을 배포하는 방법의 장단점을 비교하고, 각각 어떤 상황에서 사용해야 하는지 설명해주세요. 테스트 데이터 관리와 테스트 격리 전략도 포함해주세요.
로컬 테스트의 속도와 실제 환경 테스트의 정확성 사이의 트레이드오프를 고려해보세요.
SAM Local과 LocalStack은 로컬 환경에서 빠른 피드백 루프를 제공하지만, 실제 AWS 서비스와 100% 동일하지 않아 edge case를 놓칠 수 있습니다. 개발 단계에서는 로컬 환경으로 빠르게 반복하고, CI/CD 파이프라인에서는 실제 AWS 환경에 임시 스택을 배포하여 통합 테스트를 수행하는 것이 효과적입니다. 테스트 데이터는 각 테스트마다 독립적인 리소스(예: DynamoDB 테이블)를 생성하거나, 테스트 전후에 setup/teardown으로 데이터를 초기화하여 격리를 보장합니다. 테스트 스택은 고유한 스택 이름(예: api-test-{branch}-{commit-hash})을 사용하여 병렬 실행 시 충돌을 방지하고, 테스트 완료 후 자동으로 삭제하여 비용을 절감합니다. 환경별로 다른 설정(엔드포인트, 리소스 이름)을 사용하여 프로덕션 환경과 완전히 격리합니다.
- • 로컬 환경(SAM Local, LocalStack)의 빠른 피드백과 한계
- • 실제 AWS 환경 테스트의 정확성과 비용 트레이드오프
- • 테스트별 독립적인 리소스 생성으로 격리 보장
- • 임시 스택 자동 생성/삭제를 통한 비용 관리
마이크로서비스 API의 변경 사항이 기존 클라이언트와 호환되는지 검증하고, 배포 전에 통합 이슈를 발견할 때 사용됩니다.
여러 개발자가 동시에 PR을 올렸을 때 각각의 통합 테스트가 서로 간섭하지 않도록 하려면 어떤 전략을 사용해야 할까요?
Q. ECS/EKS에서 사용할 Docker 이미지의 품질을 보장하기 위한 테스트 전략을 설명해주세요. Dockerfile 린팅, 이미지 취약점 스캔, 컨테이너 런타임 테스트를 각각 어떻게 구현하는지 설명하고, ECR의 이미지 스캔 기능과 Trivy, Snyk 같은 서드파티 도구를 비교해주세요. CI/CD 파이프라인에서 어떤 단계에 배치해야 하는지도 포함해주세요.
빌드 시점 검증과 런타임 검증을 분리하여 생각해보세요.
Dockerfile 린팅은 hadolint를 사용하여 베스트 프랙티스 위반(예: 불필요한 레이어, 루트 사용자 실행)을 사전에 탐지합니다. ECR의 이미지 스캔은 푸시 시 자동으로 CVE 취약점을 검사하지만, 기본 스캐너는 OS 패키지에만 집중합니다. Trivy나 Snyk는 애플리케이션 의존성까지 포함한 더 광범위한 취약점 스캔을 제공하며, CI 파이프라인에 통합하기 쉽습니다. 컨테이너 런타임 테스트는 Container Structure Test나 Goss를 사용하여 이미지 내 파일 존재 여부, 포트 노출, 환경 변수 설정 등을 검증합니다. CI/CD 파이프라인에서는 빌드 직후 hadolint로 Dockerfile 검증, 이미지 빌드 후 Trivy로 취약점 스캔, 컨테이너 실행 후 런타임 테스트를 순차적으로 수행하고, 임계값 이상의 취약점이 발견되면 배포를 차단합니다.
- • hadolint를 통한 Dockerfile 베스트 프랙티스 검증
- • Trivy, Snyk 등 취약점 스캔 도구와 ECR 스캔 비교
- • Container Structure Test로 이미지 구조 검증
- • CI/CD 파이프라인에서 단계별 검증 배치
컨테이너 이미지에 포함된 취약점이 프로덕션 환경에 배포되기 전에 발견하여 보안 사고를 예방할 때 사용됩니다.
취약점이 발견된 베이스 이미지를 사용 중일 때, 프로덕션에 이미 배포된 컨테이너를 어떻게 관리해야 할까요?
Q. Lambda 함수가 하나의 핸들러에서 S3 이벤트 처리, DynamoDB 저장, SNS 알림 발송을 모두 수행하고 있어 테스트가 어렵고 유지보수성이 낮습니다. 이 코드를 리팩토링하여 단일 책임 원칙(SRP)을 준수하고 테스트 가능성을 높이는 방법을 설명해주세요. 리팩토링 전후의 테스트 전략 차이와, 리팩토링이 안전하게 수행되었는지 검증하는 방법도 포함해주세요.
관심사의 분리와 의존성 역전 원칙을 적용해보세요.
먼저 각 책임을 별도의 모듈이나 클래스로 분리합니다. S3EventParser, OrderRepository, NotificationService 같은 독립적인 컴포넌트로 나누고, 각각 단일 책임만 갖도록 설계합니다. 의존성 역전 원칙을 적용하여 인터페이스를 정의하고, 구현체를 주입받도록 변경하면 테스트 시 모킹이 용이합니다. 리팩토링 전에는 전체 플로우를 통합 테스트로만 검증해야 했지만, 리팩토링 후에는 각 컴포넌트를 독립적으로 단위 테스트할 수 있습니다. 리팩토링의 안전성은 기존 통합 테스트를 유지하면서(regression test), 새로운 단위 테스트를 추가하여 검증합니다. Golden Master Testing 기법을 사용하여 리팩토링 전후의 입출력이 동일한지 확인할 수 있습니다. 점진적으로 리팩토링하고 각 단계마다 테스트를 실행하여 문제를 조기에 발견합니다.
- • 단일 책임 원칙에 따른 컴포넌트 분리
- • 의존성 역전을 통한 테스트 가능성 향상
- • 기존 통합 테스트 유지와 새로운 단위 테스트 추가
- • Golden Master Testing으로 리팩토링 검증
레거시 Lambda 함수의 복잡도가 증가하여 새로운 기능 추가나 버그 수정이 어려워졌을 때, 테스트 가능한 구조로 개선하는 데 사용됩니다.
리팩토링 중에 프로덕션 배포가 필요한 경우, 안전하게 점진적으로 변경을 적용하는 전략은 무엇일까요?
Q. API Gateway와 Lambda로 구성된 API의 성능 테스트를 수행하려고 합니다. Artillery, Locust, JMeter 같은 부하 테스트 도구를 사용하여 Lambda의 동시성 제한, API Gateway의 throttling, DynamoDB의 처리량 제한을 시뮬레이션하는 방법을 설명해주세요. 테스트 결과에서 어떤 지표를 모니터링해야 하고, 성능 병목을 식별하는 방법도 포함해주세요.
점진적 부하 증가와 다양한 CloudWatch 메트릭의 상관관계를 분석해보세요.
성능 테스트는 점진적으로 부하를 증가시키는 ramp-up 전략을 사용합니다. Artillery나 Locust로 초당 요청 수를 단계적으로 늘리면서 Lambda 동시성, API Gateway 429 에러, DynamoDB throttling 발생 시점을 파악합니다. CloudWatch에서 Lambda Duration, ConcurrentExecutions, Throttles 메트릭과 API Gateway 4XXError, 5XXError, Latency를 모니터링합니다. DynamoDB의 ConsumedReadCapacityUnits, ConsumedWriteCapacityUnits를 추적하여 프로비저닝된 용량 대비 사용률을 확인합니다. X-Ray를 활성화하여 각 구간별 지연시간을 분석하고 병목 구간을 식별합니다. 테스트 시나리오는 실제 트래픽 패턴을 반영하여 읽기/쓰기 비율, 요청 크기 분포를 현실적으로 설정합니다. 결과 분석 시 평균 응답시간뿐만 아니라 P95, P99 같은 백분위수를 확인하여 worst-case 성능을 파악합니다.
- • ramp-up 전략으로 점진적 부하 증가
- • Lambda, API Gateway, DynamoDB의 핵심 메트릭 모니터링
- • X-Ray를 통한 구간별 지연시간 분석
- • 백분위수(P95, P99) 기반 성능 평가
대규모 이벤트(예: 플래시 세일)를 앞두고 시스템이 예상 트래픽을 처리할 수 있는지 검증하고, 병목 지점을 사전에 개선할 때 사용됩니다.
성능 테스트에서 Lambda Cold Start의 영향을 최소화하거나 명시적으로 측정하려면 어떻게 해야 할까요?
Q. AWS 인프라 코드와 애플리케이션 코드에 대한 코드 리뷰 프로세스를 자동화하려고 합니다. CodeGuru Reviewer, SonarQube, 그리고 커스텀 린팅 규칙을 활용한 자동화된 코드 리뷰 시스템을 설계하고, 어떤 종류의 이슈를 자동으로 탐지할 수 있는지 설명해주세요. 사람이 수행하는 코드 리뷰와 자동화된 리뷰의 역할 분담 전략도 제시해주세요.
자동화 도구는 정량적 품질을, 사람은 정성적 품질을 검토하는 것이 효과적입니다.
CodeGuru Reviewer는 AWS 베스트 프랙티스, 리소스 누수, 동시성 이슈, 보안 취약점을 자동으로 탐지하며, PR에 직접 코멘트를 남깁니다. SonarQube는 코드 복잡도, 중복 코드, 테스트 커버리지, 기술 부채를 정량적으로 측정하고 품질 게이트를 설정할 수 있습니다. ESLint, Pylint 같은 린터로 코딩 스타일과 안티패턴을 검증하고, 조직 내 커스텀 규칙을 추가할 수 있습니다. 자동화 도구는 문법 오류, 보안 취약점, 성능 안티패턴, 스타일 가이드 위반 같은 명확한 기준이 있는 이슈를 탐지합니다. 사람은 비즈니스 로직의 정확성, 설계 패턴의 적절성, 가독성, 확장성 같은 맥락적 판단이 필요한 부분을 리뷰합니다. CI/CD 파이프라인에서 자동화 도구를 먼저 실행하여 기본적인 품질 문제를 걸러내고, 사람의 리뷰 시간을 더 중요한 부분에 집중할 수 있도록 합니다.
- • CodeGuru Reviewer로 AWS 베스트 프랙티스 자동 검증
- • SonarQube로 코드 품질 정량적 측정
- • 자동화 도구는 명확한 기준의 이슈 탐지
- • 사람은 맥락적 판단이 필요한 부분 리뷰
대규모 팀에서 모든 PR에 대해 일관된 품질 기준을 적용하고, 리뷰어의 부담을 줄이면서도 코드 품질을 유지할 때 사용됩니다.
자동화 도구가 false positive를 많이 발생시켜 개발자들이 무시하게 되는 상황을 어떻게 개선할 수 있을까요?
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!