티스토리 뷰

* 본 게시글은 <HTTP 완벽 가이드> 서적을 읽고 정리한 글입니다.

 

# 쿠키를 알아보기 전에 사전지식 타임

* HTTP는 무상태(Stateless) 프로토콜이다.

Stateless, 무상태 -> 연결 자체에 대한 정보를 가지지 않으며, 매 요청은 일회성이고 독립적으로 처리된다.

- 클라이언트의 세션 정보를 서버에 저장하지 않는다

- HTTP, UDP가 대표적인 Stateless 프로토콜.

장점: 서버 변환, 증설이 자유롭다(Scaling) - 서버에 세션정보를 담고있지 않기때문에 그냥 슥 옮기면 된다.

-> 급작스러운 트래픽이 몰릴때, 로드밸런싱에 용이.

단점: HTTP 요청을 보낼때마다 자신임을 알려주기 위한 추가적인 데이터를 보내줘야한다. (이때 사용하는게 "쿠키")

 

Stateful, 상태 유지(?)

- 서버가 클라이언트의 세션 정보를 서버에 저장한다

- TCP가 대표적인 Stateful 프로토콜.

- 게임서버가 대게 stateful한 서버를 사용함

장점: 끊김없이 양방향 데이터 전송가능, 빠르다

단점: 세션정보를 한 서버가 저장하고 있기 때문에 서버 변경, 확장이 어려움. + 세션을 많이 갖고있으면 서버에 무리.

 

# 웹 서버가 클라이언트를 식별하는 방법

1. 사용자 식별 관련 정보를 전달하는 HTTP 헤더

2. 클라이언트 IP주소 추적

3. 사용자 로그인 인증을 통한 사용자 식별

4. URL에 식별자를 포함하는 "뚱뚱한(Fat) URL" 

5. "쿠키"

 

 

