딸기말차

[MSA] 8. Config Server, Eureka Server 본문

Bootcamp/MSA

[MSA] 8. Config Server, Eureka Server

딸기말차 2023. 10. 19. 09:37

엔코아 플레이데이터(Encore Playdata) Backend 2기 백엔드 개발 부트캠프 (playdata.io)

 

백엔드 개발 부트캠프

백엔드 기초부터 배포까지! 매력있는 백엔드 개발자 포트폴리오를 완성하여 취업하세요.

playdata.io


1. Configuration Service

Micro Service를 구현할 때, 공통 된 정보는 마이크로서비스마다 코드를 작성하는 것보단 한 곳에 설정정보를 작성해 모든 마이크로서비스에서 공통으로 사용할 수 있다면 편리할 것이다.

Spring Cloud Config는 배포 된 마이크로서비스에서 완전히 분리되어, 어플리케이션의 구성 데이터를 관리한다.

 

즉, 여러 마이크로서비스 인스턴스를 실행하더라도 항상 동일한 구성을 보장해주며, 자체적으로 사용할 수도 있지만 Git과 같은 저장소와 연동하여 사용할 수도 있다.


2. Chapter5 : Config-Server, Licensing-Service

# configserver/src/main/resources/config DIR
# licensing-service-dev.properties

JAVA - DB 연동을 위한 설정 변경

# docker DIR
# docker-compose.yml

Docker Image - DB 연동을 위한 설정 변경

# config-server 재빌드, 이미지 다시 만들기 
./mvnw package dockerfile:build

config-server 재빌드 + docker image로 재생성

# 실행중인 docker compose 전부 중지
docker-compose down

기존 실행중이던 도커 이미지 중지

# docker-compose를 통해 이미지 실행
docker-compose up

이미지 실행

# 컨테이너를 띄운 후 API 요청
http://localhost:8080/v1/organization
/e839ee96-28de-4f67-bb79-870ca89743a0/license/279709ff-e6d5-4a54-8b55-a5c37542025b

API
요청한 API 결과


3.  Service Discovery

마이크로서비스를 구축하다보면, 서비스별로 접근할 수 있는 IP 및 Port가 다른 경우가 생긴다.

이 경우 IP를 하드코딩하여 접근할 수도 있지만 한 곳에서 해당 서비스들을 관리하는 문을 만든다면, 더 용이하게 관리할 수 있을 것이다.

즉, 서비스 디스커버리란 클라이언트 입장에서 웹 서비스를 이용하기 위한 IP 및 Port는 일정하되, 어떤 서비스를 요청했을 시 서비스 디스커버리에서 해당 서비스를 찾아줄 수 있게 구성하는 것을 의미한다.

1. 서비스를 소비하는 클라이언트 입장에서 서버가 배포 된 물리적 위치(IP 및 서버이름) 을 추상화
2. 서비스 소비자는 논리적인 이름을 사용해 서버의 비즈니스 로직 호출
3. 서비스 인스턴스가 시작되고 종료될 때 인스턴스들의 등록 및 취소도 처리
4. Eureka, Zookeeper 등을 사용해 구현 가능하다.

4. Chapter6 : Eureka Server

# configserver/src/main/resources/config DIR
# licensing-service-dev.properties
# organization-service-dev.properties

JAVA - DB 연동을 위한 설정 변경, public이라는 DB 사용

# docker DIR
# docker-compose.yml

POSTGRES_DB 부분의 연결할 DB를 public 으로 변경

# config-server build
./mvnw package dockerfile:build

DB 설정 정보 변경 후 config-server build

# eureka-server build
./mvnw package dockerfile:build

eureka-server build

# licensing-service build
./mvnw package dockerfile:build

licensing-service build

# organization-service build
./mvnw package dockerfile:build

organization-service build

# 기존 실행중이던 docker-compose 중지
docker-compose down

# 새로 만든 도커 이미지 실행
docker-compose up

기존 이미지 중지 후 새로 빌드한 이미지 실행

# eureka 내 organization-service에 접근
http://localhost:8070/eureka/apps/organization-service

organization-service

# organization-service API 호출
http://localhost:8080/v1/organization
/e839ee96-28de-4f67-bb79-870ca89743a0/license/279709ff-e6d5-4a54-8b55-a5c37542025b/feign

API
요청 결과


5. 55일차 후기

마이크로서비스는 기존의 모놀리식과는 다르게 여러 서비스들을 구현해, 취합하여 사용하는 형태와 마찬가지이다.

때문에 기존에는 한 프로젝트에서 관리하던 설정정보 등을 공통으로 관리할 수 있는 수단이 필요했고, 이를 위해 Config Server를 구축해 사용해보았다.

 

또한, 여러 서비스를 일일이 IP로 접근하게 한다면, 나중에 IP가 변경되었을 때 전부다 바꿔줘야하는 불편한 작업을 겪게될 수 있다. 만일 이를 IP가 아니라 서비스의 이름을 통해 접근할 수 있다면, 추후 IP가 변경되더라도 코드의 변경없이 서비스를 유지할 수 있게 된다.

이를 위해 Eureka 등을 사용해 서비스 디스커버리를 구축하여 사용한다면, 유지보수에 많은 도움이 될거라는 생각이 들었다.