쿠키(cookie)
세션과 마찬가지로 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하는 방법.
하지만, 쿠키는 세션과 달리 상태 정보를 웹 서버가 아닌 클라이언트에 저장함. (자동 로그인)
쿠키는 클라이언트 정보를 웹 브라우저에 저장하므로 이후에 웹 서버로 전송되는 요청에는 쿠키가 가지고 있는 정보가 포함되며, 이때 웹 서버는 웹 브라우저의 요청에 포함된 쿠키를 읽어 새로운 웹 브라우저인지, 이전에 요청했던 웹 브라우저인지 판단.
쿠키는 클라이언트의 일정 폴더에 정보를 저장하기 때문에 웹 서버의 부하를 줄일 수 있다는 것이 장점인 반면에, 웹 브라우저가 접속했던 웹 사이트에 관한 정보와 개인 정보가 기록되기 때문에 보안에 문제가 있음.
웹 브라우저 자체에 쿠키 거부 기능이 추가되었으나, 쿠기에 대한 거부가 웹 브라우저에 설정되어 있으면 쿠키 본래의 목적인 웹 브라우저와의 연결을 지속시키는 기능을 수행할 수 없음.
쿠키의 동작 과정
- 쿠키 생성: 쿠키는 주로 웹 서버측에서 생성하며, 생성된 쿠키는 응답 데이터에 함께 저장되어 웹 브라우저에 전송 됨.
- 쿠키 저장: 웹 브라우저는 응답 데이터에 포함된 쿠키를 쿠키 저장소에 보관하며, 쿠키는 종류에 따라 메모리나 파일로 저장됨.
- 쿠키 전송: 웹 브라우저는 한 번 저장된 쿠키를 요청이 있을 때마다 웹 서버에 전송하는데, 웹 서버는 웹 브라우저가 전송한 쿠키를 사용하여 필요한 작업을 수행할 수 있음.
** 일단 웹 브라우저에 쿠키가 저장되면 웹 브라우저는 쿠키가 삭제되기 전까지 웹 서버에 쿠키를 전송함.
Cookie클래스의 메소드 종류
| 메소드 | 반환 유형 | 설명 |
| getComment( ) | String | 쿠키에 대한 설명을 반환 |
| getDomain( ) | String | 쿠키의 유효한 도메인 정보를 반환 |
| getMaxAge( ) | int | 쿠키의 사용 가능 기간에 대한 정보를 반환 |
| getName( ) | String | 쿠키의 이름을 반환 |
| getPath( ) | String | 쿠키의 유효한 디렉터리 정보를 반환 |
| getSecure( ) | boolean | 쿠키의 보안 설정을 반환 |
| getValue( ) | String | 쿠키에 설정된 값을 반환 |
| getVersion( ) | int | 쿠키의 버전을 반환 |
| setComment(String) | void | 쿠키에 대한 설명을 설정 |
| setDomain(String) | void | 쿠키에 유효한 도메인을 설정 |
| setMaxAge(int) | void | 쿠키의 유효 기간을 설정 |
| setPath(String) | void | 쿠이의 유효한 디렉터리를 설정 |
| setSecure(boolean) | void | 쿠키의 보안을 설정 |
| setValue(String) | void | 쿠키의 값을 설정 |
| setVersion(int) | void | 쿠키의 버전을 설정 |
쿠키와 세션의 차이
| 구분 | 쿠키 | 세션 |
| 사용 클래스 | Cookie 클래스 | HttpSession 인터페이스 |
| 저장 형식 | 텍스트 형식 | Object 형 |
| 저장 장소 | 클라이언트 | 서버(세션 아이디만 클라이언트에 저장) |
| 종료 시점 | 쿠키 저장 시 설정(설정하지 않을 경우 웹 브라우저 종료 시 소멸) | 정확한 시점을 알 수 없음. |
| 리소스 | 클라이언트의 리소스 사용 | 서버의 리소스 사용 |
| 보안 | 클라이언트에 저장되므로 사용자의 변경이 가능하여 보안에 취약 | 서버에 저장되어 있어 상대적으로 안정적 |
- 쿠키 대신 세션을 사용하는 이유는 쿠키보다 세션이 보안에 강하기 때문.
- 웹 브라우저가 쿠키를 지원하지 않거나 강제로 쿠키를 막은 경우 쿠키를 사용할 수 없지만 세션은 쿠키 설정 여부에 상관없이 사용할 수 있음.
| 구분 | 🍪 쿠키 (Cookie) | 🗄️ 세션 (Session) |
| 저장 위치 | 클라이언트 (사용자 브라우저) | 서버 (웹 서버) |
| 보안 | 낮음 (조작, 탈취 가능) | 높음 (서버에만 보관) |
| 주요 용도 | 1. 세션 ID 저장 (로그인 유지의 '열쇠') 2. "오늘 하루 보지 않기" 3. "로그인 아이디 기억" 4. 언어 설정 (ko/en) 5. 다크 모드/라이트 모드 설정 |
1. 로그인 정보 (사용자 식별) 2. 장바구니 정보 3. 사용자의 민감한 개인 정보 4. 권한 정보 |
- 세션에는 남이 보면 안 되는 중요한 정보(로그인 상태, 장바구니 등)를 저장합니다.
- 쿠키에는 보안상 중요하지 않은 설정(다크 모드, 언어) 또는 **세션을 유지하기 위한 '열쇠'(세션 ID)**를 저장합니다.
쿠키 생성
Cookie( )메소드를 사용하며, 쿠키를 생성한 후에는 반드시 response 내장 객체의 addCookie( )메소드로 쿠키를 설정해야 함.
// 기본 형식
Cookie Cookie(String name, String value)
// Cookie()메소드 사용 예시
Cookie cookie=new Cookie("memberId","admin");
response.addCookie(cookie);
첫 번째 매개변수 name은 쿠키를 식별하기 위한 이름을 나타내고,
두 번째 매개변수 value는 쿠키 값을 나타냄.
쿠키 정보
생성된 쿠키의 정보를 얻어오려면 request 내장 객체이 getCookie( )메소드를 사용하여 쿠키 객체를 얻어온 후 getName( ), getValue( ) 메소드로 쿠키 이름과 값을 얻어옴.
- 쿠키 객체 얻기 - getCookies( ) 메소드 사용
** 쿠키 객체가 여러 개일 때는 배열 형태로 가져옴.
// 기본 형식
Cookie[] request.getCookies()
//[getCookies() 메소드 사용 예]
Cookie[] cookies=request.getCookies();
2. 쿠키 객체의 정보 얻기 - getName( ), getValue( ) 메소드 사용
// 기본 형식
String getName()
String getValue()
// example
Cookie[] cookies=request.getCookies();
for (int i=0; i < cookies.length; i++) {
out.println(cookies[i].getName() + " : "+ cookies[i].getValue() + "<br>");
}

