GraphQL + 클린 아키텍처 상용구

영감



Clean Architecture은 깨끗하고 구조적이며 유지 관리 가능한 프로젝트를 구축하고자 하는 개발자를 위한 유용한 안내서입니다. SOLID 원칙의 문자 L을 사용하면 비즈니스 및 시스템의 핵심을 건드리지 않고도 종속 구성 요소를 쉽게 교체할 수 있습니다. 예를 들어 많은 프레임워크(Expressjs, GraphQL 등)가 있고 선택한 결정은 비즈니스의 목적과 컨텍스트에 따라 달라지는 웹 서버의 경우입니다.

이 상용구 가이드 범위에서는 세부 기술의 변경으로 핵심 비즈니스를 면역으로 만드는 방법을 살펴보겠습니다. 갑시다!

여기에서 구현 세부 정보를 찾을 수 있습니다repository.

상용구



코드 구조




.
├── package.json
├── package-lock.json
├── README.md
├── src
│   ├── application
│   │   ├── auth
│   │   │   └── index.ts
│   │   ├── graphql
│   │   │   ├── index.ts
│   │   │   ├── schemaShards
│   │   │   │   ├── index.ts
│   │   │   │   └── users.ts
│   │   │   ├── subscriptionManager.ts
│   │   │   └── utils
│   │   │       └── mergeRawSchemas.ts
│   │   └── index.ts
│   ├── dto
│   │   └── user.dto.ts
│   ├── entities
│   │   └── user.entity.ts
│   ├── index.ts
│   ├── IoC
│   │   ├── container.ts
│   │   ├── icradle.interface.ts
│   │   └── providers
│   │       ├── auth.provider.ts
│   │       └── user.provider.ts
│   ├── persistence
│   │   ├── auth.repository.ts
│   │   ├── constants.ts
│   │   ├── password.ts
│   │   └── user.repository.ts
│   ├── services
│   │   ├── auth.repository.interface.ts
│   │   ├── auth.service.ts
│   │   ├── user.repository.interface.ts
│   │   └── user.service.ts
│   └── __typedefs
│       ├── graphqlTypes.d.ts
│       └── schema.graphql
└── tsconfig.json


기본 폴더는 src이며 구현이 포함되어 있습니다.

  • 애플리케이션: 백엔드 웹 애플리케이션 프레임워크를 사용할 수 있는 애플리케이션 계층입니다. 이 상용구에는 GraphQL가 있습니다.

  • 서비스: 애플리케이션 사용 사례를 처리하기 위해 논리를 정의한 비즈니스 서비스 계층입니다. 이 계층에는 데이터베이스에 대한 액세스와 같은 세부 작업을 추상화하는 어댑터도 포함되어 있습니다.

  • 엔터티: 애플리케이션 엔터티를 정의하는 애플리케이션의 핵심 구성 요소입니다.

  • 지속성: 이것은 데이터베이스, 메시지 대기열 등과 통신하기 위한 작업을 지정하는 또 다른 세부 계층입니다.

  • dto: (Data Transfer Object의 약자)는 계층 간의 통신 계약을 정의합니다. 예를 들어 레이어의 메서드에서 사용되는 입력 매개변수 또는 반환 값의 유형

  • IoC: (Inversion of Control의 약자)는 SOLID 주체의 문자 D인 종속성 주입의 구현입니다. 새 서비스 클래스, 새 리포지토리 클래스 또는 새 컨트롤러를 만들 때마다 이 컨테이너에 등록해야 합니다. 이 상용구는 Awilix 라이브러리를 사용하여 요소를 달성합니다.

  • 커뮤니케이션 정책



    클린 아키텍처를 준수하는 계층과 도메인 간의 통신 정책. 다음 다이어그램의 화살표 방향은 구성 요소 간의 관계를 나타냅니다. 예를 들어, 구성요소 X에서 구성요소 Y로 향하는 화살표 방향은 구성요소 X가 구성요소 Y에 종속됨을 의미합니다.

    1/종속성 다이어그램


    다이어그램에서 볼 수 있듯이 레이어 간의 종속성 흐름은 다음과 같습니다.
  • 엔티티는 코어 레이어이며 어떤 구성 요소에도 종속되지 않습니다
  • .
  • 도메인 비즈니스 계층에서 저장소 계층으로의 종속성을 반전시키기 위해 도메인 비즈니스에 저장소 인터페이스가 있습니다. 이를 통해 세부 기술로 이 계층을 구현하고 업데이트할 수 있습니다
  • .
  • 애플리케이션 컨트롤러가 서비스에 종속됨
  • IoC 컨테이너는 모두 컨테이너에 등록해야 하므로 서비스, 저장소 및 응용 프로그램 컨트롤러에 따라 달라집니다
  • .
  • 애플리케이션 라우터는 등록된 애플리케이션 컨트롤러를 사용하여 클라이언트 요청을 처리할 수 있는 IoC 컨테이너에 의존합니다
  • .

    2/도메인 간 종속성


    물론 실제 프로젝트에는 도메인이 1개만 있는 것은 아닙니다. 따라서 레이어 간의 통신 규칙을 정의해야 합니다.

    시작하기


    scripts 파일의 package.json 부분에 정의된 시작 사용 가능한 명령줄이 있습니다.

    1/의존성 설치

    npm i
    


    2/핫 리로드 기능을 사용하여 dev 모드에서 애플리케이션 실행

    npm run dev
    


    3/애플리케이션 컴파일

    npm run build
    


    4/production 모드에서 애플리케이션을 실행합니다. 전에 애플리케이션을 컴파일해야 합니다.

    npm run start
    


    5/GraphQL 스키마에 대한 유형을 생성합니다. TypeScript 컴파일러가 스키마를 이해할 수 있도록 GraphQL 스키마를 업데이트할 때마다 이 작업을 수행해야 합니다.

    npm run generate-typedefs
    


    참조


  • The Clean Architecture Blog
  • Node + Typescript + MongoDB GraphQL API Starter Kit
  • Implementation repository
  • 좋은 웹페이지 즐겨찾기