Top

클라우드 네이티브 스프링 [클라우드 플랫폼을 위한 자바 마이크로서비스]

  • 원서명Cloud-Native Applications in Java: Build microservice-based cloud-native applications that dynamically scale
  • 지은이아제이 마하잔(Ajay Mahajan), 무니쉬 쿠마르 굽타(Munish Kumar Gupta), 시암 순다르(Shyam Sundar)
  • 옮긴이박규태
  • ISBN : 9791161752457
  • 35,000원
  • 2018년 11월 27일 펴냄
  • 페이퍼백 | 464쪽 | 188*235mm
  • 시리즈 : acorn+PACKT, 소프트웨어 아키텍처

책 소개

본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.
요약

클라우드 네이티브 애플리케이션 개발은 쉽지 않다. 단순한 애플리케이션 하나라도 클라우드의 장점을 십분 활용할 수 있게 만들고 배포하려면 많은 배경지식과 기술이 필요하다. 이 책은 실용적인 예제를 점진적으로 발전시켜 나가면서 클라우드 네이티브 애플리케이션을 설계하고 구축하는 데 필요한 여러 가지 기술과 해법을 설명한다. AWS, Azure 등의 클라우드 플랫폼 활용법, API 디자인, 일체형 애플리케이션을 마이크로서비스로 분할하는 방법 등을 배울 수 있다.

추천의 글

배포 다이어그램을 보면 방화벽 외부의 인터넷은 구름 모양으로 그려져 있다. 나는 니콜라스 카(Nicholas G. Carr)가 쓴 『Big Switch』(W. W. Norton & Company, 2013)를 읽고 난 후에야 비로소 클라우드의 잠재력과 앞으로 올 것이 무엇인지 깨달았다. 지난 10년을 빠르게 보낸 지금에 와서는 두 번 생각할 필요도 없이 클라우드가 어디에나 있다는 것을 표현하기 위해 전체 시스템을 감싸는 구름 모양을 그리게 됐다. 클라우드 네이티브는 스타트업에서는 클라우드 네이티브가 익숙하지만, 많은 기업에서는 여전히 미지의 영역이다. 대기업 대부분은 데이터 센터 비용을 줄이거나 임대를 연장하지 않기 위해 가장 먼저 하는 일이기는 하지만, 리프트 앤 시프트를 수행하는 것만으로 클라우드를 올바르게 사용할 수는 없다. 클라우드의 강점은 비즈니스에 중요한 역할을 하는 클라우드 네이티브 애플리케이션을 구축해서 혁신적인 가치를 창출할 수 있을 때 확인할 수 있다. 따라서 나는 우리 팀이 더 똑똑한 클라우드 애플리케이션을 설계하고 구축하기 위해 연구하게 격려해 왔다.
무니쉬(Munish), 아제이(Ajay), 시암(Shyam)은 비즈니스 문제를 해결하기 위한 신기술을 항상 연구하고 개발해온 핵심 팀의 일원이다. 이들은 마이크로서비스를 사용하는 분산 시스템, 리액티브 프레임워크, 오픈소스, 컨테이너 기술(도커와 쿠버네티스) 등의 신기술에 초점을 맞춰 엔터프라이즈 트랜스포메이션 분야를 선도하는 전문가 및 컨설턴트다. 따라서 나는 다음 세대의 개발자들이 클라우드 네이티브 애플리케이션 개발을 빠르게 시작할 수 있도록 이 책의 저술을 권했다.
이 책은 클라우드용 애플리케이션을 이해하고 설계하고 만드는 데 필요한 단계별 접근 방법을 사용한다. 저자들은 개념부터 시작해서 작은 REST 서비스를 구축하고, 이어서 클라우드 네이티브로 서비스를 개선하는 점진적인 방식으로 독자들을 이끈다.
분산 아키텍처에서 서비스를 검색하는 방법이나 서비스 검색 도구가 수행하는 역할과 같은 클라우드 특유의 다양한 측면을 다룬다. 애플리케이션을 AWS나 Azure 같은 공개 클라우드로 마이그레이션하는 방법을 배우고, AWS Lamda 및 Google Cloud Functions 같은 서버리스 컴퓨팅 모델도 다룬다.
이 책을 최대한 활용해 클라우드 환경에서의 애플리케이션 개발을 선도하길 바란다.

/하리 키산 부를리(Hari Kishan Burle), 위프로 리미티드(Wipro Limited)의 부사장 겸 아키텍처 서비스 글로벌 책임자

이 책에서 다루는 내용

