코딩애플 유튜브 JWT 내용을 보고 정리한 글입니다.
입장권 처럼 발급된 내용을 가지고 회원인지 아닌지를 판단하는 점에서 둘은 같다
JWT (토큰)의 장점은 stateless 하다. 회원이 많아질수록 세션은 확인하는 절차가 오래걸리지만 토큰은 입장권만 확인하기 때문이다.
JWT 생김새
// Header 기본세팅
{
‘Alg’: ‘HS256’,
‘’typ’’: ‘’jwt’’
}
// payload 입장권에 적을 정보
{
‘Name’: ‘John’,
‘유효기간’:20230101
}
//결과값 값은 해쉬로 반환되어 진다.
hash(base64UrlEncode(header)+’.’+base64UrlEncode(payload),시크릿키 ))
JWT 를 쓰려면 더 확장해서 보안 코드들을 생성해서 활용해야 한다.
개인적으로 개발일 하면서 느낀점을 정리하자면,
[세션의 문제점]
세션을 보관한다는 점에서 문제가 발생하는데,
로드밸런싱을 하거나하면 API서버의 내부 메모리에 저장할 경우 그 서버 이외의 서버에서 알 수 없어 세션저장을 위한 별도서버를 두고 같은 세션스토리지 서버를 바라보게 해야한다는 점.
이용자수가 많은 서비스인 경우 많은 양의 세션을 저장해야 한다는 점.
[jwt의 문제점]
클라이언트에서 저장할 곳이 마땅하지 않았던 점.
쿠키에 저장하자니 httpOnly, Secure 쿠키 옵션을 걸어줘야하는데 여러 API 서버에서 동일한 토큰을 검증할 수 있다고 해도 서브도메인이 아닌이상 서드파티 쿠키가 되고 사용자에게 쿠키 저장 동의를 구해야 한다는 점.
반대로 헤더의 Authorization에 담아 보내자니 클라이언트측 js에서 저장되고 있어야하고 때문에 보안에 취약해지는 점.
결론적으로 저는 jwt를 씁니다. 일단 세션 저장을 위한 별도 서버를 두는 것 자체가 상당히 손이 많이 가는 일이기도 하고 만료기한을 짧게가져가면 해결 가능한 부분이라 보았습니다. 물론 jwt도 마이크로서비스가 많아지면 결국 인증을 위한 서버가 따로 필요하게 되지만 세션을 저장하는 것보다는 복잡도가 떨어진다고 보았습니다.
JWT 를 조금 알고 있었는데 세부적으로 중요한것만 딱 알수 있는 시간이었다.
댓글들로 경험자들이 글을 써줘서 더 좋았다.