Cookie?
개념은 쿠키는 브라우저가 가지고 있는 데이터, 그이상 그이하도 아니다. MDN 웹문서에는 쿠키를 아래와 같이 기술하고 있다..
HTTP 쿠키(웹 쿠키, 브라우저 쿠키)는 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각입니다. 브라우저는 그 데이터 조각들을 저장해 놓았다가, 동일한 서버에 재 요청 시 저장된 데이터를 함께 전송합니다. 쿠키는 두 요청이 동일한 브라우저에서 들어왔는지 아닌지를 판단할 때 주로 사용합니다. 이를 이용하면 사용자의 로그인 상태를 유지할 수 있습니다. 상태가 없는(stateless) HTTP 프로토콜에서 상태 정보를 기억시켜주기 때문입니다.
쿠키를 사용하는 목적은 일반적으로 사용자의 상태 데이터를 기억하여 아래와 같은 목적을 달성하기 위해 사용된다.
- 세션관리: 웹 사이트가 사용자를 식별하고 사용자의 로그인 정보를 기억 할 수 있도록 함.
- 개인화: 사용자별 맞춤형 광고나 웹 사이트내 환경 설정 등과 같이 사용자의 웹사이트 환경을 개인화하기 위해 사용 됨.
- 사용자 활동 추적: 사용자의 웹사이트 사용 패턴이나 검색 습관 등을 추적하고 분석하여 사용자가 선호 할 만한 다른 컨텐츠 제안
> 쿠키의 동작 순서
1. 클라이언트가 페이지를 요청한다. (사용자가 웹사이트에 접근)
2. 웹 서버는 쿠키를 생성한다.
3. 생성한 쿠키에 정보를 담아 HTTP 화면을 돌려줄 때, 같이 클라이언트에게 돌려준다.
4. 넘겨받은 쿠키는 클라이언트가 가지고 있다가(로컬 PC에 저장) 다시 서버에 요청할 때 요청과 함께 쿠키를 전송한다.
5. 동일 사이트 재방문 시 클라이언트의 PC에 해당 쿠키가 있는 경우, 요청 페이지와 함께 쿠키를 전송한다.
Session?
우선 세션은 서버에서 관리하지만 HTTP는 Stateless 이다.
즉, 요청에 대한 사용자 구분을 할 수 없기 때문에 세션에서 해당 유저임을 구분할 수 있는 Session ID(SID)를 쿠키에 담아서 보내게 된다.
세션은 서버에 데이터를 저장하고, 쿠키는 브라우저에 데이터를 저장한다. 서버에 데이터를 저장한다는 것은 어떤 의미 일까? 이는 서버에서 저장한 세션 데이터를 가져오기 위한 리소스, 데이터를 보관하는 저장소 리소스가 소모되는 행위라는 의미이기도 하다.
그렇기 때문에 서버에 많은 부하를 주지 않기 위해서 비교적 용량 제한이 없는 세션이라도 사용자를 식별하기 위해, 또는 서비스에서 유저의 정보를 저장하기 위한 최소한의 데이터만 저장하고 서버의 메모리 혹은 key-value 기반의 DB를 이용하기도 한다.
> 세션 특징
- 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장한다.
- 웹 서버의 저장되는 쿠키(=세션 쿠키)
- 브라우저를 닫거나, 서버에서 세션을 삭제했을 때만 삭제가 되므로, 쿠키보다 비교적 보안이 좋다.
- 저장 데이터에 제한이 없다. (서버 용량이 허용하는 한에서)
- 각 클라이언트에 고유 Session ID를 부여한다. Session ID로 클라이언트를 구분해 각 요구에 맞는 서비스를 제공
❓ 쿠키와 세션을 사용하는 이유
HTTP 프로토콜의 특성이자 약점을 보완하기 위해서 쿠키 또는 세션을 사용한다.
기본적으로 HTTP 프로토콜 환경은 Connectionless / Stateless 특성을 가지기 때문에 서버는 클라이언트가 누구인지 계속 인증 또는 확인을 해야한다. 웹페이지의 로딩을 느리게 만들고 이러한 번거로움을 해결하기위해 쿠키와 세션을 사용하여 정보를 유지(사용자에 대한 인증)한다.
HTTP 프로토콜 환경의 특징
- 비연결성 Connectionless? 🧐
클라이언트가 요정을 한 후 응답을 받으면 그 연결을 끊어버리는 특징
클라이언트가 request를 서버에 보내면, 서버는 클라이언트에게 요청에 맞는 response를 보내고 접속을 끊는다.
- 무상태 Stateless? 🧐
통신이 끝나면 상태를 유지하지 않는 특징
연결을 끊는 순간 클라이언트와 서버의 통신이 끝나면 상태 정보를 유지하지 않는다.
결론
세션과 쿠키는 웹 개발에서 사용자의 상태를 유지하고 개인화된 경험을 제공하는 데 필수적인 기술이다. 각각의 특성과 차이점을 이해하고 적절히 활용하는 것이 중요!
보안과 성능을 고려하여, 각 상황에 맞는 기술을 선택하여 사용한다. 이 글을 통해 세션과 쿠키의 차이점을 명확히 이해하고, 웹 개발에 있어 더 나은 결정을 내릴 수 있었으면 좋겠습니다!
출처
https://medium.com/@delivalue100/%EC%84%9C%EB%B2%84-%EC%84%B8%EC%85%98-session-5adbc7579eb8
'CS' 카테고리의 다른 글
[로드밸런싱] Load Balancing이란? 서버 부하 분산의 방법 (0) | 2025.05.03 |
---|---|
[JWT] 토큰 인증에 대하여 (1) | 2025.02.28 |
시간복잡도(Time Complexity) & 공간복잡도(Space Complexity) (0) | 2024.12.05 |
OOP vs FP 에 대하여.. (0) | 2024.11.12 |
[Network] CORS란? 개념과 동작 방식 (0) | 2024.09.09 |