■ 가변성, 프로비저닝, 도구 지원 측면에서 클라우드 환경의 장점
■ 클라우드에서 개발할 때 필요한 아키텍처 패턴 및 고려할 사항
■ 요청 라우팅, RESTful 서비스 생성, 이벤트 소싱 등의 클라우드 네이티브 기술/패턴 사용법
■ 마이크로서비스를 위한 도커 컨테이너 생성과 젠킨스를 이용한 지속적인 통합 환경 설정
■ 컨테이너화를 위해 도커와 쿠버네티스 등의 도구 검토
■ AWS와 Azure 전용 도구를 사용한 애플리케이션 설계, 개발, 배포, 관리 방법

이 책의 대상 독자

클라우드 기반 환경에 배포하기 위한 복원력 있고 견고하며, 확장성 있는 애플리케이션을 구축하려는 자바 개발자에게 유용하다. 자바, 스프링, 웹 프로그래밍, AWS 및 Azure 같은 공개 클라우드 플랫폼을 경험해봤다면 이 책을 충분히 이해할 수 있다.

이 책의 구성

1장. ‘클라우드 네이티브 소개’에서는 클라우드 네이티브 애플리케이션이 필요한 이유를 설명한다. 클라우드 플랫폼으로 이동하는 이유는 무엇인가? 클라우드 개발 및 배포가 일반 애플리케이션과 다른 이유는 무엇인가? 클라우드 애플리케이션의 12가지 요소는 무엇인가?
2장. ‘첫 번째 클라우드 네이티브 애플리케이션’에서는 애플리케이션을 마이크로서비스 방식으로 설계할 때의 핵심 개념을 설명한 후 이 책을 진행하면서 점점 살을 붙여 나갈 예제 프로젝트를 소개한다. 또한 마이크로서비스 애플리케이션 개발을 위해 스프링 부트를 사용하는 방법과 클라우드 네이티브 애플리케이션을 개발할 때 사용하는 마이크로서비스 원칙을 알아본다.
3장. ‘클라우드 네이티브 애플리케이션 설계’에서는 클라우드 네이티브 애플리케이션을 설계할 때 고려할 몇 가지 고급 아키텍처 문제를 다룬다. 여기에는 이벤트 기반 아키텍처, 코레오그래피를 이용한 디커플링, 경계가 있는 컨텍스트와 같은 도메인 주도 설계(DDD) 개념 등이 포함된다. 시스템 중심의 서비스 정의 대신, 클라우드에서 개발하고 고객 중심 API를 제공하는 데 필요한 아키텍처 패턴과 고려할 사항을 알아본다.
4장. ‘클라우드 네이티브 애플리케이션 확장’에서는 다양한 스택, 원칙, 지원 컴포넌트를 사용해 애플리케이션을 만드는 방법을 자세히 알아본다. 서비스 구현에 필요한 패턴을 다루며, 클라우드 개발에 상당한 영향을 미치는 오류 처리, CQRS, 캐싱 등의 다양한 측면을 설명한다.
5장. ‘클라우드 네이티브 애플리케이션 테스트’에서는 마이크로서비스를 테스트하는 방법과 행위 주도 개발에서의 테스트 작성 방법을 알아본다.
6장. ‘클라우드 네이티브 애플리케이션 배포’에서는 도커 컨테이너 배포를 위한 애플리케이션 패키징 방법, CI/CD 파이프라인을 설정하는 방법을 비롯한 마이크로서비스 배포 모델을 자세히 살펴본다.
7장. ‘클라우드 네이티브 애플리케이션 런타임’에서는 서비스 런타임을 다룬다. 구성 서버를 이용해 구성을 외부화하는 방법과 주울을 프론트엔드로 배치하는 방법을 알아보며, 피보탈 클라우드 파운드리에 관해 설명하고, PCF Dev에 서비스를 배포하는 방법을 알아본다. 컨테이너 오케스트레이션 또한 다룬다.
8장. ‘AWS 플랫폼에 배포’에서는 AWS 환경을 설명하고, 이전 장에서 설명한 개념(레지스트리, 구성, 로그 집계, 비동기 메시징)을 바탕으로 클라우드 개발을 하기 위한 AWS 고유의 도구를 설명한다.
9장. ‘Azure 플랫폼에 배포’에서는 Azure 환경을 설명하고, 클라우드 개발을 하기 위한 Service Fabric, Azure Functions 등의 Azure 고유의 도구를 설명한다.
10장. ‘서비스 통합’에서는 IaaS, PaaS, iPaaS, DBaaS를 비롯한 다양한 유형의 XaaS를 설명하고, 인프라 요소를 서비스로 노출하는 방법을 알아본다. 클라우드 네이티브 모드에서는 애플리케이션을 소셜 미디어 API나 PaaS API와 통합하거나 다른 애플리케이션에서 사용할 서비스를 호스팅할 수 있다. 또한 다른 외부 서비스를 연결해서 사용하거나 직접 서비스를 제공하는 방법을 설명한다.
11장. ‘API 디자인 모범 사례에서는 기능 지향적이고 세분화된 사용자 중심의 API를 설계하는 방법을 설명한다. 또한 API 수준 또는 서비스에서의 오케스트레이션 수행 여부, 무료 API 모델을 만드는 방법, 서비스가 채널에 구애받지 않도록 API 계층에서 채널과 관련된 문제를 해결하는 방법, 보안을 고려한 API 설계 등 API 설계에 대한 다양한 모범 사례를 설명한다.
12장. ‘디지털 트랜스포메이션’에서는 클라우드 개발이 기존 기업 환경에 미치는 영향과 클라우드를 이용해 디지털 엔터프라이즈로 성공적으로 전환하는 방법을 설명한다.

