일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- web
- 세로메뉴바
- 렛츠기릿자바스크립트
- 자바스크립트
- 코딩독학
- 웹디실기
- 생활코딩
- CSS
- jQuery
- 웹디자인기능사실기
- 슬라이드전환
- 프론트엔드
- 비전공자
- Supabase
- JS
- 웹퍼블리셔
- react
- 리액트
- JavaScript
- 웹디자인기능사
- 연산자
- 타입스크립트
- PROJECT
- HTML
- 정보처리기사
- git
- 깃
- 실기
- github
- 코드공유
- Today
- Total
코딩하는라민
[Web] 쿠키(Cookie)와 세션(Session) 이란? 본문
[Web] 쿠키(Cookie)와 세션(Session) 이란?
🧶 HTTP(Hyper Text Transfer Protocol)
세션과 쿠키는 HTTP 프로토콜과 관련이 아주 깊다.
HTTP 는 웹에서 데이터를 교환하기 위한 통신 규약이다.
세션과 쿠키는 HTTP 프로토콜을 기반으로 동작하며, 웹 개발에서 상태 정보를 유지하고 사용자를 식별하기 위해 사용한다.
HTTP 프로토콜은 기본적으로 상태를 유지하지 않는 Stateless 프로토콜이다. 즉 서버는 클라이언트의 각 요청을 독립적으로 처리하고 요청 간의 연관성을 알지 못한다. 이로 인해 쿠키와 세션이 필요해지는 것이다!
🧶 Cookie 란?
쿠키(Cookie)는 클라이언트 측에서 상태 정보를 저장하는 작은 데이터 조각이다.
서버는 클라이언트에게 응답을 보낼 때 쿠키를 함께 전송하고, 클라이언트는 이 쿠키를 저장해 두었다가 다음 요청 시에 서버로 전송한다. 즉 쿠키는 클라이언트 측에 저장한 뒤에 웹 서버가 클라이언트의 웹 브라우저에서 쿠키를 읽어서 사용한다.
쿠키는 클라이언트의 로컬 브라우저에 저장되며, 이름-값 쌍으로 구성된다.
쿠키는 만료 시점을 설정하여 일정 기간 동안 유지될 수 있으며, 기간이 만료되면 자동으로 삭제된다. 설정이 없으면 브라우저 종료 시에 만료된다.
쿠키는 서버에서 설정한 유효 기간까지 클라이언트에 저장되므로, 클라이언트가 다시 접속할 때 이전 상태를 유지하는 데 사용된다.
쿠키는 클라이언트의 요청마다 서버로 전송되므로 서버는 클라이언트의 상태 정보를 쿠키를 통해 유지하고 활용할 수 있다.
✒️ Cookie 는 어떤 경우에 사용되는가?
주요 사용 사례 | |
세션 관리 | 서버는 사용자를 식별하기 위해 고유한 세션 식별자를 쿠키에 저장하고, 클라이언트는 이 쿠키를 포함하여 서버에 요청을 보낸다. 이를 통해 서버는 세션 상태를 유지하고, 사용자에 대한 정보를 저장하고 관리할 수 있다. |
사용자 인증 | 로그인할 때, 서버는 인증된 사용자를 식별하기 위한 쿠키를 생성하고 클라이언트에게 전송 |
사용자 개인화된 경험 | 사용자의 선호도, 설정, 기록 등을 쿠키에 저장하여 다음 방문 시에 해당 정보를 활용하여 사용자 경험을 개선할 수 있다. |
추적과 분석 | 사용자의 웹 사이트 방문 기록, 클릭 패턴, 광고 선호도 등을 추적하고 분석하는 데 사용하며 이를 통해 광고 타겟팅, 웹 사이트 분석, 사용자 행동 분석 등을 수행 |
장바구니, 구매정보, 선호도 저장 | 장바구니와 같은 임시 데이터를 저장하는 데 사용 |
사용자 인증을 쿠키로 관리하는 경우 개인 정보 보호에 주의해야 한다.
- 쿠키에 민감한 개인 정보 저장하지 않는다. ➡️ 세션 식별자와 같은 참조값이나 토큰 사용
- 쿠키에 저장되는 데이터 암호화
- 보안 관련 최신 규정과 개인 정보 보호 정책 준수 ➡️ 쿠키 사용에 대한 사용자 동의 얻기
- HTTPS 프로토콜을 사용하여 쿠키 전송
🧶 Session 이란?
세션(Session)은 웹 서버와 클라이언트 간의 상태를 유지하기 위한 매커니즘이다.
일반적으로 웹 브라우저는 서버에 요청을 보내면 서버는 해당 요청을 처리한 후 응답을 반환하고 연결을 종료한다. 이때 클라이언트와 서버 간의 상태 정보를 유지하려면 세션을 사용해야한다.
세션은 클라이언트에 고유한 식별자인 세션 ID를 할당하고 서버는 이 세션ID를 사용하여 클라이언트를 식별한다. 일반적으로 세션ID는 서버 측에서 생성되며, 클라이언트는 이 세션ID를 쿠키나 URL 매개변수를 통해 서버에 전달한다.
세션ID를 기반으로 서버는 클라이언트와 관련된 데이터를 저장하고 유지한다.
세션은 서버측에서 관리되므로 비교적 안전한 방법으로 사용자의 인증 상태 등 중요한 정보를 제공할 수 있다.
이를 통해서 세션을 통한 사용자 인증, 장바구니 정보 유지 등의 작업을 수행할 수 있다.
✒️ Session 은 어떤 경우에 사용되는가?
주요 사용 사례 | |
사용자 인증과 접근 제어 | 사용자가 인증되었는지 확인하고, 인증된 사용자만이 특정 리소스에 접근할 수 있도록 제어할 수 있음 |
사용자 상태 관리 | 장바구니 정보, 선호 설정, 회원 등급 등을 세션에 저장하여 사용자 개인화와 상태 유지를 지원할 수 있음 |
데이터 공유 | 여러 요청 간에 데이터를 공유하는 용도로 사용 |
확장성과 분산 환경 | 여러 서버가 세션 데이터를 공유하거나, 분산 캐싱을 통해 세션 관리할 수 있음 |
🖱️ Cookie & Session 주요 차이점
Cookie | Session | |
저장 위치 | 클라이언트의 웹 브라우저가 지정하는 메모리 또는 하드디스크 |
서버의 메모리, 데이터베이스 등 |
보안 | 탈취와 변조 가능 | 세션 ID 값만 가지고 있기 때문에 상대적으로 안전 |
저장 형식 | 텍스트 | Object |
만료 시점 | 쿠키 저장 시 expires 속성을 정의 (삭제될 날짜를 지정할 수 있음) |
클라이언트가 로그아웃, 일정 시간동안 반응이 없으면 무효화 (정확한 시점을 알 수 없음) |
리소스 | 서버 자원을 사용하지 않음 | 서버에 저장되기 때문에 서버 메모리로 로딩되어 세션이 생길 때마다 리소스를 차지하게 됨 |
속도 | 파일에서 읽기 때문에 상대적으로 빠르다 |
요청마다 서버에서 처리하므로 비교적 느리다 |
용량 제한 | 한 도메인당 20개 하나의 쿠키당 4KB로 제한 |
클라이언트가 접속 시 서버에 의해 생성되므로 제한 없음 |
세션과 쿠키는 서버와 클라이언트 간의 상태 정보를 유지하기 위해 사용된다.
하지만 이 둘에는 차이점이 있는데, 세션은 서버 측에서 관리되고 클라이언트에게는 세션 ID만 전달되지만, 쿠키는 클라이언트 측에서 관리된다. 따라서 쿠키는 클라이언트 측에서 변경이 가능하며, 서버가 클라이언트의 요청마다 쿠키를 받아서 처리한다.
쿠키는 클라이언트에서 연결 정보를 관리하기 때문에 서버측에서 관리하는 것보다 보안상의 문제가 생길 확률이 높다. 따라서 쿠키보다는 세션에서 연결 정보를 관리하는 것이 쿠키보다는 안전하다고 할 수 있다.
하지만 세션만 사용하면 서버에 부하를 줄 수 있기 때문에 이 둘을 적절히 사용하는 것이 중요하다.
* 이름-값 쌍으로 구성된 쿠키가 텍스트 형식으로 저장되는 이유
* 이름-값 쌍은 객체의 키-값 쌍과 뭐가 다른가?
✏️ 이름-값 쌍으로 구성된 쿠키가 텍스트 형식으로 저장되는 이유
HTTP 프로토콜의 특성과 웹 브라우저의 동작 방식 때문이다.
HTTP 프로토콜은 헤더와 본문으로 구성되어 있으며, 헤더는 요청 또는 응답에 대한 정보를 담고 있다. 쿠키는 HTTP 헤더에 포함되어 클라이언트가 서버로 요청을 보낼 때 전송된다.
웹 브라우저는 클라이언트 측에서 쿠키를 관리하기 위해 로컬 파일 시스템에 저장한다. 일반적으로 웹 브라우저는 텍스트 파일을 다루는 기능을 가지고 있으며, 쿠키도 이러한 파일 형식으로 저장된다.
텍스트 형식으로 저장되는 것은 파일 시스템에 쉽게 기록하고 읽을 수 있기 때문에 효율적이고 간편한 방법이기 때문이다.
🤔 이름-값 쌍은 객체의 키-값 쌍과 뭐가 다른가?
이 둘은 논리적으로 유사한 개념이지만, 구현 방식과 사용 목적에서 차이가 있다.
이름-값 쌍은 일반적으로 텍스트 형식으로 구성되어 주로 웹에서 데이터를 전달하고 유지하는 용도로 사용되는 반면에 객체의 키-값 쌍은 프로그래밍 언어에서 자료 구조를 표현하기 위해 사용된다.
🧶 Session tracking 이란?
웹 애플리케이션에서 사용자의 세션을 식별하고 추적하는 과정을 말한다. 사용자의 세션을 식별하기 위해 고유한 식별자를 사용하고, 이를 통해 사용자의 상태 정보를 유지하고 관리한다.
사용자의 로그인 상태, 상태 정보 유지, 장바구니 관리 등과 같이 사용자 경험을 향상시키는 기능을 구현하는 데 중요한 역할을 한다.
쿠키를 사용한 세션 트래킹 | URL 임베딩을 사용한 세션 트래킹 |
세션 ID를 클라이언트의 쿠키에 저장하여 클라이언트와 서버 간의 세션 상태를 추적 | 세션 ID를 URL의 매개변수로 포함시켜 클라이언트와 서버 간의 세션 상태를 유지 |
- 서버는 클라이언트에게 세션 ID를 할당하고, 클라이언트는 이 세션 ID를 쿠키로 저장하여 다음 요청마다 서버에 전달 | - 서버는 클라이언트에게 세션 ID를 부여하고, 클라이언트는 모든 요청에 해당 세션 ID를 포함시켜 서버에 전달 |
- 서버는 세션 ID를 통해 클라이언트를 식별하고 해당 세션에 저장된 데이터를 사용 | - 서버는 세션 ID를 통해 클라이언트를 식별하고 세션에 저장된 데이터를 활용 |
쿠키를 지원하지 않는 환경에서도 사용될 수 있음 |
React 로 따지면 상태(State) 관리의 개념과 유사하다.
React는 사용자 인터페이스(UI)를 구성하는 컴포넌트 기반의 JavaScript 라이브러리이며, 상태 관리는 React 애플리케이션에서 데이터의 변화와 이를 반영하는 UI 업데이트를 관리하는 핵심 개념이다.
상태 관리를 통해 React 애플리케이션은 사용자의 상태를 유지하고 필요에 따라 변경되는 데이터를 관리한다. 즉 이는 세션 트래킹에서 사용자의 상태 정보를 유지하고 변경하는 것과 유사한 개념
상태 관리를 통해 로그인 상태, 폼 입력 값, 컴포넌트 간의 데이터 공유 등을 처리할 수 있다.
🔒 서드 파티 쿠키(Third-party cookies) & 좀비 쿠키(Zombie cookies) 란?
서드파티 쿠키와 좀비 쿠키는 웹 개발과 개인 정보 보호와 온라인 추적에 관련된 중요한 개념이다. 사용자의 개인 정보 보호를 강화하기 위해 웹 브라우저에서는 이러한 쿠키를 차단하거나 삭제하는 기능을 제공하고 있다.
또한, 개인 정보 보호 관련 법규제와 함께 이러한 쿠키 사용에 대한 정책이 발전하고 있으며, 기업과 개발자들은 이를 준수하고 사용자의 개인 정보를 적절히 보호하는 데 주의해야한다.
Third-party cookies | Zombie cookies |
현재 방문 중인 웹 사이트와 다른 도메인에 속한 쿠키 | 사용자가 명시적으로 쿠키를 삭제했음에도 불구하고 다시 생성되어 사용자를 추적하는 쿠키 |
해당 도메인과 협력 관계에 있는 광고 회사, 분석 도구, 소셜 미디어 플러그인 등이 사용자를 추적하고 프로필링하는 데 사용될 수 있다. | 사용자가 쿠키를 삭제해도 저장소에 백업된 쿠키 정보를 활용하여 다시 쿠키를 생성하고 사용자를 추적할 수 있다. |
보통 웹 사이트가 사용자의 브라우저 상에 복구 가능한 저장소를 사용하여 쿠키 정보를 저장하기 때문에 발생 |
참고 : ChatGPT,
쿠키와 세션이란? ➡️ https://chrisjune-13837.medium.com/web-%EC%BF%A0%ED%82%A4-%EC%84%B8%EC%85%98%EC%9D%B4%EB%9E%80-aa6bcb327582
쿠키와 세션 ➡️ https://doooyeon.github.io/2018/09/10/cookie-and-session.html
Cookie & Session ➡️ https://gyoogle.dev/blog(Web tab - Cookie&Session)
등을 공부하고, 간단하게 정리한 내용입니다. 잘못된 부분이나 문제되는 점이 있으면 댓글 부탁드립니다.
'Web' 카테고리의 다른 글
[Web] HTTP Request Methods 란? (2) | 2023.04.30 |
---|---|
[Web] 웹 브라우저가 어떻게 동작하는가? (0) | 2023.04.28 |