쿠키(Cookie)와 세션(Session) 완벽 가이드

2024. 10. 18. 14:54·🗄️ Backend/JSP

#쿠키(Cookie)와 세션(Session)


웹 애플리케이션을 개발하면서 쿠키와 세션은 필수적으로 이해해야 하는 개념입니다. 이 글에서는 쿠키와 세션의 개념, 특징, 사용 방법, 그리고 두 기술 간의 차이점을 자세히 설명하겠습니다.

쿠키(Cookie)

1. 개요

쿠키는 웹 브라우저와 서버 간의 통신에서 특정 정보를 지속적으로 유지하기 위한 데이터 저장 방식입니다. HTTP 프로토콜은 비연결성(stateless) 프로토콜로, 각 요청이 끝난 후 클라이언트와의 연결을 종료합니다. 따라서 서버는 클라이언트의 상태를 유지할 방법이 필요하고, 이때 쿠키가 사용됩니다.

2. 특징

  • 클라이언트 측 저장: 쿠키는 서버가 생성하여 클라이언트(웹 브라우저) 측에 저장됩니다. 이 데이터는 클라이언트의 로컬 저장소에 위치하게 됩니다.
  • 정보 참조 및 변경: 서버는 클라이언트의 요청 시마다 쿠키의 속성값을 참조하거나 변경할 수 있어, 사용자의 상태나 선호 정보를 손쉽게 관리할 수 있습니다.
  • 제한된 용량: 쿠키는 하나당 최대 4KB로 용량이 제한되며, 클라이언트는 최대 300개의 쿠키를 저장할 수 있습니다. 따라서 총 용량은 약 1.2MB로 제한됩니다.

3. 쿠키 생성 및 사용 방법

쿠키를 생성하고 사용하는 과정은 다음과 같습니다.

  1. 쿠키 생성: Cookie 클래스를 이용하여 쿠키 객체를 생성합니다.
  2. 속성 설정: setMaxAge() 및 setPath() 같은 메서드를 통해 쿠키의 다양한 속성을 설정합니다.
  3. 응답 객체에 탑재: 설정된 쿠키를 response 객체에 추가하여 클라이언트에 전달합니다.
  4. 로컬 환경에 저장: 클라이언트는 응답을 통해 받은 쿠키를 로컬 환경에 저장합니다.

예시 (Java)

// 1. 쿠키 생성
Cookie cookie = new Cookie("cookieName", "cookieValue");

// 2. 쿠키 속성 설정
cookie.setMaxAge(60 * 60 * 24); // 쿠키 유효 기간을 1일로 설정
cookie.setPath("/"); // 쿠키의 유효 경로 설정

// 3. 응답 객체에 쿠키 탑재
response.addCookie(cookie);

4. 쿠키의 주요 속성

속성 설명
Name 쿠키의 이름
Value 쿠키의 값
Max-Age 쿠키의 유효 기간(초 단위)
Path 쿠키의 유효 경로
Domain 쿠키의 유효 도메인
Secure HTTPS 연결에서만 전송되는 쿠키
HttpOnly JavaScript에서 접근할 수 없는 쿠키

5. 쿠키의 활용 예시

  • 세션 관리: 사용자가 로그인 상태를 유지하도록 돕습니다.
  • 사용자 설정 저장: 사용자의 언어 설정이나 테마를 기억합니다.
  • 트래킹 및 분석: 사용자 행동을 추적하여 분석합니다.

6. 주요 메서드 요약

메서드 기능
setMaxAge() 쿠키의 유효시간을 설정합니다.
setPath() 쿠키 사용의 유효 디렉토리를 설정합니다.
setValue() 쿠키의 값을 설정합니다.
setVersion() 쿠키 버전을 설정합니다.
getMaxAge() 쿠키 유효기간 정보를 얻습니다.
getName() 쿠키의 이름을 얻습니다.
getPath() 쿠키 사용의 유효 디렉토리 정보를 얻습니다.
getValue() 쿠키의 값을 얻습니다.
getVersion() 쿠키 버전을 얻습니다.

세션(Session)

1. 개요

세션은 웹 애플리케이션에서 서버와 클라이언트 간의 상태를 유지하기 위한 방법으로, 쿠키와 유사한 목적을 가지고 있지만 몇 가지 중요한 차이점이 있습니다.

2. 특징

  • 서버 기반 저장: 세션은 클라이언트의 특정 위치(로컬)에 저장되는 것이 아니라, 서버 메모리나 데이터베이스에 객체 형태로 저장됩니다.
  • 서버 당 하나의 세션 객체: 각 서버는 클라이언트마다 하나의 세션 객체를 가질 수 있어, 클라이언트가 서버를 변경하더라도 세션 정보는 유지됩니다.
  • 브라우저 종료 시 삭제: 세션 객체는 클라이언트의 브라우저가 종료되면 일반적으로 삭제되며, 이는 클라이언트 측에 저장되지 않기 때문입니다.
  • 보안성: 세션은 클라이언트가 직접 접근할 수 없고 서버에서만 접근 가능하므로 보안성이 뛰어납니다.
  • 데이터 저장 제한 없음: 세션은 서버의 메모리나 데이터베이스에 저장되므로, 저장할 수 있는 데이터의 크기에 제한이 없습니다.

