왜 쿠키와 세션을 사용하는가를 알려면 HTTP의 특징을 알아야 한다.
클라이언트가 서버에 요청을 보내면서 연결을 열고, 서버가 클라이언트에 응답을 보내면서 연결을 끊는다.
클라이언트와 서버 간의 어떠한 상태(데이터)도 유지하지 않는다.
계속해서 연결을 유지하지 않는 것은 리소스 낭비를 줄일 수 있지만, 통신할 때마다 새로 연결해야 하기 때문에, 클라이언트는 매 요청마다 인증을 해야한다. 이전 요청과 현재 요청이 같은 사용자의 요청인지 알기위해서는 상태를 유지하는 것이 필요하다. HTTP에서 상태를 유지하기 위해 필요한 기술이 쿠키와 세션이다.
쿠키에는 여러종류가 있지만, 쿠키와 세션을 비교할 때 사용하는 지속쿠키의 관점에서 살펴보자.
쿠키는 클라이언트에서 관리하는 기록 정보 파일이다.
쿠키는 특정날짜에 만료되도록 설정(유효기간)하거나 특정 도메인, 경로에 제한되도록(특정 도메인에서만 쿠키를 제공하도록) 설정할 수 있다.
1. 클라이언트가 서버에 HTTP 요청
2. 서버에서 응답과 함께 Set-Cookie HTTP 헤더를 전송.
3. 클라이언트는 해당 쿠키저장.
4. 이후 클라이언트에서 일어나는 모든 요청과 함께 자동으로 cookie를 HTTP 헤더에 전송.
5. 서버에서 cookie를 참고하여 비즈니스 로직 수행.
쇼핑몰 장바구니, 팝업체크, 자동로그인 등에 사용된다.
서버에서 클라이언트의 상태정보를 저장하는 논리적 연결을 세션이라고 한다. 세션은 쿠키와 함께 사용된다.
웹 서버에 클라이언트에 대한 정보를 저장하고, 클라이언트에 클라이언트를 구분할 수 있는 id(세션아이디)를 부여한다.
사용자에 대한 정보를 서버에 저장하기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질 수록 서버 메모리를 많이 차지하게 된다. 동접자 수가 많은 웹사이트의 경우 서버에 과부하를 주게되므로 성능 저하의 요인이 된다.
1. 클라이언트가 서버에 HTTP 요청.
2. 서버에서 클라이언트 데이터를 저장하고, 응답과 함께 세션ID를 Set-Cookie HTTP 헤더로 전송.
3. 클라이언트는 세션ID를 세션cookie로 저장.
4. 이후 클라이언트에서 일어나는 모든 요청과 함께 자동으로 세션cookie(세션ID)를 HTTP 헤더에 전송.
5. 서버에서 세션ID로 저장한 데이터를 찾아 비즈니스로직 수행.
즉 세션은 클라이언트 정보를 서버에 두고, 세션아이디를 이용해 인증받고 정보를
로그인과 같이 보안상 중요한 작업을 수행할 때 사용한다.
세션도 결국 쿠키를 사용하는 것이므로, 쿠키와 세션의 동작원리와 역할은 비슷하다.
이 둘의 결정적인 차이는 저장위치의 차이이다.
쿠키 | 세션 | |
저장위치 | 브라우저 | 서버 |
보안 | 비교적 보안이 취약 (탈취와 변조 가능, 스나이핑 당할 위험.) |
상대적으로 안전 (ID값만 가지고 있고, 서버에도 저장되어있음) |
Lifecycle | 유효기간이 남아있으면 브라우저를 종료해도 유지. | 브라우저 종료시 세션 삭제. |
속도 | 상대적으로 빠름. | 요청마다 서버에서 처리해야 하기 때문에 느림 |
참고
- https://jeong-pro.tistory.com/80
- https://victorydntmd.tistory.com/34
- https://chrisjune-13837.medium.com/web-%EC%BF%A0%ED%82%A4-%EC%84%B8%EC%85%98%EC%9D%B4%EB%9E%80-aa6bcb327582
HTTP 헤더 및 캐시 설정 (0) | 2022.11.03 |
---|---|
실행컨텍스트(Execution context) 및 콜스텍 (0) | 2020.12.16 |
함수형프로그래밍 - HOF (0) | 2020.12.15 |
함수형 프로그래밍 - 클로저 (0) | 2020.12.14 |
Redux :: 리덕스와 미들웨어 (0) | 2020.12.11 |
댓글 영역