JHipster로 마이크로서비스 만들어보기

Walwal·2025년 6월 24일

스프링

목록 보기
65/65
post-thumbnail

도메인 주도 설계로 시작하는 마이크로 서비스 개발이라는 책을 읽고 조금 정리하고 싶은 마음이 생겨 포스트를 작성하려고 한다.

책에서는 아래와 같이 설명하고 있다.
넷플리스에서 대규모 서비스 장애를 겪데 되면서 모노리스 시스템을 마이크로 서비스 기반의 시스템으로 전환하는 작업을 수행했으며, 이 과정에서 겪은 여러 시행착오들의 집합체를 오픈소스로 공개했는데 그게 바로 넷플릭스 OSS라고 한다.

넷플릭스 OSS

  • 로드밸런싱을 위한 Zuul과 Ribbon
  • 모니터링을 위한 Hystrix
  • 서비스 등록을 위한 Eureka

생소한 단어들이 많았는데, 조금 상세히 알아보았다.

Zuul

넷플릭스에서 개발한 오픈소스 API 게이트웨이 서버이며, MSA에서 클라이언트와 백엔드 서비스 사이의 요청을 라우팅, 필터링, 인증, 로깅 등을 담당하는 컴포넌트이다.
이후에 추가로 설명이 되겠지만, Spring에서는 Zuul을 쉽게 사용할 수 있도록 spring-cloud-starter-netflix-zuul 의존성을 제공한다.

Ribbon

Ribbon 넷플릭스에서 개발한 클라이언트 측 부하분산 라이브러리이다.
Zuul과 마찬가지로 현재는 Spring과 통합되어 spring cloud LoadBalancer로 대체되었다.

Hystrix

Hystricx는 넷플릭스에서 개발한 장애 격리 라이브러리로 마이크로서비스 환경에서 하나의 서비스 장애가 전체 시스템으로 확산되는 걸 방지하기 위한 용도로 사용된다.(서킷 브레이커)
다만, 마찬가지로 Spring Cloud Circuit Breaker로 공식 지원되어 중단되었다.

Eureka

Eurek는 넷플릭스에서 만든 서비스 디스커버리 서버이다.
서비스 디스커버리 서버는 마이크로서비스 환경에서 서비스 인스턴스를 등록하고 검색할 수 있게 해주는 중앙 레지스트리 역할을 수행한다.
마치 전화번호부와 같은 역할을 한다고 이해하면 쉽다.
MSA에서는 서비스들이 개별적으로 띄워지고, 스케일링도 자유로워서 IP/포트가 고정되어 있지 않다.
그렇기 때문에 고정된 주소로는 서비스를 찾을 수 없고, 중앙에서 동적으로 서비스 목록을 관리해주는 장치가 필요하다.
마찬가지로 Spring Cloud에서 사용이 가능하지만, Consul, Zookeeper, Nacos등 대안도 존재한다.

이처럼 넷플릭스 OSS는 넷플리긋가 마이크로서비스를 개발하고 운영하면서 생긴 노하우를 다른 사람들도 쉽게 사용할 수 있도록 공유한 오픈소스 라고 한다.
이렇게 공유한 오픈소스로 마이크로서비스 애플리케이션의 전형적이 패턴이 생성되었다.

정리

  1. 모든 마이크로서비스는 인프라에 종속되지 않도록 데이터베이스, 파일 등에저장된 환경 설정 정보를 형상 관리 시스템에 연계된 Config 서비스에서 가져와 설정 정보를 주입한 후 클라우트 인프라의 개별 인스턴스로 등록된다.
  2. 로딩과 동시에 서비스 레지스트리에 자신의 서비스명과 클라우드 인프라로부터 할당받은 물리주소를 매핑해서 등록한다.
  3. 클라이언트가 API 게이트웨이를 통해 마이크로서비스에 접근하고 이때 API 게이트웨이는 적절한 라우팅 및 부ㅎ하 관리를 위한 로드밸런싱을 수행한다.
    4.API 게이트웨이에서 클라이언트가 마이크로서비스로 접근하기 위한 주소를 알기 위해 서비스 레지스트리 검색을 통해 서비스 위치를 알아온다.
  4. API게이트웨이에는 클라이언트가 각 서비스에 접근할 수 있는 권한이 있는지 권한서비스와 연계해 인증/인가 처리를 수행한다.
  5. 모든 마이크로서비스 간의 호출 흐름은 모니터링서비스와 추적서비스에 의해 모니터링되고 추적된다.

profile
Hello

0개의 댓글