쿠키와 세션을 사용하는 이유
: HTTP 프로토콜의 특징이자 약점을 보안하기 위해서 사용한다.
+ HTML랑 CSS는 언어가 아니라 MarkUp Language이다. (깨알 상식)
1. HTTP(Hyper Text Transfer Protocol) 프로토콜의 특징
HTTP의 연결이 끊기면 줬다 뺐는듯한 형태이기 때문에 새로고침을 하지 않는 이상 정보가 바뀌지는 않는다.
1) 비연결성
: HTTP는 클라이언트가 요청(request)을 서버에 보내고, 서버는 클라이언트에게 적절한 응답(response) 주고 연결을 끊는 특성이 있다.
2) 무상태성(상태없음)
: 커넥션을 끊는 순간 클라이언트와 서버의 통신이 끝나면 상태 정보는 유지하지 않는 특성이다.
HTTP는 이런 두가지 특징을 보안하기 위해서 쿠키와 세션을 사용하게 되었다.'
비연결지향이라는 특성 덕분에 계속해서 커넥션을 유지하지 않고기 때문에 리소스 낭비를 줄어드는 것은 아주 큰 장점이지만, 통신 할 때마다 새로 커넥션을 만들기 때문에 클라이언트 측면에서는 상태를 유지(ex, 인증에 쓰는 상태)를 위해 통신할 때마다 어떤 절차를 가져야 하는 단점이 생긴다.
심각하게 말하면 만약 쿠키와 세션이 없다면 어떤 페이지에서 다른 어떤 페이지로 넘어갈 때마다 인증을 다시 받아야 하는 것이다.
2. 쿠키(cookie)
: 브라우저를 사용하는 환경 (로컬 컴퓨터)에 서버에서 받은 데이터를 저장한 파일
1) 로그인 정보를 같이 유저가 굳이 다시 서버에 다시 요청하기에는 비효율적인 정보를 로컬에 저장함으로써 생산성을 높이는 것이 목적이다.
2) 로그인 정보 등 사용자의 정보가 저장되는 경우가 많아 보안 문제를 잘 살펴야 한다.
3) 다시 서버에 request 할 필요가 없기 때문에 속도가 빠르다.
-> 쿠키에 민감한 정보를 담아서 요청을 보내면 해커에 의해서 해킹을 당하거나 내가 임의로 값을 바꿀 수 있다는 문제점이 있음
사용 예) 자동 로그인, 오늘 그만 보기 팝업창 등
3. 세션(session)
: 서버에서 유저의 인증 상태(로그인 여부 등)을 임시로 저장한 파일
1) 쿠키와 같이 임시로 유저의 정보를 저장해둠으로써 생산성을 높이는 것이 목적
2) 서버에 저장 해두기 때문에 쿠키보다 보안이 우수함
3) 서버에 저장 되어 있지만 쿠키보다 다소 느리고 유저 정보가 많으면 메모리 과부하가 올 수 있음
4) 서버에서 관리하기 때문에 로그 관리가 용이함
-> 요청을 보낼 때 요청을 다른 이름으로 숨겨서 보내기 때문에 해킹을 당할 위험은 적지만 유저 정보가 많으면 메모리 과부하가 올 수 있다는 문제점이 있기 때문에 캐시를 사용함.
사용 예) 로그인 한 정보들
4. 쿠키와 세션의 공통점
- 공통점 : 데이터를 임시로 계속 저장 해두는 역할
- 차이점 : 쿠키는 사용자에게 저장되고, 세션은 서버에 저장됨
웹 개발 시 어떤 정보를 쿠키로 저장 할 지 세션에 저장 할 지 적절히 판단하는 것이 좋음
5. 캐시(cache)
: 브라우저를 사용하는 환경 (로컬 컴퓨터)에 서버에서 받은 데이터를 저장한 파일(쿠키와 동일)
1) 이미지 같은 재사용 될 것 같거나 용량이 큰 리소스를 임시로 저장 해두었다가 렌더링 속도를 높이는 것이 목적
(이미지 같은 데이터를 불러 올 때는 데이터 사용량도 발생하고 시간도 들기 때문에 사용자가 여러번 방문 할 만한 사이트에서는 한 번 받아온 데이터를 사용자의 컴퓨터 또는 중간 역할을 하는 서버에 저장 해둔다.)
2) 쿠키와는 비슷하지만 목적성에 차이가 있다.
쿠키, 세션, 캐시를 쉽게 이해 할 수 있는 영상
https://www.youtube.com/watch?v=OpoVuwxGRDI&t=105s
추가로 참고하면 좋을만한 영상
https://www.youtube.com/watch?v=tosLBcAX1vk&t=474s
'더 알아보기 > 개념' 카테고리의 다른 글
async, await (0) | 2021.12.14 |
---|---|
axios 개념, Fetch API와의 차이점 (+axios 사용하기) (0) | 2021.12.07 |
변수 선언 방식 차이 (var/let/const) (0) | 2021.11.09 |
호이스팅이란? (0) | 2021.11.09 |
알고리즘이란? (0) | 2021.11.07 |
댓글