사용자 인증 - 세션 (Session)

adc0612·2022년 6월 28일
1

사용자 인증

목록 보기
1/2

세션과 토큰이 필요한 이유 (stateless HTTP)

HTTP는 stateless(무상태)프로토콜이므로, 모든 요청이 이전 요청과 독립적으로 다뤄진다.
하나의 요청이 끝나면 서버는 이전요청에 대한 사용자가 누구인지 잊어버린다.
즉, 사용자가 이미 로그인 된 상태여도 로그인이 필요한 서비스에 접근하려면, 요청 할 때 마다 서버에게 로그인이 완료됐다는 것을 알려주어야 한다.
그 방식으로 세션(session)과 토큰(token)이 있다.

사용자 인증 / 인가

인증 (Authentication)

인증은 해당 서비스의 사용자가 맞는지 확인화는 과정이다.

인가 (Authorication)

인가는 인증된 사용자에게 리소스와 서비스에 접근할 수 있도록 사용 권한을 부여하는 작업이다.

세션 인증 (session)

세션이란 일정 시간 동안 같은 사용자(브라우저)로 부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술이라고 한다.
또한 일정 시간이란 방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점으로부터 웹 브라우저를 종료함으로써 연결을 끝내는 시점을 말한다.
즉, 방문자가 웹서버에 접속해 있는 상태를 하나의 단위로 보고 세션이라고 한다.

  • 서버에서 클라이언트의 session 정보를 메모리나 디스크 또는 DB등을 통해 저장하고 있다.
  • 서버에서 클라이언트의 상태를 유지한다. (stateful)

작동 과정

  1. 사용자가 로그인을 요청하고 성공하면, 세션이 서버의 메모리 상에 저장된다. 서버에서 sessionID를 세션 식별키로 정보를 저장한다.
  2. 서버에서 sessionID를 cookie에 담아 브라우저로 전달한다.
  3. 브라우저에서 요청을 보낼때 sessionID를 담고있는 cookie를 함께 전달한다.
  4. 서버는 브라우저가 보낸 sessionID를 키로 서버 메모리에서 사용자의 session 정보를 식별하고 유효하다면, 응답을 보내준다.

장점

  • 서버에서 클라이언트의 상태를 유지하므로 다양한 액션이 가능하다.
  • 강제 로그아웃, 접속 인원 제한, 로그인 된 모든 디바이스 정보 확인

단점

  • 사용자 수가 늘어나면 메모리 또는 DB에 과부가 걸린다.
  • 사용자가 많아지는 경우 로드 밸런싱을 사용한 서버 확장을 이용해야 하는 데 이 때 세션의 관리가 어려워진다.
  • 웹 브라우저에서 세션 관리에 사용하는 쿠키는 단일 도메인 및 서브 도메인에서만 작동하도록 설계되어 CORS 방식(여러 도메인에 request를 보내는 브라우저)을 사용할 때 쿠키 및 세션 관리가 어렵다.
  • 멀티 디바이스 환경(모바일, 브라우저 공동 사용 등)에서 로그인 시 중복 로그인 처리가 되지 않는 등의 신경 써줘야 할 부분들이 생긴다.

[참고] https://sherryhsu.medium.com/session-vs-token-based-authentication-11a6c5ac45e4#:~:text=Many%20web%20applications%20use%20JSON,instead%20of%20sessions%20for%20authentication.&text=The%20biggest%20difference%20here%20is,on%20the%20client%20side%20instead
[참고] https://88240.tistory.com/190
[참고] https://idlecomputer.tistory.com/239

0개의 댓글