728x90
SMALL
[서비스 디스커버리]
서비스 디스커버리란?
- 누군가로부터 요청이 들어왔을 때, 해당 서비스가 어디에 위치하고 있는지에 대한 정보를 얻기 위해서 사용하는 서비스
- 서비스 디스커버리 역할을 위해 유레카 서비스 사용했음.
[E-commerce 애플리케이션 개요]
전체 애플리케이션 개요
- 사용자는 3가지 마이크로 서비스를 사용할 수 있다.
- CATALOG-SERVICE : 제품들이 들어가있는 카탈로그 서비스
- USER-SERVICE
- ORDER-SERVICE
- 사용자는 다음과 같은 기능을 이용할 수 있다.
- 상품 조회
- 사용자 조회
- 로그인 기능
- 상품 주문
- 상품 수량 업데이트
- 사용자가 상품 주문하면 ORDER-SERVICE가 CATALOG-SERVICE의 상품 수량 업데이트
- ORDER-SERVICE에서 CATALOG-SERVICE의 수량을 조절하기 위한 커맨드를 실행할 예정
- Kafka라는 Message Queueing 서비스 이용할 예정
- ORDER-SERVICE(Producer)에서 수량 업데이트에 대한 정보를 Kafka에 보내주면 해당 정보에 관심 있다고 Kafka에 등록했던 CATALOG-SERVICE(Subscriber)는 등록된 수량 정보를 가져와 자신이 보유한 데이터베이스에 업데이트 수행
- 주문 확인
- 사용자가 USER-SERVICE를 통해 주문 확인을 요청하면 USER-SERVICE가 ORDER-SERVICE에 주문 조회한 후 결과를 반환 (마이크로서비스 간의 통신 발생)
- 주문 조회
[E-commerce 애플리케이션 구성]
전체 애플리케이션 구성
[현재 아키텍처]
- Registry Service (Eureka Server)
- CATALOG-SERVICE, USER-SERVICE, ORDER-SERVICE가 유레카 서비스에 등록
- Messaging Queueing Service
- CATALOG-SERVICE와 ORDER-SERVICE가 서로 데이터를 주고 받기 위한 용도로서 사용
- Routing Service (API Gateway)
- 외부에서 클라이언트 요청이 들어왔을 때 Spring API Gateway를 이용하여 라우팅 서비스 / 부하 분산
- Configuration Service (Config Server)
- 3가지 마이크로 서비스가 가지고 있어야 할 환경설정 정보를 마이크로 서비스 안에 구현하는 것이 아닌 외부 서비스에 등록시키고 참조해서 사용하는 관계로 사용
[추후 발전시킬 아키텍처]
- Kubernetes를 이용하여 클러스터링 구조 활용
❓Kubernetes란?
컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 오픈 소스 플랫폼 쿠버네티스는 복잡한 컨테이너 오케스트레이션 작업을 자동화하여 개발자와 운영자가 더 효율적으로 애플리케이션을 관리하고 확장할 수 있도록 도와줌.
- Kubernetes 환경에 Container Runtime으로서 Docker를 이용
- Docker를 이용하여 3가지 마이크로서비스를 배포
- 3가지 마이크로서비스를 모니터링하기 위해 그라파나, 프로메테우스 서비스 연동
- CATALOG-SERVICE와 ORDER-SERVICE를 연동하기 위해 Kafka(Message Queueing Server)를 별도의 외부의 Docker 컨테이너에 배포
- CI/CD pipeline을 구축하여 Github에 코드 등록 시 파이프라인으로 연결된 시스템에 의해 다음과 같은 작업이 자동으로 수행
- 자동으로 빌드, 패키징
- Docker에 필요한 이미지가 만들어짐.
- 해당 이미지가 Docker 레지스트리에 등록 후 Kubernetes에서 배포됨.
- 외부에서 클라이언트 요청이 들어왔을 때 요청을 처리해줄 수 있는 Ingress Controller를 Kubernetes 안쪽에 배치 → 클라이언트로부터 요청이 들어오면 Ingress Controller를 통한 배포
전체 애플리케이션 구성요소
구성요소
|
설명
|
Git Repository
|
마이크로서비스 소스 관리 및 프로파일 관리
|
Config Server
|
Git 저장소에 등록된 프로파일 정보 및 설정 정보
|
Eureka Server
|
마이크로서비스 등록 및 검색
|
API Gateway Server
|
마이크로서비스 부하 분산 및 서비스 라우팅
|
Microservices
|
회원 MS, 주문 MS, 상품(카테고리) MS
|
Queuing System
|
마이크로서비스 간 메시지 발행 및 구독
|
- Config Server : 마이크로서비스가 다루어야 할 다양한 설정 정보들을 .yml이나 .properties 파일 혹은 자바 코드가 아닌 Configuration Server에 등록 후 동적으로 갱신될 수 있는 시스템 구축
애플리케이션 API
마이크로서비스
|
RESTful API
|
HTTP Method
|
Catalog Service
|
/catalog-service/catalogs : 상품 목록 제공
|
GET
|
User Service
|
/user-service/users : 사용자 정보 등록 /user-service/users : 전체 사용자 조회 /user-service/users/{user_id} : 사용자 정보, 주문 내역 조회
|
POST GET GET
|
Order Service
|
/order-service/users/{user_id}/orders : 주문 등록 /order-service/users/{user_id}/orders : 주문 확인
|
POST GET
|
[프로젝트 코드]
위의 프로젝트에 대한 코드는 해당 깃허브에서 확인해보실 수 있습니다.
728x90
LIST
'Backend > Spring Cloud' 카테고리의 다른 글
[MSA] API Gateway Service (0) | 2024.07.22 |
---|---|
[MSA] 마이크로서비스 Service Discovery (0) | 2024.07.06 |
[MSA] Microservice와 Spring Cloud 소개 (0) | 2024.07.05 |