본문 바로가기
JSP

[JSP] 쿠키

by lmyourpearl 2025. 12. 5.

쿠키(cookie)

세션과 마찬가지로 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하는 방법.

하지만, 쿠키는 세션과 달리 상태 정보를 웹 서버가 아닌 클라이언트에 저장함. (자동 로그인)

쿠키는 클라이언트 정보를 웹 브라우저에 저장하므로 이후에 웹 서버로 전송되는 요청에는 쿠키가 가지고 있는 정보가 포함되며, 이때 웹 서버는 웹 브라우저의 요청에 포함된 쿠키를 읽어 새로운 웹 브라우저인지, 이전에 요청했던 웹 브라우저인지 판단.

쿠키는 클라이언트의 일정 폴더에 정보를 저장하기 때문에 웹 서버의 부하를 줄일 수 있다는 것이 장점인 반면에, 웹 브라우저가 접속했던 웹 사이트에 관한 정보와 개인 정보가 기록되기 때문에 보안에 문제가 있음.

웹 브라우저 자체에 쿠키 거부 기능이 추가되었으나, 쿠기에 대한 거부가 웹 브라우저에 설정되어 있으면 쿠키 본래의 목적인 웹 브라우저와의 연결을 지속시키는 기능을 수행할 수 없음.


 

쿠키의 동작 과정

  1. 쿠키 생성: 쿠키는 주로 웹 서버측에서 생성하며, 생성된 쿠키는 응답 데이터에 함께 저장되어 웹 브라우저에 전송 됨.
  2. 쿠키 저장: 웹 브라우저는 응답 데이터에 포함된 쿠키를 쿠키 저장소에 보관하며, 쿠키는 종류에 따라 메모리나 파일로 저장됨.
  3. 쿠키 전송: 웹 브라우저는 한 번 저장된 쿠키를 요청이 있을 때마다 웹 서버에 전송하는데, 웹 서버는 웹 브라우저가 전송한 쿠키를 사용하여 필요한 작업을 수행할 수 있음.

** 일단 웹 브라우저에 쿠키가 저장되면 웹 브라우저는 쿠키가 삭제되기 전까지 웹 서버에 쿠키를 전송함.


 

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( ) 메소드로 쿠키 이름과 값을 얻어옴.

  1. 쿠키 객체 얻기 - 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) 언어의 규칙입니다.

  1. length (속성)
    • 대상: 배열 (Array)
    • 특징: 괄호()가 없는 '속성(Property)' (변수처럼 접근)
    • 예시: int[], String[], 그리고 Cookie[]
    • request.getCookies() 메서드는 Cookie 객체들을 Cookie[] (쿠키 배열) 형태로 반환합니다. 따라서 배열의 길이를 나타내는 length를 써야 함.
  2. 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