충분히 쌓여가는
cookie / session / token / cache / CDN 본문
쿠키 vs 세션 vs 캐시
HTTP(상태 비저장 프로토콜)는 클라이언트가 누구인지 매번 확인해야하는 특성을 보완하기 위해 쿠키와 세션 사용함
하지만 실제로는 매번 로그인이나, 쇼핑몰에서 물품을 구매하려 장바구니에 담아놓는 등 상태 저장해야하는 상황이 비일비재함
자주 사용하는 웹사이트에 들어갈 때마다 매번 로그인해야 한다면 웹사이트를 이용하는 것이 스트레스
때문에 이러한 정보는 한 번 작성하거나 사용한 뒤에는 반복적으로 작업하지 않도록 저장해 두는 것이 효율적임
웹 환경에서는 이처럼 반복적으로 사용되는 데이터나 정보를 종류와 특성에 맞게 저장하고 재활용하기 위해 여러 방식을 사용
cookie 쿠키
- 클라이언트(브라우저/개인 컴퓨터)로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일
- 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다는 특징
- 클라이언트 상태정보를 로컬(브라우저)에 저장 후 참조
- 사용자가 따로 요청하지 않아도 브라우저가 Request시에 Request Header를 넣어서 자동으로 서버에 전송
- 로그인 시 “ 아이디와 비밀번호를 저장하시겠습니까?” 메세지
- 쇼핑몰 장바구니 기능
- 크롬이나 사파리 같은 브라우저에 저장되는 작은 텍스트 조각
- 브라우저는 사용자의 컴퓨터에 설치된 소프트웨어이므로 쿠키는 사용자가 갖고 있는 정보라고 할 수 있음
- 쿠키는 사용자에게 맡겨도 되는 정보만 저장
- 당사자뿐만 아니라 제 3자가 조회하는 것도 가능하기 때문에 개인 정보를 담은 내용이나 보안상 민감한 정보를 저장하는 데에는 적합하지 않음
- 따라서 혹여 남에게 탈취되거나 사용자에 의해 조작되어도 크게 문제되지 않을 정보를 브라우저에 저장함으로써 웹사이트 이용을 편리하게 해 주는 것이 쿠키
1) 클라이언트가 페이지를 요청
2) 서버에서 쿠키를 생성
3) HTTP 헤더에 쿠키를 포함 시켜 응답
4) 브라우저가 종료되어도 쿠키 만료 기간이 있다면 클라이언트에서 보관하고 있음
5) 같은 요청을 할 경우 HTTP 헤더에 쿠키를 함께 보냄
6) 서버에서 쿠키를 읽어 이전 상태 정보를 변경 할 필요가 있을 때 쿠키를 업데이트 하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답
session 세션
- 쿠키를 기반으로 하고 있지만, 사용자 정보파일을 브라우저에 저장하는 쿠키와 달리 서버(웹사이트)측에서 관리
- 서버에서는 클라이언트를 구분하기 위해 세션ID를 부여하여 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태 유지
- 사용자에 대한 정보를 서버에 두기 때문에 쿠키보다 보안에 좋지만 사용자가 많아질 수록 서버 메모리 많이 차지 -> 성능 저하 요인
- 로그인 같이 보안상 중요 작업을 수행할 때 사용
- 웹사이트에 아이디와 비밀번호를 입력해서 로그인하면 해당 사이트의 회원에게만 허용된 기능들을 사용할 수 있다
- 문제는 이와 같은 클릭 하나하나는 매번 서버에게 새로 보내는 익명 편지와도 같아서 사이트에 로그인을 하는 등의 이전 행동들과 연결되어 있지 않다는 것
- = 서버는 아이디와 비밀번호를 입력해 로그인에 성공한 사용자와 로그인한 다음 마이페이지 버튼을 누른 사용자가 동일 인물임을 알지 못한다는 것
- 그렇기 때문에 사용자가 사이트에 로그인한 상태라는 점을 서버에 인증하지 못하면 클릭을 할 때마다 반복해서 아이디와 비밀번호를 서버에 제공해야하고 이를 해결하기 위한 것이 세션
- 사용자가 사이트에 한 번 로그인하면 유효기간이 끝날 때까지 더 이상 아이디와 비밀번호를 입력하지 않아도 되도록 사용자가 이미 서버로부터 인증받았음을 증명해 주는 세션이라는 증서(id)가 필요
1) 클라이언트가 서버에 접속 시 세션 ID를 발급 받음
2) 클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장하고 가지고 있음
3) 클라이언트는 서버에 요청할 때, 이 쿠키의 세션 ID를 같이 서버에 전달해서 요청
4) 서버는 세션 ID를 전달 받아서 별다른 작업없이 세션 ID로 세션에 있는 클라언트 정보를 가져와서 사용
5) 클라이언트 정보를 가지고 서버 요청을 처리하여 클라이언트에게 응답
쿠키와 세션의 차이점
쿠키 Cookie | 세션 Session | |
저장위치 | 클라이언트 로컬 (브라우저/ 개인컴퓨터) | 서버 (웹사이트) |
보안 | 취약 | 강함 |
라이프 사이클 |
브라우저 종료해도 만료시점 지나지 않으면 삭제X |
브라우저 종료되면 삭제 |
속도 | 빠름 | 느림 |
저장형식 | Text | Object |
용량 | 제한 있음 총 300개 하나의 도메인 당 20개 하나의 쿠키당 4KB |
서버가 허용하는 한 제한 없음 |
- 쿠키는 서버의 자원을 사용 안함
- 세션은 서버의 자원을 사용함
- 즉, 상태정보의 저장 위치가 다름
1. 보안
- 쿠키: 클라이언트 로컬에 저장되기 때문에 변질되거나 request에서 스니핑 당할 우려가 있어서 보안에 취약
- 세션: 쿠키를 이용해서 sessionid 만 저장하고 그것으로 구분해서 서버에서 처리하기 때문에 비교적 보안성이 좋음
스니핑: 네트워크 중간에서 자신이 아닌 남의 패킷 정보를 도청하는 해킹 기법의 하나
2. 라이프 사이클
- 쿠키: 만료시간이 있지만 파일로 저장되기 때문에 브라우저를 종료해도 계속해서 정보가 남아 있을 수 있음
- 쿠키: 만료기간을 넉넉하게 잡아두면 쿠키삭제를 할 때 까지 유지될 수도 있음
- 세션: 만료시간을 정할 수 있지만 브라우저가 종료되면 만료시간에 상관없이 삭제
- 크롬에서 다른 탭을 사용해도 세션을 공유된다. 다른 브라우저를 사용하게 되면 다른 세션을 사용할 수 있다.
3. 속도
- 쿠키: 쿠키에 정보가 있기 때문에 서버에 요청시 속도가 빠름
- 세션: 정보가 서버에 있기 때문에 처리가 요구되어 비교적 느린 속도를 가짐
쿠키 사용 이유
- 세션은 서버의 자원을 사용하기 때문에 무분별하게 만들다보면 서버의 메모리가 감당할 수 없어질 수가 있고
속도가 느려질 수 있기 때문에, 쿠키가 유리한 경우가 있음
token 토큰
- 세션과는 다른 로그인 유지 방식, 하지만 세션 방식은 안전하고 효과적이지만 단점 존재
- 서버는 요청마다 함께 딸려 오는 세션 아이디를 바로바로 확인할 수 있도록 로그인한 사용자의 아이디를 메모리라는 ‘책상’에 올려둠
- 메모리에 올려둔 데이터를 빠르게 확인할 수 있다는 장점이 있는 대신 공간이 한정되어 있음
- 서버에 동시 접속하는 사용자가 많아지면 메모리 공간이 부족해져서 서버에 부하가 걸리고 화면이 움직이지 않는 등의 문제가 발생할 수 있다
- 메모리 공간을 많이 차지하는 세션 방식의 대안은 로그인한 사용자에게 세션 아이디 대신 토큰을 발급해 주는 것
- 토큰에는 특수한 수학적 원리가 적용되어 있어서 마치 위조 방지 장치가 있는 지폐처럼 서버만이 유효한 토큰을 발행할 수 있다
- 그렇기 때문에 토큰을 받아간 사용자가 이를 쿠키로 저장해 두고 필요할 때마다 제시하면 서버는 따로 책상에 올려놓은 것을 확인할 필요 없이 자기가 발급한 토큰임을 알아보고 사용자의 요청을 허가해 주는 것
- 더 이상 이미 로그인한 사용자의 티켓을 책상(메모리)에 올려 두고 있을 필요가 없으니 서버 부하를 줄일 수 있는 것
세션 방식 | 토큰 방식 | |
장점 | 사용자의 상태를 원하는대로 통제 가능 | 상태를 따로 기억해 둘 필요가 없음 |
단점 | 메모리에 로그인되어 있는 사용자의 상태를 보관해야 함 | 한 번 로그인한 사용자의 상태의 토큰 |
token 토큰방식의 한계
- 여러 기기에서의 로그인을 제한하기 위해 필요한 때 에 로그인되어 있는 사용자를 서버가 강제로 로그아웃을 시킬 수 있어야 하는데, 토큰 방식에서는 이것이 불가능함
- 한 번 발행한 토큰은 유효기간이 끝나기 전까지 따로 통제할 수 없기 때문에 세션에 비해 토큰 정보를 탈취 당할 가능성이 높다
- 그러나 토큰은 쿠키처럼 만료 기간을 정할 수 있어서 만료 시간을 짧게 지정해 피해를 줄일 수 있음
- 토큰방식은 쿠키와 세션을 적절히 섞은 것과 비슷함
cache 캐시
우리는 매일같이 웹사이트나 유튜브, 온라인 게임 등을 통해 이미지, 동영상, 웹 페이지 코드와 같은 대량의 데이터를 서버로부터 전송받는다
이러한 데이터 전송에는 시간이 소요될 뿐만 아니라 통신비도 지출되고 고화질 동영상처럼 크기가 큰 데이터일수록 비용은 더욱 커짐
- 한 번 전송받은 데이터는 저장해 놨다가 다시 사용할 때 꺼내 쓴다면 반복적으로 서버에 데이터 전송을 요청할 필요가 없습니다.
- 이때 사용되는 기술이 캐시(cache)
- 캐시 덕분에 우리는 반복적으로 사용하는 콘텐츠를 빠르게 이용할 수 있고 데이터 사용량도 줄일 수 있음
- 사용빈도가 높은 데이터를 고속으로 액세스 할 수 있는 위치에 두는 것 -> 임시저장소
- 전송량은 줄이고 속도를 높임(데이터 손실 가능성이 있음)
- 캐시의 데이터가 손실 되어도 문제가 없는 시스템이 적합함
- 참조 빈도가 높은 데이터 (다시 사용될 확률이 높은 데이터) -> 읽기 전용 데이터
브라우저 캐시
- 일반적으로 사용자 입장에서 가장 가까이 접하는 캐시는 브라우저 캐시
- 사용자가 컴퓨터나 스마트폰에서 인터넷 서핑할 때 받아온 데이터는 브라우저에 캐시 형태로 저장됨
- 쿠키와 같이 캐시도 각 브라우저의 설정 화면에서 조작해 비울 수 있음
- 캐시 덕분에 사용자는 같은 사이트를 다시 방문하거나 동영상을 다시 시청할 때 추가로 통신비를 지출하지 않고 로딩 없이 콘텐츠를 이용할 수 있습니다.
쿠키와 캐시의 차이
- 쿠키와 캐시 모두 정보를 저장하여 재활용하는 기술
- 쿠키: 사용자의 수고를 덜어주는 목적
- 캐시: 데이터의 전송량을 줄이고 서비스 이용 속도를 높이는 목적
CDN (Content Delivery Network)
캐시를 사용하지 않고 매번 정보가 전송되는 것은 사용자로서도 불편하지만, 이용자가 많은 서비스일수록 서버에도 큰 부담이 됨
전 세계의 수많은 사용자로부터 끊임없이 들어오는 요청을 처리하다 보면 아무리 고사양의 컴퓨터도 감당하기 어려운 부하가 걸림
이로 인한 응답 속도 저하나 서버 오류는 결국 사용자의 불편으로 이어집니다
- 위의 문제를 해결하기 위해 서버 부담은 줄이고 사용자와는 가깝게 하는 CDN 사용
- CDN은 콘텐츠 전송 네트워크로 지리적으로 분산된 여러 개의 서버를 이용해 웹 콘텐츠를 사용자와 가까운 서버에서 전송함으로써 전송 속도를 높임
- CDN을 사용하면 본 서버는 캐시 서버에 데이터를 한 번씩만 전송하면 됨
- 대량의 데이터를 전송하는 서비스(유튜브 넷플릭스와 같은 동영상 서비스)에 CDN은 필수
- 여러 지역에 설치된 캐시 서버들을 사용하여 본 서버로 들어오는 요청들을 분산 처리하는 서비스
참고자료
혼공러들의 스터디 공간, 데이터를 저장하는 5가지 개념
베스핀글로벌 테크센터 블로그, 세션 vs 쿠키 vs 캐시 차이점
'IT > Computer Science' 카테고리의 다른 글
함수형 프로그래밍 (0) | 2023.02.07 |
---|---|
IPC(Inter Process Communication) (1) | 2023.02.06 |
GET방식 / POST 방식 (0) | 2023.02.03 |
Normalization 정규화 (0) | 2023.02.02 |
Agile 애자일 (0) | 2023.02.01 |