클라이언트(브라우저) 측에 저장되는 key-value형태의 문자열로 이루어진 작은 데이터 파일.브라우저 단위로 생성됨.다른 도메인을 대신해서 쿠키를 발급해줄 수 없음.만료 시간까지 로그인 유지와 같은 상태 정보 유지.효율적으로 서비스를 제공해주기 위해서 사용됨.상태를 유지할 수 없는 HTTP 프로토콜의 특성때문에 쿠키를 이용해서 상태를 저장함.
클라이언트에서 로그인을 요청하면 서버는 HTTP헤더에 쿠키를 담아서 반환해줌.
Ex
- 1. 클라이언트는 로그인을 하기 위해 이메일, 패스워드를 서버로 요청을 보냄. | ![]() - 2. 요청을 바탕으로 유저 정보를 찾아서 쿠키를 반환. |
- 3. 반환 받은 쿠키를 저장소에 보관. | - 4. 쿠키에 들어있는 정보를 통해 로그인을 유지. |
민감한 개인 정보를 저장하는 데에는 적합하지 않음. - 1. 서버에 세션 DB가 생겼고 sessionId라는 칼럼이 추가 되었음. - 쿠키에 세션 아이디를 담아서 반환해줌. | - 2. 쿠키에 저장되어 있던 세션id를 보고 만약에 세션이 만료되지 않았다면 해당 세션id에 맞는 유저가 있는 지 확인하고 응답함. |
Session 쿠키종료될 때 제거됨.Persistent 쿠키종료해도 쿠키가 남아있음.document.cookie = "user=John; expires=Fri, 31 Dec 2025 23:59:59 GMT";document.cookie = "user=John; max-age=3600"; // 1시간 동안 유효| - | 세션 쿠키(Session Cookie) | 지속 쿠키(Persistent Cookie) |
|---|---|---|
| 저장위치 | 브라우저 메모리. | 사용자의 장치.(하드 디스크) |
| 수명 | 브라우저를 닫으면 삭제. | 설정된 만료 시간까지 유지. |
| 사용 목적 | 세션 유지.(로그인 상태, 장바구니 등) | 사용자 설정 유지.(자동 로그인, 언어 설정 등) |
| 보안 | 상대적으로 안전. | 탈취 가능성이 있어 암호화 필요. |
세션 객체는 Key에 해당하는 SESSION ID와 이에 대응하는 Value로 구성되어 있음.
세션(session)이란?
세션 방식은 서버쪽에서 사용자 정보를 저장하는 방식.
고유한 세션 ID를 할당함.쿠키보다 상대적으로 보안성이 높음.사용자나 다른 제3자에게 노출되어서는 안되는, 서비스 제공자가 직접 관리해야 할 정보들은 세션으로 서버 안에서 다뤄짐.
클라이언트의 요청이 HTTP 무상태성으로 인해 사용자가 로그인을 해서 마이페이지로 이동을 해도 서버는 동일 인물임을 알지 못함.

중요 정보는 서버의 세션 저장소에 key-value로 저장한 뒤 브라우저에 key값만 반환해줌.
차이점은 사용자와 관련된 정보를 클라이언트에서는 가지고 있지 않음.보안이 더 높음.서버에서 세션 저장소를 따로 사용해야 돼서 세션이 많아질수록 서버에 부하가 발생함.
세션 특징.
중복이 되어서는 안되며 고유한 세션 ID가 부여됨.키에 매칭될 값(value)가 있어야 됨.JSESSIONID란?
톰캣 컨테이너에서 세션을 유지하기 위해 발급하는 키(key).HTTP 프로토콜은 stateless(무상태성)이므로 요청할 때마다 새로운 연결이 생성되고 응답 후에 연결은 끊기게 되므로 상태를 유지할 수 없음.상태를 저장하기 위해서 톰캣은 JSESSIONID 쿠키를 클라이언트에게 발급해주고 이 값으로 세션을 유지할 수 있도록 해줌.동작방식.
브라우저에 최초 접근시 톰캣은 Response 헤더에 다음과 같이 JSESSIONID값이 발급됨.
Set-Cookie: JSESSIONID=3CB361E0BE1A9A7DE7DB926DF0772BAE2
브라우저 재요청시 Response를 통해 받은 JSESSIONID를 Request 헤더의 쿠키에 넣어서 서버에 요청함.
쿠키를 통해 JSESSIONID값을 전달받게 되면 서버는 새로운 JSESSIONID 값을 Response 헤더에 발급하지 않음.
클라이언트로부터 전달받은 JSESSIONID값을 기준으로 서버에서는 세션 메모리 영역에 상태를 유지할 값들을 저장할 수 있게됨. (HttpSession 등)
유지범위
한계
쿠키는 클라이언트 측, 즉 웹 브라우저에 저장.세션은 서버 측에 저장.| - | 쿠키 | 세션 |
|---|---|---|
| 저장위치 | 클라이언트.(브라우저) | 서버. |
| 수명 | 설정 가능(만료 시간까지 유지) | 기본적으로 브라우저 종료 시 종료 |
| 보안 | 조작, 탈취 가능성이 있음 | 상대적으로 안전 |
| 데이터 크기 | 제한 있음(약 4KB) | 서버 리소스에 의존 |
| 사용 목적 | 사용자 설정 유지 | 사용자 인증 및 중요한 정보 관리 |
쿠키는 클라이언트 측에 저장되기 때문에 보안의 취약점에 노출될 가능성이 있음.
암호화.HTTPS 사용.HttpOnly 속성.SameSite 속성.세션은 서버에서 관리되므로 쿠키보다 상대적으로 보안성이 높지만, 세션 ID를 탈취당할 경우 사용자의 세션이 도용될 수 있음.
세션 ID의 안전한 전송.세션 ID 재생성.세션 만료 시간 설정.IP 및 사용자의 브라우저 확인.CSRF 토큰 사용.웹 개발자들은 사이트를 만들 때 이 정보를 쿠키에 저장할 지 세션에 저장할 지 적절한 판단을 내릴 수 있어야 됨. 쿠키로 노출시켜서는 안 될 정보들이 있고, 그렇다고 세션을 남발하면 접속자가 많을 때 서버에 부하가 걸림.

세션 방식에도 단점이 존재함.
위의 대안으로 나온 것이 토큰방식.
세션 아이디 대신 토큰을 발급해 주는 것.
서버에서만 유효한 토큰을 생성할 수 있음.
토큰을 발급해 간 사용자의 브라우저에 쿠키로 저장해 놓고 클라이언트가 요청을 보낼 때 요청 헤더에 토큰을 담아서 보내주면 서버는 발급된 토큰인지 검증을 거친 뒤 요청을 수락해줌.
서버에서 통제할 수 없기 때문에 세션에 비해 토큰 정보를 탈취 당할 가능성이 높음.| - | 세션 방식 | 토큰 방식 |
|---|---|---|
| 장점 | - 사용자의 상태를 원하는대로 통제 가능. - 클라이언트로부터 요청을 받으면 클라이언트의 상태를 계속 유지해놓고 사용. (Stateful) | - 상태를 따로 기억해 둘 필요가 없음.(Stateless) |
| 단점 | - 메모리에 로그인되어 있는 사용자의 상태를 보관해야 함. - 사용자가 증가함에 따라 성능 문제를 일으킬 수 있고 서버를 확장하기 어려움. | - Payload는 암호화되지 않기 때문에 유저의 민감한 정보는 담을 수 없음. - 토큰 탈취 시 대처하기 어려움. |
비용이 드는 데이터를 한 번 가져온 뒤에는 임시로 저장해두는 것.