이커머스 프로젝트 - 프로젝트 마무리 및 회고

김동균·2022년 12월 22일
1

기존에 정의한 요구사항들은 모두 구현하지 못했지만, 프로젝트 개요에 작성했다시피 프로젝트의 주 목적인 '복잡한 도메인 지식이 존재하는 이커머스 프로젝트를 DDD, Hexagonal Architenture, Microservice Architecture, Spring Cloud, Apache Kafka 기반으로 구축' 을 달성하여 프로젝트를 마무리한다.
구현된 서비스는 github에서 확인할 수 있고, 로컬에서 실행할 수 있도록 구성하여 README.md에 실행 방법을 작성해놓았다.

개요 작성을 시작으로 프로젝트 마무리까지 12일이 걸렸다.
짧은 시간이지만 배웠던 개념들을 실제로 구현해보며 정말 많은 것을 배울 수 있었던 프로젝트였다.

MSA의 트레이드오프

q-pang 서비스를 모놀리식 아키텍처로 구현하자면, 단일 서버와 단일 DB로 구성할 수 있다.
해당 방식으로 서비스를 구성하면 기능의 독립적인 확장이 불가능해지지만, 서버 전체의 스케일링은 가능하다.
DB가 컨텍스트별로 분리되어있지 않으니 데이터의 일관성이 깨지는 문제가 발생하지 않고, Spring Cloud, Kafka 등의 기술 또한 사용되지 않으니 MSA에 비해 구현 난이도와 관리 포인트가 엄청나게 적다는 것을 알 수 있다.
서비스 초기에는 모놀리식 혹은 모듈러 모놀리스 구조로 시작하고, 서비스가 정말로 크게 성공하고 프로젝트 규모가 커지면서 개발자가 엄청나게 증가하여 더이상 모놀리식으로는 관리가 불가능해지는 시점에 MSA로 전향하는 것이 좋다는 생각이 든다.

애플리케이션 아키텍처의 선택

이커머스의 도메인 지식은 굉장히 복잡하다.
이커머스를 간소화하여 구현한 q-pang 서비스마저 4개의 바운디드 컨텍스트가 도출되어 복잡성을 통제하기 위한 수단으로 Hexagonal Architecture를 선택하였다.
하지만 도메인 지식이 간단한 서비스라면, Layered Architecture를 적용하여 개발 생산성을 높이는 것이 좋아보인다.

서비스 성능 개선

구현하지는 않았지만, q-pang이 트래픽이 많이 발생하는 실제 서비스라고 가정한다면 다음과 같은 성능 개선 방법을 적용할 수 있다.

애플리케이션 서버 규모 확장

현재는 각 마이크로서비스가 단일 컨테이너로 구동되고 있는 상황이다.
서버를 scale out하여 spof를 방지하고 Gateway Server를 통해 로드밸런싱하여 마이크로서비스의 부하를 분산할 수 있다.

DB 다중화

애플리케이션 서버와 마찬가지로 DB 서버 또한 spof의 방지와 부하 분산을 통한 다중화를 할 수 있다.
MySQL에서 지원하는 다중화 기능을 통해 DB 서버들 사이에 master-slave 관계를 설정하고 데이터 원본은 master 서버에, 데이터 사본은 slave 서버에 저장하는 방식을 사용할 수 있다.
서비스의 쓰기, 읽기 연산 비율을 고려하여 master, slave 서버의 수를 할당한다.

자주 액세스되는 데이터 캐싱

실제 서비스의 메트릭을 확인해봐야 알겠지만, 단순하게 생각해보면 가장 빈번하게 발생하는 데이터 조회는 상품 리스트일 것이다.
상품을 등록하자마자 사용자에게 노출해야한다는 실시간성 조건이 존재하지 않으면, 상품 리스트를 캐시에 담아 DB의 부하를 줄이는 방법을 사용할 수 있다.

profile
백엔드 개발자

0개의 댓글