상세 컨텐츠

본문 제목

서버리스 이제는 AWS Lambda로 간다

새로 나온 책

by 비제이퍼블릭 2022. 11. 10. 16:35

본문

 

제목 서버리스 이제는 AWS Lambda로 간다

부제 설계, 개발, 배포 및 모니터링 지표와 비용 계산까지

저자 최재영

출판사 비제이퍼블릭(BJ퍼블릭)

출간/배본가능일 20221121

정가 37,000

페이지 724

판형 188*245

ISBN 979-11-6592-184-2(93000)

 

책 소개

5가지 웹 서비스를 직접 만들면서 배우는 서버리스 플랫폼!

 

AWS Lambda는 이벤트 기반의 서버리스 컴퓨팅 플랫폼이다. 제한된 CPU, 메모리, 수행 시간을 갖지만 사용한 만큼만 비용을 지불하고 요청량에 맞게 인스턴스가 실행되어 빠르게 확장 및 축소할 수 있다. 그래서 Lambda의 한도와 한계를 이해하고 다룰 수 있다면, 다양한 서비스의 시나리오를 구현하면서도 인프라와 비용 걱정을 크게 줄일 수 있다. 빠른 출시를 결심했거나 토이 프로젝트를 진행할 경우라면 서버리스 플랫폼 사용이 큰 도움이 될 것이다.

 

이 책은 Lambda를 비롯해 AWS가 제공하는 여러 서버리스 플랫폼을 활용한다. 5가지 서비스 예제를 통해 그 예제 안에서 활용하는 서버리스 플랫폼을 소개하고 직접 실습한다. 이해를 돕기 위해 각 장은 예제에 대한 서비스 소개 및 설계와 구현, 로컬 테스트 환경 구축 및 테스트, 서버리스 스택 배포와 모니터링, 상용 확장을 위해 고민해야 하는 요소와 서버리스 서비스의 한계와 한도, 트래픽 규모를 가정하고 이때 발생하는 비용을 계산한다. 저자의 노하우가 듬뿍 담긴 이 책으로 웹 서비스 개발을 준비해 보자.

 

목차

지은이 소개

서문

베타 리더 추천사

 

1장 준비하기

1-1 AWS 서버리스

___1-1-1 기존의 서버 개발

___1-1-2 서버리스 기반의 서비스 개발

1-2 개발 환경 구축

___1-2-1 AWS 계정 설정

___1-2-2 AWS CLI 설치

___1-2-3 Node.js

___1-2-4 nvm

___1-2-5 타입스크립트

___1-2-6 Visual Studio Code

___1-2-7 direnv

___1-2-8 Docker

___1-2-9 리눅스용 윈도우 하위 시스템(WSL)

1-3 Severless Framework 소개

___1-3-1 간단한 선언 예시

___1-3-2 도구 익히기

 

2 Hello API

2-1 Hello API 자바스크립트 구현

2-2 Hello API 타입스크립트 구현

___2-2-1 템플릿으로 시작

___2-2-2 타입스크립트 적용

___2-2-3 웹팩 적용

___2-2-4 source-map 적용

___2-2-5 serverless.ts 사용

2-3 상용 서비스 고려

___2-3-1 서비스 한도

___2-3-2 API Gateway의 한도

___2-3-3 API Gateway 통합 Lambda의 한도

___2-3-4 CloudWatch Logs의 한도

___2-3-5 운영 전략

2-4 모니터링

___2-4-1 Lambda의 로그 확인

___2-4-2 API Gateway의 로그 확인

___2-4-3 Lambda의 지표

___2-4-4 Lambda의 호출 지표

___2-4-5 Lambda의 성능 지표

___2-4-6 Lambda의 동시성 지표

___2-4-7 Lambda의 동시성

___2-4-8 Lambda의 지표 확인

___2-4-9 API Gateway의 지표 확인

___2-4-10 CloudWatch 대시보드 구성

___2-4-11 CloudWatch 경보 설정

2-5 비용 계산

___2-5-1 API Gateway 비용

___2-5-2 Lambda 비용

___2-5-3 Lambda EC2의 가격 비교

___2-5-4 Lambda의 메모리와 CPU의 관계

___2-5-5 CloudWatch 비용 계산

___2-5-6 경보 이메일 전송 비용

___2-5-7 Hello API 비용 계산

2-6 정리

 

3장 사진 최적화 서비스

3-1 서비스 소개 및 설계

3-2 Lambda에서 외부 프로세스 실행 준비

3-3 첫 번째 시스템 구현

___3-3-1 S3 CloudFront 인프라 준비

___3-3-2 awscli 도구로 인프라 설정

