본문 바로가기
컴퓨터네트워크

[Network] 쿠키(Cookie) vs 세션(Session)

by goblin- 2025. 2. 18.

쿠키와 세션은 웹에서 사용자 상태를 유지하기 위한 기술입니다.

둘 다 로그인 유지, 장바구니 기능 등에 사용되지만, 동작 방식과 저장 위치가 다릅니다.

쿠키는 클라이언트(브라우저)에 저장되고, 세션은 서버에서 관리됩니다.

 

 

 1. 쿠키(Cookie)란?

 

 쿠키는 클라이언트(브라우저)에 저장되는 작은 데이터 파일입니다.

 서버가 응답할 때 Set-Cookie 헤더를 사용하여 설정하며, 이후 같은 도메인에 요청할 때 자동으로 전송됩니다.

 

쿠키는 브라우저가 관리하는 작은 데이터 조각이며, 주로 사용자 인증, 사이트 설정 유지 등에 사용됩니다.

서버에 요청할 때 브라우저가 자동으로 쿠키를 포함하여 전송합니다.

유효 기간을 설정할 수 있으며, 브라우저를 닫아도 유지되는 “영속적인 쿠키”도 가능합니다.

 

 

쿠키 동작 과정

 

1. 사용자가 example.com에 방문

2. example.com 서버가 Set-Cookie 헤더를 통해 쿠키 설정

3. 브라우저가 쿠키를 저장

4. 이후 example.com에 요청할 때 브라우저가 쿠키를 포함하여 자동 전송

 

쿠키 예제 (HTTP Set-Cookie 헤더)

Set-Cookie: session_id=abc123; HttpOnly; Secure; Max-Age=3600; Path=/

 

- session_id=abc123 → 쿠키 이름과 값

- HttpOnly → JavaScript에서 접근 불가 (보안 강화)

- Secure → HTTPS에서만 쿠키 전송

- Max-Age=3600 → 1시간 동안 유지

- Path=/ → 사이트 전체에서 쿠키 사용 가능

 

 

쿠키 설정 예제 (Spring Boot)

import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class CookieController {

    @GetMapping("/set-cookie")
    public String setCookie(HttpServletResponse response) {
        Cookie cookie = new Cookie("session_id", "abc123"); 
        cookie.setHttpOnly(true);
        cookie.setSecure(true);
        cookie.setMaxAge(3600); // 1시간 유지
        response.addCookie(cookie);
        return "쿠키 설정 완료";
    }
}

- 이렇게 하면 브라우저가 session_id=abc123 쿠키를 저장하고, 이후 요청에서 자동으로 서버에 전송합니다.

 

 

2. 세션(Session)이란?

 

세션은 서버에서 관리하는 사용자 상태 정보입니다.

세션은 사용자가 웹사이트에 접속한 후 로그인 상태 유지, 장바구니 정보 저장 등에 사용됩니다.

 

- 세션은 서버에 저장되며, 브라우저가 세션 ID를 포함하여 요청하면 서버에서 해당 사용자의 데이터를 확인할 수 있습니다.(DB나 Redis에 저장)

- 일반적으로 세션 ID는 쿠키에 저장되며, 서버에서 이를 기반으로 세션 데이터를 관리합니다.

- 사용자가 로그아웃하거나 세션이 만료되면 서버에서 해당 데이터를 삭제할 수 있습니다.

 

 

세션 동작 과정

 

1. 사용자가 example.com에 로그인

2. 서버에서 session_id를 생성하고, 이를 쿠키로 설정하여 클라이언트에게 전달

3. 클라이언트가 이후 요청할 때 session_id를 포함하여 서버에 요청

4. 서버는 session_id를 확인하고 해당 사용자의 데이터를 조회

 

세션 예제 (Spring Boot)

import jakarta.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SessionController {

    @GetMapping("/set-session")
    public String setSession(HttpSession session) {
        session.setAttribute("username", "JohnDoe"); // 세션에 데이터 저장
        return "세션 설정 완료";
    }

    @GetMapping("/get-session")
    public String getSession(HttpSession session) {
        return "세션 값: " + session.getAttribute("username"); // 세션 값 가져오기
    }
}

- 서버는 세션 ID를 쿠키로 설정하여 클라이언트에게 전달하고, 이후 요청에서 이를 사용하여 사용자 데이터를 유지합니다.

 

3. 쿠키 vs 세션 비교

구분 쿠키 (Cookie) 세션(Session)
저장 위치 클라이언트(브라우저) 서버
유지 방식 브라우저가 자동으로 서버에 전송 서버에서 세션 ID를 기반으로 관리
보안성 낮음 (브라우저에 저장되므로 조작 가능) 높음 (서버에서 관리)
용량 제한 4KB 제한 서버 메모리 사용 (제한 없음)
만료 시간 Max-Age, Expires로 설정 가능 기본적으로 일정 시간 동안 유지
사용 예제 로그인 유지, 다크 모드 설정 로그인 상태, 장바구니 데이터
데이터 저장 방식 단순 문자열 객체, 복잡한 데이터 저장 가능

즉, 보안이 중요한 데이터(로그인 세션 등)는 “세션”을, 단순한 설정 정보(다크 모드, 언어 설정 등)는 “쿠키”를 사용하는 것이 적절합니다.

 

 

4. 쿠키 + 세션을 함께 사용하는 방법

 

- 세션 ID를 쿠키에 저장하여 사용자 인증을 처리할 수 있습니다.

- 서버는 세션 ID를 기반으로 사용자 데이터를 관리하고, 클라이언트는 세션 ID를 쿠키로 유지합니다.

 

세션 ID를 쿠키로 저장하는 예제

Set-Cookie: session_id=xyz789; HttpOnly; Secure; Path=/;

- 브라우저는 session_id=xyz789 쿠키를 저장하고, 이후 요청할 때 자동으로 서버에 전송

- 서버는 session_id를 확인하여 로그인 상태 유지

 

 

최종 정리

 

- 쿠키: 클라이언트(브라우저)에 저장되며, 설정 정보를 유지하는 데 사용됨. (Set-Cookie 헤더를 통해 설정)

- 세션: 서버에서 관리되며, 로그인 상태 유지 등에 사용됨. (session_id를 쿠키에 저장하여 사용)

- 보안이 중요한 데이터는 세션을 사용하고, 단순한 설정 정보는 쿠키를 사용하는 것이 일반적.

- 서버는 Set-Cookie를 사용하여 세션 ID를 클라이언트에 전달하고, 클라이언트는 이를 통해 로그인 상태를 유지 가능.