Node.js Project 아키텍처?

Q kim·2020년 9월 29일
2

(정말 좋은글들이 많은 사이트 ! 앞으로 번역할 자료들이다.)

[29.sep.2020]

아키텍처를 정하자.

개발을 진행하는 데 어떠한 방식으로 설계를 할 것인가를 정해야 한다.
토이 프로젝트가 아니기 때문에 한 디렉토리에 비지니스 로직을 쑤셔 넣는 것은 더이상 NoNo!.
이전까지는 Model/ Route/ Controller 계층으로 나눠 프로젝트를 진행했었다.
다른 디렉토리까지 나열해본다면

backend
 - library
 - config
 - controller
 - middlewares
 - models
 - routes
 - utils

이러한 형식이었다. 이 디렉토리 형식의 출처는 Udemy 'Advanced Node.js' (Brad Traversy) 강의이다. 한 사람을 골라 그 사람의 코드를 따라하자는 생각으로 지금까지 진행해왔던 상태라 깊은 고민 없이 플젝들을 진행하였다. 이제는 그 상태를 넘어가야 함을 느꼈고. 동료와 거의 일주일 동안 node.js 아키텍처에 대한 자료를 찾아봤다. 검색 결과 글들의 본질은 대부분 같았고 디렉토리 형식이나 디렉토리 이름의 뉘앙스가 조금씩 다른 것 뿐이라 우리의 맘에 드는 글을 하나 골라 그 방식대로 프로젝트를 진행하기로 정했다.
그 글은 바로 !
https://softwareontheroad.com/ideal-nodejs-project-structure/

이 아키텍처의 디렉토리 구조.

src
   app.js
 - api              # Express route controllers for all the endpoints
 - config           # Environment vaiables and configuration related stuff
 - jobs             # Jobs definitions for agenda.js
 - loaders          # Split the startup process into modules
 - models           # Database models
 - services         # All the business logic is here
 - subscribers      # Event handlers for async task
 - types            # Type declaretion files (d.ts) for Typescript

큰 차이가 없어 보이지만 깊이 들어가면 큰 차이가 있다.

  • requestresponse에 관한 접근은 controller(api directory)에서만 가능하다.
  • 비지니스 로직은 오직 service에만 정의한다.
  • 어떠한 작업이 다른 것들에 영향을 미칠때 (사이드이펙트가 있을 때) Pub/Sub 방식을 이용한다.
    • Node.js의 핵심 기능인 Event를 이용한다.
  • 의존성 주입, 또는 제어 역전을 이용해 코드를 구조화한다. (DI, IoC)
  • 이렇게 코드를 짜면 Unit Test가 훨씬 쉬워진다!

[후기]

이 글을 거의 7번정도는 읽었는데도 프로젝트로 진행하지 않아 크게 기록할 내용이 떠오르지 않는다.
그러니 프로젝트 진행하면서 떠오르는 포인트들을 적어나가겠다.
의존성 주입이라는 키워드가 꽤 큰 키워드라 한줄로 정리하기 힘들다. 다음번에 의존성 관련 글을 하나 적는걸로 하겠다.

profile
https://medium.com/nodejs-server

0개의 댓글