3. 세션 동작 과정

  1. 클라이언트 요청: 클라이언트(브라우저)가 서버에 데이터를 요청합니다.
  2. 세션 생성: 서버는 클라이언트의 요청이 발생하면 세션을 자동으로 생성하고, 고유한 세션 ID를 생성하여 클라이언트에게 전달합니다.
  3. 세션 ID 저장: 세션 ID는 일반적으로 쿠키에 저장됩니다. 이를 통해 클라이언트가 다시 서버에 접속할 때 같은 세션을 유지할 수 있습니다.
  4. 세션 속성 설정: 서버는 세션 객체를 통해 클라이언트의 상태 정보를 저장하고 관리합니다.

예시 (Java)

<%@ page language="java" %>
<%
    // 세션에 사용자 정보 설정 예시
    session.setAttribute("username", "John Doe");
%>

4. 세션 메서드 요약

메서드 기능
setAttribute() 세션에 데이터를 저장합니다.
getAttribute() 세션에 저장된 데이터를 얻습니다.
getAttributeNames() 세션에 저장된 모든 데이터의 이름을 얻습니다.
getId() 세션의 고유 ID를 얻습니다.
getCreationTime() 세션 생성 시간을 구합니다.
getLastAccessedTime() 세션에 마지막으로 접근한 시간을 구합니다.
setMaxInactiveInterval() 세션의 유효 시간을 설정합니다.
getMaxInactiveInterval() 세션의 유효 시간을 얻습니다.
removeAttribute() 특정 세션 속성을 삭제합니다.
invalidate() 세션을 무효화합니다.

쿠키 vs 세션

비교 요약

요소 쿠키 세션
정의 클라이언트 측에 저장되는 데이터 조각 서버 측에 저장되는 클라이언트 상태 정보
저장 위치 클라이언트 로컬 서버 메모리/데이터베이스
보안성 상대적으로 취약 서버에 저장되어 보안이 우수
용량 제한 4KB 서버 용량에 따라 무제한
유효 기간 설정된 만료 기간까지 브라우저 종료 시 종료
공유 가능성 도메인 단위로 공유 가능 서버 간에 공유 어려움

사용 사례

  • 쿠키: 로그인 정보 유지, 사용자 설정 저장
  • 세션: 사용자 인증 정보 저장, 데이터베이스 상호작용에 필요한 정보 저장

결론

쿠키와 세션은 웹 애플리케이션에서 사용자 경험을 개선하고 상태를 관리하는 데 필수적인 기술입니다. 각 기술은 고유의 특성과 용도가 있으므로, 상황에 맞게 적절히 선택하여 활용해야 합니다.

웹 개발에 있어 이 두 개념을 충분히 이해하고 적절하게 활용한다면, 보다 효율적이고 안전한 애플리케이션을 만들 수 있을 것입니다. 더 많은 질문이나 궁금증이 있다면 언제든지 댓글로 남겨주세요!


'🗄️ Backend > JSP' 카테고리의 다른 글

JSP와 MVC2 패턴  (1) 2024.10.18
JSP와 MVC 패턴: DAO/DTO, 커넥션 풀, EL, JSTL  (1) 2024.10.18
JSP와 서블릿: 동적 웹 개발의 기초  (0) 2024.10.18
HTML 기초 및 태그 정리  (2) 2024.10.17
웹 프로그래밍 기초 (SERVER/CLIENT/HTML)  (0) 2024.10.17
'🗄️ Backend/JSP' 카테고리의 다른 글
  • JSP와 MVC2 패턴
  • JSP와 MVC 패턴: DAO/DTO, 커넥션 풀, EL, JSTL
  • JSP와 서블릿: 동적 웹 개발의 기초
  • HTML 기초 및 태그 정리
hjwjo
hjwjo
백엔드 및 풀스택 개발에 관심 있는 초보 개발자의 개발 블로그입니다.
  • hjwjo
    Jeongwoo's Devlog
    hjwjo
  • 전체
    오늘
    어제
    • Devlog
      • 🗄️ Backend
        • Java
        • Spring
        • JPA
        • SQL
        • JSP
        • AWS
        • GCP
        • Linux
        • GitHub
        • ML
        • Security
      • 🖥️ Frontend
        • React
        • CSS
      • 🏅 Project
        • Hackathon
        • Team Project
      • 📊 Algorithm
        • BOJ
      • 📜 Certs
        • ADsP
        • SQLD
        • 정보처리기사
      • 📖
        • JavaScript
      • 일상
        • 면접후기
  • 블로그 메뉴

    • 홈
    • Devlog
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    쿼리
    GCP
    springboot
    백준
    정처기
    AWS
    DML
    정보처리기사
    스프링부트
    SQL
    Spring
    jsp
    java기초
    데이터베이스
    백엔드
    java
    스프링
    http
    ADsP
    자바
  • 최근 댓글

  • 최근 글

hjwjo
쿠키(Cookie)와 세션(Session) 완벽 가이드
상단으로

티스토리툴바