시작하기 전에 HTTP에 대해서 간략히 설명해보면 HTTP는 HyperText Transfer Protocol
의 약자로 웹 상에서 데이터를 주고받기 위한 프로토콜(규정)이다.
HTTP는 클라이언트가 요청을 보내고 응답을 받으면 연결을 끊어버리는 특징(비연결성)과, 연결을 끊는 순간 상태 정보를 유지하지 않는 특징(비상태성)이 있다.
예를 들어 상태 정보가 유지되지 않으면 로그인 후 페이지를 이동할 때마다 로그인을 다시 해야하는 일이 발생할 수 있다. 따라서 이를 보완하기 위해 쿠키를 사용한다.
"쿠키(Cookie)는 웹 사이트에서 사용자의 컴퓨터나 기기에 저장되는 작은 데이터 조각이다."
쿠키는 name=value
형식의 문자열 데이터 묶음이다. 이 데이터 조각은 웹 브라우저를 통해 서버로부터 전송되고, 웹 사이트가 사용자를 식별하고 상태 정보를 기억하는데 사용된다.
쿠키는 웹 사이트에서 서버로 요청(Request)과 응답(Response)이 이루어질 때 HTTP 헤더를 통해 생성, 저장, 전송되며, 사용자의 컴퓨터나 기기에 로컬로 저장된다.
그 후 해당 웹 사이트를 재방문할 때마다 웹 브라우저는 저장된 쿠키를 서버로 다시 전송하여 사용자를 식별하거나 이전 상태 정보를 가져올 수 있다.
HTTP 헤더(HTTP Header)와 쿠키 헤더(Cookie Header)
HTTP 헤더는 서버와 클라이언트 간의 HTTP 요청과 응답 메세지에 다양한 정보가 포함된다.
Host(요청자의 호스트명, 포트번호), User-Agent(요청자의 소프트웨어 정보), Accept(요청자가 원하는 미디어의 타입 우선순위), cookie(서버에 의해서 이전에 저장된 쿠키를 포함시키는 속성) 등 매우 많은 속성 정보를 가지고있다.쿠키 헤더는 웹 브라우저와 웹 서버 간에 쿠키 정보를 전달되는데 사용되는 특정 유형의 HTTP 헤더이다.
세션은 웹의 상태 정보를 클라이언트가 아닌 서버에 저장하기 때문에 쿠키보다 보안적으로 안전하다고 볼 수 있다. 노출되면 안되는 정보들은 세션으로 서비스 제공자가 직접 관리하는 것이 좋다.
하지만 너무 많으면 서버에 부담이 갈 수 있다.
쿠키는 사용자의 편의를 위한 것이고, 클라이언트 측에 저장되기 때문에 서버에 부하를 덜 주고 효율적으로 관리할 수 있다.
따라서 일반적으로 민감한 정보를 다룰 때는 세션을 사용하고, 사용자 설정과 같은 간단한 정보를 저장하고 싶을 때는 쿠키를 사용한다.
쿠키 헤더는 위에서도 잠깐 나왔지만 한번 더 적어보면 HTTP 요청이나 응답에서 사용되는 헤더 중 하나이며, 웹 브라우저는 쿠키 헤더를 사용하여 쿠키를 서버로 전송하고, 서버는 쿠키를 클라이언트에게 설정하거나 수정하는 데 활용한다.
쿠키 요청 헤더는 클라이언트(웹 브라우저)가 웹 서버에게 요청을 보낼 때, 이전에 서버로부터 받았던 쿠키들을 함께 전송하기 위해 사용된다.
Cookie: 키=값; 키=값; ...
위의 코드와 같이 Cookie
속성은 클라이언트가 이전에 받았던 쿠키들을 전송하는 데 사용된다. 여러 개의 쿠키가 있을 경우 세미콜론으로 구분하여 하나의 문자열로 표현한다.
쿠키 응답 헤더는 웹 서버가 클라이언트에게 쿠키를 설정하거나 수정하라고 명령하는 응답 헤더이다.
F12
-> Application
-> Cookies
를 통해 현재 적용되는 속성을 볼 수 있다.
서버는 HTTP 응답 헤더에 Set-Cookie
헤더를 포함하여 클라이언트에게 쿠키를 전송한다. 응답 헤더에서 주요한 속성들은 다음과 같다.
Set-Cookie:키=값;
등 다양한 속성들이 존재한다.
이러한 속성들을 적절하게 설정하여 쿠키를 보안적으로 안전하게 사용하고, 사용자와 서버 간의 상태를 유지하며 사용자 경험을 개선하는 데 활용할 수 있다.
보안 요건에 맞게 쿠키의 속성을 설정하는 것이 중요하다.