요약
- 6장. 사례연구 - 마이크로서비스 도출과 아키텍처 구성 나머지 부분에 대해 이해함
- JHipster를 활용한 아키텍처 구성
- MSA 외부 아키텍처 구성(게이트웨이, 레지스트리 서비스)
- JHipster란?
- JHipster의 목적
- JHipster 마이크로서비스 아키텍처
- JHipster 환경 구축
- macOS
메모
6.5 JHipster를 활용한 아키텍처 구성
- 개발 환경을 구성하기 위한 로컬 PC 설정에 대해 설명함.
- 이를 위해 JHipster라는 도구를 사용하여 스프링 클라우드 및 스프링 부트 기반의 마이크로서비스 개발 환경을 쉽게 설정함.
- 로컬 개발 환경에서는 클라우드 인프라의 쿠버네티스를 최종 배포 환경으로 사용하며, 로컬 PC에서 간단하게 구동 가능한 H2 데이터베이스를 저장소로 사용함.
- 또한, 서비스 구분을 위해 로컬 PC에서 테스트 가능한 포트를 사용함.
- 프런트엔드와 API 게이트웨이 및 사용자 백엔드 서비스는 하나의 서비스로 구축되며, 서비스 디스커버리를 위한 레지스트리(Registry) 서비스를 생성함.
- 백엔드 서비스는 사용자/로그인, 대출, 도서, 도서 카탈로그만 구현하며, 게시판, 배송, 이메일 서비스는 구현하지 않음.
- 프런트엔드와 백엔드의 기본 통신 방법은 REST API이며, 서비스 간 동기 통신에는 페인을 사용하고, 비동기 통신 메커니즘으로는 카프카를 사용함.
- 도서 검색과 최다 대출 도서 집계 기능의 원활한 사용을 위해 도서 카탈로그 서비스와 도서 서비스를 분리하는 CQRS 패턴을 적용하고, 도서 카탈로그 서비스에는 읽기에 최적화된 MongoDB를 사용함.
6.5.1 MSA 외부 아키텍처 구성(게이트웨이, 레지스트리 서비스)
- JHipster라는 도구를 소개하며, 이를 통해 개발 환경을 쉽게 구성할 수 있다고 함.
JHipster란?
- JHipster는 모던 웹 애플리케이션과 마이크로서비스 아키텍처를 빠르게 적용, 개발, 배포할 수 있도록 도와주는 오픈소스 개발 플랫폼임.
- 이는 다음의 지원 영역을 포함합니다:
- 프런트엔드 영역 지원: Angular, React, Vue.js
- 백엔드 영역 지원: Spring Boot, Micronaut, Quarkus, Node.js, .NET
- 배포 영역 지원: Docker and Kubernetes for AWS, Azure, Cloud Foundry, Google Cloud Platform, Heroku, OpenShift
- 따라서 JHipster는 다양한 프런트엔드와 백엔드 기술, 그리고 여러 클라우드 플랫폼에서의 배포를 지원하며, 이를 통해 개발자들이 빠르게 마이크로서비스 아키텍처를 개발하고 배포하는데 도움을 줌.
JHipster의 목적
- JHipster의 주요 목표는 완전하고 현대적인 웹 애플리케이션과 마이크로서비스 아키텍처를 생성하는 것임.
- 이를 달성하기 위해 JHipster는 다음과 같은 항목들을 통합하고자 함
- 강력한 서버 스택을 제공하여 광범위한 테스트를 커버할 수 있음.
- Angular, React, Vue.js와 Bootstrap을 갖춘 CSS를 사용하여 세련되고 현대적인 모바일 친화적 UI를 제공함.
- Webpack, Maven 또는 Gradle을 사용하여 애플리케이션을 빌드하는 강력한 워크플로를 제공함.
- 코드 기반 인프라를 제공하여 클라우드에 빠르게 배포할 수 있게 함.
- 또한, JHipster는 설치가 간편하며, 사용자가 몇 가지 옵션만 선택하면 바로 실행 가능한 웹 애플리케이션을 만들어 줌.
- 사용자는 모노리스 애플리케이션, 마이크로서비스 애플리케이션, 마이크로서비스 게이트웨이 등을 선택할 수 있고, 필요한 환경을 구축하고 라이브러리를 자동으로 설치함.
- JHipster는 기본적인 인증 처리 및 REST API를 이용한 통신도 지원함.
JHipster 마이크로서비스 아키텍처
- JHipster의 아키텍처는 다음과 같은 구성요소로 이루어져 있습니다
- JHipster 레지스트리
- 유레카(Eureka)와 스프링 클라우드 컨피그(Spring Cloud Config)를 기반으로 하는 이 부분은 MSA(마이크로서비스 아키텍처)의 디스커버리 패턴을 구현함.
- 모든 구성 요소들이 서로 연결되고 통신할 수 있게 하는 역할을 담당함.
- 마이크로서비스
- 백엔드 코드를 담고 있으며, 실행 후 도메인에 대한 API를 노출함.
- 여러 마이크로서비스로 구성될 수 있으며, 각각의 마이크로서비스는 몇 개의 엔티티와 비즈니스 규칙이 포함됨.
- 게이트웨이
- 모든 프런트엔드 코드를 담고 있으며, 전체 마이크로서비스에서 생성한 API를 사용함.
- 줄 프락시(Zuul Proxy)와 리본(Ribbon)을 사용함.
- 또한, 백엔드 소스코드는 'src/main/java' 폴더에, 프런트엔드 소스코드는 'src/main/webapp' 폴더에 위치하며, 프런트엔드는 사용자가 선택한 기술(Angular, Vue.js, React 등)로 만들어짐.
JHipster 환경 구축
- JHIpster 사용을 위해 자바 11, Node.js, JHipster를 설치해야 함.
npm install -g generator-jhipster
macOS
- macOS를 사용하는 경우, Homebrew 를 사용해 JHipster를 설치할 수 있음.
brew install jhipster