Http Stateless / cookie / session / token

Jun·2021년 6월 22일
0

Stateless

http 프로토콜로 클라이언트가 서버에 요청을 보내고 성공적으로 데이터를 받게되면 동시에 서버와의 연결이 해체되고 보내진 데이터의 결과도 동시에 잃어버리게된다. 이를 Stateless protocol 이라고 부른다.
이와 반대로 stateful은 클라이언트와 서버가 서로의 이전 상태를 기억하고 있다가 정보가 필요료할때 활용될 수있다. stateful이 유용하게 사용될 수 있지만 서버측에서 상태를 계속해서 유지해야 하기때문에 서버의 부하가 많이 커질 수 있다. 이러함때문에 stateless인 http를 사용함으로써 단순 요청 응답을 통해 서버의 부담을 많이 덜어낼수 있다.

statless 는 서버의 상태를 유지하지 못함으로 로그인, 상품주문 을 할때에 계속해서 새로운 인증을 해야할 것이다. 이를 해결하기 위해서 cookie라는 것이 나왔다. cookie는 브라우저에 데이터를 저장하여 서버에 요청시 헤더에 쿠키를 보낸다. 서버는 클라이언트에 받은 쿠키를 식별한다. 이는 불필요한 인증 단계를 스킵 할 수있으며 서버와 클라이언트의 상태를 유지할 수 있다. 데이터가 브라우저에 저장되기 때문에 해커로부터 데이터가 쉽게 변조 될 수있어 보안에 매우 취약하다. 그래서 나온것이 session이다.

session

쿠키는 필요한 데이터를 브라우저에 저장했지만 세션은 세션 정보를 서버에 저장하여 보안을 강화시켰다. 클라이언트로 요청을 받으면 세션 아이디를 발급받아 클라이언트에 응답을 보내주고, 응답을 받은 클라이언트는 세션아이디를 쿠키에 저장하여 요청을 할때 쿠키의 header로 세션아이디를 전달하여 인증이 되는 방식이다. 세션도 중간에 탈취가 될 수 있어서 보안적으로는 완벽하지 않고 세션 정보들이 계속해서 서버에 저장되어 과부화가 될 수있다. 보안강화와 확장성을 해결하기 위해서 토큰방식이 나왔다.

token

token 방식은 클라이언트가 서버로 부터 요청을 응답을 받을때 토큰과 함께 받는다. 받은 토큰은 클라이언트에 저장되며 서버에 요청을 할때 토큰을 헤더에 실어 함께 보낸다. 토큰방식으로 JWT가 있는데JWT은 토큰처럼 사용하되 필요한 정보들을 암호화 시킨다는 장점이있다.

브라우저 저장소

브라우저 저장소는 localStorage, session storage가 있고 브라우저 내에 키,값 쌍으로 저장할 수 있게 해준다.

LocalStorage

  • LocalStorage는 브라우저를 닫아도 데이터가 계속해서 유지가된다.영구 저장소 라고도 불린다.
  • 도메인마다 다른 localStorage를 갖는다.

SessionStorage

  • SessionStorage는 브라우저를 닫기 전까지 데이터를 유지하지만 닫으면 사라진다. 임시 저장소 라고도 불린다.
  • 같은 도메인이더라도 브라우저가 다르면 다른 SessionStorage를 갖는다.

cookies로도 데이터를 저장할 수있지만 cookies는 네트워크 요청시 쿠키 정보가 서버로 전달이 되고 저장공간이 4KB로 크지가 않기 때문에 브라우저 저장소를 사용한다.

0개의 댓글