NestJS로 구현하는 Authentication & Authorization(1)
이 포스트는 NestJS를 사용하여 로그인 API를 구현하는 방법을 정리한 글이다. NestJS 의 공식문서를 참고하였으며 passport, typeorm 을 사용한다. 아래와 같이 4개의 글로 나누어 작성하였으며 이 글에서는 첫번째로 개발환경을 구성하는 방법을 정리하였다.
전체 코드는 github에 업로드 되어 있다.
1. Nest.js 란?
NestJS 는 쉽고 효율적으로 node.js server-side application을 개발할 수 있게 도와주는 프레임워크이다.
Javascript 뿐 만 아니라 Typescript 를 지원한다. 기본적으로 Express 를 사용하며
Express 보다 좀 더 속도가 빠른 Fastify 를 지원한다.
2. 개발환경 구축
2.1 NestJS 설치
npm i -g @nestjs/cli
NestJS는 명령어를 통해 간단하게 설치할 수 있다.
2.2 Database 설치
로그인 API 에 사용할 데이터베이스를 구축한다. mariadb 를 사용하였으며 원하는 다른 db 를 설치해도 무관하다.
mariadb 구축은 docker 를 사용하였다.
#docker-compose-mariadb.yaml
services:
mariadb:
image: mariadb:latest
container_name: dev-mariadb
restart: always
ports:
- 3316:3306
environment:
TZ: Asia/Seoul
MYSQL_ROOT_PASSWORD: ${MY_PASSWORD}
MYSQL_USER: ${MY_USERNAME}
MYSQL_PASSWORD: ${MY_PASSWORD}
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --skip-character-set-client-handshake
volumes:
- ./dev-mariadb/data:/var/lib/mysql
mariadb 를 구동하기 위해 docker-compose.yaml 을 작성한다.
외부 3316 포트를 내부 3306 포트와 연결하였으며 mariadb 구동에 필요한 환경변수를 적절히 설정한다.
docker container가 중지되더라도 db의 데이터가 날아가지 않도록 원하는 디렉토리에 볼륨매핑을 설정한다.
docker-compose -f docker-compose-mariadb.yaml up -d
docker-compose 를 사용하여 mariadb container 를 구동한다.
2.3 NestJS 프로젝트 생성
CLI 를 통해 NestJS 프로젝트를 편리하게 생성할 수 있다.
nest new nestjs-auth
원하는 디렉토리에서 위 명령어를 입력하여 nest-auth 프로젝트를 생성한다.
프로젝트의 이름은 원하는대로 변경이 가능하다.
3. 프로젝트 구조
src
|--app.controller.spec.ts
|--app.controller.ts
|--app.module.ts
|--app.service.ts
|--main.ts
생성된 프로젝트의 src 디렉토리를 보면 기본적으로 위와 같은 파일이 생성된다.
- controller : route 처리
- *.spec.ts : 테스트 파일
- service : 비즈니스 로직
- module : controller, service 관리
- main : application 실행