세션과 쿠키
우리가 사용하고 있는 웹 서비스들은 서버와 클라이언트(브라우저) 간의 정보를 교환을 위해 주로 HTTP 통신을 사용합니다. HTTP는 비연결성(Connectionless)와 무상태(Stateless)라는 특성을 가지기 때문에 클라이언트의 요청을 응답한 후에는 연결을 끊고, 클라이언트의 요청 정보를 기억하지 않습니다. 이러한 특성은 서버의 부담을 감소시켜서 더 많은 요청을 처리하게 해주지만 클라이언트의 인증, 상태 정보 등을 저장할 수 없는 문제가 생깁니다. 이러한 문제를 해결하기 위한 방법이 세션과 쿠키를 사용하는 것입니다.
쿠키(Cookie)는 클라이언트가 서버로 요청을 보내면 서버가 응답을 줄 때 특정 값이 담긴 쿠키를 클라이언트로 전송하고 쿠키는 브라우저에 Key-Value 형태로 저장 됩니다. 이후 서버로 재요청 시에 쿠키를 헤더에 실어서 함께 전송합니다. 이처럼 쿠키는 네트워크를 통해 전달되기 때문에 중간에서 탈취 될 수도 있는 취약점이 존재합니다. 그래서 탈취가 되어도 문제가 없는 정보를 쿠키로 사용하고 보안이 필요한 정보는 서버에 저장하는 Session을 사용합니다. 쿠키는 인증 이외에도 웹사이트를 이용하는 패턴, 통계자료 등을 수집하기 위한 용도로도 사용됩니다.
세션(Session)은 클라이언트(브라우저)의 인증정보를 클라이언트에 저장하는 것이 아니라 서버에 저장됩니다. 클라이언트가 서버로 최초 요청을 하면 서버는 웹 컨테이너 메모리의 세션 객체에 세션ID를 할당하고 응답을 줄 때 할당된 세션 ID를 쿠키로 클라이언트(브라우저)에게 전달해줍니다. 이 세션ID 값을 쿠키로 브라우저에 저장하고 재사용하게 됩니다. 그리고 클라이언트(브라우저)는 각각 별도의 세션이 생성되기 때문에 같은 PC에 Chrome, Explorer 등의 브라우저는 서로 다른 세션ID를 가지게 됩니다.
(naver에서 사용하는 쿠키와 세션 일부)
쿠키 종류는 세션 쿠키(Session Cookie)와 지속 쿠키(Persistent Cookie)가 있으며, 세션 쿠키는 브라우저가 종료될 때 함께 소멸되고, 지속쿠키는 유효시간이 지나면 자동 소멸됩니다.
쿠키는 클라이언트 당 최대 300개, 서버 도메인 하나당 최대 20개, 하나의 쿠키 값은 최대 4KB까지 저장할 수 있습니다.
댓글남기기