TIL # 2022.03.18

kdobro_dev·2022년 3월 21일
0

TIL (Today I Learned)

목록 보기
44/56
post-thumbnail

📝오늘 배운 내용

Session

HTTP 프로토콜은 stateless 이다. stateless는 서버로 가는 모든 요청이 이전 request와 독립적으로 다뤄진다는 뜻이다. 즉 요청이 끝나면 서버는 어떠한 유저가 요청을 했는지 기억하는것이 아니라 잊어버리게 된다. 그래서 유저가 요청을 할 때마다 누군지 알려줘야 하는데 이것을 하는 방법 중 하나가 바로 세션이다.
'kim' 이라는 유저명이 있고, 로그인을 한다면 유저명 그리고 비밀번호를 서버에 보낼 것이다. 해당 정보가 맞다면 서버는 Session DB에 'kim'이라는 유저를 생성한다. 해당 세션에는 별도의 ID가 있다. 해당 세션 ID는 쿠키를 통해 브라우저로 반환하고 저장된다. 따라서 같은 웹사이트의 다른 페이지로 이동하면 브라우저는 Session ID를 갖고있는 쿠키를 서버에게 보낼것이다. 쿠키는 자동으로 보내지기 때문이다. 서버는 들어오는 쿠키를 보고 세션 ID와 함께 오는 쿠키를 확인할 것이다. 해당 세션ID를 가지고 세션 DB를 확인할 것이고, 거기서 해당 ID는 유저명 'kim'이라는 것을 알게되어 로그인이 될것이다.

  • 서버가 Client에 유일하고 암호화된 ID를 부여
  • 중요 데이터는 서버에서 관리

Session 전달 방법

  • 유저 김코딩이 옷을 사기 위해 장바구니에 원하는 옷을 담아두려고 한다.
  • 김코딩이 로그인을 하고 원하는 옷을 장바구니에 넣어달라고 서버에 요청한다.
  • 서버는 DB에 정보를 저장하고 세션 ID를 반환해 준다.
    여기서 주의할점은 상대적으로 보안에 취약한 쿠키에 이 세션 ID를 담아줘야 한다. 쿠키는 경우에 따라 스크립트를 통해 접근이 가능하기 때문에 세션 ID는 암호화 하는 과정이 필요하다. 그렇기에 서버는 Set-Cookie 속성에 세션 ID를 담아서 응답해준다.
  • 다시 유저 김코딩이 원하는 다른 옷을 장바구니에 담으려고 서버에 요청한다.
    이번에는 로그인이 되어 있는 상태이기 때문에 서버에서 응답받은 세션 ID를 이용하여 서버에 요청한다.
  • 서버는 요청하는 유저의 세션 ID가 DB에 있는지 확인하고 맞다면 장바구니를 업데이트 해준다.
  • 서버는 장바구니가 업데이트 되었다고 응답한다.
  • Cookie는 그저 http의 stateless한 것을 보완해주는 도구이다.
  • 저장 경로는 클라이언트이다.
  • 서버에 부담을 덜어준다.
  • 쿠키 그 자체는 인증이 아니다.

Session

  • Session은 접속 상태를 서버가 가지며 접속 상태와 권한 부여를 위해 세션 ID를 쿠키로 전송한다.
  • 저장 경로는 서버이다.
  • 신뢰할 수 있는 유저인지 서버에서 추가로 확인이 가능하다.
  • 하나의 서버에서만 접속 상태를 가지므로 분산에는 분리하다.
profile
do your best at any moment

0개의 댓글