Cookie
cookie의 정의
- 키 - 값 형태의 문자열로 브라우저에 저장되어 사용자를 인식하거나 데이터를 저장하는 용도
- 서버가 클라이언트에 정보를 전달할 때 저장하고자 하는 정보를 응답 헤더에 저장하여 전달한다.
등장 배경
- 서버에 요청할때 마다 사용자가 ID, PW를 통해 로그인을 해야하는 불편함이 있었다.
- Cookie는 사용자가 한번 로그인하면, 쿠키를 생성하고 저장하여 이후 요청은 로그인 없이 진행 할 수 있는 편의성을 제공해준다.
문제점
- cookie가 노출되었을때 ID, PW와 같은 중요한 정보들이 쉽게 노출된다.
- 웹 브라우저마다 Cookie에 대한 지원 형태가 다르기 때문에 브라우저간 공유가 불가능하다.
- Cookie의 사이즈는 4KB로 제한적이다
Session 방식
세션 인증 방식은 session id를 db에 저장하고 저장한 값을 cookie안에 session id를 넣어서 클라이언트로 보내는 방식이다. 이후 클라이언트는 요청마다 session id를 쿠키안에 넣어서 백엔드로 전달해준다.
이런 방식은 session id안에 중요한 정보가 담기는 것이 아니라 session id 값만 담겨있기 때문에 보안이 좋고 세션의 크기가 커도 네트워크 부하가 거의 없다.
반대로 말하면 session id를 db에 담아두고 있기 때문에 많은 요청이 한번에 들어오면 서버에 부하가 올 수 있다.
JWT 토큰 방식
session 방식의 경우 db를 사용하기 때문에 db에 부하가 간다는 단점이 있지만 jwt 토큰을 이용하면 그 부하를 어느정도 줄일수 있다 jwt토큰을 이용하여 유저를 인증하고 식별하기 위한 토큰 생성하고 사용하는 방식이다.
jwt 토큰은 헤더, 페이로드, 서명으로 나누어져 있다.
헤더에는 사용할 토큰타입과 해시함수가 표기 되어 있다.
페이로드에는 사용자 권한 정보와 데이터가 들어가 있다. - 여기에는 중요한 정보를 넣으면 안된다.
서명에는 (헤더 + 페이로드)와 서버가 갖고 있는 유일한 key 값을 합친 것을 헤더에서 정의한 알고리즘으로 암호화를 한다.
jwt의 장점으로는 db가 필요 없다. 또한 빠른 인증이 가능하고 확장성이 우수하다는 장점이 있다.
하지만 토큰의 길이가 길어 네트워크에 부화를 이르킬 수 있고 특정 토큰을 강제로 만료시키기 어렵다는 단점이 있다.
특정 토큰을 만료시키기 위해서 access token과 refresh token을 이용하여 blacklist 기법을 사용하는 방법도 있는데 blacklist기법을 사용할 경우 결국 refresh 토큰이 db에 저장되어야하기 때문에 session을 이용하는것과 별 차이가 없다는 문제점도 존재한다.
'Theory' 카테고리의 다른 글
DNS 개념과 동작 원리 (0) | 2023.11.10 |
---|---|
인터넷은 어떻게 동작하는가? (1) | 2023.11.09 |
WebSocket과 HTTP, SSE (1) | 2023.10.17 |
Django csrftoken (0) | 2023.08.08 |
클라이언트 - 서버 아키텍처 (0) | 2023.05.25 |