Node.js 기반 백엔드 설계

유재민's avatar
Apr 08, 2024
Node.js 기반 백엔드 설계

기본 서버 구성

  • 패키지

    • express

    • typescript

    • routing-controllers, typeorm, typedi

      • controller, service, repository 기반의 계층 구조

      • typescript로 ORM을 구현

      • typedi로 annotation기반 DI를 구현

      • java SpringBoot & ORM 개발 방식과 유사

    • cors, crypto-js, class-validator, from-data, multer, mysql, moment, axios, jsonwebtoken

      • WAS 구현을 위한 각종 모듈들

    • cross-env

      • 배포 환경에 맞게 설정파일 설정

    • winston

      • Node기반 로그 관리 모듈

서버 관리

  • Node.js는 기본 싱글 스레드이며 클러스터 모듈을 사용하여 프로세스를 여러개로 늘릴 수 있다.

  • PM2 모듈은 Node.js의 클러스터 모듈 기반으로 워커 프로세스 생성, 메모리 관리, 오류로 인한 종료나 업데이트를 위한 재시작 처리 등 프로세스를 관리하는데 사용

프로젝트 구조

  • common

    • 각종 공통 상수, 공통 포맷 등 모음

  • controllers

    • API 요청 진입지점

    • UseBefore, UseAfter annotation으로 로그 관리

    • routing-controllers-openapi

  • entities

    • DB 구조와 매핑되는 객체 모음

  • error

    • Exception 구분을 위해 커스텀 에러 모음

  • middlewares

    • cookie 값 생성, 추출 이나 api의 타임아웃, 로그 생성 관리 등 클라이언트 요청 전/후 처리 모듈 모음

  • repositories

    • entity 객체로 DB에 접근하는 인터페이스와 실제 쿼리 구현 부분

  • services

    • controller로 받은 요청이 처리되는 실제 비즈니스 로직 구현 부분

  • test

    • chai, mocha 기반 테스트

    • 커버리지 관리

  • utils

    • 공통적으로 사용되는 함수들 모음(ex/ 암호화/복호화, 쿠키에서 값 추출)

    • 배치 관련 작업 설정(어떤 작업을 어떤 주기로 수행 하는가)

    • console대신 사용할 로그 설정 세팅, 환경설정 파일에 따라 로그레벨 조정, 로그 포맷 설정 등

    • annotation 으로 파일 위치 및 계층을 파악하는 routing-controllers 패키지에 맞게controller ←→ service ←→ repository 계층 구조 구성을 위한 설정

  • root

    • app.ts

      • express 서버 구동에 필요한 각종 설정 세팅

      • database 연결, middleware 구성, cors 설정, swagger 설정, batch job 설정

    • database.ts

      • local, stage, prod 별 환경설정에 따른 db connection

    • env.ts

      • local, stage, prod 별 환경설정 읽어오는 파일

    • server.ts

      • Node.js 앱 구동 시작점, app.ts를 통해 express 서버 생성

Share article

jaeminlog