HTTP란 + 쿠키&세션

  03 Nov 2019


RESTful API을 공부하기 위한, HTTP 개념 공부

HTTP란?

  • HyperText Transfer Protocol의 준말로 링크기반으로 데이터를 요청하고 받겠다 는 것
  • 클라이언트와 서버가 요청을 하고 응답을 하기위해 따르는 프로토콜
  • 인터넷에서 데이터를 주고받을 수 있는 프로토콜
  • HTML문서를 주고받을 수 있음, 뿐만아니라 오디오, 이미지, 동영상, 텍스트 등을 주고 받을 수 있음

HTTP 동작 방식

Image

  • 클라이언트 : 웹 어플리케이션의 경우, 브라우저를 통해서 서버에 요청 = 프로토콜 + 도메인 + URI
  • 서버 : 클라이언트로부터 받은 요청을 내부적으로 처리하여 그에 대한 결과를 응답함

HTTP 특징 및 기능

1. Connectionless + Stateless
  • 요청 - 응답 후 연결을 해제함 👉 비연결성 프로토콜 & TCP/IP를 이용하는 프로토콜
  • 비연결성 프로토콜 👉 쿠키와 세션(클라이언트와 서버의 이전 상태 정보 저장)이 필요함.
  • 수십만명이 웹서비스를 사용(요청)하더라도, 최소 유지를 할 수 있기 때문에, 많은 유저의 요청을 처리할 수 있음
2. Keep-Alive : HTTP 1.1부터 지원하는 기능
  • 웹사이트는 하나의 페이지에 대해 수십개의 이미지와 CSS파일, JS파일로 구성되어 있다.
  • 1의 경우, 어떤 x라는 요청에 대해 x라는 응답을 보내는 것으로 설계되어 있으나, 1요청 1응답은 여러번 연결을 끊었다 붙여야 해서 비효율적이라고 할 수 있다.
  • Keep-Alive 지원으로 지정된 시간동안, 연결을 끊지 않고 연결된 상태를 유지할 수 있다.
  • Keep-Alive의 time out 내 클라이언트가 재요청하면, 새로운 연결이 아닌 기존 연결된 것을 이용한다.
  • Connectionless의 연결 비용을 줄이기 위한 방식

HTTPS란!

아래 열거한 약점을 보완하기 위해, HTTP의 암호화나 인증의 구조를 더한 것을 HTTP Secure(HTTPS)이라고 부른다.

HTTP의 문제성
  • 평문(암호화하지않은) 통신이기 때문에 도청이 가능하다.
  • 통신 상대를 확인하지 않기 때문에 위장이 가능하다.
  • 완전성을 증명할 수없기 때문에 변조가 가능하다.

HTTPS는 HTTP 통신을 하는 소켓 부분을 SSL(Secure Socket Layer)이나 TLS(Transport Layer Security)이란 프로토콜로 대체하고 있는 것이다. 즉 TCP 통신을 하지 않고, SSL과 통신을 하게되며, 이로써 암호화, 증명서, 완전성 보호를 이용할 수 있게 된다.

SSL : Socket Secure Layer

CA(Certificate Authority)라 불리는 서드 파티로부터 서버와 클라이언트를 인증하는데 사용된다. 클라이언트와 서버간 공유하는 암호화키를 가지고 암호화된 데이터가 송수신되는 방식이다.

쿠키-Cookie란?

쿠키는 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일이다.
사용자 인증이 유효한 시간을 명시할 수있고, 유효시간이 정해지면 브라우저가 종료되어도 인증이 그 시간동안 유지된다.
쿠키는 클라이언트의 상태 정보를 클라이언트의 로컬 에 저장했다가 참조한다.
Response Header에 Set-Cookie 속성을 사용하여 클라이언트에 쿠키를 만들 수 있다.
사용자가 서버에 요청을 보낼 때, 브라우저가 Cookie를 Reqeust-Header(http헤더)에 넣어서 서버에 전송 한다.

