-
Notifications
You must be signed in to change notification settings - Fork 3
Nest.js Swagger 사용법
@nestjs/swagger를 설치합니다.
yarn add @nestjs/swagger
main.ts에 swagger를 적용합니다.
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
const config = new DocumentBuilder()
.setTitle('OctoDocs')
.setDescription('OctoDocs API 명세서')
.build();
const documentFactory = () => SwaggerModule.createDocument(app, config);
SwaggerModule.setup('api', app, documentFactory);
await app.listen(3000);
}
bootstrap();
@ApiOperation 데코레이터를 사용하면 각 api 별로 설명을 쓸 수 있습니다.
@ApiOperation({ summary: '페이지를 생성하고 노드도 생성합니다.' })
@Post('/')
@HttpCode(HttpStatus.CREATED)
async createPage(@Body() body: CreatePageDto): Promise<{ message: string }> {
await this.pageService.createPage(body);
return {
message: PageResponseMessage.PAGE_CREATED,
};
}
다음은 request API를 표현하는 방법입니다.
dto를 사용한다면 먼저 dto의 각 필드에 대한 설명을 @ApiProperty 데코레이터를 사용하여 작성할 수 있습니다.
import { ApiProperty } from '@nestjs/swagger';
import { IsString, IsNumber, IsJSON } from 'class-validator';
export class CreatePageDto {
@ApiProperty({
example: 'nest.js 사용법',
description: '페이지 제목입니다.',
})
@IsString()
title: string;
@ApiProperty({
example: 'nest를 설치합니다.',
description: '페이지 내용입니다.',
})
@IsJSON()
content: JSON;
@ApiProperty({
example: '14',
description: 'x 좌표입니다.',
})
@IsNumber()
x: number;
@ApiProperty({
example: '14',
description: 'y 좌표입니다.',
})
@IsNumber()
y: number;
}
그 다음 컨트롤러에서 @ApiBody 데코레이터를 사용하여 dto를 넣어줍니다.
@ApiOperation({ summary: '페이지를 생성하고 노드도 생성합니다.' })
@ApiBody({
description: 'post',
type: CreatePageDto,
})
@Post('/')
@HttpCode(HttpStatus.CREATED)
async createPage(@Body() body: CreatePageDto): Promise<{ message: string }> {
await this.pageService.createPage(body);
return {
message: PageResponseMessage.PAGE_CREATED,
};
}
다음은 ResponseApi를 사용하는 방법입니다.
마찬가지로 dto의 각 필드에 대한 설명을 쓴 다음 @ApiResponse 데코레이터의 type으로 넣어주면 됩니다.
@ApiResponse({
type: FindNodesResponseDto,
})
@ApiOperation({
summary:
'모든 노드 정보를 가져옵니다. (페이지 정보 중 id와 title만 가져옵니다.)',
})
@Get('/')
@HttpCode(HttpStatus.OK)
async getNodes() {
const nodes = await this.nodeService.findNodes();
return {
message: NodeResponseMessage.NODE_ALL_RETURNED,
nodes: nodes,
};
}
만약 localhost의 3000번 포트에서 nest 서버를 띄웠다면 /api 경로로 접근하면 됩니다.
다양한 api들을 볼 수 있고 원하는 api를 클릭합니다.
클릭하면 request와 response에 대한 상세 정보를 확인할 수 있습니다.
try it out을 클릭하면 직접 요청을 날려볼 수 있습니다.
요청에 대한 default 값이 들어있는 모습을 확인할 수 있고 자유롭게 수정할 수 있습니다.
자유롭게 수정한 후 요청을 날리면 응답 값을 확인할 수 있습니다.
⚓️ 사용자 피드백과 버그 기록
👷🏻 기술적 도전
📖 위키와 학습정리
✏️ 에디터
Novel이란?
Novel 스타일링 문제
에디터 저장 및 고려 사항들
📠 실시간 협업, 통신
Yorkie와 Novel editor 연동
YJS, Websocket, React-Flow
YJS, Socket.io
WebSocket과 Socket.io에 대해 간단히 알아보기
YJS 가이드 근데 이제 Socket.io를 곁들인
🏗️ 인프라와 CI/CD
NCloud CI CD 구축
BE 개발 스택과 기술적 고민
private key로 원격 서버 접근
nCloud 서버, VPC 만들고 설정
monorepo로 변경
⌛ 캐시, 최적화
rabbit mq 사용법
🔑 인증, 인가, 보안
passport로 oAuth 로그인 회원가입 구현
FE 로그인 기능 구현
JWT로 인증 인가 구현
JWT 쿠키로 사용하기
refresh token 보완하기
🧸 팀원 소개
⛺️ 그라운드 룰
🍞 커밋 컨벤션
🧈 이슈, PR 컨벤션
🥞 브랜치 전략
🌤️ 데일리 스크럼
📑 회의록
1️⃣ 1주차
킥오프(10/25)
2일차(10/29)
3일차(10/30)
4일차(10/31)
2️⃣ 2주차
8일차(11/04)
9일차(11/05)
11일차(11/07)
13일차(11/09)
3️⃣ 3주차
3주차 주간계획(11/11)
16일차(11/12)
18일차(11/14)
4️⃣ 4주차
4주차 주간계획(11/18)
23일차(11/19)
24일차(11/20)
25일차(11/21)
5️⃣ 5주차
5주차 주간계획(11/25)
29일차(11/25)
32일차(11/28)
34일차(11/30)
6️⃣ 6주차
6주차 주간계획(12/2)
37일차(12/3)