쿠키(Cookie)

2경빈·2024년 7월 10일

Spring Boot

목록 보기
16/19

쿠키(Cookie)

쿠키(Cookie)는 웹 서버와 웹 브라우저 사이에 정보를 교환할 때 사용되는 작은 데이터 조각이다. 주로 사용자의 상태를 유지하거나 사용자 경험을 개선하기 위해 사용된다. 쿠키는 클라이언트 측에서 저장되며, 서버와 클라이언트 간의 상호작용을 통해 관리된다.
쿠키는 소프트웨어가 아니다. 쿠키는 컴퓨터내에서 프로그램처럼 실행될 수 없으며 바이러스를 옮길 수도, 악성코드를 설치할 수도 없다. 하지만 스파이웨어를 통해 유저의 브라우징 행동을 추적하는데에 사용될 수 있고, 누군가의 쿠키를 훔쳐서 해당 사용자의 웹 계정 접근권한을 획득할 수도 있다.

사용 목적

  • 세션 관리

로그인 상태를 유지하거나 사용자의 세션을 관리하는 데 사용된다. 세션 쿠키는 브라우저가 열려 있는 동안에만 유효하며, 브라우저를 닫으면 삭제된다.

  • 개인화

사용자의 선호 설정이나 테마, 언어 등의 개인화 정보를 저장하여 사용자 경험을 향상시키는 데 사용된다.

  • 추적 및 분석

방문자의 활동을 추적하고 분석하는 데 사용될 수 있다. 이는 주로 마케팅과 분석 목적으로 활용된다.

쿠키의 종류

  • 세션 쿠키 (Session Cookie)

세션 쿠키는 사용자가 웹 브라우저를 닫을 때까지 유효한 쿠키이다.
브라우저 세션이 끝나면 자동으로 삭제되며, 주로 사용자의 세션 관리에 활용된다. 사용자가 로그인 상태를 유지하는 데 주로 사용됩니다.

  • 지속 쿠키 (Persistent Cookie)

지속 쿠키는 설정된 만료 날짜까지 유지된다.
브라우저를 닫아도 유지되어 사용자가 다시 방문할 때까지 유효하다. 주로 사용자의 선호 설정이나 사이트의 사용 기록 등을 저장하는 데 사용될 수 있다.

  • 보안 쿠키 (Secure Cookie)

보안 쿠키는 HTTPS 프로토콜을 사용하는 경우에만 전송되는 쿠키이다.
이는 데이터가 암호화되어 전송되므로, 중간자 공격을 방지하고 데이터의 안전성을 보장한다.
주로 로그인 정보와 같은 민감한 데이터에 사용된다.

  • HttpOnly 쿠키 (HttpOnly Cookie)

HttpOnly 쿠키는 JavaScript에서 접근할 수 없도록 설정된 쿠키이다.
이를 통해 XSS(크로스 사이트 스크립팅) 공격을 방지할 수 있다.
주로 세션 쿠키와 같이 사용되어 민감한 정보를 안전하게 관리한다.

  • SameSite 쿠키 (SameSite Cookie)

SameSite 쿠키는 요청이 같은 사이트에서 발생한 경우에만 쿠키가 전송되도록 제한하는 기능이다. 이는 CSRF(사이트간 요청 위조) 공격을 방지하기 위한 보안 기능으로 사용된다.

쿠키 생성

@GetMapping("login")
public String login(HttpServletResponse resp){
    Cookie c = new Cookie("k01","v01");
    c.setMaxAge(10); //10초 동안 유지되는 10초가 지나면 사라짐.
    resp.addCookie(c);
    return "member/login";
}

어노테이션을 사용해서 가져오기

@GetMapping("home")
public String home(@CookieValue(value = "JSESSIONID") String JSESSIONID,@CookieValue("k01") String k01){
    System.out.println("JSESSIONID = " + JSESSIONID + ", k01 = " + k01);
	return "home";
}

Ex)

추가

쿠키를 사용하는 게 데이터를 클라이언트 측에 저장할 수 있는 유일한 방법이었을 때는 이 방법을 사용했지만, 지금은 modern storage APIs를 사용해 정보를 저장하는 것이 권장된다.
모든 요청마다 쿠키가 함께 전송되기 때문에, (특히 mobile data connections에서) 성능이 떨어지는 원인이 될 수 있다.
정보를 클라이언트 측에 저장하려면 Modern APIs의 종류인 웹 스토리지 API (localStorage와 sessionStorage) 와 IndexedDB를 사용하면 된다.

Modern storage APIs

최신 웹 기술에서 사용되는 다양한 클라이언트 측 저장소와 관련된 API들을 의미한다.
이러한 API들은 웹 애플리케이션 개발자들이 데이터를 클라이언트 측에서 효과적으로 관리하고 사용할 수 있도록 도와준다.
주요한 modern storage APIs에는 다음과 같은 것들이 있다.

  • IndexedDB

IndexedDB는 클라이언트 측에서 대규모의 구조화된 데이터를 비동기적으로 저장하고 검색할 수 있는 API이다. 주로 복잡한 데이터베이스 스키마와 대용량 데이터를 처리할 때 사용된다.

  • Web Storage (로컬 스토리지 및 세션 스토리지)

Web Storage API는 클라이언트 측에서 작은 데이터를 키-값 쌍으로 저장하는 데 사용된다.
두 가지 주요 타입으로는 로컬 스토리지(Local Storage)와 세션 스토리지(Session Storage)가 있다. 로컬 스토리지는 브라우저를 닫아도 데이터가 지속되고, 세션 스토리지는 브라우저 세션이 유지되는 동안만 데이터를 유지한다.

  • Cache Storage

Cache Storage API는 웹 애플리케이션의 리소스를 캐싱하여 오프라인 상태에서도 빠르게 로딩할 수 있도록 지원한다. 주로 서비스 워커와 함께 사용되어 정적 파일이나 API 응답을 저장한다.

  • File API

File API는 클라이언트 측에서 파일을 읽고 쓰는 데 사용된다. 이를 통해 사용자가 선택한 파일을 읽거나 로컬 파일 시스템에 파일을 저장할 수 있다.

profile
eggs before hatching

0개의 댓글