1️. 모바일 애플리케이션 시나리오 – MyTodoList
요구사항
- REST API + HTTPS
- Serverless 아키텍처
- 사용자가 자신의 S3 폴더에 직접 접근
- 관리형 Serverless 인증 서비스 사용
- To-do 읽기 위주, 쓰기는 상대적으로 적음
- 확장 가능한 DB, 높은 읽기 처리량
2️. 모바일 앱 – REST API 레이어
구성
Mobile Client
└─ API Gateway (HTTPS)
├─ Cognito (Authenticate)
└─ Lambda
└─ DynamoDB
- API Gateway: HTTPS 엔드포인트
- Cognito: 사용자 인증
- Lambda: 비즈니스 로직
- DynamoDB: To-do 데이터 저장
3️. 모바일 앱 – S3 직접 접근 권한 부여
구조
MobileClient
├─ API Gateway
├─Cognito (인증)
└─ Amazon S3
└─ 사용자 전용 폴더
- Cognito를 통해 제한된 권한의 임시 자격증명 발급
- 앱 사용자가 S3에 직접 파일 업로드/다운로드
- 서버를 경유하지 않아 성능·비용 최적화
4️. 모바일 앱 – 높은 읽기 처리량 대응
DynamoDB + DAX
Lambda
└─ DynamoDB
└─ DAX (캐싱 레이어)
- 읽기 위주 워크로드 최적화
- 마이크로초 단위 응답
- DB 부하 감소
5️. 모바일 앱 – API Gateway 캐싱
API 레벨 캐시
Client
└─ APIGateway(Response Cache)
└─ Lambda
└─ DynamoDB / DAX
- 동일 요청에 대한 응답 캐싱
- Lambda 호출 감소
- 전체 API 비용 절감
6️. 모바일 앱 아키텍처 핵심
이 아키텍처에서 다루는 핵심 패턴
- Serverless REST API (API Gateway + Lambda + DynamoDB)
- Cognito 기반 인증 & 임시 자격증명
- S3 직접 접근 패턴
- DynamoDB DAX 캐싱
- API Gateway 응답 캐싱
- 인증·인가 보안 구조
7️. Serverless 호스팅 웹사이트 시나리오 – MyBlog.com
요구사항
- 글로벌 확장
- 게시글은 쓰기 적음 / 읽기 많음
- 정적 콘텐츠 + 동적 REST API
- 가능한 곳은 모두 캐싱
- 신규 구독자 웰컴 이메일
- 이미지 업로드 시 썸네일 자동 생성
8️. 정적 콘텐츠 글로벌 배포
구조
Client
└─ CloudFront (Global)
└─ Amazon S3 (Static Files)
- CloudFront 엣지 로케이션에서 콘텐츠 제공
- 전 세계 사용자에게 낮은 지연 시간
9️. 정적 콘텐츠 보안 – OAC
Origin Access Control
CloudFront
└─ S3 Bucket
└─ BucketPolicy(CloudFront만 허용)
- S3 직접 접근 차단
- CloudFront를 통해서만 접근 허용
10. 공개 Serverless REST API 추가
구조
Client
└─ CloudFront
└─ API Gateway
└─ Lambda
└─ DynamoDB
└─ DAX
- REST API는 Serverless
- 인증 필요 없는 공개 API
- 읽기 성능을 위해 DAX 사용
1️1. DynamoDB Global Tables 활용
글로벌 데이터 접근
Multiple Regions
└─ DynamoDBGlobalTables
└─ Active-ActiveReplication
- 전 세계에서 낮은 지연 시간
- 양방향 읽기/쓰기
- CloudFront + API Gateway와 궁합 좋음
1️2. 사용자 웰컴 이메일 흐름
이벤트 기반 이메일 발송
DynamoDB
└─ Streams
└─ Lambda
└─ Amazon SES
- 사용자 생성 이벤트 감지
- Lambda가 자동으로 이메일 발송
- IAM Role로 SES 사용 권한 제어
1️3. 썸네일 생성 플로우
이미지 업로드 후 처리
Client
└─S3(Upload)
└─EventTrigger
├─Lambda(Thumbnail)
├─SQS/SNS(Optional)
└─S3(Thumbnail 저장)
- S3 이벤트 기반 처리
- 비동기 확장 가능 (SQS / SNS)
1️4. AWS 호스티드 웹사이트 요약
- CloudFront + S3로 정적 콘텐츠 글로벌 배포
- Serverless REST API
- DynamoDB Global Tables
- DynamoDB Streams + Lambda
- SES로 이메일 발송
- S3 이벤트 트리거 활용
1️5. 마이크로서비스 아키텍처 전환 배경
목표
- 서비스 단위 독립 개발
- 빠른 배포 주기
- 각 서비스의 유연한 아키텍처 선택
1️6. 마이크로서비스 환경 예시
구성
Users
└─ Route 53
├─ service1.example.com
├─ service2.example.com
└─ service3.example.com
각 서비스 내부는 다음 중 선택 가능:
- API Gateway + Lambda
- ALB + EC2
- ECS
- DynamoDB / RDS
- ElastiCache
1️7. 마이크로서비스 통신 패턴
동기식
- API Gateway
- Load Balancer
비동기식
- SQS
- SNS
- Kinesis
- S3 이벤트
- Lambda 트리거
1️8. 마이크로서비스의 도전 과제
- 서비스 수 증가에 따른 오버헤드
- 서버 밀도 / 자원 활용 최적화 어려움
- 다중 버전 공존의 복잡성
- 클라이언트 코드 복잡도 증가
1️9. Serverless가 해결하는 부분
- 자동 확장
- 사용량 기반 과금
- API 복제 및 환경 분리 용이
- Swagger 기반 SDK 자동 생성
2️0. 소프트웨어 업데이트 오프로딩 문제
기존 상황
- EC2 기반 애플리케이션
- 업데이트 시 트래픽 폭증
- CPU / 네트워크 비용 증가
- 구조 변경은 원하지 않음
2️1. 기존 아키텍처
EC2 Auto ScalingGroup
└─ EFS
└─ SoftwareUpdate Files
- 모든 요청이 EC2로 집중
2️2. 해결책 – CloudFront 추가
개선 구조
Client
└─ CloudFront
└─ EFS / EC2 Origin
CloudFront를 사용하는 이유
- 아키텍처 변경 최소
- 정적 파일을 엣지에 캐싱
- EC2 스케일링 감소
- 네트워크 비용 절감
- 가용성 향상
기존 애플리케이션 위에 Serverless 구성 요소를 얹어 비용·확장성·가용성을 개선하는 대표적인 패턴