티스토리 뷰
먼저 쿠키와 세션은 왜 사용할까요 ?
우리가 익숙한 서버-클라이언트 모델을 따르는 HTTP 프로토콜의 특징이자 약점을 보안하기 위해 사용합니다.
서버-클라이언트 통신을 할 때마다 클라이언트를 인증해야만 합니다.
그 이유는 아래의 2가지 특성 때문입니다.
-
클라이언트가 서버에게 request 를 보내면 그에 맞는 response를 보내고 접속을 끊는 특성 (Connectionless : 비연결지향)
-
연결을 끊는 순간 통신이 끝나며 상태 정보는 유지하지 않는 특성 (Stateless : 상태정보유지 x)
비연결지향의 특성 덕에 계속해서 통신 연결을 유지하지 않아 리소스 낭비가 줄어드는 장점(특히 불특정 다수를 대상으로 할 때)이 있는 동시에 통신할 때마다 새로 커넥션을 열기 때문에 클라이언트는 인증을 계속해야하는 단점이 생긴다.
여기서 쿠키와 세션이 제역할을 하게 됩니다.
쿠키 (Cookie)
서버가 사용자의 웹 브라우저에 저장하는 데이터. Key : Value 형태로 저장되는 데이터 파일. 클라이언트의 상태정보를 유지하는 기술
사용예
- 로그인 시 "아이디와 비밀번호를 저장하시겠습니까?"
- 쇼핑몰 장바구니
- 자동로그인
- 팝업 다시 보지않기
작동 방식
-
클라이언트가 페이지를 Request
-
서버에서 SessionId(JSESSIONID)를 생성
-
HTTP 헤더에 SessionId를 포함시켜 Response
-
쿠키에 SessionId 저장
-
브라우저 종료 후 같은 요청을 할 경우 Header에 Cookie를 포함시켜 보냄
-
서버에서 Cookie를 읽어 이전 상태 정뽀를 변경할 필요가 있을때 쿠키를 업데이트하여 재응답
세션 (Session)
쿠키를 기반으로 하고, 사용자 정보파일을 서버 측에서 관리. 일정 시간동안 같은 브라우저가 보내는 일련의 request를 하나의 상태로 보고 그 상태를 유지. 즉 브라우저를 종료할 때 까지 유지되는 상태. 클라이언트의 request가 시작되었을때 SessionID를 부여하여 클라이언트 구별.
사용예
로그인 상태유지
작동 방식
-
클라이언트가 서버로 Request를 보낸다
-
Request의 Header에 있는 Cookie를 확인하여 SessionID를 통해 클라이언트 구별
-
SessionID가 없을 경우 생성 후 클라이언트에게 전달
-
SessionID를 키로 활용하여 각종 로직 수행
쿠키, 세션 차이
쿠키 |
세션 |
|
저장위치 |
클라이언트에 파일 형태로 |
서버 |
보안 |
변질, request 도중 sniffing 위험이 있어 보안 취약 |
서버 내에서 처리하기에 보안성이 좋다 |
라이프 사이클 |
만료기간을 설정할 수 있으며, 파일 형태로 저장되기 때문에 브라우저 종료 후에도 남아있을 수 있다 |
브라우저 종료시 삭제 |
속도 |
빠름 |
느림 |
왜 같이 써야 할까?
세션이 보안성이 좋다고 무분별하게 만들면 서버의 자원에 한계가 있기때문에 메모리 문제가 발생합니다. 각각의 장단점을 활용하여 같이 사용할 때 최고의 성능을 낼 수 있습니다.
참고 링크 : https://jeong-pro.tistory.com/80, https://interconnection.tistory.com/74, https://shlee0882.tistory.com/107
'Computer Science > Network' 카테고리의 다른 글
[Network 요약] 레이어 별 용어정리 (3) | 2020.01.20 |
---|