WEB | 쿠키(Cookie)와 세션( Session)

바다·2023년 6월 1일
0

WEB

목록 보기
6/12
post-thumbnail

쿠키(Cookie)와 세션(Session)

쿠키와 세션을 왜 사용하나요?

HTTP 통신의 문제점 때문에 !

HTTP 통신

HTTP 통신 방법

  • HTTP는 서버와 client간의 요청과 응답으로 데이터를 주고 받는다.
  • 서버는 client의 요청에 응답하면 연결을 끊는다.
  • client는 서버에 또 다른 요청을 하려면 새로 연결하여 응답을 받아야 한다.

HTTP 통신 특징

1. Connectionless (비연결성)

  • HTTP는 TCP 연결을 맺고 요청(Request)를 보내면 서버는 응답(Response)를 보내고 연결이 끊어진다.
  • HTTP는 요청할 때 잠깐, 응답할 때 잠깐 연결하는 비연결성의 특징 (계속 연결된 상태가 아니다.)
  • HTTP 1.1 버전은 connection을 계속 유지하는 keep-alive 설정이 디폴트이나, HTTP 1.0 버전은 connectionless 이다.

2. Stateless (무상태)

  • 서블릿 컨테이너 내에 여러 개의 서블릿이 있는데, 각각의 서블릿에서 상태값(속성, 변수값)을 다른 서블릿에서 공유해서 쓸 수 없다.
  • HTTP는 상태를 따로 저장하지 않아서, 연결이 끊어지는 순간 모든 상태 정보가 사라지게 된다.

HTTP 통신 문제점

  • 유지되어야 하는 정보가 연결이 끊어지면서 사라지는 문제가 발생한다.
  • 예 : 로그인 후의 로그인 정보, 장바구니에 넣은 데이터 등

연결이 끊어진 후에도 client의 정보를 '유지'하기 위해서 사용하는 것이 쿠키와 세션이다.

쿠키(Cookie)란?

  • 클라이언트 로컬(사용자 컴퓨터)에 데이터를 저장하는 기술로, 필요 시에 저장한 데이터를 서버와 공유하여 정보를 유지한다.
  • 데이터를 Map 형식으로 저장하고, 데이터의 크기와 개수에 제한이 없다.
  • 쿠키 유지 시간, 유효 디렉토리, 유효 도메인 등을 설정할 수 있다.
  • 클라이언트에 300개까지 쿠키를 저장할 수 있고, 하나의 도메인 당 20개의 값만 가질 수 있으며, 하나의 쿠키 값은 4KB까지이다.
  • Response Header에 Set-Cookie 속성을 사용하면 클라이언트에 쿠키를 만들 수 있다.
  • 간단하게 이용할 수 있다는 장점이 있으나, 공용 PC를 사용하거나 url에 일부 데이터를 포함하는 경우 보안에 취약하다
  • 패키지 : javax.servlet.http.Cookie

쿠키의 속성

  1. namve = value
    ASCII 문자만 사용 가능하며, 한 번 설정된 쿠키의 이름은 수정될 수 없다.
  2. expire = '날짜'
    쿠키의 유지시간, 설정이 따로 없으면 브라우저 동작 동안 유지한다.
  3. paht = '경로'
    쿠키가 전달되는 서버의 유효 디렉토리를 지정하는 속성이다.
  4. domain = '서버정보'
    쿠키가 전달되는 유효 서버를 설정한다.
  5. secure
    Https나 ssl 보안 프로토콜로 요청할 때만 서버에 전송한다.

쿠키의 동작 순서

  1. 클라이언트가 페이지를 요청
  2. 서버에서 쿠키를 생성
  3. HTTP 헤더에 쿠키를 포함 시켜 응답
  4. 브라우저가 종료되어도 쿠키 만료 기간이 있다면 클라이언트에서 보관
  5. 같은 요청을 할 경우 HTTP 헤더에 쿠키를 함께 보냄
  6. 서버에서 쿠키를 읽어 이전 상태 정보를 변경할 필요가 있을 때, 쿠키를 업데이트하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답

쿠키 활용

  • 방문했던 사이트에 다시 방문하였을 때 아이디와 비밀번호 자동 입력
  • 팝업창을 통해 "오늘 이 창을 다시 보지 않기" 체크

세션(Session)

세션(Session)이란?

  • 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장한다.
  • client에 Session ID(고유)를 부여하고 client가 request로 Session ID를 보내면 ID가 일치하는 Session 정보를 컨테이너가 생성하여 그 객체의 데이터를 사용한다.
  • 브라우저를 닫거나, 서버에서 세션을 삭제했을 때만 삭제가 되기 때문에 쿠키보다 비교적 보안이 좋다.
  • 저장 데이터에 제한이 없다.
  • 사용자가 맣아질수록 서버 메모리를 많이 차지하게 된다.
  • 동시 접속자가 많은 웹의 경우 서버에 과부화를 주게될 수 있고, 성능 저하의 요인이 될 수 있다.
  • 패키지 : javax.servlet.http.HttpSession

세션의 동작 순서

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

세션 사용 예시

  • 로그인처럼 보안상 중요한 작업을 수행할 때 사용
  • 화면이 이동해도 로그인이 풀리지 않고 로그아웃을 하기 전까지 유지할 때

쿠키와 세션의 차이

  • 쿠키는 클라이언트에 저장, 세션은 서버에 저장
  • 보안 면에서는 세션이 더 우수 (세션은 쿠키를 이용해 쿠키에 Session ID만 저장하고 서버에 세션을 처리하기 때문)
  • 쿠키는 만료시간 동안 파일로 저장 (브라우저를 종료해도 정보가 남아있음)
  • 세션은 브라우저가 종료되면 만료시간에 상관없이 삭제
  • 쿠키와 세션 중, 쿠키의 속도가 더 빠름

쿠키와 세션을 나누어서 사용하는 이유

세션은 서버에 저장되므로 서버의 자원을 사용하고, 쿠키는 클라이언트에 저장되므로 서버의 자원 사용하지 않는다.

세션을 무분별하게 만들다보면 서버의 메모리에 부하가 걸릴 수 있으며, 이에 다라 속도가 느려질 수 있기 때문이다.

profile
ᴘʜɪʟɪᴘᴘɪᴀɴs 3:14

0개의 댓글