저자/역자 소개

지은이의 말

오늘날의 비즈니스 환경은 매우 빠르게 변하고 있기 때문에 기업들은 확장성이 뛰어난 애플리케이션을 만들고 배포할 수 있도록 클라우드의 탄력성을 활용한 플랫폼을 구축하고 있다. 다시 말해, 개발자는 기본적으로 클라우드에 적합한 애플리케이션을 만들어야 하는 어려운 문제를 마주하고 있는 것이다. 이 문제를 해결하려면 개발자는 개발을 진행할 환경과 도구, 자원에 대해 알아야 한다.
이 책은 클라우드 도입의 핵심 요인을 설명하고, 클라우드 배포가 일반 애플리케이션을 표준 데이터 센터에 배포하는 것과 어떻게 다른지 보여준다. 클라우드에서 실행 중인 애플리케이션의 디자인 패턴을 배우고, 자바와 스프링으로 REST API를 제공하는 마이크로서비스를 구축하는 방법을 알아본다.
그다음으로는 배포 주기를 단축하기 위해 애플리케이션을 구축, 테스트, 배포하는 생명주기를 최대한 자동화하는 방법을 심층적으로 파악한다. AWS, Azure 플랫폼을 차례로 구성하고, 각 플랫폼의 API를 이용해 애플리케이션을 배포한다. 마지막으로 API 디자인 관련 문제와 모범 사례를 살펴보고, 기존 일체형 애플리케이션을 분산형 클라우드 네이티브 애플리케이션으로 마이그레이션하는 방법을 알아본다.
이 책을 마치면 가용성, 내결함성, 확장성, 복원력이 있는 강력한 클라우드 네이티브 애플리케이션을 구축하고 모니터링하는 방법을 이해하게 될 것이다.

지은이 소개

아제이 마하잔(Ajay Mahajan)

위프로 테크놀로지의 특별 기술 위원(Distinguished Member of Technical Staff)이며, 현재 소매 부문 수석 기술자로 활동 중이다. 최근에는 고객이 차세대 소매 애플리케이션을 위해 클라우드 네이티브와 디지털 아키텍처를 도입할 수 있게 지원하는 일을 하고 있다.
유럽과 미국의 소매 및 금융 분야 고객들과 대규모 미션 크리티컬 시스템에서 일했으며, 19년간 자바 플랫폼을 사용하면서 넷스케이프 애플리케이션 서버부터 서블릿/JSP, JEE, 스프링, 최근의 클라우드 마이크로서비스에 이르기까지 엔터프라이즈 자바의 발전상을 지켜봤다.

무니쉬 쿠마르 굽타(Munish Kumar Gupta)

비자(Visa)의 수석 시스템 설계자다. 인도 벵갈루루에서 살며, 일상 업무는 엄격한 비기능 요구 사항이 있는 애플리케이션을 위한 솔루션 아키텍처 설계, 성능 엔지니어링, 애플리케이션 인프라 관리, 엔터프라이즈에 도입하기 위한 최신 오픈소스 기술을 조사하는 것이다. 『Akka Essentials』(Packt, 2012)의 저자며, 소프트웨어 프로그래밍과 장인 정신에 매우 열정적이다. 기술 동향, 애플리케이션 성능 엔지니어링, Akka에 대한 블로그를 운영 중이다.

