이동준1
아웃풋 공부
이동준1
전체 방문자
오늘
어제
  • 분류 전체보기 (84)
    • airflow (8)
    • sql (23)
    • aws (12)
    • python (3)
    • 네트워크 (12)
    • 알고리즘 (2)
    • 짧은서평 (24)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Network
  • 서평
  • 고통의 비밀
  • 네트워크
  • 퓨처셀프
  • 유연함의힘
  • AWS
  • regexp
  • 고통의비밀

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
이동준1

아웃풋 공부

[네트워크] Cookie
네트워크

[네트워크] Cookie

2023. 1. 21. 17:18

HTTP Transaction는 Stateless

HTTP는 요청 (GET/POST)를 한뒤에 응답을 받는 단순한 형태이다. 그리고 각 HTTP Transaction은 앞에 어떤 요청이 있었는지 기억하지 않으며, 앞의 요청에 의해 뒤의 요청이 영향을 받지 않는다. 이러한 특성을 stateless라고 한다. 

 

HTTP Transaction이 Stateless 성질을 가지고 있다면 궁금증이 생긴다. 우리가 웹 서비스를 이용하면 로그인 여부에 따라 정보가 달라지며, Instagram같은 SNS에서 보유한 친구에 따라 피드가 달라지는것을 직관적으로 알고있다. 이렇게 개인의 상태에 따라 서버로부터 다른 정보를 획득하는데 이는 어떻게 설명할 수 있을까?

 

 

 

Cookie (쿠키)

앞서 설명했듯이, HTTP Transaction은 기본적으로 이전의 작업을 기억하지 못한다. 서버가 이전의 동작을 전혀 기억하지 못하면 문제가 발생할 수 있다. 예를 들어, 특정 홈페이지에서 로그인을 한후에 로그인했다는 정보를 서버가 모른다면 우리는 로그인을 해야 할수 있는 동작들을 위해서 매순간 로그인 정보를 넘겨줘야할것이다. 이는 매우 번거롭다. 그래서 이런 번거로움을 해소하고자, 쿠키라는 수단을 이용할 수 있다. 쿠키는 서버 응용이 클라이언트의 이전 작업 정보 (State)를 파악하기 위한 도구이다.

 

쿠키는 서버가 클라이언트에게 당신이 이런 상태에 있다고 쪽지를 주는 형태이다. 그 쪽지를 가지고 있다가 다시 서버에 방문하면 서버는 그 쪽지를 다시 받고, 그 쪽지의 내용에 따라 적절한 조치를 취한다. 

 

Protocol

서버 -> 클라이언트

HTTP Response 헤더에 Set-cookie라는 필드가 존재한다. 이 쿠키에 서버는 클라이언트에게 클라이언트의 상태(정보)를 담아 전달한다. 서버는 클라이언트에게 쿠키를 전달하며, 다시 방문할때 가지고 오라고 한다. 그리고 클라이언트가 다시 서버에 방문했을 때, 이 쿠키에 담긴 정보를 보고 서버는 정보에 맞는 반응을 할 수 있게 된다.

 

클라이언트 -> 서버

HTTP Request 헤더 정보안에 매개변수로 Cookie라는 필드가 존재한다 (처음 방문시는 받은 쿠키가 없기 때문에 존재하지 않는다). 클라이언트는 서버로부터 받은 쿠키를 별도의 쿠키함에 넣어두고있다가, 동일한 사이트에 접속할때 Cookie 필드를 이용해 서버에게 쿠키를 보여준다.

 

이렇게 서버에게 클라이언트가 현재 상황을 쿠키에 담아서 알려줌으로, 서버가 클라이언트의 상황을 인지해서 적절한 반응을 할 수 있게 해준다. 서버는 쿠키를 통해서 클라이언트가 몇번 방문 했는지, 몇번 주문했는지 등을 파악할 수 있다.

 

그러나 이렇게 클라이언트가 클라이언트 자기 자신의 정보를 소유하고있다가 서버에게 건네주는 것은 문제가 될 수 있다. 클라이언트가 쿠키의 정보를 조작할 수 있기 때문이다. 쿠키에 방대한 정보를 담을수록, 사용자가 많은것을 조작할 수 있게 된다. 그렇게 되면 서버는 조작된 정보에 의해 잘못된 반응을 한다. 예를들어, 클라이언트는 서버 첫번째 방문인데 불구하고 방문횟수를 10000번으로 조작해 VIP 고객으로 둔갑할 수 있다. 이런 문제점을 해결하고자 한것이 session이다.

 

 

Session

이 문제를 해결하고자 Session을 이용한다. 서버는 클라이언트에게 이렇게 말한다.

'너에게 이 id를 줄테니, 다시 올때 이 id를 내게줘'

 

그리고 클라이언트가 id를 서버에게 주면 서버는 id를 뒤져서 id에 대응하는 정보를 찾는다. 즉, 클라이언트의 정보를 내부적으로 유지하는 형태이다. 다시말해, 클라이언트에게 session id 정보만 쿠키로 전달하고, 세션의 특성은 서버가 관리하는 것이다. 이런 방식으로 클라이언트가 정보를 조작할수 없게 한다.

cookie session
클라이언트 저장 서버 저장

 

'네트워크' 카테고리의 다른 글

[네트워크] Web Cache  (0) 2023.01.24
[네트워크] HTTP 성능  (1) 2023.01.22
[네트워크] HTTP 개요  (0) 2023.01.10
[네트워크] TCP/UDP  (0) 2023.01.07
[네트워크] 프로세스간 통신  (0) 2023.01.01
    '네트워크' 카테고리의 다른 글
    • [네트워크] Web Cache
    • [네트워크] HTTP 성능
    • [네트워크] HTTP 개요
    • [네트워크] TCP/UDP
    이동준1
    이동준1

    티스토리툴바