2022. 11. 27. 14:19ㆍ스파르타코딩(22.8.29~22.12.31)/TIL(Today I Learned)
- Today I Learned
CRUD 파트에 들어갔는데 계정으로 추가기능을 활용 해볼수가 없어
USER에 대한 내용을 다시 알아보려고 한다.
- 재방문 시 이미 쿠키가 있는 경우 서버에 쿠키를 전달
- 쿠키(Cookie)란?
쿠키란 서버측에서 클라이언트 측에 상태 정보를 저장하고 추출할 수 있는 메커니즘
쿠키는 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일이다.
(서버의 자원(메모리)을 사용하지 않기에 서버에 부하를 주지않음)
- 사용자 인증이 유효한 시간을 명시할 수 있으며,
유효 시간이 정해지면, 브라우저가 종료되어도 인증이 유지된다는 특징이 있다. - 쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조한다.
- 클라이언트에 300개까지 쿠키저장 가능, 하나의 도메인당 20개의 값만 가질 수 있음,
하나의 쿠키값은 4KB까지 저장 - Response Header에 Set-Cookie 속성을 사용하면 클라이언트에 쿠키를 만들 수 있다.(암호화X 해킹위험)
- 쿠키는 사용자가 따로 요청하지 않아도 브라우저가 Request시에
Request Header를 넣어서 자동으로 서버에 전송합니다.
쿠키의 구성 요소
- 이름 : 각각의 쿠키를 구별하는 데 사용되는 이름
- 값 : 쿠키의 이름과 관련된 값
- 유효시간 : 쿠키의 유지시간
- 도메인 : 쿠키를 전송할 도메인
- 경로 : 쿠키를 전송할 요청 경로
쿠키의 동작 방식
- 클라이언트가 페이지를 요청
- 서버에서 쿠키를 생성
- HTTP 헤더에 쿠키를 포함 시켜 응답(Response)
- 브라우저가 종료되어도 쿠키 만료 기간이 있다면 클라이언트에서 보관하고 있음
- 같은 요청을 할 경우 HTTP 헤더에 쿠키를 함께 보냄
- 서버에서 쿠키를 읽어 이전 상태 정보를 변경 할 필요가 있을 때
쿠키를 업데이트 하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답
- 쿠키의 장단점
- 장점
- 서버의 저장공간 절약 (서버 성능 향상 (= 서버 부하 ↓)
- 단점
- 보안 취약 : 요청 시 쿠키 값을 그대로 보냄
- 작은 허용 용량 : 사이트 당 20개, 모두 합쳐 300개가 최대. 각 쿠키는 4Byte를 넘을 수 없음.
- 웹 브라우저마다 지원 형태가 다름
- 웹 브라우저를 변경할 경우 다른 웹브라우저에서 저장한 쿠키값을 사용할 수 없음
- 사용자가 보안상의 문제로 거부할 경우 사용 불가능
- 네트워크 부하 : 쿠키의 크기가 클 경우 네트워크 부하가 커짐
- 한번에 하나의 정보만 저장할 수 있음
쿠키가 사용되는 예시)
1. 자동 로그인
쿠키를 통해서 로컬에 로그인 정보를 저장하고 서버에 해당 정보를 보내 사용자 인증을 받을 수 있다.
2. 하루동안 보지 않기
쿠키에 만료일을 설정할 수 있으므로 해당 정보를 통해서 보고싶지 않은 정보를 설정할 수 있음
3. 최근 검색 리스트
쿠키를 통해서 최근에 검색한 정보들을 저장하여 사용자에 따라 보여줄 수 있음
4. 쇼핑몰 장바구니 기능
- 세션(Session)이란?
사전적 의미 : 시간
클라이언트와 웹 서버간에 통신 연결에서 두 개체의 활성화된 접속을 의미
- 세션은 쿠키를 기반하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리
세션은 서버 측에서 관리합니다. - 서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서
브라우저를 종료할 때까지 인증상태를 유지합니다. - 물론 접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않게 설정이 가능(세션만료)
- 사용자에 대한 정보를 서버에 두기 때문에 쿠키보다 보안에 좋지만,
사용자가 많아질수록 서버 메모리를 많이 차지하게 된다. - 즉 동접자 수가 많은 웹 사이트인 경우 ((서버에 과부하))를 주게 되므로 성능 저하의 요인이 된다.
- 클라이언트가 Request를 보내면,
해당 서버의 엔진이 클라이언트에게 유일한 ID를 부여하는 데 이것이 세션 ID이다.
세션의 동작 방식
- 클라이언트가 서버에 접속 시 세션 ID를 발급 받음
- 클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장하고 가지고 있음
- 클라리언트는 서버에 요청할 때, 이 쿠키의 세션 ID를 같이 서버에 전달해서 요청
- 서버는 세션 ID를 전달 받아서 별다른 작업없이 세션 ID로 세션에 있는 클라언트 정보를 가져와서 사용
- 클라이언트 정보를 가지고 서버 요청을 처리하여 클라이언트에게 응답
- 세션의 장단점
장점
- 어느정도 보안 유지 : 최초 접속 때를 제외하고 SessionID만 사용
- 큰 허용 용량 : 저장 개수나 용량 제한 없음(서버 용량 충분 시)
- 서버에 저장되므로 클라이언트의 웹브라우저에 의존하지 않아도 됨
- 데이터를 Hash Table에 저장. 한 번에 많은 정보를 하나의 세션 객체에 저장 가능
- SessionID만 보내므로, 세션의 크기가 커도 네트워크 부하가 거의 없음
단점
- 서버에 부하 : 서버에 데이터를 저장하므로 세션 양이 많아질수록 서버에 부하가 커짐
- 쿠키와 세션의 차이
쿠키는 클라이언트 쪽에 정보를 저장
세션은 서버 쪽에 정보를 저장
세션을 사용하면 좋은데 왜 쿠키를 사용할까?
세션은 서버의 자원을 사용하기 때문에 무분별하게 만들다보면
서버의 메모리가 1.감당할 수 없어질 수가 있고 2.속도가 느려질 수 있기 때문에 쿠키가 유리한 경우가 있다.
쿠키/세션은 캐시와 엄연히 다르다!
- 캐시는 이미지나 css, js파일 등을 브라우저나 서버 앞 단에 저장해놓고 사용하는 것이다.
- 한번 캐시에 저장되면 브라우저를 참고하기 때문에 서버에서 변경이 되어도 사용자는 변경되지 않게 보일 수 있는데 이런 부분을 캐시를 지워주거나 서버에서 클라이언트로 응답을 보낼 때 header에 캐시 만료시간을 명시하는 방법등을 이용할 수 있다.
- 보통 쿠키와 세션의 차이를 물어볼 때 저장위치와 보안에 대해서는 잘 말하는데
사실 중요한 것은 라이프사이클을 얘기하는 것이다.
*라이프사이클
- 쿠키 : 만료시간에 따라 브라우저를 종료해도 계속해서 남아 있을 수 있다.
- 세션 : 만료시간을 정할 수 있지만 브라우저가 종료되면 만료시간에 상관없이 삭제된다.
- 웹 스토리지 (Web Storage)
- 클라이언트에 데이터를 저장할 수 있도록 HTML5부터 새롭게 지원하는 저장소이다.
- 키(Key)와 값(Value)의 쌍 형태로 데이터를 저장한다.
- 쿠키와 달리, 서버에 전송되지 않으므로 서버에 부담이 가지 않는다. (명시적으로만 전송 가능)
- 쿠키와 달리, 필요한 경우에만 꺼내 쓰는 것이므로 자동 전송의 위험성이 없다. 다른 오리진에서 요청하는 경우에는, 꺼내 쓰고 싶어도 오리진 단위로 접근이 제한되는 특성 덕분에 값을 꺼내 쓸 수 없다. (CSRF 안전)
- 쿠키와 달리, 대략 5MB까지의 데이터를 저장할 수 있으며 유효 기간이 존재하지 않는다.
- HTML5를 지원하지 않는 브라우저에서는 사용할 수 없다.
- 종류로는 로컬 스토리지(Local Storage)와 세션 스토리지(Session Storage)가 있다. 이들은 window 객체의 프로퍼티로서 존재하며, 같은 Storage 객체를 상속하기 때문에 동일한 메소드들을 가진다. 이 둘의 가장 큰 차이점은 데이터의 영구성이다.
1) 로컬 스토리지 (Local Storage)
- window.localStorage 객체
- 브라우저를 종료해도 유지되는 데이터로, 명시적으로 지우지 않는 한 영구적으로 저장된다.
- 오리진(= 프로토콜 + 도메인 + 포트)별로 생성되며, 다른 오리진의 로컬 스토리지에는 접근이 불가능하다.
- 서로 다른 브라우저 탭이라도 동일한 오리진이라면 동일한 로컬 스토리지를 사용한다.
- 지속적으로 필요한 정보를 저장하기에 좋다. (ex. 자동 로그인 등)
2) 세션 스토리지 (Session Storage)
- window.sessionStorage 객체
- 세션 쿠키와 달리, 탭/윈도우 단위로 세션 스토리지가 생성된다.
- 즉 window 객체와 동일한 유효 범위 및 생존 기간을 가지며, 탭/윈도우를 닫을 시 데이터가 삭제된다.
- 또한 동일한 탭/윈도우라도 다른 오리진(= 프로토콜 + 도메인 + 포트)이라면 또 다른 세션 스토리지가 생성된다.
- 서로 다른 세션 스토리지는 서로 영향을 주지 않으며 독립적으로 동작한다.
- 윈도우 복제로 생성된 경우, 혹은 스크립트로 새 창을 연 경우 세션 스토리지가 복제되어 생성된다.
- 잠시 동안 필요한 정보를 저장하기에 좋다. (ex. 입력 폼 저장, 일회성 로그인 등)
사용자 저장방식 쿠키와 세션방식에 대해 알아보았다.
쿠키는 서버에 부하가 적지만 보안에 취약하고
세션은 보안은 좋지만 서버에 부하를 준다.(사용자의 수 만큼 서버 메모리를 차지하기 때문에)
최근에는 이런 문제들을 보완한 >>> 토큰 기반의 인증방식을 사용하는 추세라고 한다.
그 중 JWT( JSON Web Token )을 알아보려고한다.
참조 : [Network] 쿠키(Cookie)란? (What is a Cookie?)
참조 : [web] 쿠키(cookie)와 세션(session)의 개념/차이/용도/작동방식
참조 : 세션(Session)이란? 쿠키(Cookie)란?
참조 : 쿠키와 세션 그리고 로컬 스토리지와 세션 스토리지
참조 : [Web] 쿠키, 웹 스토리지 (로컬 스토리지, 세션 스토리지)
'스파르타코딩(22.8.29~22.12.31) > TIL(Today I Learned)' 카테고리의 다른 글
[TIL] JWT 구조와 Access Token / Refresh Token 뜻,과정22/11/21 16일차 (0) | 2022.11.28 |
---|---|
[TIL] (JWT) Token이란? 22/11/18 15일차 (0) | 2022.11.27 |
[TIL] REST / REST API / RESTful이란? 22/11/16 13일차 (0) | 2022.11.25 |
[TIL] 관계형 Model (1 대 1,Many Field) 22/11/15 12일차 미완 (0) | 2022.11.17 |
[TIL] Model Types형 Field와 속성에 대해 22/11/14 11일차 (0) | 2022.11.16 |