하루에 하나씩 배우는 컴퓨터 사이언스 개념: 쿠키와 세션 이해(HTTP 프로토콜)
하루에 하나씩 배우는 컴퓨터 사이언스 개념 시리즈에서 오늘은 '쿠키와 세션 이해(HTTP 프로토콜)'에 대해 자세히 알아보겠습니다. HTTP 프로토콜에서의 쿠키와 세션 개념을 중심으로, 웹사이트에서 사용자 인증과 관련된 정보가 어떻게 관리되는지 깊이 있게 살펴보겠습니다.
1. 쿠키(Cookie) 소개
HTTP는 Stateless(무상태) 프로토콜입니다. 이 말은 서버가 클라이언트의 상태를 저장하지 않는다는 것을 의미합니다. 그런데 웹사이트를 사용하면서 로그인 상태 유지, 장바구니 기능 등 사용자의 상태를 유지해야 하는 경우가 많습니다. 이런 문제를 해결하기 위해 등장한 것이 바로 '쿠키'입니다.
쿠키는 클라이언트(일반적으로 웹 브라우저)에 저장되는 작은 텍스트 파일입니다. 각각의 쿠키에는 이름, 값, 만료일시, 경로 등의 정보가 포함됩니다. 서버에서 클라이언트로 응답을 보낼 때 'Set-Cookie' 헤더를 사용하여 쿠키 정보를 전달하고, 이 후 클라이언트가 다시 요청을 보낼 때마다 해당 쿠키 정보를 함께 전송합니다.
서버 입장에서 볼 때, 처음 요청한 클라이언트와 다음 요청한 클라이언트가 같은지 구분할 수 있는 유일한 방법은 바로 이러한 쿠키입니다. 그래서 로그인 상태 유지나 장바구니 같은 기능을 구현할 때도 주로 쿠키를 활용합니다.
2. 세션(Session) 소개
세션도 마찬가지로 사용자의 상태 정보를 저장하는 기능입니다만, 저장 위치와 목적에 차이가 있습니다. 세션 정보는 서버 내부에 저장되며, 주요한 목적은 로그인한 사용자 인증 및 권한 관리 등입니다.
클라이언트가 처음으로 서버에 접속하여 로그인을 하면 서버에서 고유한 세션 ID를 생성하고 이 값을 클라이언트(브라우저)에게 전달합니다 (일반적으로 이 과정에서 쿠키 활용). 그 후 클라이언트는 요청할 때마다 해당 세션 ID 값을 함께 보내어 자신을 인증합니다.
세션은 보안 상의 이유로 사용되며, 특히 로그인과 관련된 정보는 민감한 정보이기 때문에 클라이언트 쪽보다는 서버 쪽에서 관리하는 것이 안전합니다. 따라서 로그인 정보와 같은 민감한 데이터를 저장하고 관리하는데 주로 사용됩니다.
3. 실제 예시를 통한 이해
웹 브라우저에서 어떤 웹 페이지(URL)에 로그인하는 과정을 자세히 알아보겠습니다.
1) Request 발생:
먼저 사용자가 아이디와 비밀번호를 입력하고 '로그인' 버튼을 클릭하면, 브라우저(클라이언트)는 해당 웹 서버에 POST 방식의 HTTP request를 보냅니다. 이 때 request 메시지는 메서드(POST), URL(로그인 처리 주소), 그리고 필요한 헤더 정보들과 함께 사용자가 입력한 데이터를 본문(Body)에 담아 보낼 것입니다.
2) Response 반환:
웹 서버(Server)는 받은 request 정보로 로그인 처리 후 결과를 HTTP response 메시지로 클라이언트에게 보낼 것입니다. 만약 로그인이 성공적으로 처리되었다면, 상태 코드(Status Code) '200'과 함께 성공 메시지와 쿠키 및 세션 ID 정보가 담긴 'Set-Cookie' 헤더가 포함될 것입니다.
클라이언트 입장에서 볼 때, 이 응답을 받으면 Set-Cookie 헤더의 내용대로 쿠키 저장소에 쿠키값을 저장하게 됩니다. 만약 다음번 요청 시 동일한 도메인으로 요청한다면, 미리 저장해 두었던 쿠키값을 가져와서 요청 헤더의 Cookie 필드 값으로 설정하게 됩니다. 이렇게 하면 서버는 클라이언트가 이전에 로그인했던 클라이언트와 동일한 클라이언트임을 알 수 있습니다.
4. 결론
오늘 배운 내용으로 '쿠키와 세션 이해(HTTP 프로토콜)'에 대해 자세히 알아보았습니다. 쿠키와 세션은 인터넷상에서 사용자의 상태 정보를 유지하고 관리하는 중요한 기능입니다.
HTTP 프로토콜은 우리의 일상생활과 밀접하게 연결되어 있으며, 많은 웹사이트에서 쿠키와 세션을 활용하여 개별 사용자의 로그인 상태, 장바구니 등의 기능을 제공합니다. 따라서 쿠키와 세션을 이해하는 것은 웹사이트 작동 방식과 관련된 깊은 이해를 위해서 필수적입니다.
쿠키는 클라이언트에 저장되는 반면, 세션은 서버에 저장됩니다. 또한, 쿠키는 사용자가 직접 삭제하지 않는 한 계속 유지되지만, 세션은 일정 시간 동안 통신이 없으면 만료되기도 합니다. 이런 차이점들로 인해 각각 다른 상황에서 활용됩니다.
하지만 보안성과 프라이버시 문제 때문에 최근에는 쿠키 대신 Local Storage나 Session Storage 같은 웹 스토리지를 더 많이 사용하고 있습니다. 그러나 여전히 쿠키와 세션도 널리 사용되고 있으므로 이들에 대한 이해는 필수적입니다.