본문 바로가기
Language/Node.js

JWT란?

by 노믹 2022. 12. 19.

JWT 간략 정리

  • JSON 형태의 데이터를 안전하게 교환하여 사용할 수 있게 해 줍니다.
  • 인터넷 표준으로서 자리 잡은 규격입니다.
  • 여러 가지 암호화 알고리즘을 사용할 수 있습니다.
  • header.payload.signature의 형식으로 3가지의 데이터를 포함합니다.(개미처럼 머리, 가슴, 배)
    때문에 JWT 형식으로 변환된 데이터는 항상 2개의 . 이 포함된 데이터여야 합니다.

JWT 구조

https://jwt.io/ 에서 간단히 확인할 수 있는데요, 위에서 말했듯이 개미처럼 머리, 가슴, 배와 같은 3가지를 가졌습니다.

  • header(머리)는 signature(배)에서 어떤 암호화를 사용하여 생성된 데이터인지 표현합니다.
  • payload(가슴)는 개발자가 원하는 데이터를 저장합니다.
  • signautre(배)는 이 토큰이 변조되지 않은 정상적인 토큰인지 확인할 수 있게 도와줍니다.

더 알아두어야 할 특성

  • JWT는 암호 키(Secret Key)를 모르더라도 복호화(Decode)가 가능합니다.
    변조만 불가능할 뿐, 누구나 복호화하여 보는 것은 가능하다는 의미가 됩니다.
  • 때문에 민감한 정보(개인정보, 비밀번호 등)는 담지 않도록 해야 합니다.
  • 특정 언어에서만 사용 가능한 것은 아닙니다.
    단지 개념으로서 존재하고, 이 개념을 코드로 구현하여 공개된 코드를 우리가 사용하는 게 일반적입니다.

쿠키, 세션과의 차이점

데이터를 교환하고 관리하는 방식인 쿠키/세션과 달리 JWT는 단순히 데이터를 표현하는 형식입니다.

  • JWT로 만든 데이터를 브라우저로 보내도 쿠키처럼 자동으로 저장되지는 않지만, 변조가 거의 불가능하고 서버에 데이터를 저장하지 않기 때문에 서버를 Stateless(무상태)로 관리할 수 있기 때문에 최근 많이 쓰이는 기술 중 하나입니다.
  • Stateless(무상태)Stateful(상태 보존)의 차이를 간단히 설명하자면,
    Node.js 서버가 언제든 죽었다 살아나도 똑같은 동작을 하면Stateless 하다고 볼 수 있습니다.
    반대로 서버가 죽었다 살아났을 때 조금이라도 동작이 다른 경우 Stateful 하다고 볼 수 있습니다.
  • 서버가 스스로 어떤 기억을 갖고 다른 결정을 하냐 마냐의 차이라고 보면 더 쉽습니다.
  • 로그인 정보를 서버에 저장하게 되면 무조건 Stateful(상대 보존)이라고 볼 수 있습니다.

사용 예시

  • 보통 암호화된 데이터는 클라이언트(브라우저)가 전달받아 다양한 수단(쿠키, 로컬 스토리지 등)을 통해 저장하여 API 서버에 요청을 할 때 서버가 요구하는 HTTP 인증 양식에 맞게 보내주어 인증을 시도합니다.
  • 비유하자면, 놀이공원의 자유이용권과 비슷합니다.
    • 회원가입: 회원권 구매
    • 로그인: 회원권으로 놀이공원 입장
    • 로그인 확인: 놀이기구 탑승 전마다 유효한 회원권인지 확인
    • 내 정보 조회: 내 회원권이 목에 잘 걸려 있는지 확인하고, 내 이름과 사진, 바코드 확인

'Language > Node.js' 카테고리의 다른 글

미들웨어  (0) 2022.12.19
Access Token, Refresh Token  (0) 2022.12.19
쿠키와 세션  (0) 2022.12.19
Request와 Response  (0) 2022.12.13
Module의 이해  (0) 2022.12.13