웹 환경에서 사용자와 시스템 사이에 데이터를 교환하기 위해서 HTTP 방식을 이용한다. HTTP통신은 요청과 응답에 의해 동작한다. 가장 큰 특징은 Stateless인데, 과거의 통신에 대한 내용을 알지 못한다는 의미이다. 따라서 매 통신 때 마다 필요한 모든 정보를 담아서 요청을 보내야하는 수고로움이 동반된다.
이러한 불편함을 타개하고자 일부 정보에 대해서 Stateful 상태를 유지할 필요성이 생기게 되는 것이다. 이를 위해 Session과 Cookie (또는 Token과) 같은 기술을 사용할 수 있다.
Cookie는 클라이언트의 컴퓨터에 저장되는 데이터 파일이다. Cookie에는 이름, 값, 만료 날짜/ 시간(저장기간), 도메인, 경로 정보 등으로 구성이 되어있다. Cookie는 하나의 도메인 당 20개를 가질 수 있으며, 1개 당 4Kbyte를 넘길 수 없다.
서버에서는 HTTP Response Header에 Set-Cookie 속성을 이용하여 클라이언트에 Cookie를 제공하여 저장하게 하고, 클라이언트는 HTTP Request에 저장된 Cookie를 함께 전달하여 이전의 통신에서 사용된 정보들을 파악할 수 있다.
또한, Cookie를 통해 사용자별로 다른 정보를 표시하는 것이 가능하고, 사용자의 행동과 패턴을 분석할 수 있기 때문에 최근 들어서 더욱 중요한 개념이 되었다.
쿠키 사용의 예
Session은 쿠키를 기반으로 하지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와는 다르게 서버측에서 관리한다.
동일한 클라이언트가 브라우저를 통해 웹 서버에 접속한 시점으로부터 브라우저를 종료하여 연결을 끝낼 때 까지 들어오는 일련의 Request를 하나의 상태로 보고, 그 상태를 일정하게 유지하여 클라이언트와 웹 서버가 논리적으로 연결된 상태를 뜻한다.
사용자에 대한 정보를 서버에 두기 때문에 쿠키보다 보안 면에서는 우수하나, 사용자가 많아질 수록 서버 메모리를 많이 차지하므로, 서버에 과부하를 주게되어 성능 저하의 요인이 된다.
세션 사용의 예
[Cookie와 Session을 이용한 인증 Flow]