24.11.22 TIL Cookie, Session

신성훈·2024년 11월 22일
0

TIL

목록 보기
84/162

1. Cookie란?

Cookie(쿠키)는 클라이언트 측(웹 브라우저)에 저장되는 작은 데이터입니다. 웹 애플리케이션이 사용자의 상태를 유지하거나 특정 정보를 기억하기 위해 사용합니다.
쿠키는 클라이언트와 서버 간의 비연결적 상태(stateless)를 보완하기 위해 고안되었습니다.

쿠키의 주요 특징

  • 클라이언트에 저장: 브라우저에 의해 관리됩니다.
  • 자동 전송: 동일한 도메인으로 요청할 때 자동으로 서버에 전송됩니다.
  • 데이터 용량 제한: 보통 하나의 쿠키 크기는 4KB 이내입니다.
  • 만료 시간: 설정한 기간이 지나면 자동 삭제됩니다.

쿠키 사용 예시

  • 사용자 로그인 상태 유지
  • 장바구니 정보 저장
  • 사용자 맞춤 설정(테마, 언어 등)

Spring에서 쿠키 생성 및 사용

import org.springframework.http.ResponseCookie;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;

@RestController
public class CookieController {

    @GetMapping("/set-cookie")
    public ResponseEntity<String> setCookie() {
        ResponseCookie cookie = ResponseCookie.from("userId", "12345")
                .httpOnly(true)
                .path("/")
                .maxAge(3600)
                .build();
        return ResponseEntity.ok()
                .header("Set-Cookie", cookie.toString())
                .body("Cookie Set!");
    }

    @GetMapping("/get-cookie")
    public String getCookie(HttpServletRequest request) {
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                if ("userId".equals(cookie.getName())) {
                    return "Found cookie: " + cookie.getValue();
                }
            }
        }
        return "No cookie found.";
    }
}

2. Session이란?

Session(세션)은 서버에서 관리되는 사용자 상태 정보입니다.
클라이언트가 서버와 상호작용하는 동안의 데이터를 저장하며, 주로 사용자 인증 상태를 유지하기 위해 사용됩니다.

세션의 주요 특징

  • 서버에서 관리: 서버 메모리나 데이터베이스에 저장됩니다.
  • 고유 ID 발급: 각 클라이언트에게 고유한 세션 ID를 부여하고, 이를 통해 데이터를 식별합니다.
  • 보안성: 클라이언트에 데이터가 저장되지 않으므로 쿠키보다 보안성이 높습니다.
  • 세션 만료: 일정 시간이 지나거나 서버가 재시작되면 만료됩니다.

Spring에서 세션 사용

Spring에서는 HttpSession을 사용하여 세션 데이터를 쉽게 관리할 수 있습니다.

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;

@RestController
public class SessionController {

    @GetMapping("/set-session")
    public String setSession(HttpSession session) {
        session.setAttribute("username", "john_doe");
        return "Session set for username: john_doe";
    }

    @GetMapping("/get-session")
    public String getSession(HttpSession session) {
        String username = (String) session.getAttribute("username");
        return username != null ? "Session username: " + username : "No session found.";
    }
}

3. Cookie와 Session의 차이점

항목CookieSession
저장 위치클라이언트(브라우저)서버
보안성상대적으로 낮음상대적으로 높음
데이터 용량 제한4KB 이내제한 없음 (서버 메모리 용량 의존)
데이터 유지만료 시간 설정 가능세션 만료 시 삭제
사용 예시사용자 설정 저장, 로그인 유지사용자 인증, 민감 데이터 관리

4. Cookie와 Session의 동시 사용

쿠키와 세션은 보통 조합해서 사용됩니다.

  • 세션 ID를 쿠키에 저장하고, 이를 통해 클라이언트를 식별하여 세션 데이터를 서버에서 관리합니다.

세션 ID 쿠키 예시

// 브라우저에 저장되는 쿠키
Set-Cookie: JSESSIONID=12345ABCD; Path=/; HttpOnly; Secure

5. 마무리

  • 쿠키는 데이터가 클라이언트에 저장되기 때문에 민감한 정보 저장에 적합하지 않다는 것을 배웠습니다.
  • 세션은 서버 리소스를 많이 소비하므로, 사용량을 최적화하는 것이 중요합니다.
  • Spring에서 ResponseCookieHttpSession을 활용하면 손쉽게 상태 정보를 관리할 수 있음을 알게 되었습니다.
  • 보안을 고려할 때, 쿠키는 HttpOnlySecure 옵션을 설정하고, 세션은 일정 시간 이후 만료되도록 구성해야 함을 배웠습니다.
profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글