AWS 기반 서버리스 아키텍처

AWS Lambda 예제로 살펴보는

AWS Lambda 예제로 살펴보는 AWS 기반 서비리스 아키텍처는 가장 까다로운 웹 및 모바일 애플리케이션을 구동할 수 있는 서버리스 아키텍처를 구축하고 보안성을 확보하며 관리하는 방법을 가르쳐 준다. 이 책에서는 실제 상황을 반영한 코드 및 다이어그램을 제공하고, 실무에 쉽게 적용할 수 있는 아키텍처를 설명함으로써 이 책의 내용을 빠르게 익힐 수 있다. 결과적으로 AWS에서 서버리스 애플리케이션을 설계하고 구축할 수 있는 방법을 배우게 된다.

★ 이 책에서 다루는 내용 ★

  • 서버리스 컴퓨팅에 대한 개념
  • 중요 패턴과 아키텍처
  • AWS Lambda 함수 작성 및 API Gateway 사용
  • Auth0 및 Firebase 같은 주요 서비스를 이용한 서버리스 애플리케이션 구축
  • 서버리스 아키텍처의 보안, 배포 및 관리

 

추천사

"이 책은 순수한 열정, 세세한 부분에 대한 깊이 있는 시각, 그리고 공유할 가치가 넘치는 지식의 보물 창고다." -- devopsdays 창립자인 패트릭 드보이스

"클라우드 컴퓨팅을 활용하는 데 핵심적인 책이다." -- 콜럼비아 대학교의 도널드 F. 퍼거슨 박사

"나는 이 책처럼 모든 기술 서적이 잘 쓰여지고 읽기 쉬웠으면 좋겠다." -- 켄트 R. 스필너, DRW

"이 책을 읽지 않고는 서버리스로 가지 마라. 이 책은 한 번 읽고 말 게 아니라 두고두고 참고 자료로 활용할 만하다." -- 아마존 웹 서비스의 디에고 산티비아고

 

도서 상세 이미지

피터 스바르스키

