
기본 서버 구성
패키지
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 서버 생성