반응형
0. 결론
- 자세히 알아보기 전에, 간단하게 쿠키와 세션에 대해서 공통점 및 차이점은 아래와 같다.
쿠키(Cookie) | 세션(Session) | |
공통점 | 웹 통신간 유지하려는 정보(ex: 로그인 정보 등)를 저장하여 사용 | |
차이점 | - 개인 PC(브라우저) 에 저장 - 보안 취약 - 속도가 빠름 |
- 웹 서버에 저장 - 보안 유리 - 속도가 느림 |
1. 쿠키와 세션을 사용하는 이유
- 기본적으로는 HTTP 프로토콜의 특성이자 약점을 보완하기 위해서 쿠키 또는 세션을 사용.
- HTTP 프로토콜 환경은 "connectionless, stateless" 한 특성을 가지기 때문에, 서버는 매번 클라이언트가 누구인지 확인이 필요.
- Connectionless(비연결 지향)
- 클라이언트가 서버에 요청(Request)을 했을 때, 그 요청에 맞는 응답(Response)을 보낸 후 연결을 끊는 처리 방식 - Stateless(상태 정보 유지 안 함)
- 클라이언트의 상태 정보를 가지지 않는 서버 처리 방식
- 실제로는 데이터 유지가 필요한 상황이 많다.
(예를 들어, 쇼핑몰에서 로그인 이후에 화면이 이동될 때마다 로그인이 풀려 계속 로그인이 필요한 경우)
- 이러한 상황은 페이지의 로딩을 느리게 만드는 요인도 되며, 이러한 번거로움을 해결하기 위해 쿠키와 세션을 사용
- 즉, 클라이언트에서 정보 유지를 위해 사용하는 것이 쿠키와 세션
2. 쿠키(Cookie) 란?
- 사용자가 어떠한 웹 사이트를 방문할 경우, 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일.
- 해당 값을 필요시 정보를 참조하거나 재사용.
- 특징
- 이름, 값, 만료일(저장 기간 설정), 경로 정보로 구성
- 클라이언트에 최대 300개까지의 쿠키 저장 가능
- 하나의 도메인 당 최대 20개의 쿠키를 가짐
- 하나의 쿠키는 4KB(=4096 byte)의 용량의 데이터 저장 가능 - 동작 순서
1. 클라이언트가 페이지를 요청(사용자가 웹사이트 접속)
2. 웹 서버는 쿠키를 생성
3. HTTP 헤더에 생성한 쿠키에 정보를 저장하여 응답
4. 전달받은 쿠키는 클라이언트(브라우저)가 가지고 있다가, 만약 동일 요청 시 요청과 함께 쿠키를 전송
5. 전달받은 쿠키를 읽어 들여 이전 상태 정보와 비교하여 변경이 필요하면 쿠키를 업데이트하여 다시 응답 - 쿠키의 사용 예
- 네이버, 쇼핑몰 등 아이디와 비밀번호를 통해 로그인 시 "아이디와 비밀번호를 저장하시겠습니까?"
- "오늘은 더 이상 이 창을 보지 않음", "일주일 동안 이 창을 보지 않음" 체크
참고!!!
흔히 브라우저(크롬, 엣지)의 시크릿 모드를 사용 시에는 브라우저를 닫을 때마다 모든 쿠키를 지우기 때문에, 위 예시와 같은 안내창이나 팝업창이 다시 노출된다.
3. 세션(Session) 이란?
- 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보는 것.
- 쿠키를 기반으로 되어 있지만, 사용자 정보 파일을 클라이언트(브라우저)가 아닌 서버 측에서 관리.
- 서버에서는 클라이언트를 구분하기 위한 세션 ID를 부여.
- 특징
- 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장
- 서버에 저장되는 쿠키(=세션 쿠키)
- 브라우저를 닫거나, 서버에서 세션을 삭제했을 때에만 정보가 삭제가 되어, 쿠키보다 보안성에 좋음
- 저장 데이터에 제한이 없음(서버 스펙에 따라 다르다)
- 각 클라이언트에 고유 ID를 부여하여 관리
- 접속한 사용자가 많아질수록 서버 메모리를 많이 차지하게 되어 서버에 부하가 생김 - 동작 순서
1. 클라이언트가 페이지를 요청(사용자가 웹사이트 접속) 시에 고유 세션 ID를 발급
2. 클라이언트는 세션 ID를 확인하고 이에 대해 쿠키를 사용하여 저장
3. 클라이언트는 서버에 요청할 때, 이 세션 ID를 같이 서버에 전달해서 요청
4. 서버는 세션 ID를 전달받아 세션 ID 정보에 있는 클라이언트 정보를 사용
5. 요청한 내용을 처리 후 클라이언트에게 응답 - 세션의 사용 예
- 쇼핑몰에서 로그인 이후 화면을 아무리 이동해도 로그아웃이 되지 않음.
4. 쿠키와 세션의 차이
쿠키(Cookie) | 세션(Session) | |
저장 위치 | 클라이언트(접속자의 브라우저) | 웹 서버 |
저장 형식 | text | Object |
만료 시점 | 쿠키 저장시 설정 (브라우저가 종료되도, 만료시점이 지나지 않으면 자동으로 삭제가 되지 않는다.) |
브라우저 종료시 무조건 삭제 (기간 지정 가능) |
사용하는 자원(리소스) | 클라이언트 리소스 | 웹 서버 리소스 |
용량 제한 | - 총 300개 - 하나의 도메인 당 20개 - 하나의 쿠키 당 4KB(4096byte) |
- 서버가 허용하는 한 용량제한이 없음 |
속도 | 세션보다 빠름 | 쿠키보다 느림 |
보안 | 세션보다 취약 | 쿠키보다 좋음 |
세션을 사용하면 더 좋은 것 같은데 쿠키를 사용하는 이유?
세션은 서버의 자원을 사용하기 때문에, 접속자의 수가 많아지면서 무분별하게 만들다 보면 서버의 메모리가 증가하여 서버에 과부하가 발생할 수 있다.
그렇기 때문에, 쿠키와 세션을 적절한 상황과 요소에 맞춰 병행으로 사용한다.
참고
반응형
'Tool, 이론 및 기타 > 이론' 카테고리의 다른 글
[금융 IT] 마이데이터(MyData)란? (0) | 2022.06.01 |
---|---|
[금융 IT] EAI/FEP/MCI 용어 정리 (0) | 2022.06.01 |
Spring MVC vs Struts2 비교하기 (0) | 2022.04.21 |
Struts2 Framework(스트럿츠2) 정리 (0) | 2022.04.21 |
[프로그래밍언어] 절차지향 vs 객체지향 vs 함수형 프로그래밍 비교 (4) | 2022.04.20 |