쿠키란?
쿠키는 사용자가 방문한 웹사이트에서 사용자의 브라우저에 전송하는 작은 텍스트 조각(기록 정보 파일)이다. 사용자의 방문에 관한 정보를 저장하여, 나중에 사이트에 방문 했을때 재작업을 피하고, 사이트를 유용하게 관리할 수 있다.
쿠키는 사용자의 PC에(브라우저) 저장된다.
이렇게 저장된 쿠키는 해당하는 사이트에 접속할때마다 자동으로 서버에게 보내진다.
쿠키는 임의 수정과 다른 사람이 훔쳐가기쉽다. 그렇기 때문에 중요한 정보들은 세션을 통해 서버에서 관리하고 덜 중요한 정보들을 저장한다.
쿠키라는 용어는 루 몬툴리가 만들어 냈다. 매직 쿠키 라는 용어에서 비롯되었다.
세션이란?
클라이언트와 웹 서버간에 연결된 상태를 뜻한다.
세션은 서버에 클라이언트의 정보를 저장한다.
1. 사용자가 웹사이트에 접속한다.
2. 서버는 사용자의 header에서 cookie를 확인하여 클라이언트가 session-id를 보냈는지 확인한다.
3. 서버는 session db를 확인하여 만약 session-id가 존재하지 않는다면 서버는 session-id를 갖고 있는 쿠키 생성해 클라이언트에게 돌려준다.
4. 클라이언트는 이를 받아 사이트를 이용할때 서버에게 보내준다.
5. 만약 session-id가 존재한다면, 이에 맞는 응답을 해준다.
이렇게 하면 우리는 네이버에 로그인을 하여 블로그, 카페, 웹툰 등을 로그인한 상태로 즐길 수 있다.
클라이언트는 서버로 session-id가 담긴 쿠키만 보내면 된다. 모든 정보가 서버측 session DB에 저장되어 있기 때문이다.
서버가 사용자에 대한 정보를 저장하기 때문에 세션 관리가 편하다. ex)넷플릭스 사용자 제한, 구글 다른기기 로그아웃 등
관리하는 웹사이트 규모가 크다면 세션을 사용하는 것이 좋다. 유저관리가 확실하기 때문이다.
redis 라는 데이터베이스를 많이 이용한다.
세션을 이용하면 DB조회등의 이유로 서버쪽에 부하가 많다.
쿠키와 세션을 사용하는 이유?
HTTP 프로토콜의 특징이자 단점을 보완하기 위해 사용한다.
1. 비연결지향
클라이언트가 서버에 요청을 했을 경우, 그에 맞는 응답을 보내고 연결을 끊는다.
2. Stateless 상태정보유지X
클라이언트의 상태 정보를 저장하지 않는다.
클라이언트와 이전에 통신을 하여 데이터를 주고 받았더라도 그 다음 통신에서는 이전에 통신을 하며 주고받은 데이터는 유지하지 않는다. 메모리가 없다.
위의 단점 때문에, 페이지를 이동할 때마다 매번 로그인을 새로 해 주어야 하고, 장바구니등 여러 기능을 사용할 수 없다.
이런 문제점을 해결하기 위해 쿠키와 세션을 사용한다.
토큰이란?
쿠키는 오직 브라우저에만 존재한다.
안드로이드나 ios에서는 토큰을 사용한다. 개념은 쿠키와 같다.
세션의 단점을 극복하기 위해 JWT(JSON Web Token)를 사용한다.
JWT에선 유저가 올바른지 인증하는데 필요한 정보를 토큰에 저장한다.
JWT는 클라이언트가 페이지를 요청하며 이전에 받은 토큰을 보내면, 서버는 그것이 유효한지만 검증하면 된다.
1. 클라이언트가 서버에게 로그인 요청을 한다.
2. 서버는 그것을 받아 확인후 어떤 sign을 해준뒤 반환한다.
3. 클라이언트는 그것을 받아 사이트를 이용한다.
4. 서버는 토큰을 받아 그것이 유효한 sign인지 확인하고 알맞은 응답을 보낸다.
JWT는 암호화 되어 있지 않다.
강제 로그아웃이 불가능하다. DB가 필요 없다.
++
캐시(cahe)
임시 저장소. 이미지등 용량이 큰 데이터를 빠르게 불러오기 위해 임시 저장.
의문점
세션 ID는 노출되어도 안전한 것인가?
참고
https://www.youtube.com/watch?v=tosLBcAX1vk
https://www.youtube.com/watch?v=OpoVuwxGRDI
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=weekamp&logNo=220931266233
'웹(Web)' 카테고리의 다른 글
thymeleaf 정리 (작성중..) (0) | 2024.01.31 |
---|