Cookie vs Session
생각의 흐름
쿠키와 세션을 사용하는 이유는 HTTP의 connectionless(비연결성)과 stateless(비상태성)라는 특징 때문
클라이언트가 요청(request)을 보냈을 때 그 요청에 맞는 응답(response)을 보낸 후 연결을 끊고, 서버는 클라이언트에 대한 상태 정보를 유지하지 않는다.
쿠키의 생성과 저장은 구현에 따라 다르지만 원리는 동일
1. 서버가 클라이언트로부터 요청을 받았을 대, 클라이언트에 관한 정보를 토대로 쿠키를 구성
2. 서버는 클라이언트에게 보내는 응답의 header에 쿠키를 담아 보낸다.
3. 클라이언트가 응답을 받으면, 브라우저는 쿠키를 쿠키 디렉터리에 저장한다.
쿠키는 클라이언트(브라우저) key-value 쌍으로 로컬에 저장되는 데이터 파일. 유효시간 내에서는 브라우저가 종료되어도 계속 유지된다. 서버에서 response header에 set-cookie 속성을 사용해서 클라이언트에 쿠키를 만들고, 사용자가 따로 작업을 하지 않아도 브라우저가 쿠키를 request header에 담아서 서버에 전송한다.
세션은 기본적으로 쿠키를 이용하여 구현이 된다. 클라이언트를 구분하기 위해 각 클라이언트에게 session ID를 부여하고 클라이언트는 쿠키에 session ID를 저장해 둔다. 사용자 정보를 브라우저에 저장하는 쿠키와 달리 세션은 서버측에 저장하여 관리한다. 세션은 유효시간을 두어 일정시간 응답이 없다면 끊을 수 있고, 브라우저가 종료될 때까지 인증상태를 유지할 수 있다.
사용자 정보를 서버에 두기 때문에 쿠키보다 보안은 좋지만 서버 자원을 차지하기 때문에 서버에 과부하를 줄 수 있고 성능 저하의 요인이 될 수 있다.
캐시도 사용자 데이터를 저장한다. 리소스 파일들의 임시 저장소. 다시 사용될 확률이 있는 데이터들을 빠르게 접근 가능한 저장소에 저장한다. 같은 웹 페이지에 접속할 때 사용자의 PC에서 로드하므로 서버를 거치지 않아도 되어 페이지 로딩 속도 개선이 가능하지만 보안에 취약하다.
한 줄 정리
쿠키와 세션 사용 이유
HTTP의 비연결성과 비상태성이라는 특징 때문에 쿠키와 세션을 사용합니다.
클라이언트가 요청(request)을 보냈을 때 요청에 맞는 응답(response)을 보낸 후 연결을 끊고, 서버는 클라이언트에 대한 상태 정보를 유지하지 않습니다. 따라서 페이지 이동시마다 로그인을 유지하거나 팝업창의 다시 보지 않기 설정 등을 하기 위해서는 쿠키나 세션이 필요합니다.
쿠키 vs 세션
쿠키는 클라이언트(브라우저)에 정보를 저장하고 text 형식입니다. 브라우저가 종료되어도 유지가 가능하고 세션보다 빠르나 보안에 취약합니다.
세션은 웹서버에 정보를 저장하고 object 형식입니다. 브라우저 종료 시 삭제되고, 쿠키보다 느리나 보안이 좋습니다.
쿠키 사용 이유
세션이 웹서버에 정보를 저장하기 때문에 보안에는 좋지만, 서버 자원을 차지하기 때문에 서버에 과부하를 주어 성능저하의 요인이 될 수 있어 쿠키를 사용합니다.
세션 vs 캐시
사용자 데이터를 저장하는 역할을 합니다.
캐시는 사용자 컴퓨터에 데이터를 저장하고 서버 요청 시 서버에 전달합니다. 로딩 속도 개선이 가능하지만 보안에 취약합니다.
세션은 서버에 저장하고 캐시에 비해 보안성이 좋습니다.