쿠키와 세션이란?
쿠키와 세션은 클라이언트와 서버 간의 상태를 유지하기 위해 사용하는 대표적인 방식들입니다. 웹은 기본적으로 상태를 저장하지 않는 Stateless한 구조이기 때문에, 사용자의 로그인 정보나 장바구니와 같은 클라이언트 정보를 유지하려면 별도의 상태 관리 방식이 필요합니다. 이때 주로 활용되는 방식이 쿠키와 세션입니다.
Stateless 구조란?
Stateless 구조란 서버가 클라이언트의 이전 상태 정보를 저장하지 않고, 각 요청을 독립적으로 처리하는 아키텍처 설계 방식으로, 클라이언트가 필요한 모든 정보를 요청에 담아 보내면 서버는 해당 요청만 처리하고 응답하는 방식입니다. 이 구조는 서버 장애 시 다른 서버로 쉽게 전환할 수 있고 확장성이 뛰어나며, HTTP 프로토콜이 기본적으로 Stateless 특성을 가집니다.
먼저, 쿠키는 클라이언트 측에 저장되는 데이터입니다. 서버가 클라이언트에게 응답할 때 Set-Cookie 헤더를 통해 데이터를 전달하고, 이후 클라이언트는 요청 시 해당 쿠키를 자동으로 포함하여 서버로 전송하게 됩니다. 쿠키는 브라우저에 저장되기 때문에 서버에서는 별도의 저장 공간을 차지하지 않으며, 지속적인 상태 유지가 가능합니다. 유효 기간을 설정하여 자동 만료되도록 할 수도 있습니다. 쿠키는 클라이언트 측에 상태를 저장하기 때문에 서버는 세션처럼 별도의 저장소를 유지하지 않아도 된다는 장점이 있습니다. 하지만 탈취될 경우 쿠키에 포함된 개인정보가 노출되는 보안 상 단점이 존재합니다.
반면 세션은 서버 측에 저장되는 데이터입니다. 사용자가 서버에 처음 인증을 수행할 때 고유한 세션 ID가 생성되고, 이 ID가 클라이언트에 전달됩니다. 이후 클라이언트는 이 세션 ID를 서버로 전송하며, 서버는 해당 ID를 통해 사용자 상태 정보를 조회합니다. 세션은 서버에 저장되기 때문에 보안 면에서 쿠키보다 안전하지만, 서버 자원을 차지하고 확장에 불리하다는 단점이 있습니다.
쿠키 대신 LocalStorage나 SessionStorage를 사용 한다면?
LocalStorage와 SessionStorage는 모두 브라우저에 데이터를 저장하는 방식으로, 쿠키와 유사한 점이 있습니다.
하지만 자동으로 서버에 전송되지 않는다는 차이점이 있습니다.
LocalStorage 및 SessionStorage 두 저장소는 자바스크립트를 통해 접근이 가능하므로 XSS(Cross Site Scripting)에 더욱 취약할 수 있습니다. 반면, 쿠키는 매 요청에 자동으로 포함되며 HttpOnly 설정을 통해 XSS를 예방할 수 있습니다. 따라서 인증 상태를 관리할 때에는 쿠키를 사용하는 경우가 많습니다.
XSS란?
XSS (Cross Site Scripting)는 공격자가 합법적인 웹사이트에 악성 스크립트(주로 자바스크립트)를 삽입하여, 해당 스크립트가 사용자의 웹 브라우저에서 실행되도록 하는 보안 취약점 공격입니다. 이를 통해 공격자는 사용자의 쿠키 탈취, 세션 하이재킹, 악성 코드 실행, 사용자 정보 유출 등 다양한 피해를 입힐 수 있으며, 주로 게시판이나 댓글 같은 사용자 입력 필드에서 발생합니다.
로그인 구현 시 세션 방식은 주로 어떤 경우에 채택하나요?
보안의 중요도가 높은 서비스에서 많이 사용합니다. 세션 ID는 서버에 저장되고 클라이언트에는 참조만 전달되어 토큰 기반 방식보다 탈취 시 위험성이 낮고, 대응에도 용이합니다.
또한, 원격 로그아웃 기능이 필요한 경우에도 사용됩니다. 예를 들어, 동시 로그인 가능 기기 수를 제한해야 하거나, 강제 로그아웃을 구현해야 하는 경우가 있습니다. 이처럼 서버 측에서 사용자별 로그인 상태를 관리해야 하는 경우 유용하게 활용될 수 있습니다.
출처 - 매일메일
'개발 관련 토막지식' 카테고리의 다른 글
| React의 Error Boundary가 비동기 에러를 잡지 못하는 이유 (0) | 2026.01.15 |
|---|---|
| 스택을 활용한 브라우저의 뒤로가기/앞으로가기 (0) | 2026.01.15 |
| React의 리렌더링 과정 (0) | 2026.01.06 |
| 웹표준이란? (0) | 2026.01.06 |
| 리액트의 Batching Update (0) | 2026.01.02 |