알고리즘 스터디 발표 자료
새롭게 알게 되거나 수정할 내용이 있을 경우 수월한 업데이트를 위해 블로그에 업로드합니다.
HTTP는 상태 비저장(stateless) 프로토콜이기 때문에 클라이언트의 상태를 기록하지 않는다. 따라서 웹 사이트를 다시 방문할 때 사용자를 식별할 방법이 없다.
반복되는 요청마다 새 응답을 보내게 되면 네트워크의 성능을 저하 시킬 수 있다. 그리고 HTTP 요청 간에 사용자의 데이터를 저장하여 사용자를 식별하고 요청들을 연결할 방법이 필요할 수 있다. 이렇게 클라이언트 상태가 필요할 경우 쿠키 또는 세션을 사용할 수 있다.
HTTP 쿠키, 온라인 쿠키, 인터넷 쿠키라고도 한다.
서버가 사용자의 웹 브라우저에 전송하는 작은 텍스트 파일
쿠키의 구성 요소로는 key, value, 유효 시간, 쿠키를 전송할 도메인과 경로 등이 있다.
쿠키에 저장된 정보는 누구나 읽고 이해할 수 있는 텍스트 형식으로 클라이언트 측에 보관된다. 따라서 안전하다고 보기 어렵다.
주로 세 가지 목적을 위해 사용한다.
사용자가 웹사이트를 처음 방문하면,
쿠키는 요청들 간에 데이터를 전달하는 데에 적절한 방법이라고 할 수 있다. 하지만 클라이언트 측에서 데이터를 읽거나 수정하기를 원하지 않는다면, 쿠키의 크기가 너무 크다면 좋은 방법은 아니다.
이러한 쿠키의 트래픽 문제와 보안적 이슈를 위해 등장한 것이 세션이다.
데이터를 쿠키 형태로 클라이언트 측에 저장하는 게 아니라 서버 측에 저장하도록 하여 이 문제를 해결할 수 있다. 즉, 서버에서 특정 사용자의 세션 토큰을 쿠키로 패키징하여 사용자의 브라우저로 보내고 각 요청에 대해 클라이언트 측에서 서버로 세션 토큰을 포함하는 쿠키를 보내 자신을 식별하게 하는 것이다.
쿠키와 세션의 동작 원리는 비슷하지만, 세션을 사용하는 것이 항상 더 나은 것은 아니다. 세션을 사용하게 되면 서버에 데이터를 저장하는 것이므로 세션의 양이 많아질수록(동시 접속한 사용자 수가 많아질수록) 서버에 부담이 될 수 있다. 따라서 어떤 데이터가 어디에 저장되는 게 적절한지 경우에 따라 판단하는 것이 좋다.
아래는 쿠키와 세션의 차이점을 간략히 정리한 표이다.
쿠키 | 세션 |
---|---|
로컬 컴퓨터에 있는 클라이언트 측 파일 | 서버 측 파일 |
사용자가 설정한 lifetime에 의해 종료 (유효시간 이내라면 브라우저가 종료되어도 유지됨) | 사용자가 브라우저를 종료하거나 프로그램에서 로그아웃 할 때 종료 |
일정량의 정보만 저장 가능(최대 4KB) | 서버가 허용하는 한 무제한의 정보를 저장 가능 |
보호/보안되지 않음 | 쿠키에 비해 안전함 |
비교적 빠른 속도 | 비교적 느린 속도 |
텍스트 파일에 데이터를 저장 | 암호화된 형식으로 데이터를 저장 |