코드 기반 인프라(IaC)를 활용한
현대 애플리케이션 개발 가속화,
우리도 할 수 있어요
김필중, 솔루션즈 아키텍트, AWS
왜 코드 기반 인프라일까요?
빠른 혁신을 가능
현대 애플리케이션 개발 방식
Cloud-native
- AWS
현대 애플리케이션 개발 방식
Re-host
Re-platform
Re-factor
Re-invent
방식 별 활용 가능 서비스
Re-host Re-platform
Re-factor Re-invent
반복, 반복, 반복
피드백아이디어
실험
혁신
플라이 휠
자동화
인프라 구성 자동화
서비스에 필요한 리소스 구성
애플리케이션 배포 자동화
애플리케이션을 더 효율적이고, 안전하며, 빠르게 배포
애플리케이션을 빌드, 테스트, 배포
코드 기반 인프라의 목적
• 인프라 변경 사항을 반복적이고 예측 가능하게 함
• 코드 변경과 동일한 도구를 사용하여 인프라 변경 사항 릴리즈
• 스테이징 환경에서 프로덕션 환경으로 복제하여 지속적인 테스트를
가능하게 함
코드 기반 인프라 구성 프로세스
디자인 스택 생성 반복
앱 코드
작성
인프라
템플릿 작성
AWS CloudFormation
클라우드 인프라 템플릿을 정의하기 위한 언어
- JSON 및 YAML 지원
AWS 리소스 프로비저닝
CI/CD, 개발, 관리 도구와 통합AWS CloudFormation
AWS Cloud Development Kit (AWS CDK)
재사용 가능한 구성 요소로 클라우드 인프라를 모델링하기 위한 다양한 언어를 지원
하는 프레임워크
AWS CloudFormation
AWS Cloud Development Kit (AWS CDK)
AWS CDK 앱에서부터 인프라가 구성될 때까지의 흐름
AWS Cloud Development Kit (AWS CDK)
AWS Construct Library
Framework CLI
CDK Application
Stack(s)
ConstructConstruct
Core Framework AWS CDK CLI
Serverless
Containers CI/CD
Application Integration / Foundational
Autoscaling
메인 구성요소
무엇이든 직접 보는게 최고입니다.
2016년에 만들어 공유해 두었던 서버리스로 제작한
Pastebin의 인프라 및 애플리케이션 배포를 자동화 해보
겠습니다.
PastebinStack
https://github.com/kpiljoong/aws-serverless-pastebin
https://github.com/kpiljoong/aws-devday-iac-pastebin
Amazon API Gateway AWS Lambda Amazon DynamoDB
콘텐츠 생성
콘텐츠 요청
AWS CDK App
콘텐츠 생성:
HTTP GET ?content=
콘텐츠 요청:
HTTP GET /<hash>
Pastebin 아키텍처
CDK 초기화
CDK 앱 구조
https://docs.aws.amazon.com/cdk/api/latest/docs/aws-construct-library.html
CDK 레퍼런스 참고
PastebinStack
Amazon API Gateway AWS Lambda Amazon DynamoDB
콘텐츠 생성
콘텐츠 요청
AWS CDK App
콘텐츠 생성:
HTTP GET ?content=
콘텐츠 요청:
HTTP GET /<hash>
데이터 저장소
DynamoDB 모듈 추가
"dependencies": {
"@aws-cdk/core": "^1.9.0",
"@aws-cdk/aws-dynamodb": "^1.9.0",
"source-map-support": "^0.5.9"
}
DynamoDB 모듈 레퍼런스 참고
테이블 생성 코드 작성
import ddb = require('@aws-cdk/aws-dynamodb');
const table = new ddb.Table(this, "Data", {
partitionKey: {
name: "pid",
type: ddb.AttributeType.STRING
}
});
CDK 앱 배포
PastebinStack
https://github.com/kpiljoong/aws-serverless-pastebin
Amazon API Gateway AWS Lambda Amazon DynamoDB
콘텐츠 생성
콘텐츠 요청
AWS CDK App
콘텐츠 생성:
HTTP GET ?content=
콘텐츠 요청:
HTTP GET /<hash>
비지니스 로직
Lambda 함수 추가
exports.handler = async (event) => {
const queryParams = event.queryStringParameters;
const pathParams = event.pathParameters;
let res = {};
if (queryParams != null) {
let key = …;
let content = …;
res = putItem(key, content);
} else if (pathParams != null) {
let pid = …;
res = getItem(pid);
} else {
res = …; // error response
}
return res;
};
Lambda 모듈 추가
"dependencies": {
"@aws-cdk/core": "^1.9.0",
"@aws-cdk/aws-dynamodb": "^1.9.0",
"@aws-cdk/aws-lambda": "^1.9.0",
"source-map-support": "^0.5.9"
}
Lambda 함수 추가 코드 작성
import lambda = require('@aws-cdk/aws-lambda');
const fn = new lambda.Function(this, "backend", {
runtime: lambda.Runtime.NODEJS_8_10,
handler: "handler.handler",
code: lambda.Code.fromAsset('./lambda')
});
CDK 앱 배포
Lambda 함수 DDB 관련 권한 부여
import lambda = require('@aws-cdk/aws-lambda');
const fn = new lambda.Function(this, "backend", {
runtime: lambda.Runtime.NODEJS_8_10,
handler: ”index.handler",
code: lambda.Code.fromAsset('./lambda')
});
table.grantReadWriteData(fn);
fn.addEnvironment("TABLE_NAME", table.tableName);
CDK 앱 변경사항 확인
PastebinStack
https://github.com/kpiljoong/aws-serverless-pastebin
Amazon API Gateway AWS Lambda Amazon DynamoDB
콘텐츠 생성
콘텐츠 요청
AWS CDK App
콘텐츠 생성:
HTTP GET ?content=
콘텐츠 요청:
HTTP GET /<hash>
API 게이트웨이
API Gateway 모듈 추가
"dependencies": {
"@aws-cdk/core": "^1.9.0",
"@aws-cdk/aws-dynamodb": "^1.9.0",
"@aws-cdk/aws-lambda": "^1.9.0",
"@aws-cdk/aws-apigateway": "^1.9.0",
"source-map-support": "^0.5.9"
}
API Gateway RestAPI 코드 작성
import apigw = require('@aws-cdk/aws-apigateway');
const api = new apigw.LambdaRestApi(this, "api", {
handler: fn
});
CDK 앱 배포
Pastebin 동작 확인 테스트
https://API_GATEWAY_ENDPOINT/prod/?content=AWS DevDay 2019!
{"data":"HfkyONDS6C"}
요청
응답
https://API_GATEWAY_ENDPOINT/prod/HfkyONDS6C
{"data":"DevDay"}
요청
응답
읽기
등록
코드 기반 인프라 구성 방법 다시 보기
• AWS CDK CLI 워크플로
• init, diff à synth à deploy
• AWS Constructs 라이브러리
• API 레퍼런스 참고
• 권한 부여
PastebinStack
Amazon API Gateway AWS Lambda Amazon DynamoDB
콘텐츠 생성
콘텐츠 요청
AWS CDK App
콘텐츠 생성:
HTTP GET ?content=
콘텐츠 요청:
HTTP GET /<hash>
잠깐! 아직 생각이 많으시다고요?
아직 비지니스 로직이 포함된 서비스에 도입하기에는 생각이 많으시다고요?
그러면 이건 어떨까요?
서비스가 잘 동작하는지 부하 테스트를 해보는 것이죠!
PastebinStack
Amazon API Gateway AWS Lambda Amazon DynamoDB
콘텐츠 생성
콘텐츠 요청
AWS CDK App
콘텐츠 생성:
HTTP GET ?content=
콘텐츠 요청:
HTTP GET /<hash>
LoaderStack
Loader가 추가된 아키텍처
트래픽 생성 스크립트
#!/bin/sh
while true; do
curl -i $URL
sleep 1
done
Dockerfile 생성
FROM alpine
RUN apk add curl
ADD load.sh ./load.sh
CMD [ "/bin/sh", "/load.sh" ]
Docker 동작 테스트
Loader Construct 작성
export class Loader extends cdk.Construct {
constructor(scope: cdk.Construct, id: string, url: string, tps: number) {
super(scope, id);
const cluster = new ecs.Cluster(this, 'Cluster');
const taskDef = new ecs.FargateTaskDefinition(this, "LoaderTask");
taskDef.addContainer("Loader", {
image: ecs.ContainerImage.fromAsset('./loader'),
environment: {
'URL': url
}
});
const fargate = new ecs.FargateService(this, "Fargate", {
cluster: cluster,
taskDefinition: taskDef,
desiredCount: tps
});
}
}
Loader Stack 작성
export class LoaderStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const url = "https://73m6x99c10.execute-api.ap-northeast-
1.amazonaws.com/prod/2XduFsd1mw";
new Loader(this, "Loader", url, 10);
}
}
App 수정
#!/usr/bin/env node
import 'source-map-support/register';
import cdk = require('@aws-cdk/core');
import { PastebinStack, LoaderStack } from '../lib/pastebin-stack';
const app = new cdk.App();
new PastebinStack(app, 'PastebinStack');
new LoaderStack(app, 'TestLoaderStack');
모니터링 Construct 추가
Watchful 코드 추가
import { Watchful } from 'cdk-watchful’
export class PastebinStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
…
const wf = new Watchful(this, "Monitoring");
wf.watchScope(this);
}
}
CloudWatch 대시보드
Loader가 추가된 아키텍처 다시 보기
• Load 생성
• AWS Fargate로 규모에
상관없이!
• 재사용 가능한 Construct 직접 작성
• API, 인캡슐레이션
• 모니터링
• 공개된 construct
라이브러리를 활용
• ”Cloud in a Library”
• jsii
PastebinStack
Amazon API Gateway AWS Lambda Amazon DynamoDB
AWS CDK App
LoaderStack
https://github.com/aws/jsii
직접 확인하는 Pastebin 자동화
https://github.com/kpiljoong/aws-devday2019-iac-demo
클릭스트림 데이터 적재 사례
AWS CDK App
PipelineStack
AWS CodeCommit AWS CodeBuild AWS CloudFormation
코드 체크인
AWS CodePipeline
StreamAppStack
Amazon Kinesis
Data Streams
클릭스트림
AWS Lambda Amazon DynamoDB
Source
Source
CodeCommit
Build
CdkCodeBuild
CodeBuild
LambdaCodeBuild
CodeBuild
Deploy
DevEnvDeploy
CloudFormation
Approval
Manual Approval
Review
Deploy
ProdEnvDeploy
CloudFormation
• Dev 환경 배포와 마찬가지로 Prod 환경에 실제
애플리케이션 배포
• 승인을 기다림
• CDK 앱으로 부터 생성된 StreamAppStack의
템플릿을 배포
• Lambda 함수 코드는 앞서 LambdaCodeBuild
프로젝트에 의해 생성된 패키지 파일의 위치를 전달
• 두개의 CodeBuild 프로젝트를 사용
• CdkCodeBuild 프로젝트는 CDK 앱을 synthesize하여
CloudFormation 템플릿을 생성
• LambdaCodeBuild 프로젝트는 Lambda 함수 코드의
테스트, 빌드 작업을 수행
• CDK 앱과 Lambda 함수 코드는 동일한 리포지토리에
저장
아하! 어디서든 가능한 자동화
어디부터 자동화를 해야하는지 모르겠다고요? 고민이 많다고요?
자동화는 어디서든 가능합니다.
하나의 스택을 해도 좋고, 하나의 레이어를 해도 좋아요.
스택, 레이어 내에서도 하나의 컴포넌트, 심지어 하나의 리소스도 충분합니
다.
아하! 도구 선택은 편한 걸로
도구는 편한 게 최고입니다. 당장 사용하여 원하는 결과를 얻어야 하니까요.
새로운 도구를 학습하는 시간과 가지고 계신 기술력을 활용할 수 있는 것,
고민해보세요!
다른 팀원과 편한 방법 및 도구가 다른가요?
각자 편한 걸 사용하세요. 대신 표준 프로토콜을 지원하는 걸 사용하고, 표
준 프로토콜을 통해 서로 통신하세요.
아하! 배포 환경은 동일하게
로컬 환경은 개발자 ’본인’만을 위한 것입니다.
로컬에서 충분히 테스트한 후 구성 및 배포 전용 환경을 구성하여 사용하
세요.
컨테이너도 좋고 AWS Cloud9과 같은 클라우드 IDE도 좋은 선택입니다.
아하! 적은 AWS 서비스와 의존성은
인프라 자동화는 AWS 서비스에 대해 깊은 이해를 요구하지 않습니다.
특히, CDK를 사용하시면 이미 모범 사례를 기반으로 하는 라이브러리가 준
비되어 있어 더욱 더 손 쉽게 Well-Architecture를 구성할 수 있습니다.
참고 자료
https://aws.amazon.com/cdk
https://docs.aws.amazon.com/cdk/latest/guide/examples.html
https://github.com/aws/aws-cdk
https://gitter.im/awslabs/aws-cdk
@PiljoongKim
#AWSDEVDAYSEOUL

