본문 바로가기

CS지식/네트워크

[CS 지식 - 네트워크] 세션과 쿠키

 

1. HTTP의 특징, 세션과 쿠키를 사용하는 이유

  • HTTP(Hypertext Transfer Protocol) : 인터넷상에서 데이터를 주고 받기 위해 서버/ 클라이언트 모델을
                                                               따르는 통신규약
  • HTTP 특징 : 비연결성(Conectionless), 비상태성(Stateless)
    1. 비연결성(Conectionless) : 클라이언트가 요청을 한 후 응답을 받으면 연결을 끊음
    2. 비상태성(Stateless) : 통신이 끝나면 상태를 유지하지 않는 특징
    → 서버의 자원을 절약하기 위해 모든 사용자의 요청마다 연결과 해제의 과정을 거치기 때문에
         연결상태가 유지되지 않고, 연결 해제 후에 상태 정보가 저장되지 않는다는 것
    이로 인해, 사용자를 식별할 수 없어 같은 사용자가 요청을 여러번 하더라도 매번 새로운 사용자로 인식하는 단점
  • HTTP의 특징을 보완해 서버가 클라이언트를 식별하게 해주는것이 쿠키와 세션

 

2. 쿠키(Cookie)

2-1. 쿠키 개념

  • 웹 사이트에 접속 할 때 생성되는 정보들을 담은 임시 파일
    (클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일)
  • 클라이언트의 상태 정보를 로컬에 저장했다가 참조
  • Response Header에 Set-Cookie 속성을 사용하면 클라이언트가 쿠키를 생성 가능
  • 사용자가 따로 요청하지 않아도 브라우저가 Request시에 Request Header를 넣어서 자동으로 서버에 전송

2-2. 쿠키 특징

  • 데이터 형태 : Key와 Value로 구성되서 String형태로 이루어져 있음
    → 브라우저마다 저장되는 쿠키가 다름, 서버에서는 브라우저가 다르면 다른 사용자로 인식
        (Chrom에서 남긴 쿠키는 마이크로소프트 엣지에서 사용x)
  • 이름, 값, 만료일(저장기간), 경로 정보로 구성
  • 클라이언트에 총 300개의 쿠키 저장 가능
  • 하나의 도메인 당 20개의 쿠키 가질 수 있음
  • 하나의 쿠키는 4KB(=4096byte)까지 저장 가능
  • 단점 - 사생활 침해(방문했던 웹 사이트에 대한 정보 및 개인정보가 기록됨)
               → 웹 브라우저 자체에 쿠키 거부 기능 사용 가능
                단, 쿠키의 본래 목적인 웹 브라우저와의 연결을 지속시키는 기능을 수행 할 수 없는 경우가 발생
            - 보안 취약(사용자에게 저장되기때문에 임의로 고치거나 지울 수 있고 가로채기 쉬움)
              → 민감하거나 중요한정보를 쿠키에 담는것은 위험

2-3. 쿠키 구성요소

  • 이름 : 각각의 쿠키를 구별하는데 사용되는 이름
  • 값 : 쿠키의 이름과 관련된 값
  • 유효시간 : 쿠키의 유지시간
  • 도메인 : 쿠키를 전송할 도메인
  • 경로 : 쿠키를 전송할 요청 경로

2-4. 쿠키 동작순서

  1. 클라이언트가 페이지를 요청(사용자가 웹사이트에 접근)
  2. 웹서버는 쿠키를 생성
  3. 생성한 쿠키를 정보에 담아 HTTP화면을 돌려줄 떄, 같이 클라이언트에게 돌려줌
  4. 넘겨받은 쿠키는 클라이언트가 가지고 있다가(로컬PC에 저장) 다시 서버에 요청 할 때 요청과 함께 쿠키를 전송
  5. 동일 사이트에 재방문 시 클라이언트의 PC에 해당 쿠키가 있는경우, 요청 페이지와 함께 쿠키를 전송

2-5. 예시

  • 방문 사이트 로그인시, '아이디와 비밀번호를 저장하시겠습니까?'
  • 팝업창을 통해 '오늘 이창 다시 보지 않기' 체크
  • 최근 검색한 상품들을 광고에 추천
  • 쇼핑몰 장바구니 기능
  • 자동완성

 

3. 세션(Session)

3-1. 세션 개념

  • 쿠키의 단점을 보완해주는 것이 세션임
  • 일정 시간 동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고,
    그 상태를 유지시키는 기술
  • 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보는 것

