Nest.JS PlatoBlockchain 데이터 인텔리전스로 클린 아키텍처 구현 수직 검색. 일체 포함.

Nest.JS로 클린 아키텍처 구현하기

이 기사는 깨끗하고 확장 가능하며 더 중요하게는 리팩터링 가능한 코드를 작성하기 위해 노력하는 매니아를 위한 것입니다. Nest.JS가 깨끗한 코드를 작성하는 데 어떻게 도움이 되며 어떤 기본 아키텍처를 사용하는지에 대한 아이디어를 제공합니다.

Nest.JS로 깨끗한 아키텍처를 구현하려면 먼저 이 프레임워크가 무엇이며 어떻게 작동하는지 이해해야 합니다.

Nest 또는 Nest.JS는 TypeScript로 구축된 효율적이고 확장 가능한 Node.js 애플리케이션(서버 측)을 구축하기 위한 프레임워크입니다. Express 또는 Fastify를 사용하고 개발자가 코드 내에서 충분한 양의 모듈(타사)을 사용할 수 있도록 하는 추상화 수준을 허용합니다.

이 깨끗한 아키텍처가 무엇인지 자세히 살펴보겠습니다. 

음, 여러분 모두는 MVC 아키텍처를 사용했거나 최소한 들어봤을 것입니다. MVC는 Model, View, Controller의 약자입니다. 이것의 이면에 있는 아이디어는 프로젝트 구조를 3개의 다른 섹션으로 분리하는 것입니다.

1. 모델: DB의 Relation/Documents와 매핑되는 Object 파일을 포함합니다.

2. 컨트롤러 : 요청 핸들러이며 비즈니스 로직 구현 및 모든 데이터 조작을 담당합니다.

3. 보기: 이 부분에는 HTML 파일 또는 일부 템플릿 엔진 파일과 같은 데이터 표시와 관련된 파일이 포함됩니다.

모델을 생성하려면 이를 구축할 ORM/ODM 도구/모듈/라이브러리가 필요합니다. 예를 들어, 모듈을 직접 사용하는 경우 'sequelize'라고 말한 다음 동일한 것을 사용하여 컨트롤러에서 로그인을 구현하고 핵심 비즈니스 로직을 'sequelize'에 종속시킵니다. 자, 이제 10년 후에 시장에 사용하고 싶은 더 나은 도구가 있다고 가정해 보겠습니다. 하지만 속편화를 대체하는 즉시 이를 방지하기 위해 많은 코드 줄을 변경해야 합니다. 파괴. 또한 모든 기능을 다시 한 번 테스트하여 성공적으로 배포되었는지 확인해야 하므로 귀중한 시간과 리소스를 낭비할 수 있습니다. 이를 극복하기 위해 SOLID의 마지막 원칙인 Dependency Inversion Principle을 사용하고 이러한 혼란을 피하기 위해 Dependency Injection이라는 기술을 사용할 수 있습니다.

아직도 혼란스러우신가요? 자세히 설명하겠습니다.

따라서 Dependency Inversion Principle이 간단한 단어로 말하는 것은 핵심 비즈니스 논리를 만든 다음 이를 중심으로 종속성을 구축한다는 것입니다. 즉, 핵심 논리와 비즈니스 규칙을 모든 종류의 종속성에서 해방하고 외부 계층이 이에 종속된 논리 대신 핵심 논리에 종속되도록 수정하십시오. 그것이 바로 클린 아키텍처입니다. 핵심 비즈니스 논리에서 종속성을 제거하고 종속성이 아니라 종속된 것처럼 보이는 방식으로 이를 중심으로 시스템을 구축합니다.

아래의 도표를 통해 이것을 이해하려고 노력합시다.

출처: 클린 아키텍처 콘 

아키텍처를 4개의 레이어로 나눈 것을 볼 수 있습니다.

1. 단체: 핵심에서 엔터티는 엔터프라이즈 규칙을 정의하고 애플리케이션이 무엇인지 알려주는 모델(엔터프라이즈 규칙)입니다. 이 레이어는 시간이 지남에 따라 거의 변경되지 않으며 일반적으로 추상적이며 직접 액세스할 수 없습니다. 예를 들어 모든 응용 프로그램에는 '사용자'가 있습니다. 사용자가 저장해야 하는 모든 필드, 해당 유형 및 다른 엔터티와의 관계는 엔터티를 구성합니다.

