왜 JWT를 쓰는가?

·2023년 2월 15일
0

기본

목록 보기
1/4

이미 JWT에 관한 글을 적긴 했지만, 정작 왜 JWT를 쓰는지에 대한 의문은 해결 되지 않았기에 글을 쓰게 되었다.( + 쿠키, 세션)


1) 쿠키의 문제점

  • 쿠키가 노출되었을 때, ID나 PW 같은 중요 정보들이 쉽게 노출된다.
  • 웹 브라우저마다 쿠키에 대한 지원 형태가 다르기 때문에 브라우저 간 공유가 불가능하다.
  • 쿠키의 사이즈는 4KB로 제한되어 많은 양의 데이터를 담을 수 없다.

2) 세션의 문제점

  • 세션 ID, 쿠키 등이 탈취된다면 세션 저장소를 전부 지워 해결 가능하지만, 탈취당하지 않은 정상적인 사용자도 모두 재인증을 해야함

  • STATELESS를 위배한다. ⭐

    STATELESS라면 서버는 클라이언트의 상태를 저장하지 않아야 하지만, 세션 저장소라는 곳에서 클라이언트의 상태를 저장하게 되므로 STATEFUL하게됨다.

  • 더 나아가자면, 서버를 스케일 아웃 했을 때 1번 서버에 로그인한 사용자가 다른 2번 서버로 요청을 보내게 된다면 2번 서버에는 로그인 상태가 남아있지 않기 때문에 다시 로그인해야 하는 상황이 발생

=> 1), 2)를 해결하기 위해 jwt가 등장함

3) JWT 등장 배경

  • 쿠키와 세션 사용 시 문제점이었던 STATEFUL 특성을 JWT 사용 시 STATELESS하게 가져갈 수 있음 ⭐
    즉, 서버는 클라이언트의 상태를 가질 필요가 없다.

  • 인증에 필요한 정보가 토큰에 들어있어서 별도의 저장소가 필요 없다.

  • 다양한 언어에서 지원한다.

  • HTTP HEADER에 넣어서 쉽게 전달 가능하다.

  • MSA 환경에서 유용하다.


4) 추가

JWT 단점

  • 거의 모든 요청에 토큰이 포함되므로 트래픽 크기에 영향을 미칠 수있다.
  • 토큰에 정보가 많아져 토큰의 크기가 커지면 네트워크에 부하를 줄 수 있다.
  • 페이로드는 암호화된 게 아니라 BASE64로 인코딩 된 것이므로 중간에 토큰을 탈취하면 페이로드의 데이터를 모두 볼 수 있다.
    따라서, 페이로드에는 중요 정보를 담아서는 안된다.

5) 정리

쿠키와 세션은 말 그대로 저장소
하지만 둘의 차이점은 쿠키는 브라우저에 저장되지만, 세션은 서버에 저장됨
그런데 굳이 왜 쿠키를 사용하는가?
세션은 서버의 자원을 사용하기 때문에 무분별하게 만들다보면 서버의 메모리가 감당할 수 없어질 수가 있고 속도가 느려질 수 있기 때문.
그렇다면 jwt는 왜 등장했을까?
쿠키나 세션은 보안면에서 좋지 않기 때문에, 이를 보완하기 위해 토큰 기반의 인증방식의 등장으로 나오게 됨(토큰 기반 인증 방식 중 하나)
다시 말해서 jwt는 인증에 필요한 정보들을 암호화 시킨 토큰이다.
세션 방식처럼 토큰 자체를 쿠키에 담아서 보내줄 수도 있고 HTTP 헤더에 담아서 보내줄 수도 있다.

profile
개발자가 되는 과정

0개의 댓글