쿠키! 세션! 토큰! 무엇이 다를까?

Jaeyoung·2022년 7월 24일
0
post-thumbnail

개요

로그인 기능을 구현하려고 찾다보니 인증과 관련해서 세션이랑 토큰에 대한 글들이 많이 보였다 나는 http에 대한 개념이 많이 없어 해당 내용에 대해 많이 헷갈렸다. 세션을 찾아보니 쿠키에 대해 나오고 인증에 대한 다른 방법인 토큰 방식도 나오게 되고 아무튼 헷갈리는 이 세 가지 개념에 대해서 작성해보려고한다.

인증(Authentication)과 권한부여(Authorization)

일단 세션과 토큰에 대해 알아보기 이전에 인증과 권한부여에 대한 개념부터 알아야 한다. 보통 웹에서 인증이라고 하면 로그인 기능이 떠오르게 된다. 우리는 아이디와 비밀번호를 통해 서버에 로그인 요청을 하고 서버에 대해 인증을 받게 된다. 이 때 로그인을 했지만 웹에서 다른 서비스를 이용할 때마다 인증이 필요하게 되는데 이 때마다 로그인을 할순 없으니 인증을 유지할만한 수단이 필요하다 그래서 우린 로그인 직후 권한 부여를 통해 다른 서비스를 이용할 때 로그인을 하지않아도 인증을 할 수 있다. 이러한 방식을 stateless라고 한다. stateless로 만들기 위해서 필요한 방식이 세션과 토큰인것이다.

쿠키란?

일단 쿠키와 세션이 서로 연관되어 있기 때문에 세션 대해 알아보기전에 쿠키에 대해 먼저 알아보자

인터넷 사용자가 어떠한 웹사이트를 방문할 경우 사용자의 웹 브라우저를 통해 인터넷 사용자의 컴퓨터나 다른 기기에 설치되는 작은 기록 정보 파일을 일컫는다. 이 기록 파일에 담긴 정보는 인터넷 사용자가 같은 웹사이트를 방문할 때마다 읽히고 수시로 새로운 정보로 바뀐다. 쿠키는 지속 쿠키(persistent cookie) 세션 쿠키(session cookie)가 있는데 지속 쿠키 같은경우에는 브라우저를 닫더라도 계속 남아있다 세션 쿠키 같은경우는 브라우저를 닫을 때 사라진다.

세션기반 인증

세션은 브라우저와 웹 서버가 연결되어 연결이 끊어질 때 까지를 뜻한다. 여기서 세션기반 인증이란 브라우저를 통해 서버에 접속할 때 서버는 세션 id를 쿠키에 담아 되돌려주고 사용자는 세션 id를 담은 쿠키인 세션 쿠키를 이 후 요청부터 함께 전달해서 세션 id를 통해 클라이언트를 식별할 수 있다. 이 때 세션 id가 없을경우 서버에서는 세션 id를 생성하여 쿠키에 담아서 돌려준다. 그럼 이렇게 생각할 수 도 있다 쿠키에 그냥 로그인 정보를 담으면 안되나요? 안된다. 물론 로그인 정보가 중요하지않다면 상관없지만 보통은 로그인 정보는 중요한 내용을 담고있다. 쿠키는 브라우저에 저장되기 때문에 탈취 당할 수가 있다. 그렇기 때문에 안전하게 서버에 저장되는 세션방식을 채택한 것이다. 그래서 세션기반 인증에서는 세션 id를 서버에 저장하고 쿠키를 통해 브라우저에 전달하는 방식인 것이다.

토큰방식 인증

토큰은 인증할 수 있는 일종의 확인서라고 생각하면된다. 우리는 로그인을 통해 토큰을 발급받고 그 토큰을 쿠키에 저장한다. 결국 서버에서는 로그인 요청에 대해 토큰을 발급해주고 더 이상 관여하지 않는다. 이 차이점이 세션이랑 다른점이다. 그리고 서버에 저장하지 않기 때문에 서버에 대한 비용을 줄일 수 있다. 토큰의 수명이 길어지면 제 3자에게 탈취당할 가능성이 있는데 이를 보완하기 위해 access token과 refresh token으로 보안을 강화시켰다. access token은 대체로 유효기간이 짧고 refresh token은 access token보다 유효기간이 더 길어 access token을 갱신하는 용도로 사용한다.

profile
Programmer

0개의 댓글