TIL: JWT, 웹 크롤링

엉썬·2022년 3월 19일
0

JWT

Nodejs 교과서의 교육 과정 중 API 서버를 제작하는 과정에 JWT가 등장했다.

What is JSON Web Token?
JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. This information can be verified and trusted because it is digitally signed. JWTs can be signed using a secret (with the HMAC algorithm) or a public/private key pair using RSA or ECDSA.

JWT는 JSON Web Token의 약자라고 한다. JSON 데이터를 암호화되어 보내는 일종의 인증 체계인 것 같은데 도무지 왜 쓰는지가 이해되지 않았다.
책에서는 API를 사용하는 client에게 일종의 인증을 하는 것으로 보이는데 uuid를 통해서 자체적으로 id를 발급해 통신하는 방식에 비해 무엇이 더 나은지 이해가 되지 않았다.

서버가 클라이언트의 권한 및 인증정보가 표현된 JSON을 암호화 후 Token으로 발급하여, 클라이언트가 서버에 통신할 때 Session 없이 상태를 표현할 수 있도록 해주는 인증방식.
= 출처: https://spiralmoon.tistory.com/entry/프로그래밍-이론-JWT-Json-Web-Token [Spiral Moon's programming blog]

다른 분의 블로그를 뒤적거려보니 Session 없이 상태를 표현할 수 있도록 해주는 인증방식이라는 말이 눈에 띄었다. 그렇다면 통신시 패킷의 용량은 크겠지만 서버 자체에서 감당할 부담이 적겠다는 생각이 들었다. 위의 출처로 명시한 블로그를 참고하면 stateful serverstateless server에 대한 이야기가 나오는데 JWT 등의 토큰으로 인증을 하는 방식을 stateless라고표현하는 모양이다. 반면 session을 사용해 DB를 조회하는 방식은 stateful한 모양이다.
그러니까 uuid를 사용하고 말고의 여부라기 보다는 Session을 사용하여 서버 측에서 사용자를 인증하느냐 마느냐의 문제인 듯 하다.

랜덤 스트링을 사용해서 매번 사용자 정보를 조회하는 작업의 비용이 더 큰지, 내용물이 들어 있는 JWT 토큰을 사용해서 발생하는 데이터 비용이 더 큰지 비교하면 됩니다
= 알라딘 eBook <Node.js 교과서 개정2판> (조현영 지음) 중에서

이제야 책에 실린 말이 좀 이해가 되었다.
JWT는 {Header, Payload, Signature}로 나뉘는데 payload나 header가 바뀌면 'Signature'가 해시값에 따라 크게 바뀌므로 아마 위변조가 불가능하다고 하는 듯 하다. 다만 내용물은 공개적이므로 민감한 내용은 실지 말라고 하는 듯 하다.

그럼에도 남는 질문

그럼에도 근본적으로 해결되지 않는 질문이 있다. 토큰을 통해서 관리하건 세션을 통해서 관리하건, 그것(사용자를 인증하는 정보)이 만약에 탈취되면 API를 그대로 이용할 수 있는 것 아닐까?
아마 그걸 방지하기 사용하려는 도메인을 별도로 저장하고 httpOnly라거나 secure 속성을 쿠키에 적용하는 걸까? 아래 블로그에 그와 비슷한 고찰이 써있기는 한데 아직 지식이 부족해서 완벽하게 이해하기는 어렵다.

웹 크롤링

책을 읽으면서 웹 크롤링(Web Crawling)에 대한 정의를 알게 되었다. 매번 파이썬과 웹크롤링를 강의한다는 광고를 보거나 종종 다른 분들의 사이드 프로젝트에 그와 같은 단어가 쓰여서 막연하게 그 뜻을 정의하고는 했다. 문자 그대로 '기다'라는 뜻이니 엉금엉금 정보를 수집하는가 보다라고 맥락적인 이해를 하고 있었다.

크롤링은 웹 사이트가 자체적으로 제공하는 api가 없거나 api 이용에 제한이 있을 때 사용하는 방법이라고 한다. 표면적으로 보이는 웹 사이트의 정보를 일정 주기로 수집해 자체적으로 가공하는 기술이라고 한다.

다만 원하는 정보 얻지 못하는 경우가 발생한다.
또한 법적인 문제도 일어날 수 있다고 한다.

서비스 제공자 입장에서는 크롤링을 당하면 웹 서버의 트래픽이 증가하여 서버에 무리가 가므로 api를 제공하는 편이 낫기도 하다.

profile
하던 일부터 끝내자

0개의 댓글