2. CloudQuest
www.projectroom.io
2013 설립
2022 법인 전환
클라우드 컨설팅 및 아키텍처 수립
projectoom.io 서비스 개발 운영
클라우드퀘스트 주식회사
회사 소개
2
대표자 소개
이종훈 대표
1999 LG CNS / ERP / 아키텍처 그룹
2008 삼성 SDS / OSP
2011 Amadeus Singapore
2013 클라우드퀘스트 설립
2022 projectroom.io 런칭
LG계열사, 삼성전자, 대한항공, 건강보험공단
의료급여 프로젝트, 삼성 Account, AWS and GCP
2
3. CloudQuest
www.projectroom.io
다양한 언어를 지원하는 개발 프레임워크
Lambda, S3 기반의 개발 및 테스트 환경
Git / Git Flow 를 통한 협업 지원
개발 지원 및 컨설팅
“쉽고 빠르게 웹 시스템을 구현할 수 있는 Serverless 클라우드 기반의 통합 웹 개발환경”
projectroom.io
3
3
4. CloudQuest
www.projectroom.io
웹 개발에 필요한 기술 요소를 Serverless Resource 의 대응
Serverless 웹 개발
4
Frontend
( html, js, css, image )
Backend
코드 실행 엔진
데이터 저장소
( DB, Cache, 3rd party Service )
통신 프로토콜
( JSON over http, WebSocket )
기술 요소
S3, EFS
ECS, EKS,
Lambda
RDS, Redis,
DynamoDB
API Gateway
ALB
Serverless
ESB on EC2
S3, EFS
ECS, EKS,
EC2
RDS, Redis,
DynamoDB
ALB
Server 기반
4
6. CloudQuest
www.projectroom.io
API Gateway 를 Frontend 로, Lambda 와 S3 를 Backend로 구성
사용자 지정도메인으로 여러 Backend를 동일 도메인으로 구성해 CORS Rule 충족
플랫폼의 필요와 개발자의 필요에 따라 다양한 솔루션을 조합하여 구성
플랫폼 구성 솔루션 개요
6
사용자 지정도메인
API 호출
Ajax 호출
Static
Resource
플랫폼 운영로그
개발자 테스팅 로그
개발자 소스코드 및
리소스 저장소
개발자 빌드로그
빌드 로그 저장
플랫폼 기본 저장소
플랫폼 사용자
Session 저장소
개발자 빌드서버
개발자 소스코드
버전관리용 저장소
6
7. CloudQuest
www.projectroom.io
API Gateway : JSON In/Out 의 REST API
7
REST API : Lambda 로 연결된 JSON in/out 의 API 구현
Authorizer : 사용자 접근제어 구현
{
"isBase64Encoded" : "boolean",
"statusCode": "number",
"headers": { ... },
"body": "JSON string"
}
TTL 설정된
Session 정보
Token 검증
사용자 로그인 후
Token 저장
API Gateway 반환용
Response
Token
from
Cookie
200, 404, 500, 301 …
Authorization, cookie, location …
7
8. CloudQuest
www.projectroom.io
API Gateway : REST API 프록시 리소스 구성
8
URL 이 고정되지 않고 특정 리소스 아래 주소가 계속 변하는 모든 경우를 수용하는 패턴
Static
Resource
S3에 있는 static 파일의 위치 :
[S3버킷이름]/static/main/js/custom.js
[S3버킷이름]/static/global/css/all.css
[S3버킷이름]/static/main/image/logo.png
모든 static 리소스의 최상위 루트 루트 아래에서 파일이 업로드 되는대로 만들어지는 다양한 하위 Path
8
9. CloudQuest
www.projectroom.io
API Gateway : 사용자 지정 도메인 (1)
배포된 API 를 대상으로 사용자 지정도메인을 지정해 사용
와일드카드 도메인 적용 가능
AWS Certificate Manager 의 SSL 인증서 발급 및 적용 가능 ( 무료 )
사용할 도메인
Route53 등록 도메인 ( 또는 호스팅 영역 등록 도메인 ) + 동일계정의 API : A Record 별칭 또는 CNAME 연결가능
타사 등록 도메인 또는 타계정 API : CNAME 연결가능
API와 연결 도메인 편집
A Record + Alias CNAME
9
9
11. CloudQuest
www.projectroom.io
API Gateway : WebSocket
WebSocket API 를 사용하여 Lambda 의 비동기 통신의 결과 회신에 사용
- API Gateway 의 최대 응답 대기 시간 : 30초 ( 연장 불가 )
- 긴 작업시간이 필요한 모든 요청에서, “작업 수행 완료” 를 화면에 리포트 하는 일이 필요
2
연결 with
conectionID + userID
1 연결 사용자 등록
3
Cache DB에 저장
conectionID + userID
4 API 호출
5
요청 수신 후 InvokeLambda 호출
( with 비동기 요청 옵션 )
6 장시간 소요 작업 시작
7
완료 후, 요청자 userID 로
connectionID 조회
7
connectionID 를 대상으로
작업완료 데이터를
@connections 주소로 호출
8
WebSocket 상시 연결을 통한
서버->클라이언트 호출로
작업 완료 데이터 회신
WebSocket 연결을 위해 화면에서 API Gateway 를 호출하는 주소 ( 화면 -> 서버 메시징은 이 연결을 통해 가능 )
WebSocket 응답을 위해 서버측에서 호출하는 주소 ( Signed URL 호출 필요 )
11
11
12. CloudQuest
www.projectroom.io
pre-signed URL을 사용한 파일 업로드 다운로드
S3 파일 관리
12
- Multipart -> Lambda -> S3 방식은 Serverless 에 적합하지 않음
- 업로드 / 다운로드시 pre-signed URL 을 발급하여 Lambda 를 경유하지 않고 파일을 직접 업로드 다운로드
- S3 업로드시 버킷을 대상으로 이벤트 트리거 발생 => EFS파일 배치 연계 가능
4
pre-signed URL 을 통한
파일 업로드 수행
1
파일 정보등을 포함한
Upload pre-signed URL 요청
2 S3 SDK를 활용해 pre-signedURL 생성
3 Upload pre-signed URL 회신
5 버킷 변동 이벤트 트리거
6
이벤트로부터 대상 파일 정보를 획득,
S3 SDK 를 통한 파일 다운로드 및
EFS Writing
12
13. CloudQuest
www.projectroom.io
No more “tail -f service.log”
CloudWatch
13
Serverless 들어가서 로그를 확인할 Server 가 없음⋯
Use “aws logs tail /aws/lambda/your-lambda-function --follow --profile user”
- Lambda 실행 런타임이 자동으로 CloudWatch 로그 그룹을 형성
- 서버 콘솔을 대체하는 기능이 가능
- 다중화 서버로부터 로그 취합이 불필요
- AWS API 를 통해 관리 시스템 UI 로 통합 가능
- Lambda 의 과금 정보가 함께 표시되는 장점
- 반응 속도가 느린 것은 단점
CloudWatch 로그 그룹 이름 AWS user pro
fi
le
13
14. CloudQuest
www.projectroom.io
1. Command line tool ( feat. Git )
- Git (w/ ssh) binaries for AWS Lambda ( https://github.com/lambci/git-lambda-layer )
- Git 커맨드를 Lambda 에서 사용 가능
- Lambda 구현 언어의 외부 Command 프로세스 구동 명령어를 이용
( Node.js executeSync(), Java 의 Process 클래스 등 )
Lambda Layer
14
2. External Libraries
- Lambda 계층 만들기 및 공유( https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/configuration-layers.html)
- 배포 시간과 본 함수 패키지 크기(함수, Layer 각각 250M 제한 )를 줄일 수 있음
- 최대 5개 까지 추가 가능
14
15. CloudQuest
www.projectroom.io
Organization
SSO Service
통합 결제
API Gateway, Lambda 를 비롯한 AWS 서비스 자원의 Quota 가 존재
- “User 별 Region 당 000” 방식으로 카운트
- Quota 를 늘리는 방법 ==> 하나의 Organization 아래 여러 User 를 운용하는 것
Serverless Quota
15
메인 Account
Organization 의 메인 계정
사용자 관리,
결제, 모니터링, 메인 DB,
Route53,
Core 서비스
Main VPC
USER1 Account
Lambda, 서비스 DB,
모니터링
USER2 Account
Lambda, 서비스 DB,
모니터링
USER2 VPC
USER1 VPC
VPC Peering VPC Peering
15
16. CloudQuest
www.projectroom.io
서비스 요건에 유연하게 대응하는 아키텍처 : 빌드서버 구축의 사례
“Serverless is not always best!”
16
빌드 서버 요건 EC2 + Auto Scaling Group
ECS Fargate
Lambda with Machine Image
Code Build
반응성 : 빠른 시작
GOOD
Spring Boot Servlet
BAD
Provisioning or Cold/Warm Start
BAD
Provisioning
빌드 라이브러리 캐시 저장소 :
반복 수행시 빌드 속도 향상
GOOD
EBS on EC2
BAD
Temp Storage
EFS
BAD
Temp Storage
추가적인 응용구성
DB / Redis / WebSocket /
CloudWatch
GOOD
Based on Application F/W
GOOD
Based on Application F/W
BAD
CLI is not enough
가용성 / 확장성
GOOD
EC2 Auto Scaling Group
GOOD
Auto Scaling
GOOD
Auto provisioning by Request
운영 비용
BAD
상시 유지 필요
GOOD
필요할 때 만들고, 쓴 만큼 과금
GOOD
필요할 때 만들고, 쓴 만큼 과금
16