🍪 쿠키 정의 🍪
브라우저에 저장되는 key와 value로 이루어진 작은 크키의 문자열
헨젤과 그레텔에서 걸어온 길을 추적하기 위해 쿠키를 사용했던 것처럼 웹서비스에서는 로그인, 검색기록 등 우리가 어떤 일을 했는지 쿠키에 저장한다!
🍪 쿠키 특징 🍪
- 크키제한(4kb)
- 만료시간 설정 가능
- http 요청시 따로 설정하지 않아도 자동전달
- 브라우저에 저장
우리가 웹에서 어떤 페이지에 접속하거나 서비스를 이용하는 것은 ‘브라우저’를 통해 이루어짐
브라우저란? 서버에서 제공하는 정보를 우리가 볼 수 있게 해줌
🍪 그럼 왜 쿠키를 사용하는데? 🍪
(http의 특징 때문)
-
❓http란? 웹에서 이루어지는 모든 데이터 전송의 기본이 되는 프로토콜
-
❓http 의 특징
- connectionless 비연결성 : 이 특징때문에 서버는 모든 요청을 다른 사용자로 인식하게 됨
- stateless 비상태성 : 이 특징때문에 사용자가 로그인한 상태인지 아닌지 알 수 없게 됨
❗️ 보통 이런 문제 때문에 사용되는 것이 쿠키와 세션
http는 이러한 특징들 때문에 서버는 확장성이 높아진다는 장점을 가져감
🍪 세션으로 보는 쿠키 사용 🍪
- 웹페이지에 접속하면 서버는 쿠키를 만들어 브라우저로 보내줌
- 이 쿠키는 브라우저에 저장
- 브라우저는 이 쿠키를 가지고 있다가 서버에 정보를 요청할 때마다 쿠키를 같이 보내줌
- 서버는 브라우저가 보낸 쿠키를 확인하고 맞는 정보를 보내줌
-> 서버가 쿠키 정보를 수정해서 보내주면 이는 다시 브라우저에 저장
이렇게 정보를 주고받는 것은 api를 통해 이루어짐
🍪 쿠키 단점 🍪
- 브라우저에 저장되기 때문에 보안 취약
민감한 개인 정보 저장에는 사용x 민감한 정보들은 모두 서버에 있음
- Http 요청시 모든 쿠키 자동으로 전달되기 때문에 불필요한 트래픽 양 증가
- XSS 공격에 취약 : 공격자가 악성 스크립트를 삽입하여 브라우저에서 실행
대응법 : HttpOnly 속성 제공(자바스크립트로 쿠키 조회 방지)
- XSRF 공격에 취약 : 사용자인 척 악성 request를 보내는 공격
대응법 : SameSite속성 제공 (사이트와 같은 도메인 요청에만 쿠키를 전송)
❗️그 외에 Secure 속성을 이용해 https로 통신하는 경우에만 쿠키가 전송
🍪 쿠키 구성요소 🍪
- 키 : 쿠키 식별(당연히 중복값 안됨)
- 값
- 도메인 : 현재 쿠키가 어떤 서버로 전송되어야 하는지 지정(따로 명시하지 않으면 쿠키가 생성된 서버로만 전송됨)
- 경로 : 명시한 경로와 그 하위 경로에만 쿠키가 전송
- 기한 : 쿠키 유통기한(만료 날짜 지정하지 않으면 브라우저 종료되면 쿠키도 같이 삭제됨 == 세션쿠키)
- 보안요소
🍪 쿠키 구분! 🍪
🥠 발행 주체에 따라 구분되는 쿠키
- First-Party cookie : 사용자가 이용중인 웹사이트 소유자가 직접 생성
- Third-Party cookie : 제 3자가 발행한 쿠키
- 사용자의 행적을 파악해 맞춤형 광고의 타켓팅에 활용
구글은 2023년 말까지 서드파티 쿠키수집 중단을 발표함(시크릿모드)
🥠 사용 목적에 따라 구분되는 쿠키
- 필수쿠키 : 사용자가 웹 사이트의 핵심기능들을 사용하기 위해 필수적으로 사용해야하는 쿠키
- 성능쿠키 : 사용자의 웹사이트 이용정보를 수집해 서비스를 효율적으로 개선하는 데 사용
- 기능쿠키 : 사용자의 언어, 지역 등을 저장해 사용자에게 최적화된 서비스를 제공할 수 있도록 하는 데 사용
- 타겟팅쿠키 : 광고를 제공하는 데 사용(서드파티쿠키와 가장 연관)
서드파티 기업들인 이런 타겟팅 쿠키를 공유하고 맞춤형 광고 제공
🍪 요약 🍪
- 🤷🏻♀️ 쿠키 vs 세션 vs JWT 의 비교는 옳지 않다.
- 보통 세션이나 JWT를 이용할 때는 쿠키와 복합적으로 이용.
(ex. 세션 id를 쿠키에 저장, jwt토큰을 쿠키에 저장)
즉, 쿠키는
- 로그인 id,pw 자동완성, 광고 하루 안보기 등 사용자의 편의를 위하되, 손실되도 큰 일 없을 정보들을 브라우저에 저장
- 쿠키와 세션에 저장될 정보들을 잘 나눠야함. 쿠키를 남발하면 보안위협, 세션을 남발하면 접속자가 많아질 때 서버에 부하가 옴