bum***
2019-09-16

JVM 기반 마이크로서비스 애플리케이션을 설계하고 구축하는 방법을 알려준다. 전통적인 Java EE 애플리케이션과 마이크로서비스 설계를 비교한 후 마이크로서비스를 이루는 각 요소를 설명하는 방식으로 독자의 이해를 돕는다. 이를 바탕으로 마이크로서비스를 구현하는 도구와 기법을 설명한다. 마이크로서비스를 매끄럽게 운용하는 모니터링, 보안, 테스팅, 클라우드 전개 방법도 함께 살펴본다.
이번에 리뷰할 책은 "엔터프라이즈 자바 마이크로서비스" 입니다.
마이크로서비스가 도래한 배경부터 장점, 그리고 마이크로서비스를 위한 기반기술(환경), 테스트, 클라우드 deploy, 서비스 discovery, 내 고장성과 모니터링, 보안 등등을 다루고 있습니다.
또한 아주 오래된 웹 어플리케이션에 하이브리드패턴을 통해 새로운 마이크로서비스를 덧붙여가는 과정을 통해 하나씩 필요한 개념들을 배울 수 있습니다. 300페이지의 분량으로 꼭 필요한 부분만 알찬 내용을 담고 있습니다.
기존 (모든 컴포넌트가 한번에 deploy되는 형태의)모노리스방식의 단점을 얘기하면서, 제한된 context단위의 서비스별로 분산처리하는 마이크로서비스의 개발방식이 생겨나게 되었습니다.
일반적인 WAS는 j2ee등을 지원하기 위해 상당히 많은 기능을 포함하고 있어 매우 무겁습니다. 이에 JeAS(Juest Enough Application Service)라는 실행에 꼭 필요한 기능들만 패키징한 런타임이라는 개념이 생겼고 JAX-RS, CDI, JSON-P 정도의 기능들이 가볍게 동작합니다.
드롭위저드, 파야라 마이크로, 스프링 부트, 손테일 등등이 이런 JeAS런타임들이며 어느것을 선택하느냐에 따라 패키징방법 및 소스의 annotation이 달라집니다.
테스트는 일반적으로 알고 있는 단위 테스트 및 통합 테스트외에 소비자 중심 계약 테스트라는 마이크로서비스 소비자와 마이크로서비스 사이의 계약을 정의하는 합의 문서(pact document)를 기반으로 하는 테스트에 대해서도 다루고 있습니다.
기존 사용하고 있던 서비스에서 마이크로 서비스를 찾아서 호출하는 케이스를 위해 하드코딩된 URL을 통해 호출하는 형태부터 추상화된 라이브러리사용 그리고 최종적으로 레지스트리에 등록된 서비스를 찾아서 이용하는 방법을 넷플릭스 리본을 통해 설명해준다.
마이크로서비스의 보안에 대해선 키클록 오픈소스를 통해 설명한다.
마이크로서비스가 여러 런타임으로 분산되어 있으면 필연적으로 네트웍에서 문제가 발생하는 경우가 많은데 이런 여러 문제상황별로 설명하고 히스트릭스라는 오픈소스를 통해 설명합니다.
그리고 마지막으로 카프카를 통해 데이터 스트리밍에 대한 내용을 다루고 있습니다.
회사에서 여러 컴포넌트로 이루어진 웹서비스를 모노리스방식으로 개발하면서
마이크로 서비스로의 전환이나 도입은 막연히 힘들지 않을까 생각하고 아예 관심도 갖지 않고 있었는데
하이브리드방식으로 기존시스템에 영향을 주지 않고 마이크로서비스형태의 서비스를 추가하는것이 생각보다 어렵지 않을 수 있겠구나 하는 생각이 들었습니다.
메이븐 apache-maven-3.6.2 버전으로는 빌드 및 실행에 문제가 있네요.
[ERROR] Failed to execute goal io.thorntail:thorntail-maven-plugin:2.2.0.Final:package (package) on project chapter1: Execution package of goal io.thorntail:thorntail-maven-plugin:2.2.0.Final:package failed: An API incompatibility was encountered while executing io.thorntail:thorntail-maven-plugin:2.2.0.Final:package: java.lang.AbstractMethodError: null
전 메이븐 3.5.3으로 했을때 이상이 없었습니다.