시암 순다르(Shyam Sundar)

벵갈루루에 있는 위프로 테크놀로지의 수석 아키텍트로, 위프로의 이머징 테크놀로지 아키텍처(Emerging Technologies Architecture) 그룹에 속해 있다. 팀이 프로젝트에 새로운 기술을 도입할 수 있게 돕는 일을 한다. 주로 클라이언트 측과 클라우드 기술에 중점을 두며, 소프트웨어 장인 정신에 깊은 관심을 가진 평생 학습자다. 더 나은 개발 경험을 위해 끊임없이 새로운 도구와 기술을 실험하고 있다.

옮긴이의 말

우리나라의 클라우드 도입 속도는 상대적으로 느린 편이었지만, 최근에는 클라우드라는 단어의 울림이 점점 커지고 있다. 빠른 비즈니스 환경의 변화는 국내에서도 클라우드의 도입을 필수적인 것으로 만들고 있으며, 클라우드 네이티브 애플리케이션을 개발할 수 있는 능력이 개발자의 필수 덕목이 될 날도 머지않았다.
이 책은 클라우드 애플리케이션 개발에 관해서만 설명하는 책이 아니다. 클라우드 네이티브 애플리케이션이 왜 필요한지부터 구축, 테스트, 배포, 모니터링, 디지털 트랜스포메이션에 이르기까지 필요한 모든 영역을 다룬다. 각 영역에서 가치 있는 정보를 최대한 눌러 담고 있어서, 이 책을 정독한 후에는 생각보다 많은 것을 얻었음에 놀랄지도 모르겠다. 클라우드 네이티브 애플리케이션을 개발하기 위한 기반 지식을 얻고 싶은 개발자에게는 이 책 한 권으로 충분하다. 일독한 후 깊이를 더하고 싶은 주제가 있다면 관련된 전문서를 독서 목록에 더하길 바란다.
원서가 나온 지 오래되지 않았지만, AWS와 Azure의 서비스 및 UI가 개편된 관계로 8장과 9장은 번역하면서 일부 내용을 새로 썼기 때문에 원서와는 조금 달라졌다. 최대한 원서의 내용을 해치지 않는 선에서 수정했으니 이점 양해 부탁드린다.

옮긴이 소개

박규태

엔터프라이즈 자바 환경에서 오랫동안 일했다. 콘텐츠 관리 시스템, 웹 오피스, 스마트 TV용 앱, 소셜 미디어 플랫폼을 개발했으며, 최근 몇 년간은 클라우드 솔루션과 GPU 관리 플랫폼을 개발 중이다. 많은 부분을 코드로 자동화할 수 있어서 클라우드 환경을 무척 좋아한다. 자바월드(javaworld.co.kr)라는 블로그를 운영 중이다.

목차

