# 2022.11.06

## 할일 및 한일

* [x] nest.js 프로젝트 사용자 인증 부분 추가적으로 구현하기&#x20;

## 경험 및 배움&#x20;

오늘도 nest.js 프로젝트를 추가적으로 구현하였다.

우선 **사용자 이름을 유니크하게 만드는 작업**을 하고, **중복일 시에는 예외를 던지는 기능을 추가하였다.** 또한 처음 사용해 보아서 재미있고, 또 흥미가 생기는 **비밀번호를 암호화하는 bcryptjs라는 모듈**이 있었다.

비밀번호를 Database에 저장할 때 암호화를 시킬 때는 여러 방법이 존재하는데, **보통 비밀 번호를 사용할 때는 해시 함수로 암호화된 비밀 번호를 DB에 저장하고, 로그인시 비밀 번호를 해시 함수로 암호화해 DB의 비밀번호와 비교하여 로그인여부를 따지는 방법**을 사용한다.

하지만 위의 방법을 사용하면 **해커들이 데이터를 해킹했을 때, 임의의 패스워드를 만들어봐서 해시를 적용하여 DB의 데이터와 대조를 해보면 해시의 원본 값을 알아낼 수 있는 위험성**이 있다고 한다.

따라서 여기서는 **`Salt`**&#xB77C;는 추가적인 방법을 도입하여 해결하였다.

**`Salt`**&#xB294; **무작위 문자열을 랜덤으로 생성해 비밀번호에 붙여넣어서, 해시함수를 적용하면 예측할 수 없는 비밀번호가 생겨서 위의 문제를 해결**할 수 있다.

{% embed url="<https://github.com/Jinwon-Dev/member-management-system/commit/aa9cb40a999e52a80bed103ad1863a6a90c25719>" %}

이런 과정들이 프레임워크를 사용하지 않았을 때는 상상조차 할 수 없는 것들이지만, 프레임워크를 사용하면 패키지를 설치하고, 또한 어노테이션을 사용하여 정말 여러 기능을 할 수 있다는 것에 대해 가끔 놀란다. 콘솔에서만 공부할 때와는 다른 정말 많은 즐거움들이 있는 것 같다.&#x20;

## 개선 및 목표&#x20;

* 최소 이틀 안에 nest.js 프로젝트를 마무리하고, 다음 단계로 넘어가자.&#x20;
