본문 바로가기
CS

쿠키

by 코딩맛집 2022. 10. 20.

클라이언트 단위로 상태정보를 유지해야 하는 상황이 많다. 예를 들어

 

  • 이전에 방문한 적이 있는 웹서버에 다시 방문했을 때 몇 번째 방문인지를 출력하는 상황
  • 회원가입 화면에서 자동으로 주소, 전화번호 등이 입력되는 상황
  • 로그인하고 난 후 로그아웃할 때까지 인증 상태 유지
  • 쇼핑몰에서 주문할 때까지 장바구니에 선택한 상품 정보들 유지
  • 쇼핑몰에서 클라이언트가 체크했던 상품 정보 유지
  • 포탈 사이트에서 클라이언트가 특별히 관심 있어 하는 항목에 대한 정보 유지

이처럼 클라이언트 단위로 상태정보를 유지하게 하려면 쿠키와 세션을 사용합니다. 쿠키와 세션은 다음과 같은 기준에 따라 선택하여 사용합니다. 

 

  • 상태정보의 유지 기간이 브라우저가 종료될 때까지인지의 여부
  • 유지하려는 정보의 저장 위치(서버, 클라이언트)
  • 유지하려는 정보가 공개되어도 되는지의 여부

 

구분 쿠키 세션
저장 위치 클라이언트 서버
저장 데이터 타입 텍스트 객체
저장 데이터 크기 제한 있음 서버에서 수용할 수 있는 만큼

 

쿠키 속성

쿠키란, 서버가 클라이언트에 저장하는 정보로서 클라이언트 쪽에 필요한 정보를 저장해놓고 필요할 때 추출하는 것을 지원하는 기술입니다. 클라이언트와의 연결이 끊어져도 클라이언트마다 개별적으로 상태 정보를 유지하고자 할 때 쿠키 기술을 활용할 수 있습니다. 

 

클라이언트에 저장된 쿠키 정보는 이후 다시 서버에 방문할 때 자동으로 요청정보의 헤더 안에 포함되어 전달됩니다. 쿠키는 name과 value로 구성된 정보로서 사용 목적에 따라 적절한 name과 value를 지정하고, 필요에 따라서는 쿠키의 유지 시간, 유효 디렉터리, 유효 도메인 등의 속성을 함께 지정할 수 있습니다.

 

단점

1. 쿠키는 브라우저에 저장되는 용량에 한계가 있다.

2. 클라이언트에 저장된 쿠키 정보를 클라이언트가 직접 점검해볼 수 있어서 보안상 문제가 있다.

따라서 대부분 브라우저들은 쿠키를 지원하면서도 사용자가 쿠키를 거부하도록 설정할 수 있게 지원하고 있다.

 

쿠키는 URL 이름과 만료 날짜, 유효 경로 그리고 보안 필드와 같은 여러 항목으로 나누어진다. 이 정보는 실제로 요청 정보의 헤더를 통해 전달되는데 쿠키 설정에 관한 내용을 정리하면 다음과 같다.

  • 쿠키를 설정할 때는 name=value 형식으로 구성되며, 쿠키 정보 외에도 expire, path, domain 그리고 secure 등 여러 속성을 선택적으로 추가하여 지정할 수 있다.
  • 쿠키의 name은 ASCII 문자만을 사용해야 하며 한 번 설정된 쿠키의 name은 수정할 수 없다.
  • "expire=날짜" 속성은 쿠키의 유지 시간이다. 유지 시간이 없는 쿠키는 쿠키를 설정받은 브라우저가 실행되는 동안만 유효하다. 
  • "path=경로" 속성은 클라이언트에 저장된 쿠키가 전달되는 서버의 유효 디렉터리를 지정하는 속성이다. "path=/"은 서버의 모든 디렉터리라는 의미로 해석되어 적용된다. 이 속성이 생략되면 쿠키를 설정하는 파일이 존재하는 디렉터리가 유효 디렉터리가 된다.
  • "domain=서버정보" 속성은 클라이언트에 저장된 쿠키가 전달되는 유효 서버를 지정하는 속성이다. 생략되면 쿠키를 설정하는 서버가 유효 서버가 된다.
  • secure 속성이 설정되면 클라이언트에서 HTTPS나 SSL과 같은 보안 프로토콜로 요청할 때만 서버에 전송된다.

