AWS DVA 개발자 도구 — CLI·SDK·CDK·CloudFormation

2026-05-03확률과 통계 마스터 노트

AWS DVA-C02 마스터 노트 시리즈 12편 완결편. AWS CLI 자격 증명 우선순위와 named profile·MFA, Boto3 등 SDK 사용 패턴, CloudFormation YAML 템플릿과 Stack·Drift, CDK로 코드처럼 인프라 작성, X-Ray·Cloud9 통합까지 — 시리즈 마무리에서 운영 도구 전반을 한 흐름으로.

이 글은 AWS DVA-C02 마스터 노트 시리즈의 마지막 편이자 열두 번째 편입니다. 1~11편이 AWS 서비스를 다뤘다면, 마지막은 그 서비스를 사용하는 도구 — CLI·SDK·CloudFormation·CDK.

AWS CLI

명령행에서 AWS 모든 서비스 호출.

자격 증명 우선순위

1. 명령행 옵션 (--profile, --region)
2. 환경 변수 (AWS_ACCESS_KEY_ID, ...)
3. ~/.aws/credentials 파일
4. ~/.aws/config 파일
5. EC2 인스턴스 프로파일 / ECS Task Role / Lambda 실행 역할

여기서 정말 중요한 시험 함정 — EC2/ECS/Lambda는 인스턴스 프로파일·역할 사용. 코드에 액세스 키 박지 X. 배포된 코드는 자동으로 5번 단계 사용.

Named Profile

여러 AWS 계정 관리.

# ~/.aws/credentials
[default]
aws_access_key_id = AKIA...
aws_secret_access_key = ...

[work]
aws_access_key_id = AKIB...
aws_secret_access_key = ...

[personal]
aws_access_key_id = AKIC...
aws_secret_access_key = ...
aws s3 ls --profile work
aws ec2 describe-instances --profile personal

MFA 사용

aws sts get-session-token \
  --serial-number arn:aws:iam::123456789012:mfa/user \
  --token-code 123456 \
  --duration-seconds 3600

받은 임시 자격 증명을 환경 변수로 export.

--query·--output

JMESPath로 응답 필터링.

# JSON 출력 일부만
aws ec2 describe-instances \
  --query 'Reservations[*].Instances[*].[InstanceId,State.Name]' \
  --output table

# 단일 값
aws ec2 describe-instances \
  --query 'Reservations[0].Instances[0].PrivateIpAddress' \
  --output text

Pagination

대량 결과 자동 페이지 처리.

aws s3api list-objects-v2 --bucket my-bucket --max-items 100

AWS SDK

언어별 라이브러리 — Python(Boto3)·JavaScript·Java·Go·.NET 등.

Boto3 기본 패턴

import boto3

# 클라이언트 (low-level)
s3 = boto3.client('s3')
response = s3.list_buckets()

# 리소스 (high-level, 일부 서비스)
s3 = boto3.resource('s3')
for bucket in s3.buckets.all():
    print(bucket.name)

Exponential Backoff

API 호출 실패 시 지수 백오프 재시도.

import boto3
from botocore.config import Config

config = Config(
    retries={
        'max_attempts': 10,
        'mode': 'adaptive'  # 'standard' or 'adaptive'
    }
)
client = boto3.client('dynamodb', config=config)

여기서 시험 함정이 하나 있어요. 5xx·429 응답은 자동 재시도, 4xx는 안 함. Throttling(429)은 재시도 정상.

Lambda Layer로 SDK

표준 SDK는 Lambda 런타임에 포함되지만 신버전 필요 시 Layer로 업로드.

Region 설정

# 1. 명시
boto3.client('s3', region_name='us-east-1')

# 2. 세션
session = boto3.Session(region_name='ap-northeast-2')

# 3. 환경 변수
# AWS_DEFAULT_REGION=us-east-1

# 4. ~/.aws/config

CloudFormation — IaC

AWS 인프라를 YAML·JSON으로 정의.

템플릿 구조

AWSTemplateFormatVersion: '2010-09-09'
Description: 'My Web App'

Parameters:
  InstanceType:
    Type: String
    Default: t2.micro
    AllowedValues: [t2.micro, t2.small]

Resources:
  MyEC2:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: !Ref InstanceType
      ImageId: ami-12345

  MyBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Sub '${AWS::AccountId}-my-app-${AWS::Region}'

Outputs:
  BucketName:
    Description: 'S3 Bucket Name'
    Value: !Ref MyBucket
    Export:
      Name: MyBucketName

핵심 함수 (Intrinsic Functions)