사용 예시
  • 자동 로그인, 팝업에서 “오늘 더 이상 이 창을 보지 않음”의 체크
  • 아이디와 비밀번호를 저장하시겠습니까? 등등

세션-Session이란?

세션은 쿠키를 기반으로 하고 있으나, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버측에서 관리한다.
서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여하며, 웹 브라우저가 서버에 접속하여 브라우저를 종료할 때까지 인증상태를 유지한다. (접속 시간에 제한을 두어, 일정 시간동안 응답이 없다면 정보가 유지되지 않도록 설정도 가능하다.)
사용자에 대한 정보를 서버에 두기 때문에, 보안에 더 좋지만 사용자가 많아질수록 서버에 메모리를 많이 차지하게 된다.
즉 동접사 수가 많은 웹사이트의 경우, 서버에 과부하를 주게 되어 성능 저하에 요인이 된다.

사용예시
  • 로그인 같이 보안상 중요한 작업을 수행할 때 사용함

쿠키와 세션의 차이

  • 우선 저장되는 위치가 다르다. 쿠키의 경우, 사용자 로컬 브라우저에 저장되고 세션의 경우 서버에 저장되는 값이다.
  • 보안 면에서는 세션이 더 우수하지만, 요청 속도는 쿠키가 세션보다 더 빠르다. 👉 세션은 서버의 처리가 필요하기 때문이다.
  • 쿠키는 클라이언트 로컬에 저장되기 때문에, 변질되거나 request에서 스니핑당할 위험이 있으나 세션은 쿠키의 session id값만 저장하고, 그것으로 서버에서 구분하여 처리하기 때문에 보안성이 훨씬 좋다.
  • LifeCycle : 쿠키 역시 만료시간이 있으나, 파일로 저장되기 때문에 브라우저를 종료해도 계속 정보가 남아있을 수 있다. 세션은 브라우저가 종료되면 만료시간에 상관없이 삭제된다.

Cache

  • 캐시는 이미지나 CSS, JS파일을 브라우저나 서버 앞단에 저장해놓고 사용하는 것이다.
  • 한번 캐시에 저장되면 브라우저를 참고하기 때문에, 서버에서 변경되어도 사용자는 변경되지 않게 보일 수 있는데, 캐시를 지워주거나 서버에서 클라이언트로 응답을 보낼 때 header에 캐시 만료시간을 명시하는 방법을 이용할 수 있다. (웹 개발에서 디자인 수정을 할 때, Cache때문에 값이 변경되지 않는 경우를 종종 보았을 것이다!!)
  • Web Storage : 클라이언트쪽에 소량의 데이터를 저장해두기 위한 스토리지이다.
  • 쿠키는 4KB로 저장 용량이 작다. 반면 웹 스토리지는 크기 제한이 없다.
  • 쿠키는 같은 사이트 내에서 둘 이상의 탭을 열었을 때, 트랜잭션 추적이 어려우고, 여러 보안문제가 있다.
  • 반면 웹 스토리지는 서버로 정보를 보내지 않고, 유효기간도 없으며, JavaScript 객체를 저장할 수 있고(복사본이 저장되는 개념), Session Storage와 Local Storage가 구분되어 있다.
Session Storage
  • 도메인마다 생성된다.
  • 윈도우와 같은 유효범위와 생존기간을 가진다. 윈도우 복제로 생성된 경우, 같은 값을 가진 세션 스토리지가 복제된다.
  • 새로 생성된 윈도우와 기존 윈도우의 세션 스토리지는 별개로 존재하기 때문에 서로 영향을 주지 않는다.
    Local Storage
  • 도메인마다 따로 생성된다. 도메인이 다르면, 서로의 로컬 스토리지에 접근할 수 없다.
  • 지속기간에 제한이 없다.

참고자료

HTTP와 REST API : ijbgo_tistory
Cookie와 Session : interconnection

...