이번 프로젝트를 진행하면서, JWT (json web token)을 이용하여 로그인 기능을 구현하기로 하였다. 사실 이전 프로젝트에서도 로그인을 JWT를 사용하여 구현하였는데, 내가 담당한 것은 아니었고, 이에 대해서 JWT가 왜 쓰이는지에 대해서도 이해하지 못했다.
그래서 JWT가 왜 쓰이는지 정리하고, 내가 구현 방식을 나누려 한다.
JWT란 무엇인가?:
특정 정보를 가져오기 위한 인증 수단이다. 비유하자면, 자신이 누구인지를 증명하는 것이다.
예를 들어, 조선시대 암행어사가 업무를 보기 위해서 마패로 자신을 증명해야 한다.(마패는 역마와 역졸을 이용할 수 있는 권한이 있다.)
어사가 마패를 이용하여 탐관오리를 처단하 듯, 나도 JWT를 통해 유저 정보 등의 권한을 불러와야 한다.
11111.22222.33333 이것을 토큰이라 하면,
Header(11111), Payload(22222), Signature(33333)로 되어있다.
1) Header : JWT라는 것을 증명 및 및 알고리즘 정의,
2) Payload : 어떤 내용이 있는지 알려줌
3) Signature : Header에서 정의한 알고리즘 방식을 활용함.
기존에는 웹에서 쿠키와 세션을 이용하여 사용자를 인증하였는데, JWT는 토큰 자체에 사용자의 정보가 저장되어 있어서 서버에서는 토큰을 검증만 해주면 된다.
토큰에 정보가 많아질수록 토큰의 길이가 늘어나 네트워크에 부담을 줄 수 있다. 또한, 토큰 자체를 탈취 당하면 대처하기가 어렵다.
JWT를 사용하여 로그인 처리 하는 게, 별거 없어 보이는 것 같지만
JWT에 대해서 아무 것도 몰랐을 때, 기능을 구현하니 생각보다 어려웠다.
정말 내 스스로가 바보 같았던 것은, JWT가 무엇인지 정확히 정의를 보고 왜 필요한 것인지 알고 만들었다면, 구현하는 데에 조금은 쉬었을 텐데,
기능 구현 로직과 흐름도만 보고 만들어서, 시간이 조금 걸렸다.
모든 기능을 구현하기 전에, 어떤 도구를 사용하기 전에, 그 도구의 역사와 정의 등은 무조건 먼저 찾아보자!!
매번 다짐하지만, 순순히 자리잡고 있지 않아 걱정이다. 그래도 뽜이팅 하자. 계속 깨우치자.