마이크로서비스 아키텍처 구축(전면 개정판)

Book description

"마이크로서비스 아키텍처는 매력적인 특징이 많지만, 마이크로서비스 아키텍처로 향하는 길에서 주의하지 않는다면 고통스러운 함정에 맞닥뜨리게 된다.” -마틴 파울러

전 세계 프로그래머에게 필수 책인 『리팩터링 2판』의 저자 마틴 파울러가 극찬한 『마이크로서비스 아키텍처 구축』이 전면 개정되어 돌아왔습니다.

모두가 기다려온 『마이크로서비스 아키텍처 구축(전면 개정판)』은 마이크로서비스와 관련된 모든 측면에 대해 광범위한 개요를 제공하고자 했습니다. 1판에서 마이크로서비스 개념을 주로 다뤘다면, 이번에는 그 기본 토대 위에 소프트웨어 배포 프로세스 측면과 마이크로서비스 아키텍처를 채택함으로써 발생하는 영향까지 함께 다룹니다. 초판 출간 후 지난 5년 동안 마이크로서비스의 변화와 새롭게 등장한 기술도 함께 다뤄 1판보다 2배가 넘도록 지면을 풍부하게 채웠습니다. 이 책은 총 3부에 걸쳐 마이크로서비스 아키텍처 구축에 대해 설명합니다. 1부 기초, 2부 구현, 3부 사람으로 구성되어 있습니다. 1부에서는 마이크로서비스의 핵심 아이디어를 설명하고, 2부에서는 개념에서 구현 상세로 넘어가 마이크로서비스를 활용하는 데 도움이 되는 기법과 기술을 살펴봅니다. 마지막으로 3부에서는 1부, 2부에서 배운 내용을 토대로 사람과 조직의 입장에서 기술을 구현해내는 과정을 설명합니다.