함수 용도
!Ref 다른 리소스·파라미터 참조
!GetAtt 리소스 속성 참조
!Sub 문자열 치환
!Join 문자열 결합
!FindInMap Mappings 조회
!ImportValue 다른 Stack의 Export 가져옴

Stack — 배포 단위

aws cloudformation create-stack \
  --stack-name my-app \
  --template-body file://template.yaml \
  --parameters ParameterKey=InstanceType,ParameterValue=t2.small

Change Set

배포 전 변경 사항 미리 확인.

aws cloudformation create-change-set \
  --stack-name my-app \
  --change-set-name my-changes \
  --template-body file://template.yaml

aws cloudformation describe-change-set \
  --stack-name my-app \
  --change-set-name my-changes

여기서 정말 중요한 시험 함정 — 운영에선 Change Set 검토 후 배포 권장. 직접 update-stack은 위험.

Drift Detection

Stack의 실제 상태와 템플릿 차이 감지.

aws cloudformation detect-stack-drift --stack-name my-app

콘솔에서 직접 변경한 리소스 = drift. IaC 표준 위반.

Nested Stack

Stack 안에 Stack — 모듈화·재사용.

Stack Sets

여러 계정·리전에 동시 배포.

Helper Scripts (cfn-init)

EC2 부팅 시 자동 설정.

Resources:
  MyEC2:
    Type: AWS::EC2::Instance
    Metadata:
      AWS::CloudFormation::Init:
        config:
          packages:
            yum:
              httpd: []
          services:
            sysvinit:
              httpd:
                enabled: true
                ensureRunning: true
    Properties:
      UserData: !Base64 |
        #!/bin/bash
        /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource MyEC2

여기서 시험 함정이 하나 있어요. cfn-init 으로 EC2 자동 설정. UserData 보다 선언적·재사용 가능.

CDK — Cloud Development Kit

코드(TypeScript·Python·Java·.NET)로 인프라 작성. CloudFormation 자동 생성.

Python 예시

from aws_cdk import (
    aws_lambda as lambda_,
    aws_apigateway as apigw,
    Stack,
)
from constructs import Construct

class MyStack(Stack):
    def __init__(self, scope: Construct, construct_id: str, **kwargs):
        super().__init__(scope, construct_id, **kwargs)

        # Lambda 함수
        my_function = lambda_.Function(
            self, "MyFunction",
            runtime=lambda_.Runtime.PYTHON_3_11,
            handler="app.handler",
            code=lambda_.Code.from_asset("lambda")
        )

        # API Gateway
        api = apigw.LambdaRestApi(
            self, "MyApi",
            handler=my_function
        )

CDK CLI

명령 용도
cdk init 프로젝트 생성
cdk synth CloudFormation 템플릿 생성
cdk deploy 배포
cdk diff 변경 사항
cdk destroy 삭제

Construct 계층

레벨 설명
L1 (Cfn*) CloudFormation 1:1 매핑
L2 (대부분) 합리적 기본값·헬퍼
L3 (Pattern) 다중 리소스 조합

여기서 정말 중요한 시험 함정 — CDK는 결국 CloudFormation으로 변환 됩니다. 디버깅 시 CFN 콘솔에서 확인. CDK는 작성 도구·CFN은 실행 엔진.

CloudFormation vs CDK vs SAM

도구 작성 자리
CloudFormation YAML/JSON 모든 AWS 인프라
CDK 코드 (TS·Python·Java) 복잡한 인프라·재사용
SAM YAML (CFN 확장) 서버리스 (Lambda·API Gateway)
Terraform HCL 멀티 클라우드 (AWS 외)

7편(서버리스)에서 SAM, 12편 마지막에서 CDK·CFN — 이 셋이 IaC의 AWS 표준.

Cloud9

브라우저 기반 IDE. 협업 개발·AWS 콘솔 통합.

git clone → Cloud9 IDE에서 편집 → AWS 자격 증명 자동 → 즉시 배포

Systems Manager Session Manager

SSH·RDP 없이 EC2 접속.

aws ssm start-session --target i-1234567890abcdef0

장점:

  • 포트 22 안 열어도 됨
  • IAM 권한으로 통제
  • 모든 세션 CloudTrail 기록

CodeWhisperer / Q Developer

AI 코드 자동 완성 (GitHub Copilot 비슷). VS Code·IntelliJ 플러그인.

시험 직전 한 번 더 — 자주 헷갈리는 함정 모음

