-
[authentication] 쿠키-세션에 대해 알아보자web/front-end 2020. 2. 15. 13:40
HTTP통신의 특징은 stateless하다는 것이다.
예를 들어 클라이언트가 로그인 요청을 보내고 서버가 그에 따른 응답을 했다고 하더라도
다음에 요청을 보낼 때 서버는 이미 로그인한 클라이언트인지 알 길이 없다.
이 경우, 권한이 필요한 모든 요청에 매번 인증절차를 거쳐야하는 번거로움이 생긴다.
그래서 등장한 것이 쿠키🍪와 세션이다!
처음에 이해했을 때 쿠키는 클라이언트가 가진 정보, 세션은 서버가 가진 정보!
이렇게 이해했더니 헷갈리는 부분이 많았다.
왜냐하면 노드에서 express-session모듈을 사용해서 진행했는데
분명 세션은 서버가 가진 정보라고 했는데 자꾸 req.session으로 클라이언트 요청에 세션이 붙어서 오는,,
이게 뭐지? 뭔 소리지? 왜 이러지? 근데 쿠키는 또 req.session.cookie에 있는 거..
그래서 엄청 헷갈렸다. 어떻게 구현은 했는데,,
분명 처음 이해했을 때,
클라이언트에서 로그인을 요청하면 DB에서 확인하고,
세션 아이디를 만들어서 클라이언트의 쿠키에 담아 보내주면
다음에 클라이언트가 보내는 요청마다
클라이언트의 쿠키에 있는 세션 아이디와
서버의 세션 저장소에 있는 세션 아이디랑 확인하는 과정을
거친다고 이해하고 있어서
쿠키에 정보를 담아 보낸다!!!!!! 이렇게 이해했는데!!!!!!!
왜 자꾸 req.session에 정보를 담아 보내며,,,
도대체 세션 저장소는 어디 있단 말인가,,,
세션을 만든다는 것이 무엇인가...
사실 좀 귀찮아서 대충 좋은 게 좋은 거지,, 하고 넘어갔는데
미친 이제 시험 볼 거잖아..
시험 못 보면,, 과제 준다잖아.. 끔찍,,
그래서 좀 열심히 더 공부하기로,, 하였따..
그러니까 세션이라는 건 엄밀히 말하면 어떤 상태다.
서버와 클라이언트가 서로를 알아볼 수 있는 정보를 가지고 있는 상태
중요한 건 클라이언트와 서버는 연결된 것이 아니라!!
여전히 독립적이고, 요청과 응답 또한 여전히 stateless하다
쿠키는 그 상태를 확인할 수 있는 정보를 저장하는 수단
🍪 쿠키
서버가 사용자 브라우저 위치에 어떤 정보를 저장하고 불러오는 수단
특정 호스트에서 생성된 쿠키는 이후 모든 요청마다 서버로 전송
이름, 값, 만료 날짜, 경로 정보 등으로 구성
필요할 때 참조나 재사용이 가능
4KB 이하 저장 가능
이렇게 쿠키와 세션으로
stateless한 http통신에서 서버와 클라이언트가
매번 인증절차를 거치지 않고도 식별할 수 있게 되었다.
구체적으로 적용되면
로그인을 하면 로그인 상태를 유지하도록 구현할 수 있다,,
근데 쿠키는 클라이언트에 저장되어
다른사람이 쿠키를 훔쳐서 자기가 인증된 사용자인 척 할 수도 있고,
또 서버 입장에서는 세션을 저장하기 위한 별도의
공간을 생성하기 때문에,, 서비스가 커지면 서버에 부하가 생길 수 있다.
그래서 사람들은 또 다른 방법을 생각해내게 되는데,,,
그게 바로 토큰인 것이다...
'web > front-end' 카테고리의 다른 글
[AWS] EC2 쓸 때 사용할 포트(PORT) 여는 것을 잊지 말자.. (0) 2020.02.18 ubuntu(linux)에서 포스트맨(POSTMAN) 간단 사용법 (0) 2020.02.17