[nest] 우분투에서 nest-server 구축하기

Edward Hyun·2022년 4월 5일
0

backend

목록 보기
58/120

카페24에서 클라우드 호스팅으로 우분투만 깔려 있는 상태에서 시작한다.

#1 기본적인 서비스 설치

  • 방화벽은 카페24 호스팅에서 하기에 생략
  • nignx // static 폴더와 front-end를 위해 필요
  • ftp // front-end 작업을 위해 필요
  • nodejs + npm
  • mysql // db
  • git // dev에서 작업하던 것을 서버에 가지고 올 때 편함.

설치 전에는
sudo apt-get update
sudo apt-get upgrade 를 실행 해준다. 최신 상태로

sudo apt-get install vsftpd // ftp 설치
sudo apt-get install nginx // nginx 설치
sudo apt-get install -y nodejs // node 설치
sudo apt-get install npm // npm 설치
sudo apt-get install mysql-server // mysql 설치
sudo apt-get install git // git 설치

#2 NestJs 시작

sudo npm i -g @nestjs/cli // 권한이 필요하니 sudo 넣는다
nest new project-name // 패키지매니저로 npm으로 선택

ls를 해보면 신규 프로젝트 폴더가 생긴것을 확인할 수 있다.
이렇게 작업할 수도 있지만, 서버에서 신규 프로젝트를 진행하기 보다
로컬에서 작업을 하고 github를 통해 소스를 올려서 git으로 서버에 클론하여 진행하는 것이 더 수월하다.

git clone 나의깃헙저장소주소

git clone이 끝나면 해당 프로젝트 폴더로 가서
npm install 을 실행함으로 라이브러리를 다운받는다.

#3 깃헙 소스 받아서 실행할 때

서버에서 실행할 때 주의할 점은 소스를 다운 받아도
node > npm > nest 설치된 것을 확인 후
npm install 을 진행해야 한다는 점이다.
nest가 설치 안된 상태에서 진행하면 아래와 같은 오류를 보게 된다.

Error: Cannot find module 'webpack'

#4 api 문서 swagger설치

npm install --save @nestjs/swagger swagger-ui-express

main.ts

import { NestFactory } from '@nestjs/core';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  const config = new DocumentBuilder()
    .setTitle('Cats example')
    .setDescription('The cats API description')
    .setVersion('1.0')
    .addTag('cats')
    .build();
  const document = SwaggerModule.createDocument(app, config);
  SwaggerModule.setup('api', app, document);

  await app.listen(3000);
}
bootstrap();

각 컨트롤러에 가서
@ApiTags로 섹터 구분해 주고

각 api 함수에
@ApiOperation으로 함수에 대한 summary와 설명을 달고
@ApiResponse에 대한 것을 넣어준다.
더 자세하게 @ApiCreatedResponse, @ApiOkResponse 등등 맞는 어노테이션을 달고 설명을 넣는다.

각 api 함수의 query, param에 해당하는
@ApiQuery, @ApiParam, 등등 달고 설명을 넣는다.

그리고 DTO나 entity처리에서도
@ApiProperty를 넣어서 변수에 대한 설명도 넣어준다.

responses:
'200':
description: OK
'400':
description: Bad request. User ID must be an integer and larger than 0.
'401':
description: Authorization information is missing or invalid.
'404':
description: A user with the specified ID was not found.
'5XX':
description: Unexpected error.

#5 pm2 로 서버 구동

npm install -g pm2@latest // pm2설치

export NODE_ENV=production // 배포 모드로 설정
npm run build  // 소스를 빌드함 >> dist/main.js생성
pm2 start dist/main.js --watch // pm2로 포크함. watch 옵션은 자동  restart 시켜줌.

pm2 사용법

$ pm2 start app.js // 시작하기
$ pm2 stop target // 중지
$ pm2 restart target // 재시작
$ pm2 logs target// 진행중인 로그
$ pm2 list  // pm2로 돌아가는 리스트
$ pm2 kill // 죽이기
$ pm2 show target // 자세한 설명

참고::
https://docs.nestjs.com/openapi/introduction
https://jhyeok.com/nestjs-swagger/
https://popawaw.tistory.com/183
https://engineering.linecorp.com/ko/blog/pm2-nodejs/
https://ganzicoder.tistory.com/157

profile
앱&웹개발(flutter, vuejs, typescript, react), 인공지능(nlp, asr, rl), 백엔드(nodejs, flask, golang, grpc, webrtc, aws, msa, nft, spring cloud, nest.js), 함수형 프로그래밍(scala, erlang)을 공부하며 정리합니다.

0개의 댓글