왜 필요한가 ?
HTTP 프로토콜의 특징을 살펴보자
1. 비 연결 지향 ( connectionless ) :
서버는 요청에 대한 응답을 보낸 후 연결을 끊음
2. 무상태( stateless )
연결을 끊는 순간, 상태 정보가 유지되지 않음
한마디로 새로고침하면 날아감
이러한 특징들 때문에 "상태가 있는 세션" 을 유지하도록 하는 기법
쿠키 vs 세션
쿠키
브라우저(클라이언트) 에 저장되는 작은 데이터 파일
특징
- 인증이 유효한 시간 명시 가능
=> 시간이 정해지면 브라우저가 종료되어도 인증이 유지됨
- 브라우저에 저장됨
- 브라우저가 서버에 요청 시 Request Header 에 넣어서 서버에 전송
세션
"인증에 대한 ID 를 서버가 관리"
클라이언트에게 세션 ID 를 부여하고, 클라이언트는 요청 시 세션 ID 를 보냄
특징
- 브라우저가 종료할 때 까지 인증상태를 유지
- 쿠키와 똑같이 시간 명시도 가능 ( 일정 시간 응답이 없으면 삭제 )
- 사용자에 대한 정보가(세션 ID) 서버에 있기 때문에 보안에 좋음
-> 사용자가 많아 질수록 서버 메모리를 많이 먹음
- 즉, 동시 접속자가 많으면 과부하를 주게 되므로 성능 저하의 원인이 됨
- 세션 ID 는 유일한 값