2. 사용 사례: 엔터프라이즈 규칙을 구현하는 방법을 알려줍니다. 다시 사용자의 예를 들어보겠습니다. 이제 우리는 어떤 데이터를 조작해야 하는지 알고 있으며, 사용 사례는 사용자가 암호화해야 하는 암호를 갖고 있고, 사용자를 생성해야 하며, 언제든지 암호를 변경할 수 있는 것과 같이 이 데이터를 조작하는 방법을 알려줍니다. 주어진 시점 등

3. 컨트롤러/게이트웨이: 종속성 주입을 사용하여 외부 도구 및 라이브러리를 사용하여 사용 사례를 구현하는 데 도움이 되는 채널입니다.

4. 외부 도구: 로직을 구축하는 데 사용하는 모든 도구와 라이브러리는 이 레이어 아래에 있습니다. ORM, Emailer, 암호화 등

우리가 사용하는 도구는 사용 사례에 어떻게 연결하느냐에 따라 달라지며, 사용 사례는 우리 비즈니스의 핵심인 엔터티에 따라 달라집니다. 이 방법으로 우리는 의존성을 외부에서 내부로 반전시켰습니다. 이것이 SOLID의 Dependency Inversion Principal이 의미하는 것입니다.

자, 이제 Nest.JS의 요지를 이해하고 클린 아키텍처가 어떻게 작동하는지 이해했습니다. 이제 질문이 생깁니다. 이 두 가지는 어떻게 관련되어 있습니까?  

Nest.JS의 3가지 빌딩 블록이 무엇이며 각각이 하는 일을 이해하려고 노력합시다.

  1. 모듈 : Nest.JS는 각 기능을 모듈로 취급할 수 있는 구조로 되어 있습니다. 예를 들어, 모델, 컨트롤러, DTO, 인터페이스 등과 같이 사용자와 연결된 모든 것은 모듈로 분리될 수 있습니다. 모듈에는 서비스, orm, emailer 등과 같은 주입 가능한 기능인 컨트롤러와 많은 공급자가 있습니다.
  1. 컨트롤러 : Nest.JS의 컨트롤러는 네트워크와 로직 간의 인터페이스입니다. 요청을 처리하고 애플리케이션의 클라이언트 측에 응답을 반환하는 데 사용됩니다(예: API 호출).
  1. 제공자(서비스): 공급자는 유연성과 추가 기능을 제공하기 위해 컨트롤러 및 기타 공급자에 주입할 수 있는 주입 가능한 서비스/기능입니다. 그들은 모든 형태의 복잡성과 논리를 추상화합니다.

요약,

  • 인터페이스 역할을 하는 컨트롤러가 있습니다(클린 아키텍처의 세 번째 레이어).
  • 기능을 제공하기 위해 주입할 수 있는 공급자가 있습니다(클린 아키텍처의 4계층: DB, 장치 등).
  • 사용 사례를 정의하기 위해 서비스와 리포지토리를 만들 수도 있습니다(2nd Layer).
  • DB 제공자를 사용하여 엔티티를 정의할 수 있습니다(1st Layer)

결론 :

Nest.JS는 강력한 Node.JS 프레임워크이며 현재 사용 가능한 가장 잘 알려진 유형 스크립트입니다. 이제 이 프레임워크에 대한 정보를 얻었으므로 깨끗한 아키텍처로 프로젝트 구조를 빌드하는 데 사용할 수 있는지 궁금할 것입니다. 글쎄, 대답은 -네! 전적으로. 어떻게? 이 기사의 다음 시리즈에서 설명하겠습니다. 

그때까지, 계속 지켜봐 주세요!

저자 소개

Junaid Bhat은 현재 Mantra Labs에서 기술 책임자로 일하고 있습니다. 그는 업계 표준을 따르고 문제 해결에 대한 보다 구조화된 접근 방식을 지향함으로써 매일 더 나은 엔지니어가 되기 위해 노력하는 기술 애호가입니다. 

최신 블로그 읽기: Golang-Beego 프레임워크와 그 응용

받은 편지함에 전달할 가치가있는 지식

타임 스탬프 :

더보기 만트라 연구소