들어가며 요즘 Springboot Security의 로직을 공부하면서 node js의 Spring이라고 불리는 nest js에 대해 같이 공부하고 있다. 그러면서 유저 인증 관련 로직을 구현하면서 bcryptjs라는 라이브러리를 알게되었다. bcryptjs는 bcrypt 라이브러리를 js에서 사용할 수 있도록 구현되서 nest js에선 무조건 bcryptjs를 사용해야 하는 줄 알았으나 최근에 nest js에서도 bcrypt 라이브러리를 사용할 수 있다는 것을 발견했다. 그렇다면 bcrypt 라이브러리가 있는데 왜 bcryptjs가 생겨났는 지, 두 라이브러리를 비교해보기로 했다. npm 내부 사용 빈도 bcrypt bcryptjs  는 계층간 데이터 교환을 위한 객체 여기서 말하는 계층간의 의미는 Controller, View, Business Layer, Persistent Layer 등을 말하며 각 계층간 데이터 교환을 위한 객체를 의미한다. DTO는 로직을 가지지 않는 순수한 데이터 객체이고 getter, setter 메소드만 가진 클래스를 의미한다. **
JWT(Json Web Token)이란? > JSON 객체를 사용하여 가볍고 자가수용적인 (self-contained) 방식으로 정보를 안전성 있게 전달해주기 위한 토큰 장점 JWT 의 주요한 이점은 사용자 인증에 필요한 모든 정보는 토큰 자체에 포함하기 때문에 별도의 인증 저장소가 필요 없다. 쿠키를 전달하지 않아도 되므로 쿠키를 사용함으로써 발생하는 취약점이 사라진다. URL 파라미터와 헤더로 사용 트래픽 대한 부담이 낮음 REST 서비스로 제공 가능 내장된 만료 독립적인 JWT 단점 Self-contained: 토큰 자체에 정보를 담고 있으므로 양날의 검이 될 수 있다. 토큰 길이: 토큰의 페이로드(Payload)에 3종류의 클레임을 저장하기 때문에, 정보가 많아질수록 토큰의 길이가 늘어나 네트워크에 부하를 줄 수 있다. Payload 인코딩: 페이로드(Payload) 자체는 암호화 된 것이 아니라, BASE64
OAuth란? > OAuth2(Open Authorization, Open Authentication 2)는 인증을 위한 표준 프로토콜 등장 배경 여러 서비스들의 확장(thirth party application)이 등장하면서 개인정보인 아이디와 패스워드를 제공하고 싶지 않기 때문에 JWT와 같은 AccessToken 방식의 OAuth가 등장하게 됐다. 그 후, 발전해가면서 OAuth 2.0이 등장했다. 용어 정리 | 용어 | 설명 | |------------------|-------| | 자원 소유자 (Resource Owner)|보호된 자원에 대한 접근권한을 위임해 줄 수 있는 주체. 사람일 경우 사용자 |클라이언트 (Client)|자원 소유자의 허가를 받아 보호된 자원에 접근하려는 어플리케이션 |인증 서버 (Authorization Server)|자원 소유자의 인증 및 클라이언트의 권한 획득이 끝나면, 액세스 토큰을 발급해 주는 서버. (인증
카카오 로그인 플로우 차트 로그인 버튼 클릭 브라우저에서 카카오톡 간편 로그인 버튼 클릭 [302] 코드 발급 요청 사용자가 카카오 로그인 버튼을 클릭하면 서비스에서 해당 사용자의 카카오 로그인 인증을 요청해야 한다. ![](https://images.velog.io/images/carrykim/post/5914cb26