목차
  • 1장. 클라우드 네이티브 소개
    • 클라우드 네이티브가 필요한 이유
    • 클라우드 네이티브란?
      • 클라우드 플랫폼으로 이동
      • 클라우드 네이티브로 이동
      • 서버 리스로 이동
    • 클라우드 네이티브와 마이크로서비스
    • 클라우드 애플리케이션의 12가지 요소
      • 마이크로서비스 실행을 위한 서비스 생태계
    • 마이크로서비스 도입
      • 일체형 애플리케이션 변환
  • 요약

  • 2장. 첫 번째 클라우드 네이티브 애플리케이션
    • 개발 도구 설정
      • IDE 선택
      • 인터넷 연결 설정
    • 개발 생명주기의 이해
      • 요구 사항/사용자 스토리
      • 아키텍처
      • 설계
      • 테스트와 개발
      • 구축과 배포
    • 프레임워크 선택
      • 드롭위자드
      • 버텍스
      • 스프링 부트
    • product 서비스 작성
      • 메이븐 프로젝트 생성
      • 스프링 부트 애플리케이션 클래스 작성
      • 서비스 및 도메인 객체 작성
      • 서비스 실행
      • 브라우저에서의 서비스 테스트
      • 배포본 생성
    • 기본적인 클라우드 네이티브 기능 추가
      • 구성 외부화
      • 서비스 미터링(metering)
      • 서비스 등록과 검색
    • 요약

  • 3장. 클라우드 네이티브 애플리케이션 설계
    • 트리오: REST, HTTP, JSON
    • API의 발달과 유행
    • API 게이트웨이의 역할
      • API 게이트웨이의 장점
    • 애플리케이션 분리
      • 경계가 있는 컨텍스트/도메인 주도 설계
      • 업스트림 및 다운스트림 서비스 분류
      • 비즈니스 이벤트
    • 마이크로서비스 식별
      • 마이크로서비스와 서비스지향 아키텍처의 차이점
      • 서비스 분류
    • 마이크로서비스 설계 지침
    • 디자인 및 배포 패턴
    • 마이크로서비스를 위한 데이터 아키텍처
      • 명령 조회 책임 분리
      • 데이터 복제
      • 목적에 맞춘 선택
    • 서비스 보안
    • 요약

  • 4장. 클라우드 네이티브 애플리케이션 확장
    • 제품 조회 서비스 구현
      • 간단한 제품 테이블
      • 캐싱
      • 분산 캐시
      • 데이터 모델과 서비스를 분리하기 위해 CQRS 적용
    • 데이터 업데이트 서비스
      • REST 규약
      • 유효성 검사와 오류 메시지
      • CQRS 패턴의 데이터 업데이트 구현
      • 비동기 메시징
      • 골든 소스 업데이트
      • 데이터 업데이트 시 이벤트 발생
      • 쿼리 모델 업데이트
    • 요약

  • 5장. 클라우드 네이티브 애플리케이션 테스트
    • 개발 전에 테스트 케이스 작성
      • TDD
      • BDD
    • 테스트 패턴
      • A/B 테스트
      • 테스트 더블
    • 테스트 유형
      • 단위 테스트
      • 통합 테스트
      • 부하 테스트
      • 회귀 테스트
      • 코드 리뷰와 커버리지
    • 제품 서비스 테스트
      • 큐컴버를 이용한 BDD
      • 스프링 부트 테스트
      • JaCoCo를 이용한 코드 커버리지
    • 요약

  • 6장. 클라우드 네이티브 애플리케이션 배포
    • 배포 모델
      • 가상화
      • PaaS
      • Containers
      • 도커 이미지 빌드
    • 배포 패턴
      • 블루/그린 배포
      • 카나리아 배포
      • 은밀한 개시
      • 자동화를 위한 CI/CD 적용
  • 요약

  • 7장. 클라우드 네이티브 애플리케이션 런타임
    • 런타임의 필요성
    • 참조 런타임 아키텍처 구현
      • 서비스 레지스트리
      • 컨피그 서버
      • 마이크로서비스의 프론트엔드
    • 쿠버네티스: 컨테이너 오케스트레이션
      • 쿠버네티스 아키텍처와 서비스
      • Minikube
      • 쿠버네티스에서 product 서비스 실행
    • 서비스로서의 플랫폼
      • PaaS의 사례
      • 클라우드 파운드리
      • 피보탈 클라우드 파운드리
    • 요약

  • 8장. AWS 플랫폼에 배포
    • AWS 플랫폼
    • AWS 플랫폼의 배포 옵션
      • Beanstalk에 스프링 부트 API 배포
      • Amazon Elastic Container Registry에 컨테이너 이미지 푸시
      • ECS에 스프링 부트 애플리케이션 배포
      • AWS Lambda에 배포
    • 요약

  • 9장. Azure 플랫폼에 배포
    • Azure 플랫폼
    • Azure 플랫폼의 배포 옵션
      • Azure App Service에 스프링 부트 API 배포
      • Azure Container Service에 도커 컨테이너 배포
      • Azure Service Fabric에 스프링 부트 API 배포
      • Azure Function
    • 요약

  • 10장. 서비스 통합
    • XaaS
    • XaaS 구축 시의 주요 설계 고려 사항
    • 서드파티 API와의 통합
    • 요약

  • 11장. API 디자인 모범 사례
    • API 디자인
      • API 리소스 식별
      • API 설계 지침
    • API 모델링
      • Open API
      • RESTful API 모델링 언어(RAML)
    • API 게이트웨이 배포 모델
    • 요약

  • 12장. 디지털 트랜스포메이션
    • 애플리케이션 포트폴리오
      • 포트폴리오 분석: 비즈니스 및 기술 요소
    • 일체형 애플리케이션을 분산형 클라우드 네이티브 애플리케이션으로 변경
      • 일체형 애플리케이션을 분산형 애플리케이션으로 변환
      • 고객 여정을 도메인 주도 디자인으로 매핑
      • 아키텍처 런웨이 정의
      • 개발자 빌드
      • 일체형 애플리케이션 분해
      • 변환 과정 정리
    • 자체 플랫폼 서비스 구축(제어 혹은 위임)
    • 요약

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안