본문 바로가기

취업준비/우아한 테크 리뷰

우아한 테크 -쿠키- [ + 쿠키과 세션 ] [네트워크][웹]

 

쿠키를 왜 사용할까? [ 어딘가에 있을 비효율성을 찾아내라!! ]

HTTP는 응용 계층 수준에서의 프로토콜이다. 

  • HTML 문서를 전송하는 것이 목적인 HTTP는 안정적인 TCP 전송 프로토콜을 사용해서 연결을 설정한다.
    [ 쿠키와 세션은 TCP 전송 프로토콜을 이용하며서 생기는 비효율성을 개선하기 위한 기술이다. ]

 

HTTP 프로토콜에서 드러나는 비효율성 2가지. [ 비연결 지향, 상태 없음 ]

  • 쿠기와 세션을 사용하는 이유는 반복되는 요청과 응답 구조에서 HTTP 프로토콜이 가지는 약점을 보완하기 위해서 사용한다.

 

HTTP의 비연결지향(Connectionless)

  • 클라이언트(web)이 요청을 서버에 보내고, 서버는 클라이언트에게 적절한 응답을 주는데 응답 이후에는 클라이언트와 서버와의 연결을 끊는 특성이다.
    HTTP1.1에서는 반복되는 요청에도 연결을 다시 생성하는 오버헤드 과정(3 handshake)를 줄이기 위해서 keep-alive 옵션을 주어 커넥션을 재활용한다.
  • 서버측에서는 클라이언트에 대한 정보를 유지하지 않기 때문에 서버의 리소스의 낭비를 줄일 수 있다.
    [ 클라이언트마다 프로세스를 대기 시키는 것은 상당한 리소스낭비이다. ]
  • 하지만 서버와 클라이언트의 구조상 클라이언트는 해당 서버에서 오래 상주할 가능성이 있고 요청을 계속 보낼 가능성도 높다. 이러한 구조에서 연결을 위한 반복적인 처리과정은 오버헤드로 이어질 수 있다.

 

HTTP의 상태없음(Stateless)

  • 커넥션을 끊은 이후 클라이언트와 서버의 통신은 끝이난다. 서버는 클라이언트에 대한 상태 정보를 유지하지 않는다. 똑같은 클라이언트의 요청이어도 서버의 통신이 끝난 이후의 요청에 대해서는 서버는 똑같은 과정을 반복한다.

 

엔터프라이즈 애플리케이션의 대표적인 기능 : 로그인 & 장바구니

  • 사용자는 한 사이트에 오래 머무르면서 활동을 한다.
    그리고 민감한 정보 상태에 대한 보안을 위해서 로그인 절차를 거친다.

HTTP의 상태없음 특성으로 로그인에 대한 정보를 저장하지 않는다. 그렇게되면 사용자는 사이트가 제공하는 기능을 사용할 때마다 반복적인 로그인 절차를 거쳐야 하는 불편함을 가진다. 즉 인증 절차에 대해서 매 기능마다 인증 절차를 거쳐야 하는 불편함을 야기하는 것이다.

 

 

쿠키 개념의 등장 : 1995년 넷스케이프(브라우저의 전신)이 발명한 해결책

  • 서버가 웹 페이지(응답)를 요청한 브라우저에 보낼 때, 브라우저가 저장하기로 되어 있는 부가적인 텍스트 덩어리(4000바이트[4KB])이 포함될 수 있다.
  • 이러한 각 덩어리를 쿠키라고 표현한다.
  • 브라우저는 같은 서버에 요청을 보낼때 쿠키를 같이 전송한다.
    [ 서버측에서는 클라이언트에 고유한 식별 번호를 할당한다. ]
  • 서버는 클라이언트의 메모리를 사용하여 식별 번호를 클라이언트의 이전 방문에 대한 정보를 기억하게 하는 것이다.

📗 쿠키를 통해서 웹 서버는 사용자의 이전 활동에 대한 정보를 저장할 수 있게 된다.
4KB라는 제한된 저장 용량으로 인해서 활용할 수 있는 데이터의 양이 많지 않다고 한다.


