1. 배경
HTTP는 connectionless, stateless 한 성질을 가지고 있다.
- connectionless : request 후 response를 받으면 연결을 끊음. 그냥 끝
- stateless : 통신이 끝나면 그 상태 정보를 유지하지 않음.
즉, HTTP는 request -> response 후 연결을 끊고, 통신이 끊어지면 그 상태 정보(누가 어디서 접속했는지 ... )는 유지하지 않는다.
이렇게 되면 페이지를 요청할 때마다(이동할 때마다) 로그인이 풀리게 된다. 이를 보완하기 위해 쿠키, 세션이 등장
2. 쿠키
- 클라이언트(로컬)에 저장되는 키-값 데이터 파일
- 유효 시간이 있으면, 브라우저가 종료되어도 로그인이 유지된다.
방법
- response 헤더에 Set-Cookie 속성
- request 시엔 자동으로 서버에 전송
ex. 로그인, 장바구니, 자동로그인
3. 세션
- 쿠키와 달리 서버에서 정보를 관리, 클라이언트엔 session ID만
- sessionID == 클라이언트 구분용
- 브라우저 접속 후 종료할 때까지 인증 상태 유지
- 쿠키보다 보안은 유리하지만 서버 과부하 위험
- 쿠키는 값을 직접 주고받으므로 sniffing에 취약하지만, 세션은 sessionID만 주고받음
- 속도는 쿠키가 더 빠름. 세션은 서버에서 해당 정보를 찾아야 하니까
결론은, 쿠키로 로컬에 모두 저장하느냐 vs 로컬에는 세션ID만 놔둘 것이냐
ex. 보안 상 중요한 로그인 같은 작업
4. 쿠키, 세션 != 캐시
캐시 : css, js 등을 브라우저나 서버 앞단에 저장해놓고 사용하는 것.
-> 그래서, 서버에서 파일이 변경되어도 브라우저에서 캐시를 참고하면 반영이 안됨.
-> 캐시 삭제 필요
세션은 사용자 수만큼 서버 메모리를 차지하기 때문에, 최근에는 이를 보완한 토큰 방식을 이용.
JWT는 다음 시간에 ...
참고
'CS > web' 카테고리의 다른 글
JWT(Json Web Token) (0) | 2024.03.08 |
---|---|
OAuth (0) | 2024.03.04 |
Web Server와 WAS (0) | 2024.03.01 |
[web] REST, REST API (0) | 2024.02.19 |
[web] 브라우저 (0) | 2024.02.16 |