📢 공지합니다
이 게시글은 메인 페이지에 항상 고정되어 표시됩니다.
오늘은 기술면접 단골 질문인 쿠키vs 세션에 관해서 정확한 포스팅을 하겠습니다.
HTTP(CH7)
최코딩의 개발 HTTP(CH7) 본문 스프링/HTTP HTTP(CH7) seung_ho_choi.s 2023. 5. 28. 19:39
balhae.tistory.com
https://balhae.tistory.com/105
섹션6 로그인 처리1 - 쿠키, 세션
최코딩의 개발 섹션6 로그인 처리1 - 쿠키, 세션 본문 스프링/스프링 MVC(2) 섹션6 로그인 처리1 - 쿠키, 세션 seung_ho_choi.s 2023. 9. 23. 21:31
balhae.tistory.com
약 2년전에 포스팅한게 있지만.. ㅎㅎㅎ 그 당시에는 생초보 개발자가 쓴거 같은 내용이라서 다시 정리해서 작성하겠습니다!
HTTP는 무상태(Stateless) 프로토콜입니다. 이것이 무엇을 의미할까요?
이러한 특성 때문에 다음과 같은 문제가 발생합니다.
예를 들어, 쇼핑몰에서 장바구니에 상품을 담았는데 페이지를 이동할 때마다 장바구니가 비워진다면? 로그인했는데 페이지를 이동할 때마다 다시 로그인해야 한다면? 매우 불편할 것입니다.
이러한 문제를 해결하기 위해 쿠키(Cookie)가 등장했습니다!
쿠키는 서버가 클라이언트(브라우저)에 저장하는 작은 데이터 조각입니다. 클라이언트는 이 쿠키를 저장했다가 동일한 서버에 재요청시 저장된 데이터를 함께 전송합니다.
1. 클라이언트 → 서버: 로그인 요청
2. 서버 → 클라이언트: 로그인 성공 + Set-Cookie: user=홍길동
3. 클라이언트가 쿠키 저장
4. 클라이언트 → 서버: 다음 요청시 Cookie: user=홍길동 자동 포함
5. 서버는 쿠키를 읽어 사용자 식별
쿠키만으로도 상태 유지는 가능하지만, 다음과 같은 한계점이 있었습니다.
이러한 문제를 해결하기 위해 세션이 등장했습니다!
세션은 서버에서 클라이언트의 상태 정보를 저장하는 기술입니다. 클라이언트에는 세션 ID만 쿠키로 저장하고, 실제 데이터는 서버에 보관합니다.
1. 클라이언트 → 서버: 로그인 요청
2. 서버에서 세션 생성 (세션ID: ABC123, 데이터: {user: "홍길동", role: "admin"})
3. 서버 → 클라이언트: Set-Cookie: JSESSIONID=ABC123
4. 클라이언트가 세션ID 쿠키 저장
5. 클라이언트 → 서버: 다음 요청시 Cookie: JSESSIONID=ABC123
6. 서버는 세션ID로 세션 저장소에서 사용자 정보 조회
구분 | 쿠키(Cookie) | 세션(Session) |
저장위치 | 클라이언트 로컬 (브라우저/개인컴퓨터) | 서버 (웹서버) |
보안 | 취약 | 강함 |
라이프 사이클 | 브라우저 종료해도 만료시점 지나지 않으면 삭제X | 브라우저 종료와 무관하게 서버에서 타임아웃 관리 |
속도 | 빠름 | 느림 |
저장형식 | Text | Object |
용량 | 제한 있음(총 300개 하나의 도메인 당 20개 하나의 쿠키당 4KB) | 서버가 허용하는 한 제한 없음 |
세션은 보통 세션 ID를 쿠키에 저장하지만, 세션 데이터 자체는 서버에 있어서 라이프사이클이 다르게 관리됩니다.
Docker에 관해 (0) | 2025.05.09 |
---|---|
Spring vs Spring Boot (0) | 2025.05.07 |
자바의 실행 환경 (1) | 2025.05.06 |
로드밸런싱(Load Balancing)의 모든 것 (0) | 2025.04.27 |
AccessToken과 RefreshToken 인증 방식 (1) | 2025.04.05 |