여기까지가 12편의 핵심입니다. 시험 직전 또는 실무에서 헷갈릴 때 다시 펼쳐 볼 수 있게 압축 노트로 마무리할게요.

  • AWS CLI 자격 증명 우선순위 — 명령행 → 환경 변수 → credentials → config → 인스턴스 프로파일
  • EC2/ECS/Lambda는 인스턴스 프로파일·역할 사용 (코드에 키 박기 X)
  • Named Profile = 여러 계정 관리 (--profile work)
  • MFA = aws sts get-session-token
  • --query (JMESPath) + --output (table/text/json)
  • Pagination — 대량 결과 자동 처리
  • SDK = 언어별 (Python=Boto3)
  • 클라이언트(low-level) vs 리소스(high-level)
  • Exponential Backoff = 5xx·429 자동 재시도, 4xx는 X
  • Region 설정 — 명시 / 세션 / 환경 변수 / config
  • CloudFormation = YAML/JSON IaC
  • 핵심 함수 — !Ref / !GetAtt / !Sub / !Join / !FindInMap / !ImportValue
  • Change Set — 배포 전 변경 사항 미리 확인
  • Drift Detection — 콘솔 변경 감지
  • Nested Stack = 모듈화 / Stack Sets = 멀티 계정·리전
  • cfn-init = EC2 부팅 자동 설정 (UserData보다 선언적)
  • CDK = 코드 (TS·Python) → CFN 자동 생성
  • L1 (Cfn*) / L2 (기본) / L3 (Pattern, 다중 리소스)
  • cdk synth / deploy / diff / destroy
  • 결국 CFN 변환 — CFN 콘솔에서 디버깅
  • CFN vs CDK vs SAM — YAML / 코드 / 서버리스 YAML
  • Terraform = 멀티 클라우드
  • Cloud9 = 브라우저 IDE
  • Session Manager = SSH 없이 EC2 접속
  • CloudTrail 기록 + IAM 통제
  • CodeWhisperer = AI 자동 완성

시리즈 마무리 — 12편 전체 요약

여기까지 오신 분이 있다면 진심으로 축하드립니다. 시리즈 전체에서 잡아 둔 핵심을 마지막으로 정리합니다.

  • 1편 — IAM — 사용자·그룹·역할, 정책 평가, STS, Cognito
  • 2편 — 컴퓨팅 — EC2 구매 옵션, Lambda 한도, ELB, ASG, Beanstalk
  • 3편 — 스토리지 — S3 클래스 7종, 암호화 4종, Pre-signed URL, EBS, EFS
  • 4편 — 데이터베이스 — RDS Read Replica vs Multi-AZ, Aurora 6복사본, DynamoDB
  • 5편 — 네트워킹 — VPC, SG vs NACL, CloudFront, API Gateway, Route 53
  • 6편 — 메시징 — SQS Visibility Timeout, SNS Fan-out, Kinesis, EventBridge
  • 7편 — 서버리스 — Lambda 동시성, SAM, Step Functions, AppSync
  • 8편 — CI/CD — Code* 4종, 배포 전략 (In-Place·Blue/Green·Canary)
  • 9편 — 모니터링 — CloudWatch, X-Ray, CloudTrail
  • 10편 — 보안·암호화 — KMS, SSM, Secrets Manager, Encryption SDK
  • 11편 — 컨테이너 — ECS, Task vs Execution Role, ECR, EKS
  • 12편 — 개발자 도구 (현재 글) — CLI, SDK, CloudFormation, CDK

DVA-C02 시험 130분·65문항·합격선 720점. 시험 도메인 비중 — 개발 32% / 보안 26% / 배포 24% / 문제 해결 18%.

이 12편이 시험 범위 거의 전부를 다룹니다. 응시 전 마지막 점검:

  • ✅ Hands-on 1~2주 (실제 콘솔·CLI 실습)
  • ✅ Practice Exam 풀이 (시험 문체·시간 감각)
  • ✅ 시나리오 기반 사고 — "키워드 → 서비스 매핑"
  • ✅ IAM 정책 평가 룰 (명시적 Deny 우선)
  • ✅ 단순 암기보다 서비스 조합·트레이드오프 이해

다음 단계 — DVA-C02 합격 후 SAA-C03 (솔루션 아키텍트) 또는 SOA-C02 (운영). 멀티 자격증으로 본인 영역 확장.

시리즈 다른 편

공식 문서: AWS CLI Reference / CloudFormation User Guide / AWS CDK Developer Guide / DVA-C02 시험 가이드 에서 추가 자료를 볼 수 있어요.

DVA-C02는 한 번에 정복되는 시험이 아니에요. 매번 새 시나리오·새 함정과 만나며 평생 다듬어 가는 영역입니다. 시리즈 끝까지 읽어 주셔서 감사합니다. 시험 합격을 응원합니다!

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

답글 남기기

error: Content is protected !!