랜덤CS 시리즈는 CS에 관한 지식을 분야를 특정하지 않고 무작위로 산출하여 공부하고 작성하는 시리즈입니다.
우선 쿠키와 세션에 대해서 다루기 전에 우리가 사용하고 있는 HTTP의 특징에 대해 알아야한다. HTTP는 connectionless(비연결성)라는 특징을 가진다. connectionless는 클라이언트의 요청에 대해 서버가 응답을 마치면 맺었던 연결을 끊어 버리는 특징이다. 따라서 서버는 클라이언트가 누구인지 매번 확인하는 과정이 필요하다. 이 과정에서 자원의 추가적으로 소모되기 때문에 이를 보완하기 위해 쿠키와 세션을 사용한다.
쿠키란 클라이언트에 저장되는 키와 값이 들어있는 작은 데이터 파일이다. 클라리언트에는 총 300개까지 쿠키를 저장할 수 있으며, 하나의 도메인당 최대 20개의 값만 가질 수 있다. (쿠키의 크기는 4KB를 넘지 못한다.)
쿠키는 대략적으로 다음과 같은 정보들이 포함된다.
쿠키의 작동 과정은 다음과 같다. 우선 사용자가 웹사이트(서버)에 접속하면, 브라우저(클라이언트)는 해당 웹사이트로 요청을 보낸다. 웹사이트는 사용자의 브라우저에 응답과 함께 쿠키를 전송한다. 이때, 쿠키는 HTTP 헤더에 포함되어 전송된다. 브라우저는 쿠키를 받아서 사용자의 컴퓨터에 저장한다. 쿠키는 브라우저가 제공하는 쿠키 저장소에 저장되며, 일반적으로 텍스트 파일 형식으로 저장된다. 이후로는 사용자가 동일한 웹사이트를 방문할 때마다, 브라우저는 저장된 쿠키를 웹사이트로 자동으로 전송한다. 이를 통해 웹사이트는 이전에 발생하였던 클라이언트와 서버 사이의 상호작용 및 정보를 알 수 있다. 웹사이트가 쿠키를 받아 해당 쿠키를 분석하면, 해당 정보를 사용하여 사용자를 식별하거나 사용자 맞춤 경험을 제공한다. 만약 더 이상 쿠키가 존재하지 않는다면(사용자가 삭제했거나 만료된 경우) 해당 쿠키는 더 이상 전송되지 않고 폐기된다.
세션이란 웹 애플리케이션에서 사용자의 상태를 유지하고 관리하기 위한 개념이다. 세션은 사용자가 웹사이트에 접속하여 로그인하는 순간부터 로그아웃할 때까지의 시간 동안의 상태를 나타낸다. 세션은 보통 서버 측에서 관리되며, 사용자 식별, 데이터 저장 및 보안을 위해 사용된다.
세션의 작동 과정은 다음과 같다. 우선 사용자가 웹사이트(서버)에 접속하면, 브라우저(클라이언트)는 서버에 요청을 보낸다. 서버는 클라이언트의 요청을 받으면, 세션 식별자를 확인한다. 서버는 세션 식별자를 기반으로 세션의 존재 여부를 확인한다. 만약 세션이 존재하지 않는다면, 새로운 세션을 생성한다. 이후 서버는 해당 세션에 대한 사용자의 식별 정도, 세션에 관련된 변수 등의 데이터를 처리한다. 서버는 이에 대한 클라이언트에게 세션 식별자를 포함하여 응답을 보낸다. 일반적으로 이 식별자는 쿠키로 설정되어 다음 요청 때에도 세션을 식별하는 데 사용된다. 클라이언트가 다음 요청을 보낼 때, 세션 식별자는 쿠키를 통해 서버로 전송된다. 서버는 세션 식별자를 확인하여 이전 상태를 유지하고 필요한 작업을 수행한다. 사용자의 로그인 상태 유지, 데이터 저장, 인증 등이 세션을 통해 이루어진다. 세션은 일정 시간 동안 유효하기 때문에, 클라이언트의 비활동 시간이 일정 시간 이상 지속되면 세션은 만료되며 이후 서버에서 삭제된다.
얼핏보면 쿠키와 세션은 웹에서 사용자 상태를 관리하는 동일한 역할을 하고 있다고 보이지만, 중요한 차이점들이 존재한다.
쿠키는 클라이언트(웹 브라우저)에 저장되고, 세션은 서버 측에 저장된다. 쿠키는 클라이언트 측에 파일이나 메모리에 저장되어 클라이언트가 다시 방문할 때 전송된다. 반면, 세션은 서버 측에 세션 객체 또는 데이터베이스 등으로 저장되며, 클라이언트는 세션 식별자를 통해 해당 세션에 접근한다.
쿠키는 클라이언트 측에서 사용되는 작은 데이터 조각이다. 쿠키는 텍스트 형식으로 제한된 용량을 가지며(4KB 이하), 주로 선호도, 설정, 사용자 식별 등의 작은 정보를 저장한다. 세션은 클라리언트의 상태를 관리하기 위한 데이터 저장소로 사용되며, 서버 측에서 관리되는 세션 데이터에는 더 많은 정보를 저장할 수 있다.
쿠키는 클라이언트에 저장되기 때문에, 클라이언트가 쿠키 데이터에 접근할 수 있다. 따라서 쿠키에 중요한 개인 정보를 저장할 때 보안 문제가 발생할 수 있다. 반면, 세션은 서버에 저장되고 클라이언트에는 세션 식별자만 전달되므로, 클라이언트는 세션 데이터에 직접 액세스할 수 없다. 이러한 특징 때문에 세션은 보안성이 조금 더 높다.
쿠키는 설정된 만료 기간 또는 사용자가 수동으로 삭제하기 전까지 지속된다. 세션은 보통 사용자의 활동이 종료되거나 일정 시간 동안 비활동 상태가 지속되는 경우 만료된다. 만료 시간이 되면 서버에서 해당 세션을 삭제한다.
쿠키는 주로 사용자의 선호도, 설정, 로그인 상태 등을 유지하고 추적하기 위해 사용된다. 세션은 사용자의 로그인 상태, 장바구니 정보, 인증 및 상태 관리 등을 위해 사용된다.
세션을 메인으로 쿠키는 세션을 서포트하는 용도로만 사용하면 좋겠지만, 세션을 메인으로 사용하기에는 서버에 주는 부담이 상당하다. 세션은 사용자의 수만큼 서버의 메모리를 사용하기 때문에 쿠키와 세션의 용도와 특징을 잘 파악해서 알맞게 사용하는 것이 중요하다.
글이 잘 정리되어 있네요. 감사합니다.