A progressive Node.js framework for building efficient and scalable server-side applications.
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 항이 있는데 이부분이 서비스의 명칭 입니다. 이를 통해 요청시의 서비스가 어떤 서비스로 부터 왔는지 유추할 수 있게 하고 올바른 요청인지에 대해서 검토 합니다.
- 해당 기능에 대해서는 많은 가능성을 열어 놓고 싶어 간단한 서비스 체크로만 끝을 냈습니다.
- 리프레쉬 토큰 전략은 엑세스가 만료가 되면 리프레쉬를 통해 재발급이 가능하게 했습니다. 덧붙여,
- 리프레쉬 토큰은 디비에 저장됩니다.
- 이는 유효기간동안 유효하며 다른 기기에서 로그인을 해도 리프레쉬가 있다면 추가 발급을 하지않고 넘겨줍니다.
- 해당 로직 부분에 기기별 로그인 체크를 추가하셔될 듯합니다.
- 리프레쉬 토큰이 만료될시에 대해서는 401 에러를 던집니다.
- 리프레쉬 토큰의 키와 엑세스 토큰의 키는 서로다른 값을 가질 수 있습니다.
- 현재 로깅은 에러 부분을 필터링해서 보여주는 정도이며 별도의 로그를 저장하지는 않고 있습니다
- 좋은 대체안이 있다면 추가부탁드립니다!
- 현재 프로젝트는 서비스별 리프레쉬 토큰 관리를 동일하게 하고 있습니다. 따라서 여러 서비스에 가입을 하고 아이디로 로그인을하면 가입한 모든 로그인에 대해서 전부 동일한 리프레쉬 토큰으로 가입하게 됩니다.
$ yarn install
DB 연결에 대한 값은 ormconfig.json에서 설정해야 합니다. typeORM프레임 워크를 사용했습니다. 따라서 다양한 DB와 설정이 가능합니다. 다만 typeORM 지원 레벨이 현재 Mongoose와는 잘 맞지않아 현재 있는 설정으로는 postgres, mysql과 같은 RDB 사용이 편합니다.
postgres 가 설치되어 있다는 가정하에 ormconfig.json설정후 config -> .env파일 수정후 구동할 프로덕션 레벨에 맞춰서 실행하면 됩니다.
# development
$ yarn start
# watch mode
$ yarn start:dev
# production mode
$ yarnstart:prod
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.
- Author - Kamil Myśliwiec
- Website - https://nestjs.com
- Twitter - @nestframework
Nest is MIT licensed.