개발일기

HTTP 쿠키 vs 세션 완전 정리: 개념, 차이점, 보안까지

뱅우 2025. 5. 29. 10:22
반응형

HTTP 쿠키 vs 세션 완전 정리: 개념, 차이점, 보안까지

웹 개발을 하다 보면 쿠키(Cookie)세션(Session)은 반드시 마주치게 됩니다.
"이게 뭐가 다르지?" "로그인 기능 만들 땐 뭘 써야 해?"
이 포스팅에서 깔끔하게 정리해드릴게요!


🍪 쿠키(Cookie)란?

쿠키는 클라이언트(브라우저)에 저장되는 작은 데이터입니다.
서버가 HTTP 응답 시 Set-Cookie 헤더를 통해 쿠키를 설정하고, 이후 요청마다 자동으로 서버에 전송됩니다.

  • 저장 위치: 클라이언트(브라우저)
  • 유지 방식: 브라우저가 자동 포함해서 전송
  • 보안: 노출 위험 있음 (JS 접근 가능, 탈취 우려)
  • 예: 자동 로그인, 장바구니 저장

📦 세션(Session)란?

세션은 서버에서 사용자 정보를 관리하는 방식입니다.
사용자가 로그인하면 서버는 세션 ID를 생성하고, 해당 ID를 쿠키에 담아 클라이언트에게 전달합니다.

  • 저장 위치: 서버
  • 클라이언트는 세션 ID만 저장 (보통 쿠키로 전달)
  • 보안: 쿠키보다 안전하지만 여전히 탈취 가능성 존재
  • 예: 로그인 상태 유지, 사용자 인증

🔍 쿠키 vs 세션 차이

구분 쿠키 세션
저장 위치 클라이언트 (브라우저) 서버
속도 빠름 느림 (서버 부하 있음)
보안 낮음 (노출 가능) 높음 (서버에 저장)
유지 시간 브라우저에 설정된 만료 시간까지 서버 설정된 시간 또는 브라우저 종료 시
예시 자동 로그인, 마케팅 추적 로그인 인증, 장바구니 관리

🛡️ 보안 이슈

  • 쿠키 탈취 (Cookie Hijacking): JS로 접근 가능한 쿠키가 노출되면 위험
  • 세션 하이재킹: 세션 ID가 탈취되면 로그인된 것처럼 행동 가능
  • 대응 방법: HttpOnly, Secure 속성 설정, 세션 만료 짧게 설정

💻 실무 예시

✅ Spring Boot: 세션 로그인 예제


// 로그인 시
HttpSession session = request.getSession();
session.setAttribute("userId", user.getId());

// 인증 체크
Object userId = request.getSession().getAttribute("userId");

✅ JavaScript: 쿠키 직접 설정


// 쿠키 설정
document.cookie = "userToken=abc123; path=/; max-age=3600";

// 쿠키 읽기
console.log(document.cookie);

📝 결론

쿠키는 클라이언트 저장, 세션은 서버 저장
보안이 중요한 정보는 세션, 간단한 설정 값은 쿠키 사용
최근에는 JWT로 인증을 구현하는 경우도 많음


반응형