[Node.js] Authentication 탐구(Bcrypt와 JWT)
![[Node.js] Authentication 탐구(Bcrypt와 JWT)](/content/images/size/w1920/2024/12/Web-Authentication.jpg)
Node.js에서 인증을 구현하는 두 가지 방식: Bcrypt와 JWT 🔐
Node.js에서 로그인 기능을 구현하기 위해 로그인 보안 인증에 관련하여 공부해봤다.
그 중에서 Bcrypt와 JWT 방식을 봤으며 해당 인증 방식의 대하여 포스팅을 한다
1. Bcrypt란 무엇인가? 🤔

Bcrypt
는 패스워드를 안전하게 저장하기 위한 암호화 라이브러리이다. 일반적으로 사용자의 비밀번호를 데이터베이스에 저장할 때 암호화를 하지 않으면, 데이터 유출 시 매우 큰 피해로 이어질 수 있다. 따라서 Bcrypt를 통해 비밀번호를 해시하여 저장하는 것은 보안에서 필수적이다. 해시된 비밀번호는 원래의 텍스트 비밀번호로 쉽게 되돌릴 수 없으며, 이는 비밀번호 보안을 강화하는 핵심이다.
- Bcrypt 사용 흐름:
- 사용자가 회원가입을 할 때 비밀번호를 입력한다.
- 입력된 비밀번호를
bcrypt
로 해싱하여 데이터베이스에 저장한다. - 사용자가 로그인을 시도할 때, 입력된 비밀번호를 다시 해싱한 후 데이터베이스에 저장된 값과 비교한다.
2. JWT (JSON Web Token)란 무엇인가? 📝

JWT
는 사용자 인증에 사용되는 토큰 기반 인증 방식이다. JWT는 서버와 클라이언트 간의 인증 정보를 안전하게 주고받기 위한 표준으로, 주로 사용자 인증 후 토큰을 발급하고 이를 통해 이후 요청에서 인증을 수행한다. JWT는 사용자에 대한 정보를 포함하는 토큰으로, 주로 헤더(header)
, 페이로드(payload)
, 서명(signature)
세 부분으로 구성된다.
- JWT 사용 흐름:
- 사용자가 로그인 요청을 하면, 서버는 사용자를 인증하고 JWT를 생성한다.
- 이 JWT를 클라이언트 측에 전달하고 클라이언트는 이를 로컬 스토리지나 쿠키에 저장한다.
- 이후 API 요청마다 JWT를 헤더에 포함하여 서버로 보내며, 서버는 해당 JWT를 검증하여 사용자를 인증한다.
3. Bcrypt와 JWT의 차이점 🚧
이제 Bcrypt
와 JWT
의 차이점을 구체적으로 살펴보자.
🔍 항목 | 🧂 Bcrypt | 🪙 JWT |
---|---|---|
목적 | 비밀번호 해시화 및 보관 | 사용자 인증 후 토큰 발급 및 관리 |
사용 방식 | 주로 비밀번호를 암호화하여 데이터베이스에 저장함 | 클라이언트-서버 간 상태를 유지하기 위해 토큰 발급 |
보안 수준 | 비밀번호의 보안성을 강화 | 토큰에 포함된 정보의 무결성 보장 |
저장 방법 | 데이터베이스에 해시된 비밀번호를 저장 | 클라이언트 측에 토큰을 저장 (로컬 스토리지, 쿠키 등) |
4. Bcrypt와 JWT의 장단점 비교 ⚖️
📌 Bcrypt의 장점 👍
- 높은 보안성: 비밀번호는 원래의 형태로 복구가 불가능하게 해싱되기 때문에 유출되더라도 안전성이 높다.
- 비밀번호 해싱의 강도: Bcrypt는 비용 인자(cost factor)를 사용하여 해싱의 강도를 조절할 수 있다. 이를 통해 비밀번호 해싱 과정이 복잡해져 무차별 대입 공격으로부터 안전하다.
📌 Bcrypt의 단점 👎
- 고비용 연산: 해싱 과정이 복잡하기 때문에 많은 리소스를 사용하며, 이에 따라 속도가 느려질 수 있다.
- 단순 비밀번호 관리: 인증 상태를 유지하는 역할은 불가능하고, 단지 비밀번호 관리에만 국한되어 있다.
📌 JWT의 장점 👍
- 상태 비유지(stateless): 서버에서 세션을 유지할 필요가 없어 서버의 리소스를 절약할 수 있다.
- 확장성: 다양한 플랫폼에서 인증을 처리하는 데 적합하며, 모바일 앱과 웹 애플리케이션 간의 인증을 일관성 있게 처리할 수 있다.
📌 JWT의 단점 👎
- 보안 취약점: 토큰이 탈취되면 만료 전까지 사용자가 아닌 사람이 토큰을 사용하여 인증된 것처럼 행동할 수 있다.
- 토큰 크기 문제: JWT는 클라이언트에서 전송될 때마다 일정한 크기를 차지하기 때문에 네트워크 사용량이 증가할 수 있다.
5. 언제 Bcrypt를 사용하고, 언제 JWT를 사용할까? 🤔💡
Bcrypt
와 JWT
는 목적이 다르기 때문에 상황에 따라 적절히 사용해야 한다. 회원가입이나 비밀번호 변경 기능에서 비밀번호를 안전하게 관리하기 위해 Bcrypt
를 사용하는 것이 좋다. 반면, 사용자가 로그인한 후 클라이언트와 서버 간 인증을 위한 간편한 방식이 필요하다면 JWT
가 유용하다.
- Bcrypt는 비밀번호를 안전하게 저장하고, 로그인 시 사용자 인증을 위한 비밀번호 비교 과정에 사용한다.
- JWT는 사용자가 로그인한 후 인증 상태를 유지하는 데 사용되며, 클라이언트 측에서 토큰을 저장하고 이를 통해 추가적인 인증 절차를 수행할 수 있다.
6. 결론 🏁
Node.js에서 사용자 인증을 구현할 때 Bcrypt
와 JWT
는 각자의 역할과 목적을 가지고 있다. Bcrypt는 비밀번호의 안전한 저장을, JWT는 로그인 이후의 인증 상태 유지를 담당하는 것이다. 이 두 가지를 결합하여 비밀번호를 안전하게 관리하면서 사용자 인증 상태를 효율적으로 처리하는 것이 일반적인 방식이다.
- 회원가입 시: 비밀번호를
Bcrypt
로 해싱하여 저장한다. - 로그인 시: 비밀번호를
Bcrypt
로 검증한 후,JWT
를 생성하여 사용자에게 전달한다. - 인증 상태 유지: 클라이언트는 이후 API 호출 시
JWT
를 사용하여 인증을 유지한다.
이러한 인증 방식을 통해 더 안전하고 확장성 있는 인증 시스템을 구축할 수 있다. Node.js 환경에서 이러한 방식을 잘 조합하면 보안성과 효율성을 모두 확보할 수 있을 것이다. 🌟
댓글