Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 백준
- git기초
- 인텔리제이
- 운체 1주차
- c언어 제어문
- 5장
- 인스타
- 자료구조
- 스택
- Git
- 데베시 1주차
- 도커
- 코테
- git오류
- Workbench
- python기초
- 코딩테스트
- DP
- python기본
- 4장
- #코린이 #코딩 #할 수 있다
- c언어 기본
- 그리디
- 1주차(1)
- c언어
- git 오류
- 최단거리
- python자료형
- 참고X
- 파이썬 알고리즘 인터뷰
Archives
- Today
- Total
하루살이 개발자
[네트워크] 쿠키 vs 세션 vs 웹스토리지 본문
HTTP 프로토콜은 상태를 유지하는 영속성이 없다. 이러한 HTTP 프로토콜의 한계를 보안하기 위해 상태를 유지하기 위한 기술로 쿠키와 세션이 있다.
쿠키와 세션을 먼저 알아보고, 이후에 나온 웹스토리지와도 비교해보겠습니다.
쿠키
- 클라이언트 로컬에 저장되는 키와 값이 들어있는 파일이다.
- 클라이언트 상태 정보를 브라우저에 저장하여 참조한다.
- 구성요소 - 쿠키의 이름 / 값 / 만료시간 / 전송할 도메인 이름 / 전송할 경로 / 보안 연결 여부 등
- 한번에 4KB 로 용량이 제한되고 300개까지저장가능함. (최대용량 : 4KB * 300 = 1.2MB)
=> 작은정보의 형태로 저장되고 오래되면 자동삭제된다. - 동작방식
- 웹 브라우저가 서버에 요청
- 상태를 유지하고 싶은 값을 쿠키로 생성
- 서버가 응답할 때 HTTP헤더에 쿠키를 포함해서 전송
- 전달받은 쿠키는 웹브라우저에서 관리하고 있다가, 다음 요청 때 쿠키를 HTTP 헤더에 넣어 전송
- 서버에서는 쿠키 정보를 읽어 이전 상태 정보를 확인한 후 응답
- 쿠키 사용예) 아이디/비밀번호 저장, 쇼핑몰 장바구니
자바에서 쿠키 사용하기
더보기
//Cookie 생성자
Cookie(String name, String value);
// 쿠키생성하기
new Cookie(String name, String value);
ex)Cookie cookie = new Cookie("id","1234");
// 클라이언트쪽에 클라이언트의 정보 저장
response.addCookie(Cookie co);
// 접속한 클라이언트에 저장된 쿠키정보(클라이언트정보) 가져오기
Cookie co [] = request.getCookies();
Cookie 관련 메소드 정리
int getMaxAge() //쿠키의 사용할수 있는 기간에 대한 정보
setMaxAge(int max) // 쿠키가 저장되는 기간 설정
ex) setMaxAge(0); // 쿠키삭제
setMaxAge(-1); // 쿠키폴더에 파일이 만들어지지 않지만 브라우져가 종료될까지
쿠키의 정보는 저장된 상태이고 브라우져를 닫으면 쿠키정보 사라짐.
(setMaxAge를 생략하면 -1을 기본)
setMaxAge(60*60*24*365)=> 1년
setValue(Cookie c) // 쿠키정보 수정하기
=> 쿠키의 정보가 수정되면 setMaxAge도 수정해야만
정보의 유효기간이 설정됨.
String getName(); //쿠키설정된 이름 가져오기
String getValue(); // 쿠키에 설정된 값 가져오기
setPath(String path) // 쿠키의 유효한 디렉토리 설정
ex)setPath("/") // 모든 문서(디렉토리)에서 쿠키사용가능함.
세션
- 일정 시간동안 같은 브라우저로 들어오는 요청을 하나의 상태로 보고, 그 상태를 유지하는 기술이다
- 즉, 웹 브라우저를 통해 서버에 접속한 이후부터 브라우저를 종료할 때까지 유지되는 상태이다.
- 사용자 정보를 서버 측에서 관리한다.
- 서버에서 클라이언트를 구분하기 위해 sessionId를 부여하여, 웹 브라우저가 서버에 접속하여 브라우저를 종료할 때까지 인증상태를 유지한다.
- 접속 시간에 제한을 두어 일정 시간 응답이 없다면, 정보가 유지되지 않게 설정 가능하다.
- 데이터를 서버에 두기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지하게 된다.
- 동작방식
- 웹 브라우저가 서버에 요청
- 서버가 해당 웹브라우저(클라이언트)에 유일한 ID를 부여함
- 서버가 응답할 때 HTTP 헤더에 세션ID를 포함해서 전송하고, 쿠키에 세션ID를 jsessionid라는 이름으로 저장
- 웹브라우저는 이후 웹브러우저를 닫기까지 다음 요청때 부여된 세션ID가 담겨있는 쿠키를 HTTP 헤더에 넣어 전송
- 서버는 세션ID를 확인하고, 해당 세션에 관련된 정보를 확인한 후 응답
- 세션 사용예) 로그인
쿠키 VS 세션 비교
쿠키 | 세션 | |
저장위치 | 클라이언트 | 서버 |
보안 | 클라이언트에 저장되므로 보안에 취약함 | 쿠키를 이용해 세션ID만 저장하고 이 값으로 구분해서 서버에서 처리하므로 비교적 보안성이 좋다 |
라이프사이클 | 만료시간에따라 브라우저를 종료해도 계속해서 남아있을 수 있다. | 만료시간을 정할 수 있지만, 브라우저가 종료되면 만료시간에 상관없이 삭제된다 |
속도 | 클라이언트에 저장되어서 서버에 요청시 빠르다 | 실제 저장된 정보가 서버에 있으므로 서버의 처리가 필요해 쿠키보다 느리다. |
지원 타입 | 오직 문자형 데이터 타입만 지원 | 데이터 타입 뿐만 아니라 객체도 저장 가능 |
웹스토리지 - 로컬스토리지(localStorage), 세션스토리지(sessionStorage)
- 클라이언트에 데이터를 저장할 수 있도록 HTML5부터 추가된 저장소이다.
- 간단한 Key - Value 스토리지 형태이다.
- 쿠키와 달리 자동 전송 위험성이 없다.
- 오리진(Origin -> 도메인, 프로토콜, 포트) 단위로 접근이 제한되는 특성 덕분에 CSRF로부터 안전하다.
- 문자형 데이터 타입만 지원
- 로컬스토리지와 세션 스토리지가 있으며, 같은 스토리지 객체를 상속하기 때문에 메소드가 동일하다
로컬 스토리지(localStorage)
- window.localStorage 객체
- 사용자가 데이터를 지우지 않는 이상, 브라우저나 OS를 종료해도 계속 브라우저에 정보가 남아있음(영구성). 단, 동일한 브라우저 사용시에만 해당된다.
- 오리진(= 프로토콜 + 도메인 + 포트)별로 생성되며, 다른 오리진의 로컬 스토리지에는 접근이 불가능하다.
- 서로 다른 브라우저 탭이라도 동일한 오리진이라면 동일한 로컬 스토리지를 사용한다.
- 지속적으로 필요한 데이터 저장(ex. 자동 로그인)
세션 스토리지(sessionStorage)
- window.sessionStorage 객체
- 데이터가 오리진뿐만 아니라 브라우저 탭에도 종속되기 때문에, 윈도우나 브라우저 탭을 닫을경우 제거된다.
- 세션 쿠키와 달리, 탭/윈도우 단위로 세션 스토리지가 생성된다.
- 즉, window 객체와 동일한 유효 범위 및 생존 기간을 가지며, 탭/윈도우를 닫을 시 데이터가 삭제된다.
- 또한 동일한 탭/윈도우라도 다른 오리진(= 프로토콜 + 도메인 + 포트)이라면 또 다른 세션 스토리지가 생성된다.
- 서로 다른 세션 스토리지는 서로 영향을 주지 않으며 독립적으로 동작한다.
- 윈도우 복제로 생성된 경우, 혹은 스크립트로 새 창을 연 경우 세션 스토리지가 복제되어 생성된다.
- 일시적으로 필요한 데이터 저장(ex. 일회성 로그인 정보, 입력폼 저장 등)
요약정리
종류 | 쿠키 | 세션 | 세션 스토리지 |
구조 | Cookie-name:Cookie-value | Key : Value | Key : Value |
크기 | 4KB | 모바일: 2.5KB 데탑: 5~10KB |
모바일: 2.5KB 데탑: 5~10KB |
유효시점 | 지정한 만료기간까지 유효 | 브라우저 및 OS를 종료하더라도 유효함 | 새로고침이나 브라우저 탭이 유지될때까지만 유요함 |
소멸 시점 | 지정한 만료기간이 지나면 소멸 | 강제적으로 삭제 및 초기화를 할 때 소멸 | 탭을 닫거나 브라우저를 닫으며 OS를 종료시 소멸 |
서버의 전송여부 | O(요청 마다 방문정보를 저장) | X | X |
장점 | - 대부분 브라우저에서 제공 - 유저의 웹 사이트 방문내역을 추적하여 쿠키 제공자의 접속 패턴을 파악하여 유저와 관련성이 높은 마케팅 정보를 제공함 |
- 서버로 전송되지 않으므로 상대적으로 자원소모가 적음 - 필요한 경우에만 꺼내서 사용하기때문에 자동전송이 되지 않음 |
- 서버로 전송되지 않으므로 상대적으로 자원소모가 적음 - 필요한 경우에만 꺼내서 사용하기때문에 자동전송이 되지 않음 |
단점 | - 매번 서버로 전송되어 상대적 자원소모가 있음 - 쿠키에 접근 가능하고, 조작하여 CSRF 보안에 취약함 |
- HTML5를 지원하지 않는 브라우저는 사용 불가 | - HTML5를 지원하지 않는 브라우저는 사용 불가 |
사용처 | - 로그인 화면에서 "아이디 자동완성"기능 - 팝업 화면에서 "오늘 하루 보지 않기" 기능 - 미 로그인 상태에서 "장바구니 남기" 기능 |
- 로그인화면에서 "자동 로그인" 기능 | - 임시로 유지되는 입력 폼 정보 - 새로고침 시 데이터 유지 정보 - 일회성 로그인 정보 |
쿠키, 세션, 웹스토리지의 장단점을 파악하고 목적에 따라 선택해서 사용하면 될 것 같다!
'CS > 네트워크' 카테고리의 다른 글
[네트워크] Rest API란? (0) | 2023.08.14 |
---|---|
[네트워크] NAT(Network Address Translation) (0) | 2022.03.07 |
[네트워크] Access network: DSL, cable network (0) | 2022.03.07 |
[네트워크] 1. 네트워크 구성 (0) | 2022.03.07 |
[네트워크] LAN, ISP, WAN 용어 정리 (0) | 2022.03.07 |