
웹의 통신 프로토콜인 HTTP는 connectionless, stateless 특성을 가진다. 이러한 특성 상 서버와 클라이언트가 통신할 때 계속해서 인증을 진행해야 한다는 단점이 있다.
이러한 단점을 개선하기 위하여 쿠키(Cookie)와 세션(Session)을 이용한다.
Connectionless & StatelessConnectionless - 비연결실제 요청을 주고 받을 때만 연결을 유지한다. 즉, 클라이언트의 대한 요청을 서버가 응답한 후 네트워크 연결을 끝맺는다
장점 : 서버의 부하와 자원 소비를 최소화할 수 있으며 여러 클라이언트와의 접속이 원활해진다.
단점 : 연결이 끊어지고나서 새로 연결될 때 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의 양이 많아질수록 서버에 부하가 커진다.