회원가입 api를 적용하던 중 사용하게 된 모듈 두개를 소개한다.
먼저 bcrypt는 클라이언트 및 프론트엔드단에 유포되면 안되는 password 등 같은 정보를 hash(암호화)처리 해준다.
$ npm i bcrypt
$ npm i -D @types/bcrypt
먼저 npm을 통해 install 해주고 사용법은,
const hashPassword = bcrypt.hash(패스워드, salt)
// 첫번째 인자로는 생성된 객체의 숨기고 싶은(ex. 패스워드) 등을 주고
// 두번째 인자로는 salt라고 하여 값이 높을수록 암호화 연산을 많이 하여 안전하게 값을 암호화 할 수 있다.
// 다만, salt값이 높아지면 연산을 많이 하기 때문에 속도저하를 일으킬 수 있다.
이렇게 받아온 hashPassword(암호화 된 password)를 받아오고, 이것 또한 유출되면 안되기에, 스키마에 virtual 메소드를 이용해서 return값에 프론트단에 보여주고 싶은 정보만 보여줄 수 있다.
schema.virtual('데이터명').get(this :schema => {
return {
id: this.id,
email: this.email,
};
})
후에 스키마 안에서 readonly로 해당 데이터를 만들어주고, controller에서 readonly된 virtual 스키마를 사용해 password를 프론트단에 보이지않게 할 수 있다.
프론트엔드와 소통할 때 사용할 수 있는 api docs를 만들어 주는 모듈.
엔드포인트, http 메소드, 테스트까지 가능한 기능이기 때문에 프로젝트를 할 때 수월하게 사용할 수 있을 것 같다.
npm install --save @nestjs/swagger swagger-ui-express
설치를 먼저 진행해주고, 사용법은
const config = new DocumentBuilder() // 협업을 위한 api문서는 Swagger로 만들 수 있다.
.setTitle('C.I.C') // api 제목
.setDescription('cat') // api 설명
.setVersion('1.0') // api 버전
.addTag('cats')
.build();
const document = SwaggerModule.createDocument(app, config);
SwaggerModule.setup('api', app, document); // 1번째 인자는 api docs의 엔드포인트.
@ApiOperation({summery: '설명'}) // http 메소드 위에 사용해준다.
@Get()
@ApiResponse({
status: 200,
description: '성공',
type: responsedto // 프론트엔드에서 내용을 body에 싣고 보내주면, 백엔드단에서의 response를 dto패턴으로 미리 만들어서 response를 보내준다.
})
@ApiProperty({
example: 'eeee@gmail.com', // 보내야하는 항목
description: 'email', // 어떤 항목인지
required: true, // 필수항목인지
})
// 다양한 옵션을 활용할 수 있다.