TIL 23-07-06

level·2023년 7월 6일

TIL

목록 보기
46/95

도메인 (Domain)

: 프로세스가 지원하는 활동
한 도메인은 다시 하위 도메인으로 나눌 수 있다
하위 도메인은 다른 하위 도메인과 연동하여 완전한 기능을 제공
하위 도메인을 어떻게 구성할 지 여부는 상황에 따라 달라짐
B2B(Business-to-Business), B2C(Business to Consumer)

도메인 모델(Domain Model)
: 유용한 특성을 포함하는 프로세스나 현상의 지도(Map)
비즈니스를 수행할 사람이 자신의 비즈니스에 대해 마음속에 가지고 있는 지도
특정 도메인을 개념적으로 정리한 모델
사용할 개체를 기억하기 쉬운 이름(식별자)을 부여해 대상을 쉽게 공유할 수 있게 함

도메인 모델링 (Domain Modeling)의 종류

  1. 엔티티 (Entity)
    실제 DB 테이블과 연관되어 있는 핵심 클래스
    엔티티를 기준으로 테이블이 생성되고 DB 스키마가 변경됨
    엔티티를 요청(Request)이나 응답값(Response)으로 전달하는 클래스로 사용하면 안됨
    엔티티 내부의 속성이 변경되더라도 여전히 동일한 엔티티
    시간에 따라 변하는 속성이 포함될 수 있음
    어떤 요소가 엔티티를 유일하게 식별하는지 정의하는 것 또한 중요
    보통 이름이나 참조 번호 등을 사용 EX) User 클래스의 userId

  2. 값 객체 (Value object)

  3. 도메인 서비스 (Domain service)

아키텍처 패턴 (Architecture Pattern)

: 소프트웨어의 구조를 구성하기위한 가장 기본적인 토대를 제시
각각의 시스템들과 그 역할이 정의되어 있고, 여러 시스템 사이의 관계와 규칙 등이 포함
검증된 구조로 개발을 진행하기 때문에 안정적인 개발 가능
아키텍처 패턴을 도입할 경우 도메인이 복잡할수록 모델이나 코드를 더 쉽게 변경할 수 있다는 측면에서 큰 이익

  • 저장소 패턴 (Repository pattern)
    • 영속적인 저장소에 대한 추상화
  • 서비스 계층 패턴 (Service layer pattern)
    • 유스 케이스(Usecase)의 시작을 명확하게 정의하기 위한 패턴
  • 작업 단위 패턴 (Unit of work pattern)
    • 원자적 연산을 제공
  • 애그리게이트 패턴 (Aggregate pattern)
    • 데이터 정합성을 강화하기 위한 패턴

아키텍처 패턴이 주는 이익과 비용에 대해 확실한 이유가 있어야 함
장단점 명확히 인지
어플리케이션과 도메인이 복잡한 경우에만 도입

계층형 아키텍처 패턴 (Layered Architecture Pattern)

: 계층을 분리해서 관리하는 아키텍처 패턴이고, 현재 가장 흔하게 사용되고 있는 아키텍처 패턴 중 하나
단순하고 대중적이면서 비용도 적게 들어 모든 어플리케이션의 사실상 표준 아키텍처
계층화의 핵심은 각 계층은 응집도(Cohesion)가 높으면서, 다른 계층과는 낮은 결합도
상위 계층은 하위 계층 사용가능, 하위 계층은 상위 계층 인지 및 사용 불가

3계층 아키텍처
계층

  • 프레젠테이션 계층 (Presentation Layer)
  • 비즈니스 로직 계층 (Business Logic Layer)
  • 데이터 엑세스 계층 (Data Access Layer) | 영속 계층(Persistence Layer)

장점
관심사를 분리하여 현재 구현하려하는 코드를 명확하게 인지
각 계층별로 의존성이 낮아 모듈을 교체하더라도 코드 수정이 용이
각 계층별로 단위 테스트를 작성할 수 있어 테스트 코드를 조금 더 용이하게 구성

처리과정

  1. Controller : 어플리케이션의 가장 바깥 부분, 요청/응답을 처리
    • 클라이언트의 요청을 처리 한 후 서버에서 처리된 결과반환해주는 역할
  2. Service : 어플리케이션의 중간 부분, 실제 중요한 작동이 많이 일어나는 부분
    • 아키텍처의 가장 핵심적인 비즈니스 로직이 수행되는 부분
  3. Repository : 어플리케이션의 가장 안쪽 부분, DB와 맞닿아 있음
    • 실제 데이터베이스의 데이터를 사용하는 계층

플로우

  1. 클라이언트(Client)요청(Request)을 보냄
  2. 요청(Request)을 URL에 알맞은 컨트롤러(Controller)가 수신
  3. 컨트롤러(Controller)는 넘어온 요청처리하기 위해 서비스(Service)를 호출
  4. 서비스(Service)는 필요한 데이터를 가져오기위해 저장소(Repository)에게 데이터를 요청
  5. 서비스(Service)저장소(Repository)에서 가져온 데이터를 가공하여 컨트롤러(Controller)에게 데이터를 넘김
  6. 컨트롤러(Controller)서비스(Service)결과물(Response)클라이언트(Client)에게 전달

npx sequelize db:drop


라우터 경로 포함범위 겹침

0개의 댓글