#쿠키(Cookie)와 세션(Session)
웹 애플리케이션을 개발하면서 쿠키와 세션은 필수적으로 이해해야 하는 개념입니다. 이 글에서는 쿠키와 세션의 개념, 특징, 사용 방법, 그리고 두 기술 간의 차이점을 자세히 설명하겠습니다.
쿠키(Cookie)
1. 개요
쿠키는 웹 브라우저와 서버 간의 통신에서 특정 정보를 지속적으로 유지하기 위한 데이터 저장 방식입니다. HTTP 프로토콜은 비연결성(stateless) 프로토콜로, 각 요청이 끝난 후 클라이언트와의 연결을 종료합니다. 따라서 서버는 클라이언트의 상태를 유지할 방법이 필요하고, 이때 쿠키가 사용됩니다.
2. 특징
- 클라이언트 측 저장: 쿠키는 서버가 생성하여 클라이언트(웹 브라우저) 측에 저장됩니다. 이 데이터는 클라이언트의 로컬 저장소에 위치하게 됩니다.
- 정보 참조 및 변경: 서버는 클라이언트의 요청 시마다 쿠키의 속성값을 참조하거나 변경할 수 있어, 사용자의 상태나 선호 정보를 손쉽게 관리할 수 있습니다.
- 제한된 용량: 쿠키는 하나당 최대 4KB로 용량이 제한되며, 클라이언트는 최대 300개의 쿠키를 저장할 수 있습니다. 따라서 총 용량은 약 1.2MB로 제한됩니다.
3. 쿠키 생성 및 사용 방법
쿠키를 생성하고 사용하는 과정은 다음과 같습니다.
- 쿠키 생성:
Cookie
클래스를 이용하여 쿠키 객체를 생성합니다. - 속성 설정:
setMaxAge()
및setPath()
같은 메서드를 통해 쿠키의 다양한 속성을 설정합니다. - 응답 객체에 탑재: 설정된 쿠키를
response
객체에 추가하여 클라이언트에 전달합니다. - 로컬 환경에 저장: 클라이언트는 응답을 통해 받은 쿠키를 로컬 환경에 저장합니다.
예시 (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. 세션 동작 과정
- 클라이언트 요청: 클라이언트(브라우저)가 서버에 데이터를 요청합니다.
- 세션 생성: 서버는 클라이언트의 요청이 발생하면 세션을 자동으로 생성하고, 고유한 세션 ID를 생성하여 클라이언트에게 전달합니다.
- 세션 ID 저장: 세션 ID는 일반적으로 쿠키에 저장됩니다. 이를 통해 클라이언트가 다시 서버에 접속할 때 같은 세션을 유지할 수 있습니다.
- 세션 속성 설정: 서버는 세션 객체를 통해 클라이언트의 상태 정보를 저장하고 관리합니다.
예시 (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 |