: 프로세스가 지원하는 활동
한 도메인은 다시 하위 도메인으로 나눌 수 있다
하위 도메인은 다른 하위 도메인과 연동하여 완전한 기능을 제공
하위 도메인을 어떻게 구성할 지 여부는 상황에 따라 달라짐
B2B(Business-to-Business), B2C(Business to Consumer)
도메인 모델(Domain Model)
: 유용한 특성을 포함하는 프로세스나 현상의 지도(Map)
비즈니스를 수행할 사람이 자신의 비즈니스에 대해 마음속에 가지고 있는 지도
특정 도메인을 개념적으로 정리한 모델
사용할 개체를 기억하기 쉬운 이름(식별자)을 부여해 대상을 쉽게 공유할 수 있게 함
도메인 모델링 (Domain Modeling)의 종류
엔티티 (Entity)
실제 DB 테이블과 연관되어 있는 핵심 클래스
엔티티를 기준으로 테이블이 생성되고 DB 스키마가 변경됨
엔티티를 요청(Request)이나 응답값(Response)으로 전달하는 클래스로 사용하면 안됨
엔티티 내부의 속성이 변경되더라도 여전히 동일한 엔티티
시간에 따라 변하는 속성이 포함될 수 있음
어떤 요소가 엔티티를 유일하게 식별하는지 정의하는 것 또한 중요
보통 이름이나 참조 번호 등을 사용 EX) User 클래스의 userId
값 객체 (Value object)
도메인 서비스 (Domain service)
: 소프트웨어의 구조를 구성하기위한 가장 기본적인 토대를 제시
각각의 시스템들과 그 역할이 정의되어 있고, 여러 시스템 사이의 관계와 규칙 등이 포함
검증된 구조로 개발을 진행하기 때문에 안정적인 개발 가능
아키텍처 패턴을 도입할 경우 도메인이 복잡할수록 모델이나 코드를 더 쉽게 변경할 수 있다는 측면에서 큰 이익
아키텍처 패턴이 주는 이익과 비용에 대해 확실한 이유가 있어야 함
장단점 명확히 인지
어플리케이션과 도메인이 복잡한 경우에만 도입
: 계층을 분리해서 관리하는 아키텍처 패턴이고, 현재 가장 흔하게 사용되고 있는 아키텍처 패턴 중 하나
단순하고 대중적이면서 비용도 적게 들어 모든 어플리케이션의 사실상 표준 아키텍처
계층화의 핵심은 각 계층은 응집도(Cohesion)가 높으면서, 다른 계층과는 낮은 결합도
상위 계층은 하위 계층 사용가능, 하위 계층은 상위 계층 인지 및 사용 불가
3계층 아키텍처
계층
장점
관심사를 분리하여 현재 구현하려하는 코드를 명확하게 인지
각 계층별로 의존성이 낮아 모듈을 교체하더라도 코드 수정이 용이
각 계층별로 단위 테스트를 작성할 수 있어 테스트 코드를 조금 더 용이하게 구성
처리과정
플로우
npx sequelize db:drop
라우터 경로 포함범위 겹침