![쿠키(Cookie)와 세션(Session) 방식의 개념과 차이점](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnYLdc%2FbtsJe54CTHb%2FjK6GaI1cKIV70zIiyMlebK%2Fimg.png)
쿠키(Cookie)와 세션(Session) 방식의 개념과 차이점legacy/WEB2024. 8. 25. 13:55
Table of Contents
1. 쿠키(Cookie)와 세션(Session) 개념이 등장한 이유
HTTP 프로토콜은 비상태성(stateless)를 가지고 있다. 이게 무슨 말이냐면, 동일한 클라이언트가 서버로 요청을 보냈을 때, 서버는 이전의 요청들을 기억하지 않는다는 것이다. 예를 들면, 메인 페이지와 로그인 페이지가 존재할 때, 로그인을 완료하고 메인 페이지로 이동하였을 때, 서버는 로그인을 했는지 알 수 없다는 것이다.
사용자가 로그인을 했는지 여부를 알 수 없으므로 모든 요청마다 로그인을 해야할 것이다. 따라서 사용자의 상태를 유지하기 위해서 쿠키(Cookie)와 세션(Session)이 도입되었다.
2. 쿠키(Cookie)
2-1. 쿠키(Cookie)란?
쿠키란 클라이언트의 브라우저에 사용자의 상태 정보를 저장하는 데이터 파일이다. 클라이언트는 서버로 요청을 보낼 때, 요청 헤더에 쿠키를 담아서 전달한다. 서버는 요청 헤더에 담긴 쿠키를 통해 클라이언트를 식별할 수 있다.
2-2. 쿠키(Cookie) 방식
- 클라이언트가 서버로 요청을 보낸다.
- 이 요청에는 쿠키가 포함되어 있지 않다.
- 서버가 쿠키를 생성하여 응답에 포함한다.
- 클라이언트를 식별할 수 있는 쿠키를 생성하고, 이 쿠키를 응답에 포함하여 클라이언트로 전달한다.
- 클라이언트는 쿠키를 브라우저에 저장한다.
- 서버로부터 받은 쿠키를 브라우저에 저장하고, 앞으로 서버로 요청을 보낼 때마다 요청 헤더에 쿠키를 포함한다.
- 서버가 쿠키를 통해 사용자를 식별한다.
- 클라이언트가 요청 헤더에 담은 쿠키를 통해 서버는 클라이언트를 식별한다.
2-3. 쿠키 방식 예시
- 로그인 시에 “아이디 기억하기” 기능
3. 세션(Session)
3-1. 세션(Session)이란?
쿠키는 브라우저에 사용자 식별 정보를 저장한다면, 세션은 서버에 사용자 식별 정보를 저장하는 방식이다. 서버는 사용자를 식별하기 위한 세션 데이터를 생성하고, 이 세션 데이터를 식별하기 위한 SessionID를 생성한다. 이 SessionID는 서버에서 클라이언트로 응답을 보낼 때 쿠키에 포함하여 전달한다.
3-2. 세션(Session) 발급 방식
- 클라이언트가 서버로 요청을 보낸다.
- 이 요청에는 SessionID가 포함되어 있지 않다.
- 서버가 세션을 생성하고, 세션을 식별하기 위한 SessionID를 응답에 포함한다.
- 서버는 클라이언트를 식별하기 위한 세션 데이터를 생성한다. 이 세션 데이터는 서버(ex. 메모리)에 저장되어 관리된다.
- 서버는 이 세션 데이터를 식별하기 위한 SessionID를 생성한다.
- 서버는 응답 헤더에 쿠키 값으로 SessionID를 포함하여 클라이언트로 전달한다.
- 클라이언트는 SessionID를 쿠키에 저장한다.
- 클라이언트는 서버로부터 전달받은 SessionID를 브라우저 쿠키에 저장한다. 이후에 클라이언트는 서버로 요청을 보낼 때마다 요청 헤더에 쿠키를 포함한다.
- 서버가 클라이언트의 요청을 처리할 때 SessionID를 통해 사용자를 식별한다.
- 서버는 클라이언트의 요청 헤더에 포함된 SessionID 쿠키를 확인하고, 이를 기반으로 서버에 저장된 세션 데이터를 조회하여 사용자를 식별한다.
4. 쿠키(Cookie)와 세션(Session)의 차이점
- 쿠키는 브라우저에서 관리되고, 세션은 서버에서 관리된다.
- 요청 속도는 쿠키 방식이 더 빠른데, 그 이유는 세션의 경우 서버의 자원(ex. 메모리)을 사용하므로 세션을 식별하기 위한 단계를 거치기 때문이다.
- 세션 방식은 사용자가 많아질 수록, 서버 메모리를 많이 차지하게 된다. 동접자 수가 많은 웹사이트인 경우 서버에 과부하를 주므로 성능 저하가 된다.
- 쿠키는 사용자 식별 정보를 브라우저에 저장하므로 탈취당할 시에 위험하지만, 세션의 경우 SessionID를 브라우저 쿠키에 저장하고 서버에서 SessionID를 기반으로 세션 데이터를 식별하기 때문에 상대적으로 안전하다.
- 브라우저를 종료하더라도, 쿠키의 만료 시간이 되지 않았다면 브라우저에서 보관한다.
- 세션은 만료 시간이 남아있더라도, 브라우저를 닫으면 세션 정보를 삭제한다.
참고
https://interconnection.tistory.com/74