Nest Logo

A progressive Node.js framework for building efficient and scalable server-side applications.

NPM Version Package License NPM Downloads CircleCI Coverage Discord Backers on Open Collective Sponsors on Open Collective Support us

Description

Nest framework TypeScript starter repository.
해당 프로젝트는 기능 추가가 용의하고 다른 사람이 수정을 하더라도 쉽게 수정이 가능하기 위한 구조를 고려하여 최대한 단순하게 만들었습니다.
MSA 단위에서 단단한 사용이 가능할 수 있도록 만들었습니다. 따라서 설치하고 즉시 실행하면 누구나 사용할 수 있도록 만들었습니다. 가능하면 다양한 기능을 천천히 추가해나가고 싶습니다. 사용 프레임워크는 Nestjs를 기반으로 작성되었습니다.


해당 프로젝트는 아래와 같은 기능을 가집니다.

동적 환경 변수

동적 환경 변수 변경, config 아래에서 .env 파일 아래에 있는 각 환경 설정을 실행 명령어에 따라 다르게 적용할수 있습니다.

  • yarn start:dev #config/env/.development.env
  • yarn start:stage #config/env/.stage.env
  • yarn start:prod #config/env/.production.env

인증 및 인가

  • 해당 서버는 인가를 자유롭게 설정이 가능합니다. user.entity.ts에서 AccessLevel은 인가의 레벨(number)의 형태이며, 이를 통해 url별로 인가에 대한 접근을 제어할 수 있습니다. 해당 접근의 레벨은 데코레이터 패턴을 이용한 @UseGuard를 사용해 적용할 수 있습니다.
  • 해당 서버는 인증시 반드시 기관의 명칭이 포함되게 만들었습니다.소스 코드의 내부에는 affiliatedInstitution 항이 있는데 이부분이 서비스의 명칭 입니다. 이를 통해 요청시의 서비스가 어떤 서비스로 부터 왔는지 유추할 수 있게 하고 올바른 요청인지에 대해서 검토 합니다.
  • 해당 기능에 대해서는 많은 가능성을 열어 놓고 싶어 간단한 서비스 체크로만 끝을 냈습니다.
  • 리프레쉬 토큰 전략은 엑세스가 만료가 되면 리프레쉬를 통해 재발급이 가능하게 했습니다. 덧붙여,
    1. 리프레쉬 토큰은 디비에 저장됩니다.
    2. 이는 유효기간동안 유효하며 다른 기기에서 로그인을 해도 리프레쉬가 있다면 추가 발급을 하지않고 넘겨줍니다.
    3. 해당 로직 부분에 기기별 로그인 체크를 추가하셔될 듯합니다.
    4. 리프레쉬 토큰이 만료될시에 대해서는 401 에러를 던집니다.
    5. 리프레쉬 토큰의 키와 엑세스 토큰의 키는 서로다른 값을 가질 수 있습니다.

로깅

  • 현재 로깅은 에러 부분을 필터링해서 보여주는 정도이며 별도의 로그를 저장하지는 않고 있습니다
  • 좋은 대체안이 있다면 추가부탁드립니다!

한계

  • 현재 프로젝트는 서비스별 리프레쉬 토큰 관리를 동일하게 하고 있습니다. 따라서 여러 서비스에 가입을 하고 아이디로 로그인을하면 가입한 모든 로그인에 대해서 전부 동일한 리프레쉬 토큰으로 가입하게 됩니다.

실행

Installation

$ yarn install

DB 세팅

DB 연결에 대한 값은 ormconfig.json에서 설정해야 합니다. typeORM프레임 워크를 사용했습니다. 따라서 다양한 DB와 설정이 가능합니다. 다만 typeORM 지원 레벨이 현재 Mongoose와는 잘 맞지않아 현재 있는 설정으로는 postgres, mysql과 같은 RDB 사용이 편합니다.

Running the app

postgres 가 설치되어 있다는 가정하에 ormconfig.json설정후 config -> .env파일 수정후 구동할 프로덕션 레벨에 맞춰서 실행하면 됩니다.

# development
$ yarn start

# watch mode
$ yarn start:dev

# production mode
$ yarnstart:prod

Support

Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please read more here.

Stay in touch

License

Nest is MIT licensed.