Skip to content
grasshopper42 edited this page Nov 30, 2024 · 2 revisions

Simon Domain Architecture

시스템 개요

Simon은 중소규모 기업을 위한 제품 판매 및 재고 관리 ERP 시스템입니다. 업무 영역과 비즈니스 복잡도에 따라 Core, Supporting, Generic 도메인으로 구분하여 관리합니다.

도메인 구성

Core Domains (핵심 도메인)

비즈니스 경쟁력과 직접 연관된 핵심 도메인들입니다.

  1. Product Catalog Domain

    • 차별화 요소: 제품 정보의 정확성과 일관성
    • 복잡도: 중간
    • 변경 빈도: 낮음
    • 핵심 가치: 제품 정보의 SSOT(Single Source of Truth) 제공
  2. Sales Domain

    • 차별화 요소: 핵심 수익 창출 프로세스
    • 복잡도: 높음
    • 변경 빈도: 중간
    • 핵심 가치: 거래 프로세스의 정확성과 효율성 보장
  3. Inventory Domain

    • 차별화 요소: 운영 효율성의 핵심
    • 복잡도: 높음
    • 변경 빈도: 높음
    • 핵심 가치: 실시간 재고 정확성과 가용성 보장

Supporting Domains (지원 도메인)

핵심 도메인의 기능을 지원하고 보완하는 도메인들입니다.

  1. Purchase Domain

    • 지원 대상: Inventory, Product Catalog
    • 복잡도: 중간
    • 변경 빈도: 중간
    • 핵심 가치: 효율적인 재고 공급 체계 유지
  2. Account Balance Domain

    • 지원 대상: Sales, Purchase
    • 복잡도: 높음
    • 변경 빈도: 낮음
    • 핵심 가치: 정확한 재무 상태 관리
  3. Payment Domain

    • 지원 대상: Sales, Purchase, Account Balance
    • 복잡도: 높음
    • 변경 빈도: 중간
    • 핵심 가치: 안전하고 정확한 결제 처리

Generic Domains (일반 도메인)

비즈니스 지원을 위한 공통 기능을 제공하는 도메인들입니다.

  1. Party Domain

    • 제공 기능: 거래처/직원 정보 관리
    • 복잡도: 중간
    • 변경 빈도: 낮음
    • 핵심 가치: 거래 주체 정보의 통합 관리
  2. Staff Domain

    • 제공 기능: 내부 사용자 관리
    • 복잡도: 낮음
    • 변경 빈도: 낮음
    • 핵심 가치: 시스템 사용자 관리 및 권한 통제

도메인 간 통합 원칙

통신 방식

  1. 동기 통신

    - REST API: 실시간 데이터 조회/갱신
    - GraphQL: 복잡한 데이터 조회
    
  2. 비동기 통신

    - Event Bus: 도메인 이벤트 전파
    - Message Queue: 비동기 작업 처리
    

데이터 일관성

  1. 강한 일관성 (Strong Consistency)

    - 금전 거래 데이터
    - 재고 수량
    - 주문 상태
    
  2. 최종 일관성 (Eventual Consistency)

    - 통계 데이터
    - 알림 상태
    - 로그 데이터
    

도메인 간 주요 이벤트 흐름

판매 프로세스

sequenceDiagram
    Sales->>Inventory: 재고확인
    Inventory-->>Sales: 재고상태
    Sales->>Payment: 결제요청
    Payment->>AccountBalance: 잔액갱신
    Sales->>Inventory: 재고차감
Loading

구매 프로세스

sequenceDiagram
    Purchase->>Inventory: 재고확인
    Inventory-->>Purchase: 재고부족알림
    Purchase->>Payment: 결제요청
    Payment->>AccountBalance: 잔액갱신
    Purchase->>Inventory: 재고증가
Loading

시스템 정책

공통 정책

  • [Audit.md 참조] - 감사 정책
  • [Notification.md 참조] - 알림 정책

기술 스택

Backend:
- Framework: Nest.js
- ORM: TypeORM
- DB: PostgreSQL

Architecture:
- DDD 기반 설계
- 함수형 프로그래밍 지향
- TDD 적용

성능 요구사항

- [Performance SLA 문서 참조]
- 각 도메인별 세부 성능 요구사항은 해당 도메인 문서 참조

확장성 고려사항

시스템 확장

- 마이크로서비스 기반 확장
- 도메인별 독립 배포/확장
- 이벤트 기반 느슨한 결합

데이터 확장

- 도메인별 독립 데이터 저장소
- 읽기/쓰기 분리
- 데이터 파티셔닝 전략

용어 사전

각 도메인에서 사용되는 용어 정의는 통합 용어 사전을 참조하되, 도메인별 특화된 용어는 각 도메인 문서에서 관리합니다.