Skip to content

DDD, Hexagonal Architecture 개념과 Spring Cloud, Apache Kafka 기술을 적용한 q-pang MSA 서버

Notifications You must be signed in to change notification settings

q-pang/q-pang-api

Repository files navigation

q-pang api

이커머스를 설계 및 구축하며 대규모 시스템에 필요한 개념과 기술을 적용해보기 위한 프로젝트입니다.
DDD, Hexagonal Architecture 개념과 Spring Cloud, Apache Kafka 기술을 적용하여 MSA 서버를 구성하였습니다.
Java 마이그레이션 및 개선 버전

아키텍처

q-pang 아키텍처

  • q-pang 서버는 총 4가지의 마이크로서비스로 이루어진다.
  • 각 마이크로서비스로의 접근은 Gateway Server를 통해 이루어지며, 사용자 인증은 Gateway Server에서 수행한다.
  • Gateway Server에서 request header에 담긴 jwt를 사용하여 사용자를 검증하고, payload에 담긴 username을 꺼내어 request header에 담아 마이크로서비스를 호출한다.
  • Database Schema, Eureka Service Url, JWT Secret 등의 환경 정보는 Config Server에서 중앙 집중하여 관리한다.
  • 마이크로서비스간 호출이 필요한 경우, 컨텍스트간에 항상 일관된 데이터가 필요하면 openfeign을 사용하여 동기 방식으로 호출하고, 최종 일관성으로 처리 가능한 경우 Kafka를 사용하여 이벤트 기반의 비동기 방식으로 호출한다.

ERD

image

프로젝트 진행 과정

프로젝트 주요 관심사

  • DDD의 전략적 설계를 적용하여 마이크로서비스 도출
  • Hexagonal Architecture를 적용하여 비즈니스 로직이 외부 요소에 의존하지 않도록 설계 및 구현
  • Apache Kafka를 사용하여 이벤트 기반의 비동기 호출을 통해 마이크로서비스간의 최종 일관성 유지
  • Kotest, Mockk을 사용하여 애플리케이션 서비스의 단위 테스트 케이스 작성
  • Spring Cloud, Docker를 사용하여 Cloud Native Application 구성

미구현 개선 사항

  • 부하 테스트를 통한 주요 병목 지점 확인
  • DB 다중화를 통한 SPOF 방지 및 부하 분산
  • 빈번하게 조회되고 실시간성 조건이 존재하지 않는 데이터를 대상으로 캐싱 전략을 도입하여 DB 부하 분산
  • 최종 일관성이 보장되도록 분산 트랜잭션 관리 전략 도입
  • 마이크로서비스간 트랜잭션 추적을 고려한 로그 시스템 구축
  • 마지막 로그인 시간을 기준으로 유저를 비활성화 시키기
  • 가상의 트래픽을 상정하여 Thread Pool, DB Connection Pool 최적화
  • Java 마이그레이션 버전인 spring-playground 에서 구현 예정

실행하기

  • Docker Desktop 설치
  • sh gradle-build.sh 명령어 실행
  • docker-compose up -d 명령어 실행
    • docker-compose up -d --build rebuild 하고자 하는 경우 해당 명령어 사용

About

DDD, Hexagonal Architecture 개념과 Spring Cloud, Apache Kafka 기술을 적용한 q-pang MSA 서버

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages