본문 바로가기

개발자는 알아야될 지식/쿠키(CooKie),세션(Session),캐시(Cache)

쿠키(CooKie) / 세션(Session) / 캐시(Cache)

[쿠키,세션 사용이유]

: HTTP의 비연결성비상태성보완하여 서버가 클라이언트를 식별하게 해주기 위해서 사용한다. 

 

[HTTP 비연결성,비상태성 이란?]

 

HTTP(Hypertext Transfer Protocol)는 WWW(World Wide Web)상에서 서버/클라이언트 사이의 요청과 응답 데이터를 주고 받기 위해 사용된다. 

이 HTTP 프로토콜에는 비연결성(Connectionless) , 비상태성(Stateless)이라는 특징을 가지고 있다.

  • 비연결성(Connectionless) : 클라이언트가 요청(Request)를 서버에 보내면 , 서버는 클라이언트에게 요청에 맞는 응답(Response)를 보내고 접속을 끊는다. (HTTP1.1 버전부터는 연결을 계속 유지하며 Request에 재활용하는 기능이 추가 되었다. 기본값으로 header에 keep-alive라는 값이 주어진다)
  • 비상태성(Stateless) : 연결을 끊는 순간 클라이언트의 상태정보를 가지지 않는 서버 처리 방식이다

쿠키,세션을 사용하지않는다면 

장점은 계속해서 통신 연결을 유지하지 않기 때문에 리소스 낭비가 줄어든다

단점은 통신 할때마다 새로 연결을 해줘야 하기에 클라이언트는 그때마다 인증을 해주어야한다. 

ex) 쇼핑몰에서 페이지를 이동할때마다 로그인을 해주어야한다.

 

쿠키와 세션은 위의 두가지(비연결성,비상태성) 특성을 보완하기 위해서 사용되기 시작했다.

 

[쿠키 CooKie]

  • 사용목적
    1. 세션 관리 : 로그인, 사용자 닉네임, 접속 시간, 장바구니 등 서버가 알아야할 정보들을 저장한다. 클라이언트에서 굳이 다시 서버에 요청하기에는 비효율적인 정보를 로컬에 저장하므로써 서버에 다시 요청할 필요가 없어지므로 생산성이 올라간다.
    2. 개인화 : 사용자마다 다르게 그 사람에 적절한 페이지를 보여준다.
    3. 트래킹 : 사용자의 행동과 패턴을 분석, 기록한다.
  • 저장위치
    1. 사용자의 브라우저, 브라우저마다 저장되는 쿠키는 다르다. (크롬으로 남긴 쿠키는 익스플로어에서 사용 불가능)
  • 데이터 형태
    1. 이름, 값, 만료날짜 (쿠키 저장기간), 경로정보가 들어있으며 통실할때 HTTP 헤더에 포함되는 텍스트(String)형식의 파일로 저장된다.
  • 쿠키가 사용되는 예시
    1. ID 저장, 로그인 상태 유지
    2. 일주일간 다시 보지 않기
    3. 최근 검색한 상품들 추천
    4. 쇼핑몰 장바구니
  • 쿠키 통신 방법
    1. 최초 통신에는 쿠키값이 없으므로 클라이언트는 서버로 Request를 한다.
    2. 서버에서 클라이언트가 보낸 Request Header에 쿠키가 없음을 판별하여 통신 상태(UserId, Password, 조작상태, 방문횟수 등등) 를 저장한 쿠키를 Response 한다.
    3. 클라이언트의 브라우저가 받은 쿠키를 생성/보존한다.
    4. 두번째 연결부터 HTTP Header에 쿠키를 실어서 서버에 Request 한다.
  • 만료 시점 
    1. 저장할 때 expires 속성을 정의하여 무효화 시키면 삭제될 날짜를 지정할 수 있다. 따로 지정되지 않은 경우에는 브라우저 종료시 만료된다.
  • 쿠키 제약 조건
    1. 클라이언트는 총 300개의 쿠키를 저장할 수 있다
    2. 하나의 도메인 당 20개의 쿠키를 가질 수 있다 20개가 넘어가면 적게 사용된 쿠키부터 삭제된다.
    3. 하나의 쿠키는 4KB 저장 가능하다.
  • 장점
    1.  다시 서버에 Request할 필요가 없기 때문에 속도가 빠르다
  • 단점
    1. 보안에 취약하다. 서버가 가지고 있지 않고 사용자에게 저장되기 때문에 임의로 고치거나 지울 수 있고 가로채기도 쉽다. 그래서 쿠키에는 중요한 정보를 담는것은 위험하다. 이러한 문제는 세션이 보완해준다 아래 세션을 보자.
  • 쿠키 Create, Read, Update, Delete 사용 방법
   
Create 1. 기본
document.cookie = "username = John"

2. 만료기간을 넣어서 쿠키가 자동 만료 되도록 한다. (UTC time을 이용)
document.cookie = "username = John; expires=Thu, 18 Dec 2013 12:00:00 UTC"

3. 파라미터를 이용하여 쿠키가 어디 브라우저에 속할 수 있을지 알려줄 수 있다.
document.cookie = "username = John; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/"
Read 1. 쿠키를 읽어온다 (c에는 쿠키가 하나의 스트링으로 리턴되어 있다)
var c = document.cookie
Update 1. 이미 존재하는 쿠키를 수정한다. (덮어쓰기)
document.cookie = "username=John; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/"
Delete 1. 쿠키 삭제방법 (만료 기간을 과거로 바꿔버린다)
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/";

 

[세션 Session]

  • 사용목적
    1. 쿠키와 같이 임시로 필요한 정보를 저장해둠으로써 생산성을 높인다. 쿠키와의 차이점은 저장위치가 서버이고 주로 중요한 데이터를 저장할때 서버에 저장하는 세션을 이용하여 저장하면 보안성이 높아진다.
  • 저장위치 
    1. 서버
  • 데이터 형태 
    1. 객체(Object) 형식
  • 세션이 사용되는 예시
    1. 사용자의 아이디, 닉네임 등의 정보를 세션에 담아두면 클라이언트에서 요청이 있을때 DB에 접근을 하지 않아서 효율적입니다.
  • 세션 통신 방법
    1. 클라이언트가 서버에 접속하면 세션 ID를 발급한다.
    2. 서버에서는 클라이언트로 발급해준 세션 ID를 쿠키를 이용해서 저장한다.
    3. 클라이언트는 다시 페이지에 접속할 때, 쿠키에 저장된 세션 ID를 서버에 전달한다.
    4. 서버는 Request Header에 쿠키 정보(세션ID)로 클라이언트를 판별한다.
  • 만료 시점
    1. 세션 아이디는 웹 브라우저 당 1개씩 생성되며 클라이언트가 로그아웃하거나, 설정한 시간동안 반응이 없을경우 무효화된다.
    2. 로그아웃하면 새로운 사용자로 인식하여 새로운 세션이 생성됩니다. ( 쿠키는 내 웹브라우저에 저장되기 때문에 로그아웃유무와 관계없이 삭제하지 않으면 유지됩니다.)
  • 세션 제약 조건 
    1.  제한 없음
  • 장점
    1. 서버에서 관리하기 때문에 로그관리가 용이함
    2. 서버에 저장되어있어 클라리언트에 저장되있는 쿠키보다 보안이 우수하다.
  • 단점
    1. 서버에 저장되어있어 쿠키보다 느림, 정보가 많으면 과부하가 생길 수 있다
  • 세션 메소드
메소드 이름 리턴 타입 설명
getAttribute(String name) java.lang.Object 세션 속성명이 name인 속성의 값을 Object 타입으로 리턴한다. 해당 되는 속성명이 없으면 null 값을 리턴한다.
getAttributeNames() java.util.Enumeration 세션 속성의 이름들을 Enumeration 객체 타입으로 리턴한다.
getCreationTime() long 1970년 1월 1일 0시 0초를 기준으로 현재 세션이 생성된 시간까지 경과한 시간을 계산하여 1/1000초 값으로 리턴한다.
getId() java.lang.String 세션에 할당된 고유 식별자를 String 타입으로 리턴한다.
getMaxInactiveInterval() int 현재 생성된 세션을 유지하기 위해 설정된 세션 유지시간을 int형으로 리턴한다.
invalidate() void 현재 생성된 세션을 무효화 시킨다.
removeAttribute(String.name) void 세션 속성명이 name인 속성을 제거한다.
setAttribute(String name, Object value) void 세션 속성명이 name인 속성에 속성값으로 value를 할당한다.
setMaxInactiveInterval(int interval) void 세션을 유지하기 위한 세션 유지시간을 초 단위로 설정한다.
  • 세션 해킹, 예방법
    • 해킹과정
      1. 홈페이지 관리자의 세션 아이디를 탈취
      2. 쿠키값을 관리자의 세션 아이디로 변경
      3. 관리자 권한으로 이용
    • 예방법
      1. 세션에 로그인 했을 때의 IP를 저장
      2. 페이지 이동할때 마다 현재 IP와 세션의 IP/브라우저 정보(UserAgent)를 비교 검사

[캐시 Cache]

  • 사용목적
    1. 웹페이지를 구성하는 이미지, 비디오, CSS/JS 등 리소스 파일들의 임시 저장소이며, 똑같은 웹페이지에 접속할 때 서버를 거치지않고 사용자 PC의 캐시에서 로드하므로 로딩 속도를 개선한다.
  • 저장 위치
    1. 쿠키와 동일하게 클라이언트에서 가지고 있다.

 

참고 자료:

ryusae.tistory.com/7

 

[HTTP] 쿠키/세션/캐시의 차이점은?

0. HTTP 의 특징 (1) Stateless 프로토콜 클라이언트의 상태 정보를 가지지 않는 서버 처리 방식이다. 클라이언트와 첫번째 통신에서 데이터를 주고 받았다 해도, 두번째 통신에서 이전 데이터를 유

ryusae.tistory.com

devuna.tistory.com/23

 

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

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

devuna.tistory.com