___3-3-3 CloudFormation으로 인프라 선언

___3-3-4 Serverless Framework에 인프라 선언 통합

___3-3-5 S3 Bucket에 파일 업로드

___3-3-6 중복 업로드 막기

3-4 두 번째 시스템 구현: Public, Private, Bucket 분리

3-5 세 번째 시스템 구현: S3 이벤트로 최적화 수행

3-6 상용 서비스 고려

3-7 모니터링

3-8 비용 계산

___3-8-1 S3 비용

___3-8-2 CloudFront 비용

___3-8-3 서비스 비용 계산

___3-8-4 비용 줄이기

3-9 정리

 

4장 블로그 서비스

4-1 서비스 소개 및 설계

4-2 기본 API 구현

___4-2-1 models.ts 구현

___4-2-2 handler.ts 구현

___4-2-3 storage.ts 구현

4-3 DynamoDB 연동

___4-3-1 자원 선언

___4-3-2 AWS-SDK 라이브러리 추가

___4-3-3 글에 대한 CRUD 구현

___4-3-4 글 목록 구현

___4-3-5 로컬 환경 준비

___4-3-6 Serverless offline

___4-3-7 로컬 DynamoDB 준비

___4-3-8 로컬 테스트

___4-3-9 배포 및 테스트

___4-3-10 정리

4-4 MySQL 연동

___4-4-1 자원 선언

___4-4-2 방화벽 설정

___4-4-3 MySQL 라이브러리 추가

___4-4-4 글에 대한 CRUD 구현

___4-4-5 로컬 테스트

___4-4-6 배포

___4-4-7 MySQL 테이블 작성

___4-4-8 테스트

___4-4-9 정리

4-5 SQLite 연동

___4-5-1 자원 선언

___4-5-2 VPC 설정

___4-5-3 SQLite 라이브러리 추가

___4-5-4 Better SQLite3 준비

___4-5-5 SQLite 기반 쿼리 함수 구현

___4-5-6 잠금 함수 구현

___4-5-7 CRUD 함수 구현

___4-5-8 로컬 S3 준비

___4-5-9 로컬 Redis 준비

___4-5-10 로컬 테스트

___4-5-11 배포

___4-5-12 느린 응답 시간

___4-5-13 응용

___4-5-14 정리

4-6 저장소 비교

___4-6-1 응답 지연 시간

___4-6-2 비용

___4-6-3 유지 보수

___4-6-4 유리한 시나리오

4-7 프런트엔드 연동

___4-7-1 create-react-app

___4-7-2 웹 페이지 설계

___4-7-3 컴포넌트 기본

___4-7-4 서버 API 연동

___4-7-5 컴포넌트 구현

___4-7-6 프록시 서버

___4-7-7 개발 서버 시작

___4-7-8 주소 기반 라우트

___4-7-9 빌드

___4-7-10 로컬 테스트

___4-7-11 서버 주소 문제 해결

___4-7-12 정리

4-8 S3 CloudFront를 사용해 배포

___4-8-1 서버 API 주소 설정

___4-8-2 CORS 문제 해결

___4-8-3 배포

4-9 CloudFront의 다중 오리진 사용

___4-9-1 서버 API 주소 설정

___4-9-2 배포

___4-9-3 동작 이해

___4-9-4 장점과 단점

4-10 API Gateway에서 웹 페이지 제공

___4-10-1 서버리스 스택 설정

___4-10-2 서버 API 주소 설정

___4-10-3 배포

___4-10-4 도메인 연결

4-11 REST API 사용

___4-11-1 서버리스 스택 변경

___4-11-2 코드 변경

___4-11-3 로컬 테스트

___4-11-4 X-Ray 추가

___4-11-5 X-Ray 지표 분석

___4-11-6 정리

4-12 인증 구현

___4-12-1 Lambda 인증

___4-12-2 함수 구현

___4-12-3 서버리스 스택 변경

___4-12-4 빌드 오류 수정

___4-12-5 CloudFront 수정

___4-12-6 프런트엔드 작업

___4-12-7 테스트

___4-12-8 정리

4-13 상용 서비스 고려

___4-13-1 DynamoDB

___4-13-2 MySQL

___4-13-3 SQLite

___4-13-4 API 요청 횟수 제한

___4-13-5 인증

___4-13-6 CloudFront S3

4-14 모니터링

___4-14-1 DynamoDB 모니터링

___4-14-2 MySQL 모니터링

___4-14-3 Redis 모니터링

___4-14-4 인증 실패율

4-15 비용 계산

___4-15-1 시나리오

___4-15-2 시스템 구성

___4-15-3 CloudFront S3 오리진 사용

