본문 바로가기

Back/Spring

서비스 디스커버리, 서비스 레지스트리 패턴이란?

마이크로서비스를 공부하다 보면, 서비스 자체보다 그 기반 서비스에 대한 다양한 패턴이 이해가 안 될 때가 많다.

그 중에서 가장 시작점이 되는 서비스 레지스트리 및 서비스 디스커버리 패턴에 대해서 간단하게 알아보고자 한다.

 

1. 서비스 디스커버리 패턴

 

클라우드 기반 마이크로서비스 패턴에서는 다양한 클라이언트에 대응하는 단 하나의 진입점을 생성하는 API GATEWAY 패턴을 사용한다.

API GATEWAY는 어떤 서비스를 호출하라는 요청을 받는다면, 그 서비스를 호출하기 위한 두 가지 절차가 필요하다.

최적 경로를 찾기 위한 라우팅.

부하 분산을 위한 로드밸런싱.

두 가지를 활용하여 서비스 호출에 대한 요청을 응답하는 것이 서비스 디스커버리 패턴이다.

 

2. 서비스 레지스트리 패턴

 

최적 경로를 찾기 위해서는 서비스의 IP 주소를 알아야 한다.

그런데 클라우드 환경에서는 IP 주소가 동적으로 변경되는 경우가 대부분이다. (고정 주소는 더 비싸다...!)

따라서 클라이언트에서 IP 주소를 가지고 있어봤자 매번 변경되므로 매번 주소를 변경해야 한다.

이런 비효율성을 극복하기 위해서 IP 주소만 별도로 관리하는 패턴이 바로 서비스 레지스트리 패턴이다.

 

서비스 레지스트리 서비스를 별도로 생성해서 각종 서비스의 주소와 이름 두 가지를 관리한다.

각 서비스는 생성될 때 (LOADING 될 때) 서비스 레지스트리 서버에 자신의 이름과 주소를 등록한다.

그리고 서비스가 소멸할 때 이름과 주소를 삭제 요청한다.

 

API GATEWAY는 클라이언트로부터 요청이 들어오면, 서비스 레지스트리 서버에 서비스의 이름과 주소를 요청한다.

알아낸 이름과 주소를 활용하여 부하 분산을 위해 로드 밸런싱을 실행하여 적절한 서비스를 클라이언트에 제공한다.

 

3. 정리

서비스 디스커버리 패턴을 보조하는 패턴이 서비스 레지스트리 패턴이다.

유동 IP 주소를 관리하는 서비스 레지스트리 패턴.

해당 주소를 활용하여 최적 경로를 제안하는 라우팅.

부하 분산을 위해 적절한 서비스를 찾아 제공하는 로드 밸런싱.

라우팅과 로드밸런싱 과정을 합쳐서 서비스 디스커버리 패턴이라고 한다.