3-2. 세션 특징

  • 쿠키는 로컬에서 관리 하고 있지만, 세션은 서버측에서 관리
    → 웹 서버에 저장되는 쿠키(세션 쿠키)
  • 저장 데이터에 저한이 없음(서버 용량이 허용하는 선에서)
  • 서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서
    브라우저를 종료할 때 까지 인증상태를 유지
  • 접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않게 설정가능
  • 쿠키보단 보안이 좋지만(정보를 서버에서 관리하기 때문에), 사용자가 많아질수록 서버 메모리를 많이 차지하게 됨
    → 동시접속자 수가 많은 웹 사이트의 경우 서버에 과부하를 주게 되므로 성능 저하의 요인이 됨
  • 클라이언트가 Request를 보내면, 해당 서버의 엔진이 클라이언트에게 유일한 ID를 부여(세션ID)

3-3. 동작순서

쿠키와 세션을 활용해 사용자를 확인하는 방식

  1. 클라이언트가 페이지를 요청(사용자가 웹사이트에 접근)
  2. 서버는 접근한 클라이언트의 Request-Header 필드인 Cookie를 확인하여, 클라이언트가 해당 session-id를 보냈는지 확인
  3. session-id가 존재하지 않는 다면 서버는 session-id를 생성해 클라이언트에게 돌려줌
  4. 서버에서 클라이언트로 돌려준 session-id를 쿠키를 사용해 서버에 저장
  5. 클라이언트는 재접속 시, 이 쿠키를 이용해 session-id값을 서버에 전달

3-4. 사용예시

  • 로그인 세션을 로그아웃하기전까지 유지

4. 쿠키와 세션 차이

  쿠키 세션
사용자 정보 저장 위치 클라이언트 서버
보안
클라이언트 로컬에 저장되기 때문에 변질 가능성↑
request에서 스니핑 당할 우려↑

서버의 처리가 필요하기 때문
쿠키를 이용해 session-Id만 저장하고
session-id로만 구분해 보안↑
라이프 사이클 파일로 저장하기 때문에
브라우저를 저장해도 정보가 남아 있을 가능성↑
브라우저가 종료되면 만료시간에 상관없이 삭제됨
ex)크롬에서 다른 탭을 사용해도 세션 공유
다른 브라우저를 사용하면 다른 세션 사용가능
저장형식 text Object
만료시점 쿠키 저장시 설정
(설정 없을 시에는 브라우저 종료 시 만료)
알 수 없음

5. 세션을 사용하면 좋은데 왜 쿠키를 사용?

  • 세션을 무분별하게 만들다보면 서버의 메모리가 감당 할 수 없어질수가 있고 속도가 느려질 수 있기 때문에
    쿠키가 유리한 경우가 있음

+ 캐시(Cache)

  • 이미지나 css,js파일등을 브라우저나 서버 앞 단에 저장해놓고 사용하는 것
  • 한번 캐시에 저장되면 브라우저를 참고하기때문에 서버에서 변경이 되어도 사용자는 변경되지 않게 보일 수 있는데 이런 부분을 캐시를 지워주거나 서버에서 클라이언트로 응답을 보낼 때 header에 캐시 만료시간을 명시하는 방법 이용가능

 

예상질문)

  • 세션과 쿠키의 사용이유
  • 쿠키란?
  • 쿠키 특징
  • 세션?
  • 세션 특징
  • 세션과 쿠키의 차이점(라이프사이클에 대해 중점적으로 대답하는것이 바람직)

 

 

참고)

쿠키(Cookie)와 세션(Session)의 차이 (+캐시(Cache)) — 슬기로운 개발생활 (tistory.com)

 

쿠키(Cookie)와 세션(Session)의 차이 (+캐시(Cache))

쿠키와 세션을 사용하는 이유? HTTP 프로토콜의 특징이자 약점을 보완하기 위해서 사용한다. HTTP 프로토콜의 특징 1. Connectionless 프로토콜 (비연결 지향) 클라이언트가 서버에 요청(Request)을 했을

dev-coco.tistory.com

[web] 쿠키(cookie)와 세션(session)의 개념/차이/용도/작동방식 (tistory.com)

 

[web] 쿠키(cookie)와 세션(session)의 개념/차이/용도/작동방식

[web] 쿠키(cookie)와 세션(session)의 개념/차이/용도/작동 쿠키와 세션을 이해하기 위해서는 먼저 http의 특징에 대해 이해하면 도움이 됩니다. 비연결성(Connectionless) HTTP(Hypertext Transfer Protocol)는 인터

devuna.tistory.com

쿠키와 세션 개념 (tistory.com)

 

쿠키와 세션 개념

노션 페이지(아래 내용과 동일) 개요 쿠키와 세션은 개발자 말고도 인터넷 사용자라면 누구나 많이 들어본 단어입니다. 하지만 개념에 대해서는 많은 사람들이 헷갈려 하기에 쉽고 간단하게 정

interconnection.tistory.com