신발 주문 시스템 분석 아키텍처 - KEEMSY/shoes-ordering-system GitHub Wiki

신발 주문 시스템 분석 - 아키텍처

완료

Context

나의 신발 주문 시스템의 목표는 장애가 없는 사용자 경험을 개선하고, 다양한 요구사항에 대한 기능의 효율성 증진이다. 이를 위해 시스템을 분석하며, 분석은 도메인 분석과 시스템 아키텍처 분석으로 나뉜다.

  • 도메인 분석을 통해 프로젝트에서 필요한 도메인들을 식별하고, 해당 도메인을 모델링 한다.
  • 기능적 요구사항, 비기능적 요구사항을 정의하여, 필요한 기술 스택과 아키텍처를 구성한다.

신발 주문 시스템 분석 - 도메인

도메인 분석 진행 간 파악한 비 기능적 요구사항을 통해 고려해야할 아키텍처 특성을 다음과 같이 정리하였다.

운영적 아키텍처 특성

  • 성능(Performance): 각 도메인 서비스의 응답 지연시간(latency)는 낮아야한다.
  • 가용성(Availability): 시스템의 장재가 발생하더라도 사용자는 서비스를 이용할 수 있어야 한다.
  • 확장성(Scalablity): 트래픽 양에 따라 자동적으로 서버 증설/삭제가 이뤄질 수 있는 높은 규모의 확장성이 필요하다.
  • 신뢰성(reliability): 사용자가 시스템을 신뢰할 수 있도록 오류를 정상적으로 처리하며, 오류를 복수 할 수 있어야 한다.

구조적 아키텍처 특성

  • 관심사의 분리(Separation of concerns): 서로 다른 도메인간의 구성 요소는 각 도메인(서비스)간 종속성을 최소화 해야한다.
  • 유지보수성(maintainablity): 초기 개발 단계인 것을 고려하여, 신규 기능개발 및 빈번한 기능의 수정을 감안하여, 시스템을 쉽게 변경/개선 할 수 있도록 한다.

공통 특성

  • 인증(Authentication): 유저가 본인이 맞음을 증명할 수 있는 보안 요구사항을 마련해야한다.
  • 인가(Authorization): 유저의 권한에 따라 정해진 기능만 사용 할 수 있도록 한다.
  • 보안(Security): 사용자 데이터를 보호하고 안전한 결제 거래를 처리할 수 있어야 한다.
  • 호환성(Compathibility): 시스템(혹은 컴포넌트) 간 정보를 교환하고 필요한 기능을 수행 할 수 있어야 한다.



Decision

파악한 운영적 구조적및 공통 특성을 구현하기 위해 시스템을 다음과 같이 설계한다.

  • 초기 모델임을 고려하여 빠르게 구축하기 위해 기본적으로 Monolithic Architecture(MVC)를 따른다.
    • Monolithic Architecture 임에도 관심사를 분리하고 유지 보수성을 증진하기 위해 각 서비스는 도메인 단위로 설계 및 개발한다.
  • 확장성 및 가용성을 고려하여, 다수의 웹 애플리케이션 서버(WAS) 와 요청을 분산시켜줄 웹서버(Load Balancer)를 구축한다.
    • 각 WAS는 상태를 갖고 있지 않는다.
  • DB는 가용성, 확장성, 성능을 고려하여 다중화를 진행한다.
    • Master-Slave 를 구축한다.
    • Command 와 Query를 분리하여 성능과 확장성을 보장한다.
    • DB의 부하를 줄이고 응답성을 개선하기 위해, 자주 변경되지 않는 데이터를 식별하여 캐시처리한다.



Consequence

shose-ordering-system-architecture

결정을 반영하는 시스템은 다음을 기대할 수 있다.

  • MVC 패턴을 통해 빠르게 시스템을 구축할 수 있다.
  • 다수의 웹 서버 및 로드 밸런서, 그리고 DB 다중화를 통해 많은 요청을 처리 할 수 있다.
  • 기술 단위의 설계가 아닌 도메인 단위의 설계를 통해 도메인 별 경계를 명확하게 할 수 있다.
    • 추후 도메인별 분리된 서비스 개발은 MSA로의 변경에 도움이 될 수 있다.
⚠️ **GitHub.com Fallback** ⚠️