[#1. HTTP 헤더]

 

  • From: 사용자의 이메일 주소
  • User-Agent: 사용자의 브라우저
  • Referer: 사용자라 현재 링크를 타고 온 근원 페이지 (유입경로 분석에 사용)
  • Authorization: 사용자 ID/PW
  • Cookie: 쿠키 정보

>> Request << 헤더에 포함된다!!

 

[#2. 클라이언트 IP주소]

일반적으로 HTTP 헤더에 IP주소를 실어서 보내는 일은 없다.

다만 웹 서버는 getpeername 함수를 호출하여 요청을 보낸 클라이언트의 IP주소를 받아올 수 있다.

 

이 방법은 몇가지 단점을 가지고 있다

1. 여러 사용자가 같은 컴퓨터를 사용하는 경우 그들을 각각 구별할 수 없다

2. 보통 집에서 인터넷을 쓸 때 공인IP를 하나 받아오고, 노트북과 스마트폰은 와이파이 공유기를 통해 만들어진 사설IP를 연결해서 사용한다. 이런 경우에 같은 네트워크에 속한 애들을 각각 구별할 수가 없다

 

[#3. 사용자 로그인]

사이트에 한번만 로그인 하면 웹브라우저는 이후 요청마다 해당 사용자의 식별정보 토큰을 "Authorization 헤더"에 담아 서버에 전송, 한 세션이 진행되는 내내 그 사용자에 대한 식별을 유지한다.

 

[#4. 뚱뚱한 URL]

URL에 세션 정보, 사용자의 상태 정보를 다 때려박아서 뭉탱이로 만든다.

 

<문제점>

1. 일단 URL이 너무 길다

2. URL에 개인정보를 내포하고 있으므로 URL을 공유하는건 내 개인정보도 공유한다는 의미이다

3. URL이 달라지기 때문에 캐시를 이용할 수 없다

4. 서버 부하의 가중

5. URL 세션에서 이탈되기 쉽다. (세션 도중 다른 페이지로 이탈하면 다시 돌아왔을때 처음부터 다시 시작해야함)

6. URL을 따로 저장해두지 않는 이상 로그아웃 하면 모든 정보가 날아간다.

 

 

# 쿠키(Cookie)

쿠키는 사용자를 식별하고 세션을 유지하는 방식 중에서 현재까지 가장 널리 사용되는 방식이다.

쿠키는 캐시와 충돌할 수 있기떄문에 대부분의 캐시나 브라우저는 쿠키의 내용물을 캐싱하지 않는다.

 

<쿠키의 타입>

  • 세션 쿠키(Session Cookie) - 브라우저를 닫으면 삭제된다. (임시 쿠키)
  • 지속 쿠키(Persistent Cookie) - 디스크에 저장되어 컴퓨터를 재시작해도 남아있다. 자주 방문하는 사이트에 대한 설정정보, 로그인 이름을 유지하는데 사용된다.

 

쿠키는 "서버가" 사용자를 구분하기 위해 사용자에게 붙여놓은 스티커와 같다. 사용자가 웹 사이트에 방문하면, 웹 사이트는 서버가 사용자에게 붙여놓은 스티커를 읽어서 사용자를 식별한다.

 

사용자가 웹 사이트에 처음 방문하면 웹 서버는 사용자가 다시 돌아왔을때 그 사용자를 식별하기 위해서 유일한 값을 쿠키에 할당한다.

쿠키는 <임의의 이름=값> 형태의 리스트를 가지고, 그 리스트는 Set-Cookie, Set-Cookie2같은 응답 헤더에 포함되어 사용자에게 전송한다(스티커를 붙여서 보낸다)

-> 쿠키를 받은 사용자는, 이를 브라우저에 잘 저장해놨다가 해당 사이트에 다시 접속할 때 쿠키를 포함해 전송한다.

브라우저는 쿠키 정보를 저장할 책임이 있는데, 이를 "클라이언트 측 상태"라고 한다. (HTTP 상태관리 체계)

 

* 쿠키는 브라우저에 저장된다 -> 크롬 브라우저에 저장된 쿠키랑 익스플로러 브라우저에 저장된 쿠키랑 다르다.

(크롬에서 로그인 해놨다고 익스에서도 로그인 되있는게 아닌 이유)

 

* 쿠키가 수집하는 데이터: 브라우저/OS 정보, ip주소, 페이지 접속/접속종료 시간, 유입경로 등...

 

* 브라우저는 쿠키 전부를 모든 사이트에 보내지 않는다.

- 브라우저는 수천개의 쿠키를 동시에 담아두고 있을 수는 있으나, 이를 웹 사이트에 접속할때마다 전부 포함해 보낸다는 것은 너무나도 불필요한 낭비.

- 쿠키들의 대부분은 서버에 특화된 이름/값 쌍을 가지고 있기때문에, 특정 사이트 이외에는 쓸모가 없다.

- 게다가 쿠키는 개인정보를 담고있기때문에 보안에도 문제가 될 수 있다. 

 -> 따라서, 브라우저는 쿠키를 생성한 서버에게만 쿠키에 담긴 정보를 전달한다.

 

<쿠키를 사용할 때에 주의사항>

쿠키 트랜잭션과 관련된 문서를 캐싱하는 것은 주의해야한다

- 이전 사용자의 쿠키가 다른 사용자에게 할당되거나, 내 개인정보가 다른 사람에게 노출되는 상황이 발생할 수 있다.

- 캐시하지 말아야할 문서가 있다면 명시적으로 표시해야 한다.

 

<쿠키의 활용>

쿠키를 활용하면 마케팅 회사들은 사용자의 프로필과 사용 패턴에 대한 데이터를 수집할 수 있다.

- 지속 쿠키를 사용하고 거기에 IP주소, Referer 헤더 정보까지 수집해 상당히 개인적인 데이터를 수집한다.

* 이를 활용해 개인 맞춤 광고를 제공하는 기법을 "리타게팅 광고" 라고 함

 

책에는 이정도가 다인데,, 뭔가 더 자세한게 알아보고 싶다..!!!

 

# 번외판

쿠키는 퍼스트파티 쿠키 / 서드파티 쿠키로 구분된다

 

  • 퍼스트파티 쿠키(First-Party Cookie) - 웹 사이트 운영자가 심는 쿠키 
  • 서드파티 쿠키(Third-Party Cookie) - 제 3자, 외부 업체가 심는 쿠키 (개인 맞춤 광고)

웹 사이트에 "로그인 상태 유지"를 체크하면 컴퓨터를 껐다켜도 로그인이 유지되어있다 -> 퍼스트파티 쿠키 활용.

웹 사이트 팝업창에 "1일간 보지않기"를 누르면 팝업창이 1일간 뜨지 않는다 -> 퍼스트파티 쿠키 활용

쇼핑 사이트에서 "장바구니 담기"를 했을때 사이트를 껐다켜도 정보가 계속 유지되어있다 -> 퍼스트파티 쿠키 활용

A를 검색하고 나니 그 이후에 광고창에 A에 대한 광고가 나온다 -> 서드파티 쿠키를 활용하여 맞춤형 광고를 제안한 것.

 

 

https://support.google.com/chrome/answer/95647?co=GENIE.Platform%3DDesktop&oco=1

 

 

 

예를들어,, 광고 대행사 고글닷컴이 있다고 하자.

사용자가 A 사이트에 접속했다 

-> 이 A 사이트의 소유자는 광고수익을 올리기 위해 고글닷컴의 광고를 심었다

-> 고글닷컴(제 3자, 서드파티)은 사용자에 대한 지속쿠키를 생성. A 사이트에서의 사용패턴, 검색기록 등을 수집한다

-> 사용자는 지속쿠키(서드파티 쿠키)를 받아 브라우저에 잘 저장한다

-> 사용자가 고글닷컴의 광고가 담겨있는 B 사이트에 접속하면 사용자는 기존에 저장되어있던 고글닷컴 관련 쿠키를 같이 보내주게 된다. 

-> 이를 반복함으로써 고글닷컴은 사용자의 동의 없이 검색기록, 취향, 관심사를 낱낱이 파악할 수 있게 되었다 oOo

 

 

* 구글은 2020년 서드파티 쿠키 사용을 중단하겠다고 밝힌바 있다.

- 2023년에 구글크롬의 서드파티 쿠키 지원을 중단한다고 한다.

 

 

웨일 브라우저(크롬 기반)

* 구글 크롬 '시크릿 모드' 쿠키 저장을 차단/삭제하여 서버가 클라이언트를 기억하지 못하도록 한다.

- 방문 기록 / 쿠키 및 사이트 데이터 / 양식에 입력한 정보 / 권한 정보를 저장하지 않는다

- 이거 사용한다고 VPN처럼 IP가 감춰지거나 접속우회가 되는 것은 전혀 아니다..;;

(초딩때만 해도 시크릿모드가 만능인줄 알았다)

 

 

# 세션이란?

세션(Session)

세션(session)은 컴퓨터 과학에서, 특히 네트워크 분야에서 반영구적이고 상호작용적인 정보 교환을 전제하는 둘이상의 통신 장치나 컴퓨터와 사용자 간의 대화나 송수신 연결상태를 의미하는 보안적인 다이얼로그(dialogue) 및 시간대를 가리킨다. <위키피디아>

 

- 사용자가 웹 사이트에 접속했을때 웹 사이트를 종료하기 전까지 사용자 정보를 계속 유지하는 방법.

- 쿠키에 민감한 개인정보를 담고다니기는 부담스럽다 -> 그건 서버측에서 대신 관리해줄게

- 애초에 세션 역시 쿠키를 기반으로 하고있다.

- 쿠키는 클라이언트 브라우저, 세션은 웹 서버에 저장된다는 점이 핵심이다.

- 브라우저(웹 사이트)를 종료하면 세션도 종료된다.

- 별다른 전송 필요없이 서버측에서 처리하기 때문에 보안면에서 쿠키보다 우수하다.

- 보안에 민감한 결제, 로그인 등의 상황에서는 세션을 사용.

- 서버에서 처리해줘야 하기 때문에 속도면에서는 쿠키보다 떨어진다.

 

 

결론: 쿠키 + 세션 조합하여 둘 다 사용한다

 

 

https://www.youtube.com/watch?v=OpoVuwxGRDI 

이해가 빡!

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함