본문 바로가기

웹 개발 한걸음

[JSP] Session과 Cookie

 


본 포스팅은

정보 제공용이 아닌

여러 개발자 블로그들의 자료를

바탕으로 보고 배운 것을 직접 정리해본 포스트 입니다.

 


 

 

** 세션(Session)과 쿠키(Cookie)를 사용하는 이유

 

->> HTTP 프로토콜의 성격과 이에 대한 단점을 보완하기 위함이다.

  1. 비연결성지향(Connectionless) : HTTP클라이언트에서 요청이 오면 서버는 알맞는 응답을 주고 연결을 끊는 특성.
  2. 상태없음(Stateless) : 커넥션을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지하지 않는 특성.

> 장점: 커넥션을 유지하지 않기 때문에 서버 리소스 낭비가 줄어든다.

> 단점: 통신할 때마다 새로 커넥션을 만들기 때문에 클라이언트에서는 상태 유지가 되지 않아 통신할 때마다 인증 같은 절차를 밟아야한다. 이러한 단점을 보완하기 위해 나온 것이 세션과 쿠키이다.

 

 

 

** 쿠키(Cookie)

쿠키 프로세스

 

  • 쿠키란? 웹 서버가 브라우저에게 지시하여 사용자의 로컬 컴퓨터에 저장되는 키와 값(key, value)으로 이루어져있는 파일 또는 메모리에 저장하는 작은 기록 정보 파일이다. 
  • 왜 사용하는가?
    • 세션 관리 : 주로 로그인 정보나 장바구니 정보 등을 저장하는 용도로 쓴다.
    • 개인화 : 사용자에 따라 적절한 페이지를 보여줄 수 있다.
    • 트래킹 : 사용자의 행동과 패턴을 분석, 기록한다. 
  • 예시
    • ID 저장, 로그인 상태 유지
    • 일주일간 다시 보지 않기
    • 최근 검색한 상품들을 광고에서 추천
    • 쇼핑몰 장바구니 기능
  • 단점 : 저장이 서버가 아닌 사용자(클라이언트)에 저장되기 때문에 보안이 매우 취약하다. 최근 암호화를 통해 보완되고 있으나 한계가 있어 민감하거나 중요한 정보를 담는 것은 위험하다.
  • 구성 : 이름(name), 값(value), 저장만료기간(Expiers), 경로(Path), 도메인(Domain), 보안연결(Secure)등으로 구성되어있다.

 

 



** 세션(Session)

 

  • 왜 사용하는가?
    • 쿠키의 단점을 보완
    • 쿠키에 대한 정보를 매 헤더(HTTP Header)에 추가하여 보내기 때문에 트래픽을 발생
    • 민감하거나 중요한 정보를 쿠키에 담게 되면 생기는 보안에 대한 문제점

 

  • 세션(Htttp Session)이란? 
    • 서버에 클라이어트의 상태 정보를 저장하는 기술로 논리적인 연결을 세션이라고 한다.

 

세션 프로세스

 

  • 프로세스
    • 1. 클라이언트가 서버에 Resource를 요청.
    • 2. 서버는 HTTP Request를 통해 Cookie에서 Session-id를 확인. -> 없다면 setCookie를 통해 새로 만들어 응답을 통해 발급
    • 3. 클라이언트는 발급받은 세션 아이디를 쿠키로 임시로 저장.  
    • 4. 서버는 이 Session-id로 클라이언트를 구분. Session id를 통해 해당 세션을 찾아 클라이언트 상태 정보를 유지하며 적절한 응답.

 

  • 특징
    • Http Session id를 식별자로 구별하여 데이터를 사용자의 브라우저에 쿠키 형태가 아닌 접속한 서버 DB에 저장한다.
    • 클라이언트 Http Session id를 쿠키로 메모리 저장된 형태로 가지고 있다.
    • 세션 아이디는 웹 브라우저 당 1개씩 생성되어 웹 컨테이너에 저장되며 브라우저 종료시 소멸됨.
    • 로그인한 사용자에 대해서만 세션을 생성하는 것이 아니라 로그아웃하면 새로운 사용자로 인식해서 새로운 세션이 생성된다.

 

  • 장점
    • 아이디, 닉네임 등의 정보를 세션에 담아두면 요청이 있을 때 마다, DB에 접근할 필요가 없어서 효율적입니다.

 

  • 단점
    • load-balancing/시스템 효율성에서 handling하기 어려움.
    • 세션 저장 장치가 부족한 시스템에는 적합하지 않음.

 



** 쿠키와 세션의 비교

 

 

 

 

 

 

 

♣ 참고 및 인용