신발 주문 시스템 분석 아키텍처 - KEEMSY/shoes-ordering-system GitHub Wiki
완료
나의 신발 주문 시스템의 목표는 장애가 없는 사용자 경험을 개선하고, 다양한 요구사항에 대한 기능의 효율성 증진이다. 이를 위해 시스템을 분석하며, 분석은 도메인 분석과 시스템 아키텍처 분석으로 나뉜다.
- 도메인 분석을 통해 프로젝트에서 필요한 도메인들을 식별하고, 해당 도메인을 모델링 한다.
- 기능적 요구사항, 비기능적 요구사항을 정의하여, 필요한 기술 스택과 아키텍처를 구성한다.
도메인 분석 진행 간 파악한 비 기능적 요구사항을 통해 고려해야할 아키텍처 특성을 다음과 같이 정리하였다.
운영적 아키텍처 특성
-
성능(Performance)
: 각 도메인 서비스의 응답 지연시간(latency)는 낮아야한다. -
가용성(Availability)
: 시스템의 장재가 발생하더라도 사용자는 서비스를 이용할 수 있어야 한다. -
확장성(Scalablity)
: 트래픽 양에 따라 자동적으로 서버 증설/삭제가 이뤄질 수 있는 높은 규모의 확장성이 필요하다. -
신뢰성(reliability)
: 사용자가 시스템을 신뢰할 수 있도록 오류를 정상적으로 처리하며, 오류를 복수 할 수 있어야 한다.
구조적 아키텍처 특성
-
관심사의 분리(Separation of concerns)
: 서로 다른 도메인간의 구성 요소는 각 도메인(서비스)간 종속성을 최소화 해야한다. -
유지보수성(maintainablity)
: 초기 개발 단계인 것을 고려하여, 신규 기능개발 및 빈번한 기능의 수정을 감안하여, 시스템을 쉽게 변경/개선 할 수 있도록 한다.
공통 특성
-
인증(Authentication)
: 유저가 본인이 맞음을 증명할 수 있는 보안 요구사항을 마련해야한다. -
인가(Authorization)
: 유저의 권한에 따라 정해진 기능만 사용 할 수 있도록 한다. -
보안(Security)
: 사용자 데이터를 보호하고 안전한 결제 거래를 처리할 수 있어야 한다. -
호환성(Compathibility)
: 시스템(혹은 컴포넌트) 간 정보를 교환하고 필요한 기능을 수행 할 수 있어야 한다.
파악한 운영적 구조적및 공통 특성을 구현하기 위해 시스템을 다음과 같이 설계한다.
- 초기 모델임을 고려하여 빠르게 구축하기 위해 기본적으로 Monolithic Architecture(MVC)를 따른다.
- Monolithic Architecture 임에도 관심사를 분리하고 유지 보수성을 증진하기 위해 각 서비스는 도메인 단위로 설계 및 개발한다.
- 확장성 및 가용성을 고려하여, 다수의 웹 애플리케이션 서버(WAS) 와 요청을 분산시켜줄 웹서버(Load Balancer)를 구축한다.
- 각 WAS는 상태를 갖고 있지 않는다.
- DB는 가용성, 확장성, 성능을 고려하여 다중화를 진행한다.
- Master-Slave 를 구축한다.
- Command 와 Query를 분리하여 성능과 확장성을 보장한다.
- DB의 부하를 줄이고 응답성을 개선하기 위해, 자주 변경되지 않는 데이터를 식별하여 캐시처리한다.
결정을 반영하는 시스템은 다음을 기대할 수 있다.
- MVC 패턴을 통해 빠르게 시스템을 구축할 수 있다.
- 다수의 웹 서버 및 로드 밸런서, 그리고 DB 다중화를 통해 많은 요청을 처리 할 수 있다.
- 기술 단위의 설계가 아닌 도메인 단위의 설계를 통해 도메인 별 경계를 명확하게 할 수 있다.
- 추후 도메인별 분리된 서비스 개발은 MSA로의 변경에 도움이 될 수 있다.