___4-15-4 API Gateway에서 웹 페이지 제공

___4-15-5 API Gateway API 요청 처리 비용

___4-15-6 Lambda 권한 부여자 실행 비용

___4-15-7 통합된 Lambda 실행 비용

___4-15-8 DynamoDB 비용

___4-15-9 MySQL 비용

___4-15-10 SQLite 데이터베이스를 위한 S3 비용

___4-15-11 비용 정리

___4-15-12 비용 줄이기

4-16 정리

 

5장 추천 서비스

5-1 시나리오

___5-1-1 Word2vec

___5-1-2 기반 데이터

5-2 개발 환경 구축

___5-2-1 파이썬 환경 구축

___5-2-2 AWS ECR 로그인

___5-2-3 SAM CLI 설치

5-3 시스템 설계

5-4 학습 구현

___5-4-1 의존 라이브러리 설치

___5-4-2 이벤트 다운로드

___5-4-3 학습

___5-4-4 S3 Bucket 준비

___5-4-5 배포

5-5 추천 API 구현

___5-5-1 추천 구현

___5-5-2 SAM 프로젝트 작성

___5-5-3 로컬 테스트

___5-5-4 배포

___5-5-5 수행 시간 확인

___5-5-6 ECR 리포지토리 관리

5-6 서비스 API 구현

___5-6-1 추적 쿠키 발급 API

___5-6-2 좋아요 횟수 조회 API

___5-6-3 좋아요 API

___5-6-4 VPC에서 SQS 연결

___5-6-5 서버리스 스택 구성

___5-6-6 로컬 테스트

___5-6-7 배포

5-7 웹 페이지 구현

___5-7-1 추적 쿠키 사용

___5-7-2 좋아요 노출

___5-7-3 좋아요 버튼

___5-7-4 추천 목록

___5-7-5 프록시 서버 구성

___5-7-6 로컬 테스트

5-8 CDN 배포

5-9 상용 서비스 고려

___5-9-1 SQS 이벤트 채널

___5-9-2 추천 Lambda의 수행 시간

___5-9-3 AVX2 지원

___5-9-4 모델 파일의 크기

5-10 모니터링

___5-10-1 SQS 모니터링

___5-10-2 ECR 모니터링

___5-10-3 PrivateLink 모니터링

5-11 비용 계산

___5-11-1 시나리오

___5-11-2 고정 비용

___5-11-3 API 비용

___5-11-4 비용 일람

___5-11-5 비용 줄이기

___5-12 정리

 

6장 채팅

6-1 WebSocket API

6-2 에코

___6-2-1 로컬 테스트

___6-2-2 배포

___6-2-3 라우트 선택 표현식 활용

6-3 채팅 전파

___6-3-1 연결 ID 관리

___6-3-2 메시지 전파

___6-3-3 서버리스 스택 선언

___6-3-4 로컬 테스트

___6-3-5 배포

6-4 주제-구독-전파

___6-4-1 테이블 설계

___6-4-2 DynamoDB 테이블 선언

___6-4-3 DynamoDB 연동 구현

___6-4-4 연결 맺음과 끊음의 처리

___6-4-5 메시지 전파 처리

___6-4-6 사용자 및 주제 생성 API

___6-4-7 함수 등록

___6-4-8 로컬 테스트

___6-4-9 배포

6-5 인증

___6-5-1 Lambda 권한 부여자 구현

___6-5-2 이벤트 처리 함수 수정

___6-5-3 서버리스 스택 수정

___6-5-4 WebSocket API 로깅

6-6 사용자 지정 도메인

6-7 상용 서비스 고려

___6-7-1 채팅 서비스

___6-7-2 이벤트 채널

___6-7-3 WebSocket API의 한계

___6-7-4 글로벌 서비스 고려

6-8 모니터링

___6-8-1 WebSocket API 지표

6-9 비용 계산

___6-9-1 시나리오

___6-9-2 WebSocket 비용

___6-9-3 DynamoDB 비용

___6-9-4 Lambda 비용

___6-9-5 비용 일람

___6-9-6 비용 줄이기

6-10 정리

 

7장 게임 서버

7-1 온라인 뱀 게임

7-2 VPC

___7-2-1 VPC 인프라 선언

___7-2-2 Redis 인스턴스 선언

___7-2-3 서버리스 스택 선언

___7-2-4 연결성 분석기

7-3 게임 서버 구현

___7-3-1 메시지 정의

___7-3-2 WebSocket 처리 함수 구현

___7-3-3 사용자 지정 도메인 연결

7-4 매칭 구현

___7-4-1 매칭 요청 처리 구현

___7-4-2 매칭 로직 구현

