Backend/Spring Cloud

[MSA] E-commerce 애플리케이션 프로젝트

_은선_ 2024. 7. 28. 04:16
728x90
SMALL

[서비스 디스커버리]

서비스 디스커버리란?

  • 누군가로부터 요청이 들어왔을 때, 해당 서비스가 어디에 위치하고 있는지에 대한 정보를 얻기 위해서 사용하는 서비스
  • 서비스 디스커버리 역할을 위해 유레카 서비스 사용했음.

[E-commerce 애플리케이션 개요]

전체 애플리케이션 개요

  • 사용자는 3가지 마이크로 서비스를 사용할 수 있다.
    1. CATALOG-SERVICE : 제품들이 들어가있는 카탈로그 서비스
    2. USER-SERVICE
    3. ORDER-SERVICE
  • 사용자는 다음과 같은 기능을 이용할 수 있다.
    1. 상품 조회
    2. 사용자 조회
      • 로그인 기능
    3. 상품 주문
    4. 상품 수량 업데이트
      • 사용자가 상품 주문하면 ORDER-SERVICE가 CATALOG-SERVICE의 상품 수량 업데이트
      • ORDER-SERVICE에서 CATALOG-SERVICE의 수량을 조절하기 위한 커맨드를 실행할 예정
      • Kafka라는 Message Queueing 서비스 이용할 예정
        • ORDER-SERVICE(Producer)에서 수량 업데이트에 대한 정보를 Kafka에 보내주면 해당 정보에 관심 있다고 Kafka에 등록했던 CATALOG-SERVICE(Subscriber)는 등록된 수량 정보를 가져와 자신이 보유한 데이터베이스에 업데이트 수행
    5. 주문 확인
      • 사용자가 USER-SERVICE를 통해 주문 확인을 요청하면 USER-SERVICE가 ORDER-SERVICE에 주문 조회한 후 결과를 반환 (마이크로서비스 간의 통신 발생)
    6. 주문 조회

[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