개발이야기

NestJS로 구현하는 Authentication & Authorization(1)

adoreje 2021. 3. 26. 22:44

이 포스트는 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 실행