쿠키(Cookie)

- 클라이언트를 식별하고 설명하는데 사용하는 웹 서버가 클라이언트 컴퓨터에 저장한 정보의 일부.

 

서버에서 HTTP Response Header에 set-cookie 속성을 이용하여 클라이언트에 쿠키를 제공한다.

  • 이름, 값, 만료 날짜/시간(쿠키 저장시간), 경로 정보들이 들어있다.
    [ 쿠키의 정보를 활용하면 헨젤과 그레텔처럼 사용자의 활동을 추적할 수 있게 된다. (잘 활용하면 사용자에 활동에 맞는 상품들을 추천할 수 있게 된다.) ]
  • 클라이언트의 상태 정보를 HTTP 요청에 참고해서 서버에 보내어 서버측에서는 추가적인 메타데이터를 확보하여 클라이언트의 상태를 확인할 수 있는 것이다. [ 로그인, 장바구니 등등. ]

 

쿠키의 종류

세션쿠키(Session)

  • 브라우저(클라이언트) 메모리에 있는 동안 유효하다가 판단한다.
  • ⇒ 브라우저가 종료되면 브라우저가 가진 메모리가 해제되면서 쿠키도 사라진다.

 

지속쿠키(Persistent) [ 추적 쿠키라고도 부른다 ] [ 프로필 저장, 장바구니, 구매 기록에 활용 ]

  • 파일로 저장되어 브라우저가 종료되어도 쿠키는 남아있는다.
  • 파일로 저장되기에 비교적 보안에 취약한 점이 있다.

쿠키의 프로세스 [ 어떤 프로세스로 쿠키는 작동하는가? ]

  1. 브라우저는 서버에 웹 페이지를 요청한다.
  2. 서버는 HTTP 헤더에 쿠키 값을 넣어서 클라이언트에 응답한다.
  3. 클라이언트는 해당 쿠키를 저장한다.
  4. 클라이언트가 웹페이지를 요청한 서버에 재 요청할때 쿠키 정보를 HTTP 헤더에 담아서 요청한다.
  5. 서버는 HTTP 헤더에 쿠키가 있을 경우 그에 맞는 비즈니스 로직을 수행한다.

쿠키의 문제점

  • CSRF : 사용자의 권한을 이용한 공격(비밀번호 변경, 결제 요청)
  • XSS : 사용자에 대한 정보 탈취
  • HTTP 요청시 자동으로 모든 쿠키를 전송하여 불필요한 트래픽을 발생시킨다.
  • 서드 파티 쿠키의 경우 개인 정보에 대한 프라이버시를 위협할 수 있다.

등등의 문제점이 있다.

 

쿠키가 문제점들을 개선하기 위해서 웹 스토리지라는 개념이 HTML5에 도입되었다고 한다.

[완전히 해결하지는 못했다. ]

 

우아한 테크에서는 프론트엔드쪽 크루분이 쿠키와 관련되어서 발표를 진행했다. 자바 스크립트와 관련된 보안 문제가 많다보니 프론트엔드쪽에서 선택해서 발표한 듯 하다.

 

네트워크의 영역이고 HTML, HTTP, 자바 스크립트, 로그인 등등의 내용이 섞여있다 보니까 프론트와 백엔드를 가리지않는 영역으로 생각된다. [ 물론 깊게 들어가면 프론트엔드쪽에서의 지식이 상당히 필요해진다. ]

 

이전에 봤던 책들의 내용을 추가해서 정리해봤다.


참고자료

  • 정아마추어 코딩님의 블로그 글 : 쿠키와 세션의 차이
  • TCP/IP 교과서 Chapter17 : HTTP, HTML, Chapter19. 암호화, 추적 및 개인 정보 보호]
  • Hello Digital World. [Chapter10. 월드 와이드 웹]
  • 디토의 웹스토리지 & 쿠키 쿠키이외에도 웹 스토리지까지에 내용도 진행한다. ]
반응형