ComputerScience

왜 JWT를 사용하는가? JWT 사용 이유

Albosa2lol 2023. 7. 14. 16:38

1. 서론

JWT에 대한 내용을 정리한다.


2. What is JWT

JSON Web Token의 준말이다.

자바스크립트의 JSON 타입을 띄고 있으며, Web Token으로써 사용할 수 있다는 의미다.

 

 

2.1. JWT 사용 이유

HTTP는 기본적으로 state-less를 지향한다.

state-less(무상태)란? 서버와 클라이언트 간의 통신 시 항상 사용자의 정보를 가지고 있지 않는 것.

→ 때문에, JWT 안에 회원에 대한 값을 넣어 회원을 식별한다.

 

 

2.2. JWT의 구성

 
 
 
<bash />
 
aaaaaaa.bbbbbbb.ccccccc //헤더.페이로드.시그니처

 

구성은 헤더, 페이로드, 시그니처로 나뉜다.

각 역할은 다음과 같다.

  • 헤더: 토큰 타입, 암호화 알고리즘 명시
  • 페이로드: JWT에 넣을 데이터, JWT 발급 / 만료일 등 명시
  • 시그니처: 헤더, 페이로드가 변조 되었는지를 확인하는 역할

시그니처 덕분에 jwt 변조를 간단히 확인 가능

 

2.3. 토큰 vs 세션

토큰 vs 세션 기반 인증 플로우 비교

간단히 요약하면,

  • 토큰 방식은 토큰이 보안, 유저 데이터를 관리한다.
  • 세션 방식은 서버에 보안, 유저 데이터를 관리한다.

 

이런 이유로 세션과 토큰의 장단점을 따져보면 다음과 같다.

 

인증 방식 토큰 세션
보안성 - WIN
외부 노출시 - WIN
성능 - WIN
비용 WIN -
서버 부하(효율성) WIN -
확장성 WIN -

 

 

보안성, 성능같은 면에서는 세션이 더 좋은 방식이지만, 비용면에서 JWT를 많이 사용하고 있는 추세다.

 

뭐가 더 좋다라고 하기보다는 위와 같은 장단점이 있으니 프로젝트 맞춰서 사용할 것.

(이 장·단점도 절대적인게 아니라 구현 방식에 따라 다릅니다~)

 

 

그럼 이런 궁금증이 들 것이다.

"보안과 사용자 식별은 위한 토큰인데 보안성이 떨어지면 사용하는 의미가 퇴색되지 않나요?"

 

그래서 우리는 아래와 같은 방법을 사용한다.

3. 왜 엑세스 토큰과 리프레시 토큰이 분리되어있는가?

단어 키워드를 보면, 엑세스와 리프레시.. 직관적인 네이밍이다.

무슨 역할을 하는지 확인해보자.

 

  • 엑세스 토큰: 서버 API를 직접 요청할 때 사용한다.
  • 리프레시 토큰: 엑세스 토큰이 만료되었을 때 엑세스 토큰을 재발급할 목적으로 사용한다.

 

 

3.1. 분리하는 목적은?

클라이언트와 서버 간의 API 통신 중, 토큰이 털릴 수 있기 때문이다.

 

그래서 직접 API를 호출하는 엑세스 토큰의 주기는 짧게 하고, (약 1시간)
엑세스 토큰을 재발급하는 리프레시 토큰의 주기는 비교적 길게 한다. (약 2주)

 

이런식으로 진행하면 엑세스 토큰이 털리더라도 만료 주기가 짧기 때문에 피해를 조금이나마 줄일 수 있다.

그래서 백엔드에서는 엑세스 토큰 갱식 API를 만들어준다.

 

3.2. 이게.. 의미가 있나요..?

엑세스/리프레시 토큰 방식은 중간에 탈취당하는 케이스를 고려하고 있습니다. 그래서 엑세스 토큰 안에 중요한 값은 넣지 않습니다.

유저 식별용 데이터라면 세션과 비슷하게 DB에 가상 ID 혹은 노출되도 상관없는 데이터를 넣습니다.

 

가상 ID, 토큰 발급/만료일으로 유효성 체크

다만, 리프레시 토큰은 탈취 당할 수 있으니, 클라이언트에서 안전하게 저장하는 방식으로 개발이 진행됩니다.

 

따라서 토큰에는

  • 털렸을 때 가장 쓸모없는 데이터로,
  • 서버에서 유저(데이터)를 식별할 수 있을 것.

이게 토큰에서 가장 좋은 방식입니다.

 

 

 

 

3.3. JWT가 가벼운 또 하나의 이유

JWT의 유효하지 않다면, 서버에 바로 인증 에러를 던져 불필요한 트래픽이 발생되지 않도록 합니다.

 서버에 불필요한 트래픽을 줄일 수 있습니다!

 

 

 

4. 그래서 결론

토큰 발급 방식: 몇 만명의 인증 방식을 저장하고 있지 않기 때문에, 가볍고 확장성이 좋은 방식.

세션 발급 방식: 무겁지만, 그만큼 보안성이 좋은 방식.

 

장단점이 확실하니, 프로젝트 기획과 시선에 따라 상호 대체 / 함께 사용이 가능합니다.

 

 


5. 레퍼런스