클라우드 네이티브: 클라우드 네이티브 애플리케이션을 설계, 개발, 운영하는 핵심 가이드

Book description

클라우드를 처음 접할 때는 누구나 어려움을 겪는다. 분산 시스템을 배우고 컨테이너와 함수를 익혀야 하며, 어렵지만 이를 한 번에 다루는 방법도 알아야 한다. 이 책은 최신 클라우드 네이티브 애플리케이션 아키텍처의 구성 요소를 설명한다. 컨테이너, 서버리스 컴퓨팅, 스토리지, 애플리케이션의 이식성 개념 설명부터 클라우드 네이티브 애플리케이션 개발에 필요한 패턴, 메시징, 이벤팅, 데브옵스 같은 모범 사례까지 살펴본다. 클라우드 네이티브 환경에서 애플리케이션을 어떻게 설계, 개발, 운영해야 할지 고민이라면 이 책으로 시작해보자.

Table of contents

  1. 클라우드 네이티브 (1/4)
  2. 클라우드 네이티브 (2/4)
  3. 클라우드 네이티브 (3/4)
  4. 클라우드 네이티브 (4/4)
    1. 지은이·옮긴이 소개
    2. 옮긴이의 말
    3. 이 책에 대하여
    4. 감사의 말
    5. INDEX
  5. Chapter 1 클라우드 네이티브 소개 (1/2)
  6. Chapter 1 클라우드 네이티브 소개 (2/2)
    1. 1.1 분산 시스템
      1. 1.1.1 분산 시스템의 오류
      2. 1.1.2 CAP 이론
    2. 1.2 12요소 앱
    3. 1.3 가용성과 서비스 수준 협약서
    4. 1.4 마치며
  7. Chapter 2 기본 지식 (1/5)
  8. Chapter 2 기본 지식 (2/5)
  9. Chapter 2 기본 지식 (3/5)
  10. Chapter 2 기본 지식 (4/5)
  11. Chapter 2 기본 지식 (5/5)
    1. 2.1 컨테이너
      1. 2.1.1 컨테이너 격리 수준
      2. 2.1.2 컨테이너 오케스트레이션
      3. 2.1.3 쿠버네티스 개요
      4. 2.1.4 쿠버네티스와 컨테이너
    2. 2.2 서버리스 컴퓨팅
    3. 2.3 함수
    4. 2.4 VM부터 클라우드 네이티브까지
      1. 2.4.1 리프트 앤 시프트
      2. 2.4.2 애플리케이션 현대화
      3. 2.4.3 애플리케이션 최적화
    5. 2.5 마이크로서비스
      1. 2.5.1 마이크로서비스 아키텍처 장점
      2. 2.5.2 마이크로서비스 아키텍처의 과제
    6. 2.6 마치며
  12. Chapter 3 클라우드 네이티브 애플리케이션 설계 (1/10)
  13. Chapter 3 클라우드 네이티브 애플리케이션 설계 (2/10)
  14. Chapter 3 클라우드 네이티브 애플리케이션 설계 (3/10)
  15. Chapter 3 클라우드 네이티브 애플리케이션 설계 (4/10)
  16. Chapter 3 클라우드 네이티브 애플리케이션 설계 (5/10)
  17. Chapter 3 클라우드 네이티브 애플리케이션 설계 (6/10)
  18. Chapter 3 클라우드 네이티브 애플리케이션 설계 (7/10)
  19. Chapter 3 클라우드 네이티브 애플리케이션 설계 (8/10)
  20. Chapter 3 클라우드 네이티브 애플리케이션 설계 (9/10)
  21. Chapter 3 클라우드 네이티브 애플리케이션 설계 (10/10)
    1. 3.1 클라우드 네이티브 애플리케이션 기초
      1. 3.1.1 운영 효율성
      2. 3.1.2 보안
      3. 3.1.3 신뢰성과 가용성
      4. 3.1.4 확장성과 비용
    2. 3.2 클라우드 네이티브 vs 전통적인 아키텍처
    3. 3.3 함수 vs 서비스
      1. 3.3.1 함수 시나리오
      2. 3.3.2 함수 이용 시 고려할 점
      3. 3.3.3 함수와 서비스의 조합
    4. 3.4 API 설계와 버저닝
      1. 3.4.1 API 하위와 상위 호환성
      2. 3.4.2 시맨틱 버저닝
    5. 3.5 서비스 커뮤니케이션
      1. 3.5.1 프로토콜
      2. 3.5.2 메시징 프로토콜
      3. 3.5.3 직렬화 고려 사항
      4. 3.5.4 멱등성
      5. 3.5.5 요청과 응답
      6. 3.5.6 발행자와 구독자
      7. 3.5.7 Pub 및 Sub과 요청 및 응답 중 선택하기
      8. 3.5.8 동기 vs 비동기
    6. 3.6 게이트웨이
      1. 3.6.1 라우팅
      2. 3.6.2 애그리게이션
      3. 3.6.3 오프로딩
      4. 3.6.4 게이트웨이 구현
    7. 3.7 이그레스
    8. 3.8 서비스 메시
      1. 3.8.1 트래픽 관리
      2. 3.8.2 장애 처리
      3. 3.8.3 보안
      4. 3.8.4 트레이싱 모니터링
    9. 3.9 아키텍처 예제
    10. 3.10 마치며
  22. Chapter 4 데이터 다루기 (1/9)
  23. Chapter 4 데이터 다루기 (2/9)
  24. Chapter 4 데이터 다루기 (3/9)
  25. Chapter 4 데이터 다루기 (4/9)
  26. Chapter 4 데이터 다루기 (5/9)
  27. Chapter 4 데이터 다루기 (6/9)
  28. Chapter 4 데이터 다루기 (7/9)
  29. Chapter 4 데이터 다루기 (8/9)
  30. Chapter 4 데이터 다루기 (9/9)
    1. 4.1 데이터 스토리지 시스템
      1. 4.1.1 오브젝트, 파일, 디스크
      2. 4.1.2 데이터베이스
      3. 4.1.3 스트림과 큐
      4. 4.1.4 블록체인
      5. 4.1.5 데이터베이스 선택하기
    2. 4.2 다양한 데이터스토어 데이터
      1. 4.2.1 데이터 캡처 변경
      2. 4.2.2 변경 사항을 이벤트로 변경 로그에 기록하기
      3. 4.2.3 트랜잭션 관리자
      4. 4.2.4 보상 트랜잭션
      5. 4.2.5 추출, 변환, 로드(ETL)
      6. 4.2.6 마이크로서비스와 데이터 레이크
    3. 4.3 클라이언트가 데이터에 접근하기
      1. 4.3.1 제한된 클라이언트 토큰(발렛키)
      2. 4.3.2 데이터베이스 서비스의 FGAC
      3. 4.3.3 GraphQL 데이터 서비스
    4. 4.4 빠르게 확장 가능한 데이터
      1. 4.4.1 데이터 샤딩
      2. 4.4.2 데이터 캐싱
      3. 4.4.3 콘텐츠 전송 네트워크
    5. 4.5 데이터 분석
      1. 4.5.1 스트림
      2. 4.5.2 배치
      3. 4.5.3 오브젝트 스토리지의 데이터 레이크
      4. 4.5.4 데이터 레이크와 데이터 웨어하우스
      5. 4.5.5 분산 쿼리 엔진
    6. 4.6 쿠버네티스상 데이터베이스
      1. 4.6.1 스토리지 볼륨
      2. 4.6.2 스테이트풀셋
      3. 4.6.3 데몬셋
    7. 4.7 마치며
  31. Chapter 5 데브옵스 (1/12)
  32. Chapter 5 데브옵스 (2/12)
  33. Chapter 5 데브옵스 (3/12)
  34. Chapter 5 데브옵스 (4/12)
  35. Chapter 5 데브옵스 (5/12)
  36. Chapter 5 데브옵스 (6/12)
  37. Chapter 5 데브옵스 (7/12)
  38. Chapter 5 데브옵스 (8/12)
  39. Chapter 5 데브옵스 (9/12)
  40. Chapter 5 데브옵스 (10/12)
  41. Chapter 5 데브옵스 (11/12)
  42. Chapter 5 데브옵스 (12/12)
    1. 5.1 데브옵스란?
      1. 5.1.1 협업
      2. 5.1.2 자동화
      3. 5.1.3 린 원칙과 절차
      4. 5.1.4 측정
      5. 5.1.5 공유
    2. 5.2 테스팅
      1. 5.2.1 테스트 더블
      2. 5.2.2 테스트 자동화 피라미드
      3. 5.2.3 어떤 테스트를 언제 실행할 것인가?
      4. 5.2.4 테스팅 주기
      5. 5.2.5 실서비스의 테스팅
    3. 5.3 개발 환경과 도구
      1. 5.3.1 개발 도구
      2. 5.3.2 개발 환경
      3. 5.3.3 로컬 개발 환경
      4. 5.3.4 원격 클러스터를 이용한 로컬 개발
      5. 5.3.5 Skaffold 개발 작업흐름
      6. 5.3.6 원격 클러스터를 로컬 개발로 라우트
      7. 5.3.7 클라우드 개발 환경
    4. 5.4 CI/CD
      1. 5.4.1 소스 코드 저장소
      2. 5.4.2 빌드 단계(CI)
      3. 5.4.3 테스트 단계(CI)
      4. 5.4.4 배포 단계 (CD)
      5. 5.4.5 출시 단계 (CD)
      6. 5.4.6 출시 후 단계
    5. 5.5 모니터링
      1. 5.5.1 메트릭 수집하기
      2. 5.5.2 관측 가능한 서비스
    6. 5.6 설정 관리
      1. 5.6.1 단일 환경 변수
      2. 5.6.2 다중 환경 변수
      3. 5.6.3 볼륨으로 ConfigMap 데이터 추가하기
      4. 5.6.4 시크릿 저장하기
      5. 5.6.5 디플로이먼트 설정
    7. 5.7 예제 CI/CD 흐름
    8. 5.8 마치며
  43. Chapter 6 모범 사례 (1/6)
  44. Chapter 6 모범 사례 (2/6)
  45. Chapter 6 모범 사례 (3/6)
  46. Chapter 6 모범 사례 (4/6)
  47. Chapter 6 모범 사례 (5/6)
  48. Chapter 6 모범 사례 (6/6)
    1. 6.1 클라우드 네이티브로 이동하기
      1. 6.1.1 모놀리스를 적절하게 분리
      2. 6.1.2 단순한 서비스들 먼저 분리
      3. 6.1.3 작은 규모에서 운영 배우기
      4. 6.1.4 손상 방지 레이어 패턴 사용하기
      5. 6.1.5 스트랭글러 패턴 사용하기
      6. 6.1.6 데이터 마이그레이션 전략 수립
      7. 6.1.7 보일러플레이트 코드 재작성하기
      8. 6.1.8 프레임워크, 언어, 데이터 구조, 데이터스토어 다시 고려하기
      9. 6.1.9 코드 제거
    2. 6.2 회복력 확인
      1. 6.2.1 재시도로 일시적인 실패 처리
      2. 6.2.2 재시도 횟수 제한
      3. 6.2.3 일시적이 아닌 실패에는 서킷 브레이커 사용
      4. 6.2.4 우아한 성능 저하
      5. 6.2.5 벌크헤드 패턴 사용하기
      6. 6.2.6 헬스 체크와 레디니스 체크 구현
      7. 6.2.7 컨테이너에 CPU/메모리 제한 설정하기
      8. 6.2.8 레이트 리미팅과 스로틀링 구현
    3. 6.3 보안 강화
      1. 6.3.1 보안 요구 사항을 다른 요구 사항과 동일하게 다루기
      2. 6.3.2 설계 시 보안 통합
      3. 6.3.3 접근 권한은 최소한만 승인
      4. 6.3.4 계정, 구독, 테넌트 분리해서 사용하기
      5. 6.3.5 모든 비밀정보를 안전하게 저장
      6. 6.3.6 데이터 난독화하기
      7. 6.3.7 일시적으로 데이터 암호화하기
      8. 6.3.8 연합 ID 관리 사용하기
      9. 6.3.9 RBAC 사용하기
      10. 6.3.10 쿠버네티스 파드 격리하기
    4. 6.4 데이터 다루기
      1. 6.4.1 관리형 데이터베이스와 분석 서비스 사용하기
      2. 6.4.2 데이터 요구 사항에 가장 잘 맞는 데이터스토어 사용하기
      3. 6.4.3 데이터를 여러 리전과 존에 보관하기
      4. 6.4.4 스케일을 위해 데이터 파티셔닝이나 복제 사용하기
      5. 6.4.5 오버페칭과 chatty I/O를 회피하기
      6. 6.4.6 데이터베이스와 비즈니스 로직 분리하기
      7. 6.4.7 실서비스과 유사한 데이터로 테스트하기
      8. 6.4.8 일시적인 장애 처리하기
    5. 6.5 성능과 확장성
      1. 6.5.1 스케일아웃 가능하게 상태가 없도록 서비스 설계하기
      2. 6.5.2 플랫폼의 오토스케일링 기능 이용하기
      3. 6.5.3 캐시 사용하기
      4. 6.5.4 서비스 한계를 넘어서 확장할 수 있게 파티셔닝 사용하기
    6. 6.6 함수
      1. 6.6.1 함수를 단일 목적으로 작성하기
      2. 6.6.2 함수를 연계하지 않기
      3. 6.6.3 함수를 가볍고 단순하게 유지하기
      4. 6.6.4 함수를 상태 없게 만들기
      5. 6.6.5 함수 로직과 함수 진입 지점 분리하기
      6. 6.6.6 함수 실행 시간 줄이기
      7. 6.6.7 함수 간 통신을 위해 큐를 사용하기
    7. 6.7 운용
      1. 6.7.1 배포와 출시는 별도의 행위
      2. 6.7.2 배포를 작게 유지하기
      3. 6.7.3 CI/CD 정의를 구성 요소에 함께 두기
      4. 6.7.4 일관된 애플리케이션 배포
      5. 6.7.5 제로 다운타임 출시 사용
      6. 6.7.6 배포한 인프라를 수정하지 않기
      7. 6.7.7 컨테이너화된 빌드 사용하기
      8. 6.7.8 코드로 인프라를 설명하기
      9. 6.7.9 쿠버네티스에서 서비스를 구성하는 용도로 네임스페이스를 사용하기
      10. 6.7.10 환경 격리
      11. 6.7.11 함수 소스 코드 분리하기
      12. 6.7.12 커밋과 배포를 연관시키기
    8. 6.8 로깅, 모니터링, 알림
      1. 6.8.1 통합 로깅 시스템 사용
      2. 6.8.2 연관 ID 사용
      3. 6.8.3 로그 항목에 컨텍스트 넣기
      4. 6.8.4 공통 구조의 로깅 형식
      5. 6.8.5 메트릭에 절적한 태그하기
      6. 6.8.6 알림으로 인한 피로 방지
      7. 6.8.7 KPI 정의하고 알림하기
      8. 6.8.8 실서비스에서 지속적으로 테스트하기
      9. 6.8.9 기본 메트릭으로 시작하기
    9. 6.9 서비스 커뮤니케이션
      1. 6.9.1 하위/상위 호환성 설계하기
      2. 6.9.2 내부 세부 사항이 유출되지 않게 서비스 계약 정의
      3. 6.9.3 비동기 통신 선호
      4. 6.9.4 효율적인 직렬화 기법 사용하기
      5. 6.9.5 무거운 부하와 트래픽 스파이크를 처리하기 위해 큐와 스트림 사용
      6. 6.9.6 효율성을 위한 일괄 처리
      7. 6.9.7 큰 메시지 분리하기
    10. 6.10 컨테이너
      1. 6.10.1 신뢰성 있는 저장소에 이미지 저장하기
      2. 6.10.2 도커 빌드 캐시 활용하기
      3. 6.10.3 컨테이너를 Privileged 모드로 실행하지 않기
      4. 6.10.4 명시적인 컨테이너 이미지 태그를 사용하기
      5. 6.10.5 컨테이너 이미지를 작게 유지하기
      6. 6.10.6 하나의 컨테이너에 하나의 애플리케이션 실행하기
      7. 6.10.7 신뢰성 있는 저장소의 검증된 이미지를 사용하기
      8. 6.10.8 이미지에 취약점 검색 도구 사용하기
      9. 6.10.9 컨테이너에 데이터를 저장하지 않기
      10. 6.10.10 이미지 내부에 비밀정보나 설정을 절대 저장하지 않기
    11. 6.11 마치며
  49. Chapter 7 이식성 (1/4)
  50. Chapter 7 이식성 (2/4)
  51. Chapter 7 이식성 (3/4)
  52. Chapter 7 이식성 (4/4)
    1. 7.1 왜 애플리케이션을 이식할 수 있게 만드는가?
    2. 7.2 이식성 비용
      1. 7.2.1 데이터 중력과 이식성
    3. 7.3 이식성을 언제, 어떻게 구현할 것인가?
      1. 7.3.1 인터페이스 표준화하기
      2. 7.3.2 공통 서비스와 기능
      3. 7.3.3 추상화와 레이어
      4. 7.3.4 다른 벤더들의 관리형 서비스
      5. 7.3.5 이식성 도구
      6. 7.3.6 이식성 레이어로서의 쿠버네티스
    4. 7.4 마치며

Product information

  • Title: 클라우드 네이티브: 클라우드 네이티브 애플리케이션을 설계, 개발, 운영하는 핵심 가이드
  • Author(s): 정원천, 보리스 숄, 트렌트 스완슨, 피터 야우쇼베츠
  • Release date: June 2020
  • Publisher(s): Hanbit Media, Inc.
  • ISBN: 9791162247846