쿠키와 세션
쿠키와 세션은 웹 개발에서 사용되는 두 가지 주요 기술로, 사용자 인증 및 상태 유지 등과 같은 웹 통신간 유지하려는 정보를 저장하는 목적으로 사용된다.
이는 웹사이트를 이용할 때 사용하는 HTTP 프로토콜이 stateless한 속성을 가지고 있기때문이다.stateless 는 상태정보를 유지하지않고, 서버로 가는 모든 요청이 이전의 요청과는 독립적으로 다루어진다는 뜻이다.
즉, HTTP 프로토콜은 각각의 요청이 이전 요청과 독립적으로 처리되는 stateless(무상태) 방식이기 때문에 서버는 요청을 보낸 사용자에 대한 기억이 없다. 따라서, 서버에 보내는 각각의 요청마다 사용자의 신원을 알려줘야 한다.
이런 상태 정보 유지를 위해 사용하는 방법중 하나가 쿠키와 세션을 이용하는 것이다.
이번 글에서는 쿠키와 세션에 대해서 알아보고자 한다.
쿠키
쿠키(Cookie)는 웹 브라우저가 웹 서버에게 정보를 전달하기 위한 작은 매개체이다.
이 정보는 클라이언트(브라우저) 측에서 저장되며, 웹 서버는 이를 읽고 쓸 수 있다. 주로 사용자의 상태를 추적하고 웹 사이트 간의 상호 작용을 개선하기 위해 사용된다.
동작 순서
- 서버에서 쿠키 생성: 서버는 클라이언트에게 응답을 반환할 때 쿠키를 생성하고, HTTP 헤더에 쿠키 정보를 포함하여 클라이언트에게 전송한다.
- 클라이언트 저장: 브라우저는 서버에서 받은 쿠키를 로컬에 저장한다. 이때, 쿠키는 브라우저의 쿠키 저장소에 저장됩니다. 쿠키에는 이름, 값, 만료 날짜 및 도메인 등의 정보가 포함된다.
- 이후 요청과 함께 전송: 클라이언트가 서버에 새로운 요청을 보낼 때마다, 해당 요청에는 해당 서버로부터 받은 쿠키가 함께 전송된다. 이는 HTTP 요청의 헤더에 쿠키 정보가 포함되어 전송된다.
- 서버에서 쿠키 읽기: 서버는 클라이언트로부터 받은 요청의 쿠키 정보를 읽어서 사용합니다. 이를 통해 서버는 클라이언트의 이전 상태나 활동을 파악하고, 필요에 따라 동적으로 응답을 생성할 수 있습니다.
- 쿠키 변경 또는 업데이트: 서버는 필요한 경우 클라이언트의 쿠키를 변경하거나 업데이트할 수 있다. 이를 통해 사용자의 상태를 관리하거나 새로운 정보를 클라이언트에게 전달할 수 있다.
특징
- 상태 유지: 쿠키는 사용자의 상태 정보를 유지하는 데 사용된다. 예를 들어, 사용자가 웹 사이트에 로그인할 때 쿠키를 사용하여 로그인 상태를 유지할 수 있다.
- 유연한 만료: 쿠키는 만료 기간을 설정할 수 있다. 일부 쿠키는 세션이 종료될 때(브라우저가 닫힐 때) 만료되고, 일부는 특정 기간 동안 유지된다.
- 도메인 및 경로 제한: 쿠키는 특정 도메인이나 경로에서만 유효할 수 있다. 이것은 쿠키를 사용하여 동일한 도메인의 여러 서브도메인 간에 정보를 공유하거나, 특정 경로에서만 쿠키를 사용할 수 있게 하는 데 사용다.
- 보안 취약점: 쿠키는 보안 취약점을 갖고 있을 수 있다. 예를 들어, 쿠키를 사용하여 사용자의 개인 정보를 저장하는 경우, 이를 악의적으로 사용할 수 있는 보안 위협이 있을 수 있다. 따라서 쿠키에 민감한 정보를 저장할 때는 보안 문제에 주의해야 한다.
- 용량 제한: 각 브라우저는 쿠키의 용량 제한을 가지고 있다. 이러한 제한을 초과하면 추가 쿠키가 저장되지 않는다.
사용예시
- 로그인 창의 ID 부분을 자동완성
- 웹사이트의 언어 변경
- 공지 메시지를 하루 안 보기
- 쇼핑몰 사이트의 로그인 안한채로 물건의 장바구니
위와같은 사용자의 편의를 위하되 지워지거나 조작되거나 노출이 있더라도 큰일은 없을 정도의 정보들을 브라우저에 저장하는 것에 사용된다.
세션
세션은 클라이언트와 서버 간의 상태를 유지하고 관리하는 데 사용된다. 세션은 보통 사용자의 로그인 상태, 세션 식별자, 등과 같은 정보를 저장하고, 이를 통해 사용자에 대한 상태를 추적하고 유지한다.
쿠키와의 큰 차이점은 쿠키는 정보가 사용자 브라우저에 저장되는 반면에, 세션은 서버에 저장한다는 점입니다.
특징
- 일시적인 유지: 세션은 일정 기간 동안 유지되며, 사용자의 브라우저가 닫히거나 세션이 만료되면 종료된다. 이것은 사용자가 웹 애플리케이션과 상호 작용하는 동안 유지되는 임시적인 상태를 유지함을 의미한다.
- 고유성: 각 세션은 고유한 세션 식별자(Session ID)를 갖는다. 이 식별자는 사용자를 식별하고 그들의 상태 정보를 관리하는 데 사용된다.
- 서버 측 저장: 세션 데이터는 일반적으로 서버 측에 저장된다. 이는 사용자의 브라우저를 통해 전달되는 쿠키와 달리 서버에 보안적으로 더 안전하게 저장된다.
사용예시
- 사용자 인증 및 로그인 관리: 사용자가 웹 애플리케이션에 로그인하면, 세션을 사용하여 사용자의 로그인 상태를 추적합니다. 세션에 사용자의 인증 정보를 저장하고, 이를 통해 사용자가 로그인한 상태인지 여부를 확인하여 보호되는 페이지에 액세스할 수 있도록 한다.
- 사용자 상태 추적: 세션은 사용자의 활동과 상태를 추적하는 데 사용된다. 예를 들어, 사용자가 장바구니에 상품을 추가하거나 웹 사이트 내에서 작업을 수행하는 동안 세션에 해당 정보를 저장하여 이후에도 사용자의 활동을 추적하고 유지할 수 있다.
- 개인화된 콘텐츠 제공: 세션을 사용하여 사용자의 환경 설정, 언어 설정, 테마 등과 같은 사용자별 설정을 저장하고 이를 통해 사용자에게 맞춤형 콘텐츠를 제공할 수 있다.
- 관리자 세션: 관리자가 웹 애플리케이션에 로그인하면, 세션을 사용하여 관리자의 로그인 상태를 추적하고, 관리자 권한으로 특정 기능에 액세스할 수 있도록 한다.
사용자나 다른 누군가에게 노출되서는 안 되는 정보들은 세션으로 서버 안에서 다루어진다.
쿠키와 세션을 이용한 인증
브라우저가 서버에게 '해당 사용자의 권한 부여'를 요청하면, 서버는 해당 사용자의 세션(세션 ID)을 만들어 낸다. 그리고 세션 ID는 '쿠키(Cookie)'로 사용자 브라우저에 보내지고 저장된다. 해당 사용자가 다른 페이지를 열람할 때마다 브라우저에 저장된 세션 ID가 함께 서버에 전송되며 세션DB에서 확인 후 인증을 유지한다. 쿠키는 단순히 세션 ID를 전송하는 수단에 불과하며, 사용자의 중요한 정보는 전적으로 서버쪽에 저장되어 있다.
결론
쿠키로 노출시켜서는 안 될 정보도 있고 세션을 남발하면 접속자가 많을 때 서버에 부하가 걸리는 점이 있기 때문에 웹 개발자들은 사이트를 만들 때 쿠키에 저장할지 세션에 저장할지 적절한 판단을 내릴 수 있어야한다.
'knowledge > computer science' 카테고리의 다른 글
임베디드 시스템, 범용 컴퓨팅 시스템 (0) | 2024.02.26 |
---|---|
프록시 서버: 포워드 프록시와 리버스 프록시 (0) | 2024.02.14 |
[네트워크] TCP와 UDP (1) | 2024.02.06 |
[DB] 여러 트랜잭션이 경쟁하면 생기는 문제 (0) | 2024.02.01 |
[OS][Java] 인터럽트(Interrupt) interrupt() 함수 사용하기 (0) | 2024.01.29 |