JWT로 사용자 인증을 구현하는 이유

신연우·2021년 6월 8일
0

WIL

목록 보기
2/13
post-thumbnail

배경

개발을 하면서 사용자 인증을 진행할 때 JWT 이외의 기술을 전혀 사용한 적이 없었다. 그러다 문득 JWT 말고도 분명 다른 방식으로 사용자 인증을 구현할 수 있을텐데 왜 JWT를 이렇게나 많이 사용하고 있는 것인지 궁금했다.

쿠키

  • 매 요청마다 HTTP header에 토큰에 대한 정보를 담아서 전송하는 방식으로 사용자 인증을 구현한다.
  • 타인에게 HTTP header를 탈취당하면 개인정보가 유출될 수 있다.

세션

  • SSS(Server Side Session) 방식을 이용해 사용자 인증을 구현한다.
    • 사용자 인증에 대한 정보를 서버의 DB 혹은 메모리에 저장하여 관리하는 방식
  • 인증 정보를 메모리 공간에 저장하게 되면 서버가 scale out 되었을 때 문제가 될 수 있다.
    • A 서버에서 인증 성공 -> 다음 요청은 B 서버로 전송됨 -> B 서버는 아직 해당 사용자에 대한 인증을 진행하지 않아 인증 실패 오류가 발생함
    • 위 문제를 해결하기 위해서는 서버 간의 세션을 동기화하거나 외부 저장공간에 세션 인증 정보를 담아둘 필요가 있다.

JWT

  • Base64 URL 인코딩 방식으로 인코딩된 문자열
  • 클라이언트로부터 해당 정보를 받아 내부적인 decode 방식을 이용해 인증에 필요한 정보를 추출해 사용하는 방식으로 구현한다.

결론

  • 쿠키에 비해 세션, JWT가 보안성이 높은 편이다.
  • scale out이 일어날 수 있는 환경이라면 세션은 추가적인 공수가 필요하지만, JWT는 그렇지 않다.

아무래도 실제 서비스를 운영할 때는 한 번에 많은 트래픽이 하나의 서버에 몰리지 않도록 scale out 전략을 구축해두는 것으로 알고 있습니다. 별도의 공수가 필요하지 않은 JWT를 많이 사용하는 것이 아닐까 싶습니다.

참고한 글

profile
남들과 함께하기 위해서는 혼자 나아갈 수 있는 힘이 있어야 한다.

0개의 댓글