Table of contents

  1. 1 마이크로서비스란?
    1. 1.1 마이크로서비스 살펴보기
    2. 1.2 마이크로서비스의 핵심 개념
      1. 1.2.1 독립적 배포성
      2. 1.2.2 비즈니스 도메인 중심의 모델링
      3. 1.2.3 자기 상태 소유
      4. 1.2.4 크기
      5. 1.2.5 유연성
      6. 1.2.6 아키텍처와 조직의 정렬
    3. 1.3 모놀리스
      1. 1.3.1 단일 프로세스형 모놀리스
      2. 1.3.2 모듈식 모놀리스
      3. 1.3.3 분산형 모놀리스
      4. 1.3.4 모놀리스와 전달 경합
      5. 1.3.5 모놀리스의 장점
    4. 1.4 활성화 기술
      1. 1.4.1 로그 집계와 분산 추적
      2. 1.4.2 컨테이너와 쿠버네티스
      3. 1.4.3 스트리밍
      4. 1.4.4 공용 클라우드 및 서버리스
    5. 1.5 마이크로서비스의 장점
      1. 1.5.1 기술 이질성
      2. 1.5.2 견고성
      3. 1.5.3 확장성
      4. 1.5.4 배포 용이성
      5. 1.5.5 조직적 정렬
      6. 1.5.6 조합성
    6. 1.6 마이크로서비스의 고충
      1. 1.6.1 개발자 경험
      2. 1.6.2 기술 과다
      3. 1.6.3 비용
      4. 1.6.4 리포팅
      5. 1.6.5 모니터링과 문제 해결
      6. 1.6.6 보안
      7. 1.6.7 테스팅
      8. 1.6.8 지연 시간
      9. 1.6.9 데이터 일관성
    7. 1.7 마이크로서비스를 사용해야 하는가?
      1. 1.7.1 마이크로서비스가 적합하지 않은 곳
      2. 1.7.2 마이크로서비스가 적합한 곳
    8. 요약
  2. 2 마이크로서비스 모델링 방법
    1. 2.1 뮤직코프 소개
    2. 2.2 올바른 마이크로서비스 경계를 만드는 것은 무엇인가?
      1. 2.2.1 정보 은닉
      2. 2.2.2 응집력
      3. 2.2.3 결합
      4. 2.2.4 결합과 응집력의 연관성
    3. 2.3 결합 유형
      1. 2.3.1 도메인 결합
      2. 2.3.2 통과 결합
      3. 2.3.3 공통 결합
      4. 2.3.4 내용 결합
    4. 2.4 딱 도메인 주도 설계만큼
      1. 2.4.1 보편 언어
      2. 2.4.2 애그리거트
      3. 2.4.3 경계 콘텍스트
      4. 2.4.4 애그리거트와 경계 콘텍스트를 마이크로서비스에 매핑
      5. 2.4.5 이벤트 스토밍
    5. 2.5 마이크로서비스를 위한 도메인 주도 설계 사례
    6. 2.6 비즈니스 도메인 경계에 대한 대안
      1. 2.6.1 변동성
      2. 2.6.2 데이터
      3. 2.6.3 기술
      4. 2.6.4 조직
    7. 2.7 혼합 모델과 예외
    8. 요약
  3. 3 모놀리스 분해
    1. 3.1 목표를 가져라
    2. 3.2 점진적 마이그레이션
    3. 3.3 모놀리스가 적인 경우는 드물다
      1. 3.3.1 조급한 분해의 위험성
    4. 3.4 무엇을 먼저 나눌까?
    5. 3.5 계층별 분해
      1. 3.5.1 코드 우선
      2. 3.5.2 데이터 우선
    6. 3.6 유용한 분해 패턴
      1. 3.6.1 교살자 무화과 패턴
      2. 3.6.2 병렬 실행
      3. 3.6.3 기능 토글
    7. 3.7 데이터 분해에 대한 우려
      1. 3.7.1 성능
      2. 3.7.2 데이터 무결성
      3. 3.7.3 트랜잭션
      4. 3.7.4 도구
      5. 3.7.5 리포팅 데이터베이스
    8. 요약
  4. 4 마이크로서비스 통신 방식
    1. 4.1 프로세스 내부에서 프로세스 사이로
      1. 4.1.1 성능
      2. 4.1.2 인터페이스 변경
      3. 4.1.3 에러 처리
    2. 4.2 프로세스 간 통신을 위한 기술: 다양한 선택
    3. 4.3 마이크로서비스 통신 방식
      1. 4.3.1 짜맞추기
    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 적용 대상
    6. 4.6  공통 데이터를 통한 통신
      1. 4.6.1 구현
      2. 4.6.2 장점
      3. 4.6.3 단점
      4. 4.6.4 적용 대상
    7. 4.7  요청 및 응답 통신
      1. 4.7.1 구현: 동기 대 비동기
      2. 4.7.2 적용 대상
    8. 4.8  이벤트 기반 통신
      1. 4.8.1 구현
      2. 4.8.2 이벤트에 포함되는 것
      3. 4.8.3 적용 대상
    9. 4.9 조심해서 진행하라
    10. 요약
  5. 5 마이크로서비스의 통신 구현
    1. 5.1 이상적인 기술을 찾아서
      1. 5.1.1 하위 호환성을 쉽게 하라
      2. 5.1.2 인터페이스를 명시적으로 만들라
      3. 5.1.3 API를 기술 중립적으로 유지하라
      4. 5.1.4 소비자를 위해 서비스를 단순하게 만들라
      5. 5.1.5 내부 구현 세부 사항을 숨겨라
    2. 5.2 기술 선택
      1. 5.2.1 원격 프로시저 호출
      2. 5.2.2 REST (1/2)
      3. 5.2.2 REST (2/2)
      4. 5.2.3 그래프QL
      5. 5.2.4 메시지 브로커 (1/2)
      6. 5.2.4 메시지 브로커 (2/2)
    3. 5.3 직렬화 포맷
      1. 5.3.1 텍스트 포맷
      2. 5.3.2 바이너리 포맷
    4. 5.4 스키마
      1. 5.4.1 구조적 계약 위반 대 의미적 계약 위반
      2. 5.4.2 스키마를 사용해야 할까?
    5. 5.5 마이크로서비스 간의 변경 처리
    6. 5.6 중단 변경 피하기
      1. 5.6.1 확장 변경
      2. 5.6.2 관대한 독자
      3. 5.6.3 올바른 기술
      4. 5.6.4 명시적 인터페이스
      5. 5.6.5 우발적 중단 변경을 일찍 발견하기
    7. 5.7 중단 변경 관리하기
      1. 5.7.1 락스텝 배포
      2. 5.7.2 호환되지 않는 마이크로서비스 버전의 공존
      3. 5.7.3 기존 인터페이스 에뮬레이션
      4. 5.7.4 어떤 방식을 선호하는가?
      5. 5.7.5 사회적 계약
      6. 5.7.6 사용성 추적
      7. 5.7.7 극단적 조치
    8. 5.8 마이크로서비스 세계에서 DRY와 코드 재사용의 위험
      1. 5.8.1 라이브러리를 통한 코드 공유
    9. 5.9 서비스 디스커버리
      1. 5.9.1 도메인 네임 시스템(DNS)
      2. 5.9.2 동적 서비스 레지스트리
      3. 5.9.3 사람이 사용한다는 것을 잊지 말자!
    10. 5.10 서비스 메시와 API 게이트웨이
      1. 5.10.1 API 게이트웨이
      2. 5.10.2 서비스 메시
      3. 5.10.3 다른 프로토콜은 어떨까?
    11. 5.11 서비스 문서화
      1. 5.11.1 명시적 스키마
      2. 5.11.2 자기 기술 시스템
    12. 요약
  6. 6 워크플로
    1. 6.1 데이터베이스 트랜잭션
      1. 6.1.1 ACID 트랜잭션
      2. 6.1.2 여전히 ACID이지만 원자성이 부족한가?
    2. 6.2 분산 트랜잭션 - 2단계 커밋
    3. 6.3 분산 트랜잭션 - 그냥 안 된다고 하라
    4. 6.4 사가 패턴
      1. 6.4.1 사가 실패 모드
      2. 6.4.2 사가 패턴 구현 (1/2)
      3. 6.4.2 사가 패턴 구현 (2/2)
      4. 6.4.3 사가와 분산 트랜잭션의 비교
    5. 요약
  7. 7 빌드
    1. 7.1 지속적 통합에 대한 간략한 소개
      1. 7.1.1 실제로 CI를 하고 있는가?
      2. 7.1.2 브랜치 모델
    2. 7.2 빌드 파이프라인과 지속적 제공
      1. 7.2.1 도구
      2. 7.2.2 절충점과 환경
      3. 7.2.3 산출물 생성
    3. 7.3 소스 코드와 빌드를 마이크로서비스에 매핑하기
      1. 7.3.1 거대한 리포지터리 하나와 거대한 빌드
      2. 7.3.2  마이크로서비스당 하나의 리포지터리(멀티레포)
      3. 7.3.3  모노레포 (1/2)
      4. 7.3.3  모노레포 (2/2)
      5. 7.3.4 어떤 방식을 사용해야 할까?
    4. 요약
  8. 8 배포
    1. 8.1 논리적에서 물리적으로
      1. 8.1.1 다수 인스턴스
      2. 8.1.2 데이터베이스
      3. 8.1.3 환경
    2. 8.2 마이크로서비스 배포의 원칙
      1. 8.2.1 격리 실행
      2. 8.2.2 자동화 집중
      3. 8.2.3 코드형 인프라스트럭처
      4. 8.2.4 무중단 배포
      5. 8.2.5 기대 상태 관리
    3. 8.3 배포 방법
      1. 8.3.1 물리 머신
      2. 8.3.2 가상 머신
      3. 8.3.3 컨테이너 (1/2)
      4. 8.3.3 컨테이너 (2/2)
      5. 8.3.4 애플리케이션 컨테이너
      6. 8.3.5 PaaS
      7. 8.3.6 FaaS (1/2)
      8. 8.3.6 FaaS (2/2)
    4. 8.4 어떤 배포가 적합할까?
    5. 8.5 쿠버네티스와 컨테이너 오케스트레이션
      1. 8.5.1 컨테이너 오케스트레이션에 대한 사례
      2. 8.5.2 쿠버네티스의 개념 엿보기
      3. 8.5.3 멀티테넌시와 페데레이션
      4. 8.5.4 클라우드 네이티브 컴퓨팅 재단
      5. 8.5.5 플랫폼과 이식성
      6. 8.5.6 헬름, 오퍼레이터, CRD!
      7. 8.5.7 Knative
      8. 8.5.8 미래
      9. 8.5.9 사용해야 할까?
    6. 8.6 점진적 제공
      1. 8.6.1 배포와 릴리스의 분리
      2. 8.6.2 점진적 제공으로
      3. 8.6.3 기능 토글
      4. 8.6.4 카나리아 릴리스
      5. 8.6.5 병렬 실행
    7. 요약
  9. 9 테스트
    1. 9.1 테스트 유형
    2. 9.2 테스트 범위
      1. 9.2.1 단위 테스트
      2. 9.2.2 서비스 테스트
      3. 9.2.3 엔드투엔드 테스트
      4. 9.2.4 절충안
    3. 9.3 서비스 테스트의 구현
      1. 9.3.1 목 또는 스텁 사용
      2. 9.3.2 더 영리한 스텁 서비스
    4. 9.4 까다로운 엔드투엔드 테스트의 구현
      1. 9.4.1 불안정하고 깨지기 쉬운 테스트
      2. 9.4.2 누가 엔드투엔드 테스트를 작성하는가?
      3. 9.4.3 엔드투엔드 테스트는 얼마나 오래 걸릴까?
      4. 9.4.4 대규모 적체
      5. 9.4.5 메타버전
      6. 9.4.6 독립적인 테스트 가능성 부족
    5. 9.5 엔드투엔드 테스트를 피해야 할까?
      1. 9.5.1 계약 테스트와 소비자 주도 계약
      2. 9.5.2 결론
    6. 9.6 개발자 경험
    7. 9.7 운영 전 테스트에서 운영 중 테스트로
      1. 9.7.1 운영 환경 테스트 유형
      2. 9.7.2 운영 환경에서 안전한 테스트 만들기
      3. 9.7.3 MTBF보다 MTTR?
    8. 9.8 교차 기능 테스트
      1. 9.8.1 성능 테스트
      2. 9.8.2 견고성 테스트
    9. 요약
  10. 10 모니터링에서 관찰가능성으로
    1. 10.1 분열, 공황 그리고 혼란
    2. 10.2 단일 마이크로서비스, 단일 서버
    3. 10.3 단일 마이크로서비스, 다수 서버
    4. 10.4 다수 마이크로서비스, 다수 서버
    5. 10.5 관찰가능성 대 모니터링
      1. 10.5.1 관찰가능성의 주축? 그다지 빠르지 않다
    6. 10.6 관찰가능성의 구성 요소
      1. 10.6.1 로그 집계 (1/2)
      2. 10.6.1 로그 집계 (2/2)
      3. 10.6.2 메트릭 집계
      4. 10.6.3 분산 추적
      5. 10.6.4 잘하고 있나요?
      6. 10.6.5 알림
      7. 10.6.6 시맨틱 모니터링
      8. 10.6.7 운영 환경에서 테스팅
    7. 10.7 표준화
    8. 10.8 도구 선택
      1. 10.8.1 민주적 선택
      2. 10.8.2 쉬운 통합
      3. 10.8.3 맥락 제공
      4. 10.8.4 실시간
      5. 10.8.5 규모에 맞게
    9. 10.9 기계화된 전문가
    10. 10.10 시작하기
    11. 요약
  11. 11 보안
    1. 11.1 핵심 원칙
      1. 11.1.1 최소 권한의 원칙
      2. 11.1.2 심층 방어
      3. 11.1.3 자동화
      4. 11.1.4 제공 프로세스에 보안 주입
    2. 11.2 사이버 보안의 다섯 가지 기능
      1. 11.2.1 식별
      2. 11.2.2 보호
      3. 11.2.3 탐지
      4. 11.2.4 대응
      5. 11.2.5 복구
    3. 11.3 애플리케이션 보안의 기초
      1. 11.3.1 자격 증명
      2. 11.3.2 패치
      3. 11.3.3 백업
      4. 11.3.4 재구축
    4. 11.4 암묵적 신뢰 대 제로 트러스트
      1. 11.4.1 암묵적 신뢰
      2. 11.4.2 제로 트러스트
      3. 11.4.3 스펙트럼
    5. 11.5 데이터 보안
      1. 11.5.1 전송 중인 데이터
      2. 11.5.2 보관 중인 데이터
    6. 11.6 인증과 권한 부여
      1. 11.6.1 서비스 간 인증
      2. 11.6.2 사람 인증
      3. 11.6.3 일반적인 SSO 구현
      4. 11.6.4 SSO 게이트웨이
      5. 11.6.5 세밀한 권한 부여
      6. 11.6.6 혼동된 대리인 문제
      7. 11.6.7 중앙 집중식 업스트림 권한 부여
      8. 11.6.8 분산식 권한 부여
      9. 11.6.9 JSON 웹 토큰
    7. 요약
  12. 12 회복 탄력성
    1. 12.1 회복 탄력성이란?
      1. 12.1.1 견고성
      2. 12.1.2 회복성
      3. 12.1.3 원만한 확장성
      4. 12.1.4 지속적인 적응력
      5. 12.1.5 그리고 마이크로서비스 아키텍처
    2. 12.2 장애는 어디에서나 발생한다
    3. 12.3 얼마나 많아야 너무 많은 건가?
    4. 12.4 기능 저하
    5. 12.5 안정성 패턴
      1. 12.5.1 타임아웃
      2. 12.5.2 재시도
      3. 12.5.3 벌크헤드
      4. 12.5.4 회로 차단기
      5. 12.5.5 격리
      6. 12.5.6 이중화
      7. 12.5.7 미들웨어
      8. 12.5.8 멱등성
    6. 12.6 위험 분산
    7. 12.7 CAP 정리
      1. 12.7.1 일관성 희생
      2. 12.7.2 가용성 희생
      3. 12.7.3 단절내성 희생?
      4. 12.7.4 AP 아니면 CP?
      5. 12.7.5 양자택일이 아니다
      6. 12.7.6 그리고 현실에서는
    8. 12.8 카오스 엔지니어링
      1. 12.8.1 게임 데이
      2. 12.8.2 운영 환경의 실험
      3. 12.8.3 견고성을 넘어
    9. 12.9 비난
    10. 요약
  13. 13 확장
    1. 13.1 확장의 네 가지 축
      1. 13.1.1 수직 확장
      2. 13.1.2 수평 복제
      3. 13.1.3 데이터 파티셔닝
      4. 13.1.4 기능 분해
    2. 13.2 결합 모델
    3. 13.3 작게 시작하라
    4. 13.4 캐싱
      1. 13.4.1 성능을 위해
      2. 13.4.2 확장성을 위해
      3. 13.4.3 견고성을 위해
      4. 13.4.4 캐싱 위치
      5. 13.4.5 무효화
      6. 13.4.6 캐싱의 황금 법칙
      7. 13.4.7 신선도 대 최적화
      8. 13.4.8 캐시 중독: 주의해야 할 이야기
    5. 13.5 자동 확장
    6. 13.6 다시 시작하기
    7. 요약
  14. 14 사용자 인터페이스
    1. 14.1 디지털을 향해
    2. 14.2 소유권 모델
      1. 14.2.1 전담 프론트엔드 팀 추구
    3. 14.3 스트림 정렬 팀을 향해
      1. 14.3.1 전문가 공유
      2. 14.3.2 일관성 보장
      3. 14.3.3 기술적 문제 극복
    4. 14.4  모놀리식 프론트엔드
      1. 14.4.1 적용 시점
    5. 14.5  마이크로 프론트엔드
      1. 14.5.1 구현
      2. 14.5.2 적용 시점
    6. 14.6  페이지 기반 분해
      1. 14.6.1 적용 대상
    7. 14.7  위젯 기반 분해
      1. 14.7.1 구현
      2. 14.7.1 적용 시점
    8. 14.8 제약
    9. 14.9  중앙 집계 게이트웨이
      1. 14.9.1 소유권
      2. 14.9.2 다양한 종류의 사용자 인터페이스
      3. 14.9.3 여러 문제
      4. 14.9.4 적용 시점
    10. 14.10  프론트엔드를 위한 백엔드
      1. 14.10.1 얼마나 많은 BFF가 필요한가?
      2. 14.10.2 재사용과 BFF
      3. 14.10.3 데스크톱과 그 이상을 위한 BFF
      4. 14.10.4 적용 시점
    11. 14.11 그래프QL
    12. 14.12 하이브리드 방식
    13. 요약
  15. 15 조직 구조
    1. 15.1 느슨하게 결합된 조직
    2. 15.2 콘웨이의 법칙
      1. 15.2.1 증거
    3. 15.3 팀 규모
    4. 15.4 콘웨이의 법칙 이해
    5. 15.5 소규모 팀, 대규모 조직
    6. 15.6 자율성에 관해
    7. 15.7 강력한 소유권 대 공동 소유권
      1. 15.7.1 강력한 소유권
      2. 15.7.2 공동 소유권
      3. 15.7.3 팀 수준 대 조직 수준
      4. 15.7.4 균형 모델
    8. 15.8 활성화 팀
      1. 15.8.1 실천 공동체
      2. 15.8.2 플랫폼
    9. 15.9 공유 마이크로서비스
      1. 15.9.1 너무 어려운 분할
      2. 15.9.2 횡단 변경 사항
      3. 15.9.3 전달 병목 현상
    10. 15.10 내부 오픈 소스
      1. 15.10.1 핵심 커미터의 역할
      2. 15.10.2 성숙도
      3. 15.10.3 도구
    11. 15.11 플러그 가능한 모듈식 마이크로서비스
      1. 15.11.1 변경 사항 검토
    12. 15.12 고아 서비스
    13. 15.13 사례 연구: realestate.com.au
    14. 15.14 지리적 분포
    15. 15.15 콘웨이의 역법칙
    16. 15.16 사람
    17. 요약
  16. 16 진화하는 아키텍트
    1. 16.1 이름에 내포된 것은?
    2. 16.2 소프트웨어 아키텍트란?
    3. 16.3 변화를 가능하게
    4. 16.4 아키텍처에 대한 진화하는 비전
    5. 16.5 시스템 경계 정의
    6. 16.6 사회적 구조물
    7. 16.7 거주 가능성
    8. 16.8 원칙적 접근법
      1. 16.8.1 전략적 목표
      2. 16.8.2 원칙
      3. 16.8.3 관행
      4. 16.8.4 원칙과 관행의 결합
      5. 16.8.5 실제 사례
    9. 16.9 진화하는 아키텍처의 가이드
    10. 16.10 스트림 정렬 조직의 아키텍처
    11. 16.11 팀 구축
    12. 16.12 필수 기준
      1. 16.12.1 모니터링
      2. 16.12.2 인터페이스
      3. 16.12.3 아키텍처 안전
    13. 16.13 거버넌스와 포장된 길
      1. 16.13.1 예시
      2. 16.13.2 맞춤형 마이크로서비스 템플릿
      3. 16.13.3 대규모로 포장된 길
    14. 16.14 기술 부채
    15. 16.15 예외 처리
    16. 요약
  17. 종합 정리: 조언부터 향후 전망까지 (1/3)
  18. 종합 정리: 조언부터 향후 전망까지 (2/3)
  19. 종합 정리: 조언부터 향후 전망까지 (3/3)
  20. 핵심 용어집 (1/2)
  21. 핵심 용어집 (2/2)
  22. INDEX (1/3)
  23. INDEX (2/3)
  24. INDEX (3/3)

Product information

  • Title: 마이크로서비스 아키텍처 구축(전면 개정판)
  • Author(s): 정성권, 샘 뉴먼
  • Release date: June 2023
  • Publisher(s): Hanbit Media, Inc.
  • ISBN: 9791169211192