개발일지

[NestJS] 프로젝트 세팅하기 본문

NestJS, Node.js/#01 Project - 투표 커뮤니티

[NestJS] 프로젝트 세팅하기

lyjin 2022. 10. 27.

프로젝트 구조

프로젝트 기본 구조는 다음과 같습니다. 편의상 필요한 모듈만 나타냅니다.

 

├── prisma  // prisma 관련 폴더
│    ├── base.prisma
│    └── schema.prisma
├── src
│    ├── common    // 공통으로 사용되는 모듈
│    │    ├── dto
│    │    ├── interface
│    │    └── middleware
│    └── users    // module
│         ├── jwt    // jwt 관련 폴더
│         ├── users.controller.ts
│         ├── users.module.ts
│         ├── users.prisma
│         ├── users.repository.ts
│         └── users.service.ts
├── app.module.ts
├── main.ts

 


DB 설정하기

Prismix

prisma file을 모듈 별로 관리하고 싶지만 prisma에서는 해당 기능을 제공하지 않습니다. 이러한 기능을 제공해주는 prismix를 사용했습니다.

 

prismix.config.json

{
  "mixers": [
    {
      "input": [
        "prisma/base.prisma",
        "./src/users/users.prisma",
      ],
      "output": "prisma/schema.prisma"
    }
  ]
}

 

위와 같이 설정 후 $ yarn prismix 명령어를 사용하면 input의 파일들이 output으로 합쳐집니다.

 

 

Prisma

datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL")
}

generator client {
  provider = "prisma-client-js"
}

 

schema.prisma 파일에 데이터베이스 연결 설정 후 .env 파일에 환경변수를 정의합니다. RDS 적용 전 임시로 sqlite을 사용했습니다.

 

DATABASE_URL="file:./dev.db"

 


공통 모듈 관리하기

common의 모듈을 import할 때 상대 경로를 입력하게 되면 경로 표기가 지저분해지고 가독성이 떨어질 수 있습니다. 따라서 @ symbol 사용하여 common에 속한 모듈 경로를 @vote/common 하나로 묶어줬습니다. tsconfig.json 파일에 경로를 설정해줍니다.

 

tsconfig.json

{
  "compilerOptions": {
    ...
    "paths": {
      "@vote/common": ["src/common],
      "@vote/middleware": ["src/common/middleware"]
    }
  }
}

 

 

index.ts 파일에는 포함할 module들을 설정해줍니다.

 

export * from './dto';
export * from './interface';

 

 

이제 상대경로없이 모듈을 import 할 수 있습니다.

 

import { CustomException } from '@vote/middleware';

 

 


++ 후에 세팅할 것들

  • 환경 분리하기 (dev/prod)
  • RDS postgreSQL 설정하기
  • 배포 관련 세팅