TIL

쿠키, 세션 기반 인증과 JWT 기반 인증

효모. 2020. 8. 15. 13:03

쿠키, 세션 기반 인증과 JWT 기반 인증

1 사용자 인증

사용자 인증은 HTTP 프로토콜의 약점을 보완하고자 사용한다. HTTP 프로토콜은 connectionless, stateless 하다고 한다. 클라이언트가 요청하고 서버가 응답을 하고 나면 서버는 그 연결에 대한 상태 정보를 유지하지 않은 채 연결을 끊어 버리는 특징이다.

이러한 특징에 대한 대비가 되지 않는다면 우리는 아마 쇼핑몰에서 옷을 사려고 해도 매번 페이지를 이동할 때 마다 다시 로그인을 해야 할 것이다. 이런 불상사가 일어나지 않으려면 웹서비스를 개발할 때 유저들의 인증작업을 처리할 방법을 마련해야 한다. 전통적으로 사용해왔던 사용자 인증 방식이 쿠키와 세션이고, 전통적 방법의 문제점을 보완해서 최근에 많이 사용한다는 토큰 기반 인증 방식이 JWT이다.

2 쿠키 기반 인증

쿠키는 클라이언트 측(브라우저)에서 관리되는 작은 기록 정보 파일을 말한다. 다음은 쿠키 기반 인증이 어떻게 동작하는지에 대한 설명이다.

  • 클라이언트에서 페이지 요청

  • 서버에서 쿠키 생성

  • HTTP 헤더에 쿠키를 포함시켜 응답

  • 브라우저가 종료되어도 쿠키가 만료되기 전까지 클라이언트에서 보관하고 있음

  • 쿠키가 존재하면 요청시 HTTP 헤더에 쿠키를 함께 보내 요청

    이러한 쿠키 인증방식은 주로 방문 사이트의 아이디/비밀번호 저장 혹은 쇼핑몰의 장바구니 기능에 사용된다.

3 서버 기반 인증 (세션)

세션은 쿠키를 기반으로 하지만, 사용자 정보 파일을 브라우저에 저장하는 대신 서버측에서 관리한다. 세션을 유지하는 웹 서버는 stateful 한 서버의 좋은 예입니다. 다음은 세션 방식 인증이 어떻게 동작하는지에 대한 설명입니다.

![bb](https://velopert.com/wp-content/uploads/2016/12/bb.png)

  • 클라이언트가 로그인

  • 성공하면 서버가 유저 세션을 만들고 메모리나 DB에 저장한다.

  • 서버가 클라이언트에게 세션 ID 를 보낸다.

  • 클라이언트의 브라우저에 세션의 ID 만 쿠키에 저장하게 한다.

이러한 인증 시스템에서는 서버측에서 유저들의 정보들을 기억하고 있어야 합니다.

4 서버 기반 인증의 문제점

  • 로그인 중인 유저의 수가 늘어난다면 서버의 램과 데이터베이스의 성능에 무리를 줄 수 잇다.

  • 서버를 확장하는것이 매우 복잡해진다. 단순 서버 사양을 높히는 게 아닌, 트래픽을 감당하기 위해 여러 개의 프로세스를 돌리거나 여러대의 서버 컴퓨터를 추가하는 것을 의미한다.

  • 세션을 관리할 때 사용되는 쿠키를 여러 도메인에서 관리하는 것이 어렵다.

  • 중앙 세션 관리 시스템에 장애가 생기면 시스템 전체에 문제가 생긴다.

5 JWT 기반 인증

이러한 문제점 때문에 많은 웹 어플리케이션들은 세션 인증보다는 JWT(JSON Web Token)을 사용한다. JWT는 토큰 기반 인증 방식으로, 서버가 토큰을 생성하여 클라이언트에게 보내면 클라이언트측에 토큰을 보관하며 매 요청마다 토클을 포함해서 보내는 방식이다. 서버는 클라이언트가 보낸 토큰이 유효한지 체크할 것이다.

다음은 JWT 기반 인증이 어떻게 작동하는지에 대한 설명이다.

![token-diagram](https://velopert.com/wp-content/uploads/2016/12/token-diagram.png)

 

'TIL' 카테고리의 다른 글

res.json VS res.send() VS res.end  (0) 2020.07.22