Tech

[Tech] 로그인 인증 - 세션과 쿠키

lonnie(동현) 2021. 9. 14. 11:01

 로그인 인증 방식에는 대표적으로 JWT를 이용한 토큰 기반의 인증 방식과 세션/ 쿠키 인증 방식이 있다. 이 중에서 오늘은 세션과 쿠키를 이용한 인증 방식에 대해서 알아보려 한다.

세션(Session)은 뭘까?

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

 

 즉, 유저가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 세션(Session)이라고 말한다.

쿠키(Cookie)는 뭘까?

 특정 웹 사이트를 방문했을 때 만들어지는 정보를 담는 파일을 지칭하는 것으로, 상태 정보를 유지하는 기술이다.

세션과 쿠키를 이용한 인증 방식이 뭘까?

 기존에 주로 사용하는 서버 기반의 인증 방식으로 서버 측에서 사용자들의 정보를 기억하고 있어야 한다. 사용자들의 정보를 기억하기 위해서는 세션을 유지해야 하는데, 메모리나 디스크 또는 데이터베이스 등을 통해 관리한다.

 

 서버 기반의 인증 시스템은 client로부터 요청을 받으면, client의 상태를 계속해서 유지하고 이 정보를 서비스에 이용하는데, 이러한 서버를 stateful 한 서버라고 한다. 예를 들어, 사용자가 로그인을 하면, 세션에 정보를 저장해 두고 서비스를 제공할 때 사용하게 된다.

인증 순서에 대해서 알아보자

  1. 사용자가 로그인을 한다.
  2. 서버에서 계정 정보를 통해 사용자를 확인 한다. 그리고 고유한 ID값을 부여하여 세션 저장소에 저장한 뒤 세션 ID를 발행한다.
  3. 사용자는 서버에서 해당 세션 ID를 받아 쿠키에 저장한 후, 인증이 필요한 요청마다 쿠키를 header에 담아서 보낸다.
  4. 서버에서는 쿠키를 받아 세션 저장소에서 대조를 한 후 대응되는 정보를 가져온다.
  5. 인증이 완료되면 서버는 사용자에 맞는 데이터를 보내준다.

장점

  1.  사용자의 정보는 세션 저장소에 저장되고, 쿠키는 그 저장소를 통과할 수 있는 출입증 역할을 한다. 따라서 쿠키가 담긴 HTTP 요청이 도중에 노출되더라도 쿠키 자체에는 유의미한 값을 갖고 있지 않아서 쿠키에 사용자 정보를 담아 인증을 거치는 것보다 안전하다.
  2.  각각의 사용자는 고유의 세션 ID를 발급 받기 때문에 일일이 회원 정보를 확인할 필요가 없어 서버 자원에 접근하기 용이하다.

→ 하지만, 만약 해커가 사용자 A의 HTTP 요청을 훔쳐서 그 쿠키를 이용해 HTTP 요청을 하게 된다면 서버의 세션 저장소에서 사용자 A로 오인해서 정보를 잘못 가져올 수 있다. 이를 세션 하이재킹 공격이라고 한다.


단점

  1.  별도의 저장소의 관리가 필요하고 세션이 연결되어 있기 때문에 stateless 한 서버를 만들 수 없다. 
  2.  사용자가 늘어나게 되면 더 많은 트래픽을 처리하기 위해 여러 프로세스를 돌리거나 컴퓨터를 추가하는 등 서버를 확장해야 한다. 세션을 사용한다면 세션을 분산시키는 시스템을 설계해야 하지만 이러한 과정은 매우 어렵고 복잡하며, 자연스럽게 서버의 부하가 높아지게 된다.
  3.  CORS 방식(여러 도메인에 request를 보내는 브라우저)을 사용할 때 여러 도메인에서의 쿠키 및 세션 관리가 어렵다.
  4.  멀티 디바이스 환경(모바일, 브라우저 공동 사용 등)에서 로그인 시 중복 로그인 처리가 되지 않는 등의 신경 써줘야 할 부분들이 생긴다.

참고

- https://velog.io/@gusdnr814/로그인-인증-4가지-방법
- https://mangkyu.tistory.com/55?category=925341
- https://millo-l.github.io/Session-기반-인증방식/
- https://tansfil.tistory.com/58?category=475681

728x90
반응형