1. 쿠키 또는 세션을 사용하는 이유
HTTP 통신인증의 단점을 해결하기위한 방법으로 쿠키 또는 세션을 사용한다.
HTTP 프로토콜 통신의 단점은
1) 통신이 끝나면 상태를 유지하지않음
2) 연결을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지하지 않음
만약에 웹사이트에서 쿠키 / 세션을 사용하지않는다면, 페이지를 이동할때마다 로그인을 새로해야한다.
쿠키 / 세션을 사용한다면 사용자에 대한 인증을 유지한다.
2. 쿠키(Cookie)
쿠키는 클라이언트(브라우저)에 저장되는 키와 값을 가진 데이터 파일이다.
사용자 인증 유효시간을 명시할 수 있고, 이를 통해 브라우저가 종료되어도 인증을 유지시킬 수 있다.(클라이언트 정보를 로컬에 저장했다가 참조함)
클라이언트에 300개까지 저장가능하고, 도메인당 20개의 값을 가질 수 있다, 하나의 쿠키는 4kb까지 저장 가능하다.
Response Header Set-Cookie 속성으로 클라이언트에 쿠키 생성 가능.
따로 생성하지않더라도 브라우저 Request 시 Response Header에 담겨서 자동으로 전송.
[ 구성 ]
이름 : 각 쿠키 구별
값 : 이름에 해당하는 값
유효시간 : 쿠키 유지시간
도메인 : 쿠키를 전송할 대
경로 : 쿠키를 요청할 경로
[ 동작 순서 ]
1) 클라이언트 요청
2) 서버에서 쿠키생성
3) HTTP헤더에 쿠키 포함해서 응답 (이때 클라이언트로컬에 저장, 브라우저종료해도 남음)
4) 같은 요청시 HTTP헤더에 쿠키를 같이 보냄
5) 대상 서버에서 쿠키변경이 필요하면 변경해서 응답
[ 사용 예시 ]
아이디 비밀번호 저장, 결제사이트 장바구니, 팝업창 다시보지않음
3. 세션(Session)
기본적으로 쿠키를 기반으로 하지만, 쿠키는 클라이언트의 로컬에 저장하지만, 세션은 서버측에서 저장함.
따라서 브라우저가 종료되면 세션정보는 사라지는 차이가 있다. (접속시간 제한을 걸어서 정보가 유지되게 가능함)
서버에 사용자의 정보를 두기에 보안은 좋지만, 서버에 별도 저장공간이 필요하고, 메모리를 차지한다.
사용자가 많은 사이트에서 세션을 사용해 저장하면, 서버에 과부하가 걸린다.
클라이언트에 Request 시 해당 서버의 엔진이 클라이언트에게 ID를 부여하는게 세션 ID 이다.
[ 동작 순서 ]
1) 클라이언트가 서버에 접속하면 세션ID 받음
2) 클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장
3) 서버에 요청시 이 쿠키의 세션ID를 함께 전달
4) 서버는 세션 ID를 받아서 세션의 클라이언트 정보 사용
5) 받은 클라이언트의 정보를 가지고 서버에 요청하고, 서버는 응답.
[ 사용 예시 ]
보안이 중요한 로그인
쿠키와 세션의 차이 정리
세션도 결국 쿠키를 사용하기 때문에 둘다 비슷한 동작을 한다.
다만 세션은 서버의 자원을 사용해 서버에 저장되며, 쿠키는 서버의 자원을 사용하지않고 클라이언트의 로컬에 저장된다. 이게 가장 큰 차이점이다.
세션이 보안면에서 우수하며, 쿠키가 요청속도가 빠르다. (세션은 서버를 거쳐야한다)
쿠키는 클라이언트에 로컬에 저장되어있다가 request 로 전송되기때문에 스니핑을 당할 수 있어서 보안상으로 취약하나 세션은 서버에 저장되기에 보안성이 조금 더 좋다.
세션과 쿠키 모두 만료시간을 정해서 유지시킬 수 있으나, 세션은 결국에는 서버에 저장되기에 브라우저를 종료하면 삭제된다. (브라우저 전환 시 다른 세션 사용, 브라우저안에서 탭전환은 세션유지)
세션은 동접자가 많아지면 메모리 과부하가 걸리기에 쿠키가 유리한 경우가 있다.
항목 | 쿠키 | 세션 |
보안 | 취약(로컬) | 좀 더 우수(서버) |
요청속도 | 빠름 | 비교적 느림(서버 경유) |
라이프사이클 | 만료시간 | 브라우저 종료 |
메모리 | 로컬 메모리 | 서버 메모리 |
'웹 (Web)' 카테고리의 다른 글
[JQuery] 슬라이더 편하게 구현하는 방법 JQuery기반 플러그인 Slick Slider 정리 (0) | 2023.11.26 |
---|---|
로그인 기능 구현 - 로그인 인증방법 정리 (0) | 2023.11.17 |
다양한 방법으로 배포하기 (0) | 2023.10.23 |
Brackets Plugin (0) | 2023.10.22 |
Python 환경설정 (0) | 2023.10.18 |