개발일지
쿠키(Cookie)와 세션(Session) 본문
+) 240907 틀린 개념만 수정했습니다.
쿠키와 세션을 사용하는 이유?
HTTP 프로토콜 환경은 stateless한 특성을 가지기 때문에 서버에서는 클라이언트가 누구인지 매번 확인해야한다. 예를 들어 쇼핑몰에 로그인을 했음에도 페이지를 이동할 때마다 계속 로그인을 해줘야하는 문제가 발생한다. 쿠키와 세션을 사용해 이러한 점을 보완할 수 있다.
무상태성 (Stateless)
서버는 클라이언트의 이전 상태를 보존하지 않는다. 연결을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지되지 않는다.
쿠키 (Cookie)
쿠키란?
- 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각이다. 브라우저는 이 데이터 조각들을 저장하고 있다가, 동일한 서버에 재요청할 때 함께 전송한다.
- 서버는 HTTP 요청을 수신했을 때 Set-Cookie 헤더로 쿠키와 함께 응답할 수 있다. 브라우저는 이를 저장하고 있다가 같은 서버에 요청 시 Cookie 헤더 안에 포함하여 전송한다.
쿠키 구성 요소
- Name: 쿠키 이름
- Value: 저장할 값
- Expires: 만료 기간
- Domain: 쿠키를 전송할 도메인 이름
- Path: 쿠키를 전송할 경로
- Secure: 보안 연결 여부 (HTTPS)
- HttpOnly: HTTP 프로토콜 외 다른 통신 사용 여부
쿠키 종류
- Session Cookie: 만료 기간이 설정되어 있지 않은 쿠키, 브라우저 세션이 유지되는 동안만 유지된다.
- Persistent Cookie: 만료 기간이 설정되어 있는 쿠키, 만료 기간이 지나면 자동으로 삭제된다.
- Secure Cookie: HTTPS로만 접근 가능한 쿠키
- HttpOnly Cookie: 오직 HTTP(S)으로만 접근 가능한 쿠키, Javascript 접근 불가 → XSS 공격 예방
- Third-Party Cookie: 방문한 도메인과 다른 도메인에서 설정된 쿠키, 주로 광고 및 사용자 추적에 활용된다.
쿠키 동작 방식
- 클라이언트가 서버에 요청한다.
- 서버는 상태를 유지하고 싶은 데이터를 쿠키로 생성한다.
- 서버는 Set-Cookie 헤더에 쿠키를 포함하여 응답한다.
- 클라이언트는 쿠키를 저장하고 있다가, 이후 서버에 요청할 때 Cookie 헤더에 포함하여 전송한다.
- 서버는 이전 상태 정보를 변경할 필요가 있을 때, 변경할 쿠키를 다시 헤더에 포함시켜 응답한다.
쿠키 사용 예시
- 쇼핑몰 장바구니
- 자동 로그인
- 팝업창 7일간 다시 보지 않기
세션 (Sessioin)
세션이란?
- 세션은 클라이언트의 상태 정보를 서버 측에서 관리하는 방식이다. 실제 데이터는 서버에 저장되고 브라우저에서는 세션 ID만을 보유한다.
- 주요 데이터를 서버에 두기 때문에 쿠키보다 보안상 안전하다.
- 사용자가 많아질수록 서버 메모리를 많이 차지하게 되고 성능 저하를 초래할 수 있다.
세션 동작 방식
- 클라이언트가 서버에 요청한다. (첫 요청이므로 세션 ID 존재하지 않음)
- 서버에서는 클라이언트에 세션 ID를 부여하고 Set-Cookie 헤더에 세션 ID를 포함해서 응답한다.
- 클라이언트는 부여받은 세션 ID를 쿠키로 관리하고 있다가, 매 요청마다 Cookie 헤더에 포함하여 전송한다.
- 서버는 세션 ID로 사용자를 식별하고, 세션에 있는 클라이언트 정보를 사용하여 요청을 처리한다.
세션 사용 예시
- 로그인 같이 보안상 중요한 작업 수행할 때
쿠키 vs. 세션
쿠키 | 세션 | |
데이터 저장 위치 | 클라이언트 | 서버 |
보안 | 낮음 (브라우저에 노출) | 높음 (서버에서 관리) |
속도 | 빠름 (클라이언트 측에서 바로 접근 가능) | 느림 (서버 요청 및 처리 시간 필요) |
저장 용량 | 작음 (최대 4KB) | 큼 (서버에 저장) |
세션 방식의 한계
- 데이터를 서버에서 관리하기 때문에 추가적인 저장 공간이 필요하다.
- 요청이 많아질수록 서버의 부하가 커질 수 있다.
- 서버 확장이 어렵고, 여러 서버 간의 세션 동기화를 위한 별도의 과정이 필요하다.
이러한 한계를 보완하기 위해 최근에는 JWT 기반의 인증 방식을 사용하는 추세이다.
참고
🔗 https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies
🔗 https://www.joinc.co.kr/w/man/12/cookie
🔗 https://interconnection.tistory.com/74
'CS, WEB' 카테고리의 다른 글
로드밸런싱이란? (0) | 2024.02.07 |
---|---|
OAuth 2.0 알아보기 (0) | 2022.12.12 |
PASETO (Platform-Agnostic SEcurity TOkens) (0) | 2022.11.25 |
JWT(Json Web Token) (0) | 2022.11.20 |
토큰(Token) 기반 인증 (0) | 2022.11.20 |