웹의 통신 프로토콜인 HTTP
는 connectionless
, stateless
특성을 가진다. 이러한 특성 상 서버와 클라이언트가 통신할 때 계속해서 인증을 진행해야 한다는 단점이 있다.
이러한 단점을 개선하기 위하여 쿠키(Cookie)와 세션(Session)을 이용한다.
Connectionless & Stateless
Connectionless
- 비연결실제 요청을 주고 받을 때만 연결을 유지한다. 즉, 클라이언트의 대한 요청을 서버가 응답한 후 네트워크 연결을 끝맺는다
장점 : 서버의 부하와 자원 소비를 최소화할 수 있으며 여러 클라이언트와의 접속이 원활해진다.
단점 : 연결이 끊어지고나서 새로 연결될 때 TCP/IP 연결을 새로 맺어야 하므로 3-way handshake에 따른 오버헤드가 존재한다.
Stateless
- 무상태요청에 대한 응답이 끝난 후 네트워크 연결을 끝맺을 때 상태를 유지하지 않는다.
장점 : 요청에 대해 응답하는 서버를 바꾸어도 요청에서 필요한 데이터를 모두 전송하므로 서버 확장에 용이하다.
단점 : 요청으로 서버에 보내는 데이터의 양이 많아진다. 또한 서버와 연결될 때마다 인증을 다시 해주어야 한다.
Cookie
웹 브라우저를 통해 사용자가 서버에 요청을 하면 브라우저는 브라우저에 저장되어 있는 쿠키를
Request Header
에 추가하여 서버로 전송한다.
Cookie
작동 원리Cookie
장점보안 위협이 없는 데이터에 한해서 서버 대신 브라우저에 저장하여 서버의 자원을 절약할 수 있다.
페이지가 변경되어도 사용자의 정보를 계속해서 쿠키를 통해 서버에 전송하므로 사용자 인증이 유지될 수 있다.
Cookie
단점보안에 취약하다. 인증 상태를 쿠키에 저장하게 되면 보안이 취약한 쿠키 특성 상 쿠키를 조작하여 임의의 사용자로 인증할 수 있게 된다.
Request Header
에 실어서 보내므로 쿠키의 크기가 커진다면 네트워크의 부하가 커지게 된다.
저장할 수 있는 개수와 용량이 제한되어 있다. => 총 300개 / 도메인 당 20개 / 쿠키 하나 당 4KB(4096Byte) 까지 저장 가능
Session
세션은 서버에 저장한다. 데이터를 서버에 저장하고 이에 해당하는
Session ID
를 만들어서 응답하면 브라우저는Session ID
를 쿠키에 저장한다.쿠키는 로컬(클라이언트)에 저장하고 세션은 서버에 저장한다고 할 수 있다.
Session
작동 원리클라이언트가 서버에 요청했을 때 클라이언트에 대한 데이터를 서버에 저장하고 세션 아이디를 만들어 응답한다.
브라우저는 세션아이디를 쿠키에 저장하고 다시 요청 시 세션 아이디를 서버에 전달하면 서버는 이에 해당하는 데이터로 인증 상태를 확인한다.
Session
장점정보 자체가 서버에 저장되어있어 쿠키에 비해 비교적 안전하다.
용량 제한이 없기 때문에 서버의 용량이 충분하다면 많은 데이터를 저장할 수 있다.
Session
단점Session
의 양이 많아질수록 서버에 부하가 커진다.