피터 스바르스키는 클라우드 그루의 엔지니어링 부문 부사장으로 있으며 서버리스 아키텍처와 기술만을 위한 세계 첫 번째 컨퍼런스인 서버리스콘프의 주최자이다. 그는 서버리스 아키텍처에 대한 개인 워크샵의 운영과 주기적인 블로그 게시글 작성을 즐긴다. IT 분야에서 광범위한 경력을 쌓았으며 웹과 AWS 클라우드 기술에 집중한 대규모 기업용 솔루션을 다루는 팀을 이끌어 왔다. 그의 전문 분야에는 백엔드 아키텍처, 마이크로서비스, 시스템 조율이 포함된다. 호주에 있는 모나시 대학에서 컴퓨터 과학 박사 학위를 받았으며 트위터(@sbarski)와 깃허브(https://github.com/sbarski)에서 만날 수 있다.

홍성민

2000년 초반부터 웹메일을 시작으로 SSO/EAM과 MDM 솔루션을 개발했으며, 다수의 SI/SM 프로젝트에서 소프트웨어 아키텍트 및 성능/문제해결 전문가로 일했다. 또한 여러 오픈소스 미들웨어의 기술 검증과 이를 활용한 아키텍처 설계에 참여했으며, 현재는 기존 인프라와 애플리케이션을 클라우드 환경으로 이전하고 클라우드를 잘 활용하는 방법을 대중에게 알리고 설명하는 일에 관심이 많다. 위키북스의 『데브옵스: 개발자, QA, 관리자가 함께 보는 리눅스 서버 트러블슈팅 기법』을 번역했고 『파이썬 웹 프로그래밍: 플라스크를 이용한 쉽고 빠른 웹 개발』을 저술했다.

주성식

새로운 것을 찾아내고 가까운 곳에 적용해 보기를 좋아하는 탐구자. 늘 배우는 것에 주저하지 않고 배움 앞에 겸손한 학생이 되고 싶다. 위키북스의 『데브옵스: 개발자, QA, 관리자가 함께 보는 리눅스 서버 트러블슈팅 기법』을 번역했고 『파이썬 웹 프로그래밍: 플라스크를 이용한 쉽고 빠른 웹 개발』을 저술했다.

  • [1부] 첫 걸음 떼기
    • ▣ 1장: 서버리스로 출발
      • 1.1 어떻게 여기까지 다다랐을까?
        • 1.1.1 서비스 지향 아키텍처와 마이크로서비스
        • 1.1.2 소프트웨어 설계
      • 1.2 서버리스 아키텍처의 원칙
        • 1.2.1 컴퓨팅 서비스를 사용해 필요할 때 코드 실행
        • 1.2.2 단일 목적의 상태 없는 함수 작성
        • 1.2.3 푸시 기반, 이벤트 주도 파이프라인 설계
        • 1.2.4 더 두텁고 강력한 프런트엔드 구축
        • 1.2.5 서드파티 서비스 포용
      • 1.3 서버에서 서비스로 이전
      • 1.4 서버리스 장점과 단점
        • 1.4.1 의사 결정 요인
        • 1.4.2 서버리스를 사용할 때
      • 1.5 요약
    •  
    • ▣ 2장: 아키텍처와 패턴
      • 2.1 사용 사례
        • 2.1.1 애플리케이션 백엔드
        • 2.1.2 데이터 처리와 조작
        • 2.1.3 실시간 분석
        • 2.1.4 레거시 API 프록시
        • 2.1.5 스케줄링 서비스
        • 2.1.6 봇과 기술
      • 2.2 아키텍처
        • 2.2.1 백엔드 컴퓨팅
        • 2.2.2 레거시 API 프록시
        • 2.2.3 하이브리드
        • 2.2.4 GraphQL
        • 2.2.5 연결형 컴퓨팅
        • 2.2.6 실시간 처리
      • 2.3 패턴
        • 2.3.1 명령 패턴
        • 2.3.2 메시징 패턴
        • 2.3.3 우선 순위 큐 패턴
        • 2.3.4 팬아웃 패턴
        • 2.3.5 파이프 및 필터 패턴
      • 2.4 요약
    •  
    • ▣ 3장: 서버리스 애플리케이션 구축
      • 3.1 24-Hour Video
        • 3.1.1 일반적인 요구사항
        • 3.1.2 아마존 웹 서비스
        • 3.1.3 첫 번째 Lambda함수 작성
        • 3.1.4 Lambda 함수 이름 지정
        • 3.1.5 로컬에서 하는 테스트
        • 3.1.6 AWS에 배포
        • 3.1.7 S3을 Lambda에 연결
        • 3.1.8 AWS에서 테스트
        • 3.1.9 로그 확인
      • 3.2 SNS 구성
        • 3.2.1 S3에 SNS 연결
        • 3.2.2 SNS로부터 이메일 수신
        • 3.2.3 SNS 테스트
      • 3.3 비디오 권한 설정
        • 3.3.1 두 번째 함수 작성
        • 3.3.2 구성 및 보안
        • 3.3.3 두 번째 함수 테스트
      • 3.4 메타데이터 생성
        • 3.4.1 세 번째 함수와 FFprobe 생성
      • 3.5 깔끔하게 마무리하기
      • 3.6 연습문제
      • 3.7 요약
    •  
    • ▣ 4장: 클라우드 설정
      • 4.1 보안 모델 및 자격 증명 관리
        • 4.1.1 IAM 사용자 생성 및 관리
        • 4.1.2 그룹 생성
        • 4.1.3 역할 생성
        • 4.1.4 자원
        • 4.1.5 권한과 정책
      • 4.2 로깅 및 경고
        • 4.2.1 로깅 설정
        • 4.2.2 로그 보존
        • 4.2.3 필터, 지표, 경보
        • 4.2.4 로그 데이터 검색
        • 4.2.5 S3와 로깅
        • 4.2.6 경보에 대한 추가 정보
        • 4.2.7 CloudTrail
      • 4.3 비용
        • 4.3.1 결제 경보 생성
        • 4.3.2 비용 모니터링 및 최적화
        • 4.3.3 Simple Monthly Calculator 사용
        • 4.3.4 Lambda 및 API Gateway 비용 계산
      • 4.4 연습문제
      • 4.5 요약
    •  
  • [2부] 핵심 아이디어
    • ▣ 5장: 인증과 권한
      • 5.1 서버리스 환경에서의 인증
        • 5.1.1 서버리스 방식
        • 5.1.2 Amazon Cognito
        • 5.1.3 Auth0
      • 5.2 24-Hour Video에 인증 추가
        • 5.2.1 계획
        • 5.2.2 Lambda를 직접 호출
        • 5.2.3 24-Hour Video 웹 사이트
        • 5.2.4 Auth0 구성
        • 5.2.5 웹 사이트에 Auth0 추가
        • 5.2.6 Auth0 통합 테스트
      • 5.3 AWS와 통합
        • 5.3.1 사용자 프로필 Lambda
        • 5.3.2 API Gateway
        • 5.3.3 매핑
        • 5.3.4 API Gateway를 통한 Lambda 호출
        • 5.3.5 사용자 정의 권한 모듈
      • 5.4 위임 토큰
        • 5.4.1 실제 사례
        • 5.4.2 위임 토큰 프로비저닝
      • 5.5 연습문제
      • 5.6 요약
    •  
    • ▣ 6장: 조율자 LaMbda
      • 6.1 Lambda 내부
        • 6.1.1 이벤트 모델과 소스
        • 6.1.2 푸시와 풀 이벤트 모델
        • 6.1.3 동시 실행
        • 6.1.4 컨테이너 재사용
        • 6.1.5 차가운 Lambda와 따뜻한 Lambda
      • 6.2 프로그래밍 모델
        • 6.2.1 함수 핸들러
        • 6.2.2 이벤트 객체
        • 6.2.3 컨텍스트 객체
        • 6.2.4 콜백 함수
        • 6.2.5 로깅
      • 6.3 버전 관리, 별칭 및 환경 변수
        • 6.3.1 버전 관리
        • 6.3.2 별칭
        • 6.3.3 환경 변수
      • 6.4 CLI 사용
        • 6.4.1 호출 명령어
        • 6.4.2 함수 생성 및 배포
      • 6.5 Lambda 패턴
        • 6.5.1 비동기 폭포(Async waterfall)
        • 6.5.2 직렬 및 병렬
        • 6.5.3 라이브러리 사용
        • 6.5.4 로직을 다른 파일로 이동
      • 6.6 Lambda 함수 테스트
        • 6.6.1 로컬에서 테스트
        • 6.6.2 테스트 작성
        • 6.6.3 AWS에서 테스트
        • 6.7 연습문제
      • 6.8 요약
    •  
    • ▣ 7장: API GaTeway
      • 7.1 인터페이스 역할을 하는 API Gateway
        • 7.1.1 AWS 서비스와의 통합
        • 7.1.2 캐싱, 스로틀링, 그리고 로깅
        • 7.1.3 스테이징과 버전 관리
        • 7.1.4 스크립팅
      • 7.2 API Gateway를 사용해 일하기
        • 7.2.1 계획
        • 7.2.2 리소스와 메소드 만들기
        • 7.2.3 메소드 실행 구성
        • 7.2.4 Lambda 함수
        • 7.2.5 웹사이트 업데이트
      • 7.3 Gateway 최적화
        • 7.3.1 스로틀링
        • 7.3.2 로깅
        • 7.3.3 캐싱
      • 7.4 스테이지와 버전
        • 7.4.1 스테이지 변수 생성
        • 7.4.2 스테이지 변수 사용
        • 7.4.3 버전
      • 7.5 연습문제
      • 7.6 요약
    •  
  • [3부] 아키텍처 확장
    • ▣ 8장: 스토리지
      • 8.1 더 스마트한 스토리지
        • 8.1.1 버전 관리
        • 8.1.2 정적 웹사이트 호스팅하기
        • 8.1.3 스토리지 클래스
        • 8.1.4 객체 수명주기 관리
        • 8.1.5 전송 가속화
        • 8.1.6 이벤트 알림
      • 8.2 안전한 업로드
        • 8.2.1 아키텍처
        • 8.2.2 Lambda의 업로드 정책
        • 8.2.3 S3 CORS 설정
        • 8.2.4 웹 사이트에서 업로드하기
      • 8.3 파일 접근 제한
        • 8.3.1 공개된 접근 제한
        • 8.3.2 서명된 URL 생성하기
      • 8.4 연습문제
      • 8.5 요약
    •  
    • ▣ 9장: 데이터베이스
      • 9.1 Firebase 소개
        • 9.1.1 데이터 구조
        • 9.1.2 보안 규칙
      • 9.2 24-Hour Video에 Firebase 추가하기
        • 9.2.1 아키텍처
        • 9.2.2 Firebase 설정
        • 9.2.3 트랜스코드 비디오 Lambda 함수 수정
        • 9.2.4 비디오 트랜스코딩 정보 Firebase 업데이트
        • 9.2.5 Lambda 연결
        • 9.2.6 웹 사이트
        • 9.2.7 엔드-투-엔드 테스팅
      • 9.3 파일 접근 보안
        • 9.3.1 서명된 URL Lambda 함수
        • 9.3.2 API Gateway 설정
        • 9.3.3 웹사이트를 다시 업데이트
        • 9.3.4 성능 개선
        • 9.3.5 Firebase 보안 개선
      • 9.4 연습문제
      • 9.5 요약
    •  
    • ▣ 10장: 마지막 여정
      • 10.1 배포 및 프레임워크
      • 10.2 더 나은 마이크로 서비스를 향하여
        • 10.2.1 오류 처리
      • 10.3 Step Functions
        • 10.3.1 이미지 처리 예제
      • 10.4 AWS 마켓플레이스
      • 10.5 여기에서 이제 어디로
    •  
  • ▣ 부록 A: 서버리스 아키텍처를 위한 서비스들
    • A.1 API Gateway
    • A.2 SNS
    • A.3 Simple Storage Service
    • A.4 Simple Queue Service
    • A.5 Simple Email Service
    • A.6 RDS와 DynamoDB
    • A.7 CloudSearch
    • A.8 Elastic Transcoder
    • A.9 Kinesis Streams
    • A.10 Cognito
    • A.11 Auth0
    • A.12 Firebase
    • A.13 그 밖의 서비스들
  •  
  • ▣ 부록B: 설치 및 구성
    • B.1 시스템 준비
    • B.2 IAM 사용자 및 CLI 설정
    • B.3 사용자 권한 설정
    • B.4 새로운 S3 버킷 생성
    • B.5 IAM 역할 만들기
    • B.6 Lambda 준비
    • B.7 Elastic Transcoder 구성
    • B.8 npm 설정
  •  
  • ▣ 부록C: 인증 및 권한 부여에 대한 추가 정보
    • C.1 인증 및 권한 부여의 기초
    • C.2 JSON 웹 토큰
  •  
  • ▣ 부록D: LaMbda의 내부
    • D.1 실행 환경
    • D.2 제약사항
    • D.3 이전 실행 환경에서의 작동
    • D.3.1 성공
    • D.3.2 실패
    • D.3.3 완료
  •  
  • ▣ 부록E: 모델과 매핑
    • E.1 비디오 목록 조회
    • E.1.1 GET 메소드
    • E.1.2 오류 처리
    • E.1.3 API Gateway 배포
  •  
  • ▣ 부록F: S3 이벤트 메시지 구조
    • F.1 S3 구조
    • F.2 기억해야 할 몇 가지 사항
  •  
  • ▣ 부록G: SeRverless 프레임워크와 SAM
    • G.1 Serverless 프레임워크
    • G.1.1 설치
    • G.1.2 Serverless 프레임워크 시작
    • G.1.3 Serverless 프레임워크 사용
    • G.1.4 패키징
    • G.1.5 테스팅
    • G.1.6 플러그인
    • G.1.7 예제
    • G.2 서버리스 애플리케이션 모델
    • G.2.1 시작하기
    • G.2.2 SAM을 사용한 예제
    • G.3 요약