이커머스를 설계 및 구축하며 대규모 시스템에 필요한 개념과 기술을 적용해보기 위한 프로젝트입니다.
DDD, Hexagonal Architecture 개념과 Spring Cloud, Apache Kafka 기술을 적용하여 MSA 서버를 구성하였습니다.
Java 마이그레이션 및 개선 버전
- 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를 사용하여 이벤트 기반의 비동기 방식으로 호출한다.
- 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 하고자 하는 경우 해당 명령어 사용