본문 바로가기

Computer Science/Web

Cookie와 Session

Cookie와 Session

 

Cookie와 Session을 사용하는 이유

  • HTTP 프로토콜의 특징이자 약점인 비연결지향(Connectionless)와 상태정보유지안함(Stateless) 보완하기 위해서 사용합니다.
    • 비연결지향(Connectionless) : 클라이언트가 Request를 서버에 보내면 서버는 클라이언트에게 요청에 맞는 Response를 보내고 접속을 끊습니다.
    • 상태정보유지안함(Stateless) : 연결을 끊는 순간, 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지하지 않는 특성

 

 

Cookie

  • 정보를 유지할 수 없는 Connectionless, Stateless의 성격을 가진 HTTP 프로토콜의 단점을 해결하기 위해 도입됨
  • 웹 서버가 브라우저에게 지시하여 사용자의 로컬 컴퓨터의 파일 또는 메모리에 저장하는 Key-Value 쌍의 작은 데이터 파일
  • 파일에 담긴 정보는 인터넷 사용자가 같은 웹 사이트를 방문할 때마다 읽히고 수시로 새로운 정보로 바뀔 수 있습니다.
  • Cookie에는 이름, 값, 만료 날짜(쿠키 저장 기간), 경로 정보 등이 들어있습니다.
  • Cookie의 구성 요소
    • 쿠키이름, 쿠키값, 만료기간, 전송할 도메인명, 전송할 경로, 보안 연결 여부, HttpOnly 여부
  • Cookie값 확인 방법
    • 브라우저 개발자 도구의 네트워크에서 쿠키값을 확인할 수 있지만, 가독성이 떨어지고 수정이 불가능합니다.
    • 브라우저 쿠키관리 탭 또는 쿠키관리 플러그인을 설치하면 쿠키를 쉽게 수정할 수 있습니다.
    • 이처럼 Cookie는 클라이언트에서 수정할 수 있기 때문에 위변조의 위험이 항상 존재합니다. 따라서 쿠키값(Value)를 암호화해야 더욱 안전합니다.
  • Cookie 절차
    1. 브라우저에서 웹 페이지 접속
    2. 클라이언트가 요청한 웹 페이지를 받으면서 Cookie를 클라이언트 로컬(하드)에 저장
    3. 클라이언트가 재요청시 웹 페이지 요청과 함께 Cookie 값도 전송
    4. 지속적으로 로그인 정보를 가지고 있는 것처럼 사용
  • Cookie의 종류
    • Session Cookie : 보통 만료 시간을 설정하고 메모리에만 저장되며 브라우저 종료시 Cookie를 삭제
    • Persistent Cookie : 장기간 유지되는 Cookie, 파일로 저장되어 브라우저 종료와 관계없이 사용
    • Secure Cookie : HTTPS에서만 사용, 쿠키 정보가 암호화되어 전송
    • Third-Party Cookie : 방문한 도메인과 다른 도메인의 Cookie, 보통 광고 배너 등을 관리할 때 유입 경로를 추적하기 위해 사용
  • Cookie 사용 사례
    • 자동 로그인
    • 팝업에서 '오늘 더 이상 이 창을 보지 않음' 체크
    • 쇼핑몰의 장바구니
  • Cookie의 단점
    • Cookie에 대한 정보를 매 헤더(Http Header)에 추가하여 보내기 때문에 상당한 트래픽을 발생시킴 (하지만 도메인 설정을 통해 지정한 도메인으로 요청할 때에만 쿠키값이 제공되도록 할 수도 있습니다.)
    • 결제 정보 등을 Cookie에 저장했을 때, Cookie가 유출되면 보안에 대한 문제점도 발생할 수 있습니다.

 

 

Session

  • Cookie의 트래픽 문제와 Cookie를 변경하는 보안적 이슈를 해결하기 위해 등장
  • 브라우저가 종료되기 전까지 클라이언트의 요청을 유지하게 해주는 기술입니다.
  • HTTP Session id를 식별자로 구별하여 데이터를 사용자의 브라우저에 쿠키 형태가 아닌 접속한 서버 DB에 정보를 저장
  • Session id : 웹 서버에 클라이언트에 대한 정보를 저장하고 클라이언트에게는 클라이언트를 구분할 수 있는 ID를 부여하는데 이것을 Session id라고 함
  • 클라이언트는 HTTP Session id를 Cookie로 메모리 저장된 형태로 가지고 있습니다.
  • 메모리에 저장하기 때문에 브라우저가 종료되면 사라지게 됩니다.
  • Session 사용 사례
    • 로그인 정보 유지
  • Session 절차
    1. 클라이언트가 서버에 Resource를 요청합니다.
    2. 서버에서는 HTTP Request를 통해 Cookie에서 Session id를 확인한 후, 없으면 Set-Cookie를 통해 새로 발행한 Session id를 보냅니다.
    3. 클라이언트는 HTTP Request 헤더에 Session id를 포함하여 원하는 Resource를 요청합니다.
    4. 서버는 Session id를 통해 해당 Session을 찾아 클라이언트 상태 정보를 유지하며 적절한 응답을 합니다.

 

 

Cookie VS Session

  • Cookie와 Session의 차이는 여러 관점에서 해석해볼 수 있습니다,
  1. 저장 위치

    Cookie는 클라이언트에 파일로 저장되며, Session은 서버 DB에 저장됩니다.

  2. 보안
    Cookie는 클라이언트 로컬에 저장되기 때문에 보안에 취약하지만, Session은 Cookie를 이용해서 Session id만 저장하고 그것으로 구분하여 서버에서 처리하기 때문에 비교적 보안성이 좋습니다.
  3. 라이프 사이클(Life Cycle)
    Cookie는 파일로 저장되기 때문에 브라우저를 종료해도 계속해서 정보가 남아있을 수 있습니다. 또한, 만료 기간을 넉넉하게 잡아두면 '쿠키 삭제'를 할 때까지 유지될 수도 있습니다. 반면에, Session도 만료 기간을 정할 수 있지만 브라우저가 종료되면 만료 기간에 상관없이 삭제됩니다.
  4. 속도
    Cookie는 로컬에 정보가 있기 때문에 서버에 요청시 속도가 빠르지만, Session은 정보가 서버 DB에 있기 때문에 처리가 요구되어 비교적 느린 속도를 냅니다.

 

 

Session을 주로 사용하면 좋은데 왜 Cookie를 사용할까?

 

Session은 서버의 자원을 사용하기 때문에 무분별하게 만들다보면 서버의 메모리가 감당할 수 없어질 수가 있고, 속도가 느려질 수 있기 때문에