size()와 length는 절대 혼용할 수 없습니다.
데이터의 '길이'나 '크기'를 가져오는 방식이 다른 이유는, 그 데이터가 '배열(Array)'이냐 '컬렉션(Collection)'이냐에 따라 자바의 문법적 약속이 다르기 때문입니다.
length와 size() 핵심 차이
이건 JSP의 규칙이 아니라 자바(Java) 언어의 규칙입니다.
- length (속성)
- 대상: 배열 (Array)
- 특징: 괄호()가 없는 '속성(Property)' (변수처럼 접근)
- 예시: int[], String[], 그리고 Cookie[]
- request.getCookies() 메서드는 Cookie 객체들을 Cookie[] (쿠키 배열) 형태로 반환합니다. 따라서 배열의 길이를 나타내는 length를 써야 함.
- size() (메서드)
- 대상: 컬렉션 프레임워크 (Collection Framework)
- 특징: 괄호()가 있는 '메서드(Method)' (기능을 호출)
- 예시: ArrayList, List, Vector, HashMap, Set 등
- 이전에 size()를 사용하셨다면, 그건 아마도 ArrayList처럼 컬렉션에 속하는 클래스들을 다루셨기 때문
| 구분 | length | size() | length() |
| 사용 대상 | 배열 (Array) | 컬렉션 (Collection) | 문자열 (String) |
| 품사 | 속성 (Property) | 메서드 (Method) | 메서드 (Method) |
| 사용 예시 | Cookie[] cookies = request.getCookies(); | int count = cookies.length; ArrayList<String> list = new ArrayList<>(); | int count = list.size(); String s = "안녕하세요"; int count = s.length(); |
쿠키 삭제
Cookie 클래스는 쿠키를 삭제하는 기능을 별도로 제공하지 않으며, 쿠키를 더 유지할 필요가 없으면 쿠키의 유효 기간을 만료하면 됨.
쿠키의 유효 기간을 결정하는 setMaxAge( )메소드에 유효 기간을 0으로 설정하여 쿠키를 삭제할 수 있음.
// 기본 형식
void setMaxAge(int age)
// setMaxAge()메소드 사용 예
Cookie cookie=new Cookie("memberId", "admin");
cookie.setMaxAge(0);
response.addCookie(cookie);'JSP' 카테고리의 다른 글
| [JSP] MVC (Model, View, Controller) (0) | 2025.12.05 |
|---|---|
| [JSP] 세션 (0) | 2025.12.05 |
| [JSP] 필터 (1) | 2025.12.05 |
| [JSP] 예외처리 (0) | 2025.12.04 |
| [JSP] 시큐리티 (0) | 2025.12.04 |