간편결제 시스템
Domain Driven Desgin 개발 철학, Micro Server Architecture, Hexagonal Architecture를 연습 및 적용해보고자 한 간편결제 프로젝트입니다.
이 시스템의 주요 목적은 사용자가 MK머니를 충전하고, 외부 가맹점 또는 특정 사용처에서 이를 소비할 수 있도록 지원하는 것입니다. 수익 모델은 사용자의 포인트를 보유함으로써 발생하는 이자 수익과, 가맹점 또는 사용처로부터 수수료를 받는 구조입니다. 따라서, 사용자가 쉽고 안정적으로 포인트를 충전하고 소비할 수 있도록 하는 것이 가장 핵심적인 비즈니스 로직입니다.
필요한 기능은 다음과 같습니다.
- 머니 충전 및 차감
- 사용자 관리
- 계좌 관리
- 결제한 내역 관리
- 가맹점 관리
각 기능들은 독립적인 책임과 역할을 가지며 다른 기능과 상호작용합니다. 기능들이 하나의 서비스에서 개발된다면 응집력이 낮아지고 서로 결합되며 big ball of mud 형태가 될 수 있고 각 명확한 책임을과 역할을 가지고 주요한 도메인이 존재하기 때문에 DDD의 Bounded-context 개념과 context-map을 통해 적절히 나눴습니다.
MSA와 DDD를 통해서 다음과 같은 이점을 얻을 수 있었습니다.
- 서비스간 결합성을 낮추고 응집력 올려 각 서비스의 명확한 역할을 부여할 수 있었습니다.
- 유연한 기능 확장 및 배포단위 최소화
- 변경에 빠른 대처가 가능하다.
- 다른 서비스의 오류에 영향이 낮음
- 단독적인 스케일 가능