❗️
이 글은 최대한 정확한 정보를 공유하고자 작성하는 글입니다. 하지만, 제 생각을 이해한 대로 옮겨 적는다는 점에서 다르거나 혹은 틀릴 수도 있다는 점 너그러이 양해 부탁드립니다. 만약 틀린 정보라면 적극적으로 피드백 부탁드립니다!
🧑💻
이번 포스팅에서는 JWT와 Stateless에 대해 다룰 것이다.
이를 주제로 다루고자 했던 이유가 있다. 그에 대해 이야기하기 위해 JWT의 특징으로 거슬러 올라가 보겠다.
1. JWT는 클라이언트 측에서 관리를 할 수 있기에 서버의 과부하를 줄일 수 있고, 상태를 저장하지 않아도 된다.
2. JWT에는 필요한 정보를 커스텀해서 저장할 수 있어 클라이언트와 서버 간의 통신에서 추가적인 쿼리를 수행할 필요가 없다.
처음 JWT 토큰을 알게 되었을 때에는, '이래 저래해서 좋다네 ~ 그럼 써야지 ~'라는 생각이었다. 하지만, 상태를 저장하지 않아도 되는 것이 좋다는 건 알겠는데 그게 왜 좋은 건데?라는 의문점을 가지게 되었다.
엄밀히 따지면 난 왜 좋은지 모르고 사용만 하려고 했던 것이었다. 그래서 이번 기회에 stateless 한 것이 왜 좋고 JWT 토큰이 stateless 해서 어떤 이점이 있는지에 대해서 공유해보고자 한다.
📝 Stateless
Stateless 하다는 것은 상태가 없다는 뜻이다. 상태가 없다는 것은 무엇이고 무엇이 장점인지에 대해 찾아보니 이러했다.
서버가 클라이언트의 상태를 저장하지 않고, 각 요청이 독립적으로 처리된다는 것을 의미한다.
"서버가 클라이언트의 상태를 저장하지 않는다는 ok.. 각 요청이 독립적으로 처리된다는 것은 정확히 무슨 의미이지?"라는 생각이 1차적으로 들었다.
하나를 알고자 했더니 모르는 것 투성이다
각 요청이 독립적으로 처리된다는 것은 서버가 이전 요청에 대한 정보를 저장하거나 추후 요청에 사용하지 않는다는 것을 의미한다.
음.. 근데 이게 왜 좋은 거야?
서버에서 이전 요청에 대한 정보를 저장하지 않기에 어느 서버로 요청을 보내도 다 동작한다.
이는 즉, 확장성으로 연결된다. 각 요청이 모두 독립적으로 처리가 되기 때문에 어느 서버에 요청을 해도 독립적으로 작동이 된다는 것이다.
이밖에도, 상태를 저장하지 않기 때문에 서버의 리소스를 더욱 효율적으로 사용 가능하다는 것과 서버가 클라이언트의 상태를 저장하고 관리할 필요가 없으므로, 서버 로직의 단순성이 높아진다는 것이다.
📝 JWT와 Stateless
위에서도 이야기했지만, JWT의 장점 중 하나는 Stateless이다.
JWT가 가진 stateless 한 특징은 성능 향상에도 도움을 준다. 기본적으로 바로 위에서 이야기한 확장성, 효율적인 서버 리소스 활용, 서버 로직의 단순성 증가 이외에도 유연성과 에러 추적의 용이함이 있다.
JWT는 클라이언트에 저장이 가능하기 때문에 다양한 클라이언트에서 동일한 방식으로 인증과 데이터 전송을 할 수 있는 유연성을 가진다.
그리고, JWT 내에 원하는 정보를 담을 수 있기에 문제가 발생했을 경우에 디버깅이 상대적으로 쉽다고 한다. 즉, 에러 추적이 용이하다.
🧑💻
이번 포스팅에서는 JWT와 그 특징 중 하나인 stateless에 대해 생각해 보았다.
JWT는 좋은 사용자 인증 방식이지만 JWT의 장점이 곧 단점이 되기도 하는 것이다. JWT 내에 많은 중요한 정보들을 담을 수 있기에 탈취되지 않도록 보안적인 측면에서 많은 신경을 써야 할 것이다.
현재 장고와 리액트로 구축한 웹에서 내가 사용한 JWT 방식에 대해서는 아래의 포스팅에서 다루었었다. 하지만, 이곳저곳의 글들을 읽어보고 주변의 이야기들을 들어보니 JWT를 잘 쓰는 것이 정말 어렵다는 생각을 했다. JWT에 대해 좀 더 공부해서 사용자 인증을 좀 더 보완해야 될 것 같다 🤔
'TIL' 카테고리의 다른 글
REST API (1) | 2024.02.06 |
---|---|
Caching(캐싱) (0) | 2024.02.03 |
UUID & Auto Increment 이렇게 쓰는 것 맞나요? (0) | 2023.08.31 |
[shipjs 적용기 02] - 오픈 소스를 만들다 컨트리뷰트를 한 건에 대하여 (0) | 2023.08.31 |
[shipjs 적용기 01] - 오픈 소스를 위한 오픈 소스 (0) | 2023.08.31 |