[AWS Dev Day] 앱 현대화 | 코드 기반 인프라(IaC)를 활용한 현대 애플리케이션 개발 가속화, 우리도 할 수 있어요 - 김필중 AWS 솔루션즈 아키텍트

  • 2.
    코드 기반 인프라(IaC)를활용한 현대 애플리케이션 개발 가속화, 우리도 할 수 있어요 김필중, 솔루션즈 아키텍트, AWS
  • 3.
    왜 코드 기반인프라일까요?
  • 5.
  • 6.
    현대 애플리케이션 개발방식 Cloud-native - AWS
  • 7.
    현대 애플리케이션 개발방식 Re-host Re-platform Re-factor Re-invent
  • 8.
    방식 별 활용가능 서비스 Re-host Re-platform Re-factor Re-invent
  • 9.
  • 10.
    자동화 인프라 구성 자동화 서비스에필요한 리소스 구성 애플리케이션 배포 자동화 애플리케이션을 더 효율적이고, 안전하며, 빠르게 배포 애플리케이션을 빌드, 테스트, 배포
  • 12.
    코드 기반 인프라의목적 • 인프라 변경 사항을 반복적이고 예측 가능하게 함 • 코드 변경과 동일한 도구를 사용하여 인프라 변경 사항 릴리즈 • 스테이징 환경에서 프로덕션 환경으로 복제하여 지속적인 테스트를 가능하게 함
  • 13.
    코드 기반 인프라구성 프로세스 디자인 스택 생성 반복 앱 코드 작성 인프라 템플릿 작성
  • 14.
    AWS CloudFormation 클라우드 인프라템플릿을 정의하기 위한 언어 - JSON 및 YAML 지원 AWS 리소스 프로비저닝 CI/CD, 개발, 관리 도구와 통합AWS CloudFormation
  • 15.
    AWS Cloud DevelopmentKit (AWS CDK) 재사용 가능한 구성 요소로 클라우드 인프라를 모델링하기 위한 다양한 언어를 지원 하는 프레임워크 AWS CloudFormation
  • 16.
    AWS Cloud DevelopmentKit (AWS CDK) AWS CDK 앱에서부터 인프라가 구성될 때까지의 흐름
  • 17.
    AWS Cloud DevelopmentKit (AWS CDK) AWS Construct Library Framework CLI CDK Application Stack(s) ConstructConstruct Core Framework AWS CDK CLI Serverless Containers CI/CD Application Integration / Foundational Autoscaling 메인 구성요소
  • 19.
    무엇이든 직접 보는게최고입니다. 2016년에 만들어 공유해 두었던 서버리스로 제작한 Pastebin의 인프라 및 애플리케이션 배포를 자동화 해보 겠습니다.
  • 20.
    PastebinStack https://github.com/kpiljoong/aws-serverless-pastebin https://github.com/kpiljoong/aws-devday-iac-pastebin Amazon API GatewayAWS Lambda Amazon DynamoDB 콘텐츠 생성 콘텐츠 요청 AWS CDK App 콘텐츠 생성: HTTP GET ?content= 콘텐츠 요청: HTTP GET /<hash> Pastebin 아키텍처
  • 21.
  • 22.
  • 23.
  • 24.
    PastebinStack Amazon API GatewayAWS Lambda Amazon DynamoDB 콘텐츠 생성 콘텐츠 요청 AWS CDK App 콘텐츠 생성: HTTP GET ?content= 콘텐츠 요청: HTTP GET /<hash> 데이터 저장소
  • 25.
    DynamoDB 모듈 추가 "dependencies":{ "@aws-cdk/core": "^1.9.0", "@aws-cdk/aws-dynamodb": "^1.9.0", "source-map-support": "^0.5.9" }
  • 26.
  • 27.
    테이블 생성 코드작성 import ddb = require('@aws-cdk/aws-dynamodb'); const table = new ddb.Table(this, "Data", { partitionKey: { name: "pid", type: ddb.AttributeType.STRING } });
  • 28.
  • 29.
    PastebinStack https://github.com/kpiljoong/aws-serverless-pastebin Amazon API GatewayAWS Lambda Amazon DynamoDB 콘텐츠 생성 콘텐츠 요청 AWS CDK App 콘텐츠 생성: HTTP GET ?content= 콘텐츠 요청: HTTP GET /<hash> 비지니스 로직
  • 30.
    Lambda 함수 추가 exports.handler= async (event) => { const queryParams = event.queryStringParameters; const pathParams = event.pathParameters; let res = {}; if (queryParams != null) { let key = …; let content = …; res = putItem(key, content); } else if (pathParams != null) { let pid = …; res = getItem(pid); } else { res = …; // error response } return res; };
  • 31.
    Lambda 모듈 추가 "dependencies":{ "@aws-cdk/core": "^1.9.0", "@aws-cdk/aws-dynamodb": "^1.9.0", "@aws-cdk/aws-lambda": "^1.9.0", "source-map-support": "^0.5.9" }
  • 32.
    Lambda 함수 추가코드 작성 import lambda = require('@aws-cdk/aws-lambda'); const fn = new lambda.Function(this, "backend", { runtime: lambda.Runtime.NODEJS_8_10, handler: "handler.handler", code: lambda.Code.fromAsset('./lambda') });
  • 33.
  • 34.
    Lambda 함수 DDB관련 권한 부여 import lambda = require('@aws-cdk/aws-lambda'); const fn = new lambda.Function(this, "backend", { runtime: lambda.Runtime.NODEJS_8_10, handler: ”index.handler", code: lambda.Code.fromAsset('./lambda') }); table.grantReadWriteData(fn); fn.addEnvironment("TABLE_NAME", table.tableName);
  • 35.
  • 36.
    PastebinStack https://github.com/kpiljoong/aws-serverless-pastebin Amazon API GatewayAWS Lambda Amazon DynamoDB 콘텐츠 생성 콘텐츠 요청 AWS CDK App 콘텐츠 생성: HTTP GET ?content= 콘텐츠 요청: HTTP GET /<hash> API 게이트웨이
  • 37.
    API Gateway 모듈추가 "dependencies": { "@aws-cdk/core": "^1.9.0", "@aws-cdk/aws-dynamodb": "^1.9.0", "@aws-cdk/aws-lambda": "^1.9.0", "@aws-cdk/aws-apigateway": "^1.9.0", "source-map-support": "^0.5.9" }
  • 38.
    API Gateway RestAPI코드 작성 import apigw = require('@aws-cdk/aws-apigateway'); const api = new apigw.LambdaRestApi(this, "api", { handler: fn });
  • 39.
  • 40.
    Pastebin 동작 확인테스트 https://API_GATEWAY_ENDPOINT/prod/?content=AWS DevDay 2019! {"data":"HfkyONDS6C"} 요청 응답 https://API_GATEWAY_ENDPOINT/prod/HfkyONDS6C {"data":"DevDay"} 요청 응답 읽기 등록
  • 41.
    코드 기반 인프라구성 방법 다시 보기 • AWS CDK CLI 워크플로 • init, diff à synth à deploy • AWS Constructs 라이브러리 • API 레퍼런스 참고 • 권한 부여 PastebinStack Amazon API Gateway AWS Lambda Amazon DynamoDB 콘텐츠 생성 콘텐츠 요청 AWS CDK App 콘텐츠 생성: HTTP GET ?content= 콘텐츠 요청: HTTP GET /<hash>
  • 42.
    잠깐! 아직 생각이많으시다고요? 아직 비지니스 로직이 포함된 서비스에 도입하기에는 생각이 많으시다고요? 그러면 이건 어떨까요? 서비스가 잘 동작하는지 부하 테스트를 해보는 것이죠!
  • 43.
    PastebinStack Amazon API GatewayAWS Lambda Amazon DynamoDB 콘텐츠 생성 콘텐츠 요청 AWS CDK App 콘텐츠 생성: HTTP GET ?content= 콘텐츠 요청: HTTP GET /<hash> LoaderStack Loader가 추가된 아키텍처
  • 44.
    트래픽 생성 스크립트 #!/bin/sh whiletrue; do curl -i $URL sleep 1 done
  • 45.
    Dockerfile 생성 FROM alpine RUNapk add curl ADD load.sh ./load.sh CMD [ "/bin/sh", "/load.sh" ]
  • 46.
  • 47.
    Loader Construct 작성 exportclass Loader extends cdk.Construct { constructor(scope: cdk.Construct, id: string, url: string, tps: number) { super(scope, id); const cluster = new ecs.Cluster(this, 'Cluster'); const taskDef = new ecs.FargateTaskDefinition(this, "LoaderTask"); taskDef.addContainer("Loader", { image: ecs.ContainerImage.fromAsset('./loader'), environment: { 'URL': url } }); const fargate = new ecs.FargateService(this, "Fargate", { cluster: cluster, taskDefinition: taskDef, desiredCount: tps }); } }
  • 48.
    Loader Stack 작성 exportclass LoaderStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); const url = "https://73m6x99c10.execute-api.ap-northeast- 1.amazonaws.com/prod/2XduFsd1mw"; new Loader(this, "Loader", url, 10); } }
  • 49.
    App 수정 #!/usr/bin/env node import'source-map-support/register'; import cdk = require('@aws-cdk/core'); import { PastebinStack, LoaderStack } from '../lib/pastebin-stack'; const app = new cdk.App(); new PastebinStack(app, 'PastebinStack'); new LoaderStack(app, 'TestLoaderStack');
  • 50.
  • 51.
    Watchful 코드 추가 import{ Watchful } from 'cdk-watchful’ export class PastebinStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); … const wf = new Watchful(this, "Monitoring"); wf.watchScope(this); } }
  • 52.
  • 53.
    Loader가 추가된 아키텍처다시 보기 • Load 생성 • AWS Fargate로 규모에 상관없이! • 재사용 가능한 Construct 직접 작성 • API, 인캡슐레이션 • 모니터링 • 공개된 construct 라이브러리를 활용 • ”Cloud in a Library” • jsii PastebinStack Amazon API Gateway AWS Lambda Amazon DynamoDB AWS CDK App LoaderStack https://github.com/aws/jsii
  • 54.
    직접 확인하는 Pastebin자동화 https://github.com/kpiljoong/aws-devday2019-iac-demo
  • 55.
    클릭스트림 데이터 적재사례 AWS CDK App PipelineStack AWS CodeCommit AWS CodeBuild AWS CloudFormation 코드 체크인 AWS CodePipeline StreamAppStack Amazon Kinesis Data Streams 클릭스트림 AWS Lambda Amazon DynamoDB
  • 56.
    Source Source CodeCommit Build CdkCodeBuild CodeBuild LambdaCodeBuild CodeBuild Deploy DevEnvDeploy CloudFormation Approval Manual Approval Review Deploy ProdEnvDeploy CloudFormation • Dev환경 배포와 마찬가지로 Prod 환경에 실제 애플리케이션 배포 • 승인을 기다림 • CDK 앱으로 부터 생성된 StreamAppStack의 템플릿을 배포 • Lambda 함수 코드는 앞서 LambdaCodeBuild 프로젝트에 의해 생성된 패키지 파일의 위치를 전달 • 두개의 CodeBuild 프로젝트를 사용 • CdkCodeBuild 프로젝트는 CDK 앱을 synthesize하여 CloudFormation 템플릿을 생성 • LambdaCodeBuild 프로젝트는 Lambda 함수 코드의 테스트, 빌드 작업을 수행 • CDK 앱과 Lambda 함수 코드는 동일한 리포지토리에 저장
  • 57.
    아하! 어디서든 가능한자동화 어디부터 자동화를 해야하는지 모르겠다고요? 고민이 많다고요? 자동화는 어디서든 가능합니다. 하나의 스택을 해도 좋고, 하나의 레이어를 해도 좋아요. 스택, 레이어 내에서도 하나의 컴포넌트, 심지어 하나의 리소스도 충분합니 다.
  • 58.
    아하! 도구 선택은편한 걸로 도구는 편한 게 최고입니다. 당장 사용하여 원하는 결과를 얻어야 하니까요. 새로운 도구를 학습하는 시간과 가지고 계신 기술력을 활용할 수 있는 것, 고민해보세요! 다른 팀원과 편한 방법 및 도구가 다른가요? 각자 편한 걸 사용하세요. 대신 표준 프로토콜을 지원하는 걸 사용하고, 표 준 프로토콜을 통해 서로 통신하세요.
  • 59.
    아하! 배포 환경은동일하게 로컬 환경은 개발자 ’본인’만을 위한 것입니다. 로컬에서 충분히 테스트한 후 구성 및 배포 전용 환경을 구성하여 사용하 세요. 컨테이너도 좋고 AWS Cloud9과 같은 클라우드 IDE도 좋은 선택입니다.
  • 60.
    아하! 적은 AWS서비스와 의존성은 인프라 자동화는 AWS 서비스에 대해 깊은 이해를 요구하지 않습니다. 특히, CDK를 사용하시면 이미 모범 사례를 기반으로 하는 라이브러리가 준 비되어 있어 더욱 더 손 쉽게 Well-Architecture를 구성할 수 있습니다.
  • 61.
  • 62.
  • 63.