___7-4-3 매칭 수행 및 처리 연장

7-5 게임 구현

___7-5-1 WebSocket 이벤트 전달 구현

___7-5-2 게임 플레이어 구현

___7-5-3 게임 로직 구현

7-6 테스트와 배포

___7-6-1 로컬 테스트

___7-6-2 배포

7-7 웹 클라이언트 구현

___7-7-1 프로젝트 시작

___7-7-2 메시지와 모델 선언

___7-7-3 WebSocket 연결

___7-7-4 컴포넌트 구현

___7-7-5 스타일링

___7-7-6 효율적인 다시 그리기

___7-7-7 로컬 테스트

___7-7-8 웹 클라이언트 배포

7-8 상용 서비스 고려

___7-8-1 VPC의 제약 조건

___7-8-2 WebSocket API의 제약 조건

___7-8-3 Lambda의 수행 시간 제약 조건

___7-8-4 Lambda의 동시 실행 제약 조건

___7-8-5 Redis 유형 검토

___7-8-6 응답 지연 시간 개선

___7-8-7 매칭 개선

7-9 모니터링

___7-9-1 WebSocket API 지표

___7-9-2 Lambda 지표

___7-9-3 Redis 지표

7-10 비용 계산

___7-10-1 시나리오

___7-10-2 VPC 비용

___7-10-3 WebSocket API 비용

___7-10-4 Lambda 비용

___7-10-5 비용 일람

___7-10-6 비용 줄이기

7-11 정리

 

부록 A 도메인 구입

A-1 Route53에서 도메인 구입

A-2 타사 도메인 연결

A-3 도메인 레코드 세트 추가

A-4 인증서 발급

 

부록 B 구글 OAuth 구성

B-1 프로젝트 생성

B-2 동의 화면 구성

B-3 클라이언트 ID 생성

 

저자 소개

최재영

 

개발자들이 도메인 개발에만 집중할 수 있도록 그 외의 다른 모든 부분을 자동화하는데 관심이 많다. 특히 서비스 개발 초반에 빌드-배포-모니터링 운영 비용을 크게 낮출 수 있는 서버리스의 매력에 푹 빠져 있다. 틈틈이 서버리스 서버 개발자에 도전하고 있다.

블루홀 스튜디오에서 게임 개발자로 경력을 시작한 이후 웹 서비스, 추천 백엔드, 빌링을 거쳐 다시 웹 서비스 업무를 수행하고 있다. 여러 도메인의 백엔드를 개발하며 얻은 경험을 토대로 기존의 백엔드 시스템을 서버리스 기반으로 옮기는 연습을 하기도 한다. 다양한 토이 프로젝트를 AWS Lambda 기반으로 올려 비용을 최적화하는 것을 즐기며 가끔 만나는 지인들에게 서버리스 플랫폼 사용을 권유하는 활동을 한다.

 

출판사 리뷰

웹 서비스는 개발하고 싶은데, 서버 인프라는 어떡하지?”

서버리스 플랫폼인 AWS Lambda로 고민 해결!

 

수많은 서버리스 SaaS가 있지만 이 책에서는 AWS Lambda를 중점으로 다룹니다. 사진 최적화 서비스, 추천 서비스, 게임 서버, 채팅, 블로그 서비스를 각각 단계별로 만들어보면서 서버리스 플랫폼을 배울 수 있습니다. 저자의 친절하고 자세한 설명으로 입문자도 충분히 이해하며 따라 해볼 수 있습니다.

 

이 책의 구성

- 1: 서버리스 서비스의 사용 이유 소개

- 2: Serverless Framework를 익히고 타입스크립트 기반의 개발 환경 구축

- 3: 사진을 업로드한 후 화질을 적당히 낮춰 CDN으로 제공하는 서비스 개발

- 4: DynamoDB, MySQL, SQLite를 저장소로 활용하는 블로그 서비스 개발

- 5: Word2vec을 활용한 문서 ID 기반의 임베딩 구축과 이를 제공하는 추천 서비스 개발

- 6: WebSocket API를 활용한 채팅 서비스 개발

- 7: 세션 기반의 게임 서버 개발

 

이 책의 대상 독자

- AWS 서버리스 플랫폼으로 웹 서비스를 개발해보고 싶은 분

- 만들어야 할 웹 서비스가 있지만 인프라 관리가 피곤한 분

- 사내 개발자 도구를 웹 서비스로 빠르게 만들어야 하는데 인프라가 마땅치 않은 분

- Lambda를 좀 더 다양한 패턴으로 사용해보고 싶은 분

- 간단한 게임 서버를 인프라 고민 없이 개발해보고 싶은 분

관련글 더보기

댓글 영역