쿠키와 세션은 웹에서 사용자 상태를 유지하기 위한 기술입니다.
둘 다 로그인 유지, 장바구니 기능 등에 사용되지만, 동작 방식과 저장 위치가 다릅니다.
쿠키는 클라이언트(브라우저)에 저장되고, 세션은 서버에서 관리됩니다.
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를 클라이언트에 전달하고, 클라이언트는 이를 통해 로그인 상태를 유지 가능.
'컴퓨터네트워크' 카테고리의 다른 글
[Network] API Gateway (0) | 2025.02.17 |
---|---|
[Network] 모놀리식 아키텍처(Monolithic), MSA(마이크로서비스 아키텍처), 로드 밸런서(Load Balancer) 정리 (0) | 2025.02.17 |
[Network] HTTPS의 동작 원리 (0) | 2025.01.10 |
쿠키와 캐시의 차이점 (0) | 2024.08.24 |
[Network]쿠키(Cookie) (0) | 2024.08.22 |