쿠키 생성 : Cookie(String name, String value)

쿠키를 생성하려면 javax.servlet.http.Cookie 객체를 생성합니다. Cookie 객체는 두 개의 String을 인자로 받는 생성자가 선언되어 있는데요. 첫 번째 인자가 쿠키의 name으로 지정되며, 두 번째 인자가 쿠키의 value로 지정됩니다.

 

쿠키 유효 시간 설정 : setMaxAge(int expiry)

int expiry는 Cookie의 유효 시간의 초를 의미합니다.

지정된 인자값에 따라 쿠키 동작이 다르게 된다.

만약 정숫값을 0으로 지정하면 쿠키 삭제를 의미한다.

음수값을 지정하면 쿠키가 클라이언트로 전송된 후 브라우저가 종료되면 쿠키도 자동으로 삭제됩니다.

개발 시 setMaxAge() 메소드로 유효 시간을 지정하지 않은 쿠키도 음수값이 적용되어 브라우저가 전송받은 후 브라우저가 종료되면 쿠키도 함께 삭제됩니다.

 

쿠키 경로 설정 : setPath(String uri)

현재 접속 중인 서버에서 이전에 클라이언트에게 전송한 쿠키가 있으면 기본적으로 요청정보 헤더 안에 쿠키가 포함되어 서버 쪽으로 전송됩니다. 서버의 모든 요청에 대하여 쿠키가 서버 쪽으로 전송되는 것이 아니라, 특정 경로의 요청에서만 쿠키를 전송하고자 할 때 setPath() 메소드를 사용하여 경로를 지정할 수 있습니다. setPath()  메소드의 인자값으로 경로를 지정하면, 지정된 경로와 그것의 하위 경로의 요청에 대해서만 클라이언트로부터 쿠키가 전송됩니다.

 

쿠키 도메인 설정 : setDomain(String domain)

쿠키는 기본적으로 전송된 서버에서만 읽어 들여 사용할 수 있습니다. 그런데 어떤 웹 서비스는 하나의 서버에서만 전체 서비스를 하는 것이 아니라, 여러 대의 서버가 연결되어 서비스를 처리합니다. 이러한 웹 서비스에서는 쿠키의 도메인 설정을 통해 하나의 서버에서 클라이언트로 전송된 쿠키를 다른 서버에서 읽어 들여 사용할 수 있습니다. 이때 사용하는 메소드가 

setDomain()입니다.

 

setDomain() 메소드의 인자값으로 서버의 도메인을 지정하는데 "www.edu.com"처럼 지정하면 정확히 일치하는 도메인에서만 쿠키를 읽어 들일 수 있고, ".edu.com"이 포함된 모든 도메인 서버에서 쿠키를 읽어 들일 수 있습니다.

 

쿠키 전송 : addCookie(Cookie cookie)

생성된 쿠키를 클라이언트로 보낼 때는 HttpServletResponse 객체의 addCookie() 메소드를 이용합니다. addCookie() 메소드의 인자값으로 전송할 Cookie 객체를 설정하면 쿠키에 설정된 내용으로 클라이언트 쪽으로 쿠키가 전송됩니다.

 

 

'CS' 카테고리의 다른 글

[URI] URI와 웹 브라우저 요청 흐름  (0) 2022.11.20
SDK, API 개념과 차이점  (0) 2022.11.08
세션(Session)  (0) 2022.10.20
IP & TCP/UDP & PORT & DNS  (2) 2022.10.08