JWT를 꼭 사용해야할까?

Alex·2025년 1월 16일
0

CS를 공부하자

목록 보기
15/74

JWT란 무엇일까?에서 인증 방식을 정리했다.

여기선 JWT를 왜 써야할지 조사한 내용을 다루겠다.

서버 사이드에서 이점

우선, 세션 방식과 비교해보자.
세션은 DB이든 인메모리 저장소이든 이 정보를 저장해야 한다.

DB에 저장하면 매번 세션 정보를 확인할 때 DB 조회를 해야하니 DB 부하가 커질수밖에 없다.

만약, 세션 정보를 서버 메모리에 저장하면 다른 서버와 연동 작업이 어렵다.

JWT를 쓴다는 건, 인증 정보를 클라이언트 사이드로 옮긴다는 것이고 이를 통해 서버 사이드에 대한 의존성을 없앨 수 있다는 것이다.

MSA 구조에서 이는 특히 강점이 되는데
여러 서버를 동시에 운영할 때 하나의 서버에 의존하지 않아도 되기 때문이다.

JWT를 보내면 어느 서버에서든 호환이 되고, 인증이 가능하다.

JWT는 권한을 증명하는 것인가?

JWT는 단순히 토큰이 정상적으로 잘 만들어졌는지(위변조가 없는지)확인하는 용도로만 쓴다. JWT에는 '어떠한 권한을 갖고 있다'라는 주장만 있을 뿐이다. 이러한 권한이 제대로 갖춰져 있는지는 서버에서 검증을 해야 한다.

JWT 토큰이 신뢰성을 갖는 이유는?

시그니처를 만들 때 헤더와 페이로드가 해싱알고리즘으로 해싱된다. 해싱된 걸 복호화하는 것은 매우 어렵다. 해커가 만약 토큰의 페이로드를 수정했다고 해보자. 그러면, 서버에서 클라이언트로부터 받은 JWT의 시그니처를 검사해서 위변조 여부를 확인할 수 있다. 클라이언트에서 받은 헤더와 페이로드로 시그니처를 만들고, 클라이언트에서 보낸 JWT의 시그니처와 비교를 해서 변한 부분이 있는지 확인하는 것이다.

토큰의 진짜 목적은 정보 보호가 아닌, 위조 방지라고 생각하면 된다.

단점은 없어?

단점은

  • JWT 토큰을 무효화하는 게 어렵다는 것이다. 쿠키 기반이나 세션 기반은, 세션 정보를 무효화할 수 있다. 하지만, JWT 토큰은 서버에서 세션 정보를 갖고 있지 않아서 무효화하는 게 쉽지 않다. 이 때문에 토큰의 만료 기간을 설정해둔다.
  • 만약, 사용자가 해킹이 의심돼서 비밀번호를 변경했다면? 혹은 JWT 토큰을 탈취당했다면? 이럴 때 JWT 토큰을 무효화시키는 게 불가능하다. 그래서 블랙리스트로 토큰 자체를 등록해서 이를 사용하지 못하게 하거나, 유효기간을 짧게 설정하는 것이다. (블랙리스트를 DB에 저장해둔다면 결국 DB조회가 필요하기에 JWT의 이점이 약해지는 셈이다)

참고자료
-Authentication: JWT usage vs session

-Why and when should we use JSON Web Tokens?

-Can someone help me understand the real point of a JWT? Im not sure I see the use?

profile
답을 찾기 위해서 노력하는 사람

0개의 댓글