2020-10-28 Authentication

Seungjae Han·2020년 10월 28일
0

Cookie

브라우저를 이용하다 가끔 최근 기록들을 모두 삭제 할 때 쿠키를 지우겠냐는 알림을 받아본적이 있다. 이때 쿠키가 오늘 공부한 쿠키였다. 쿠키는 서버에서 내려받아지는 작은 데이터이다. 쿠키가 보통 사용되는 곳은 서버에 진입할때 내가 이를 다녀갔다는 내용을 남기기 위할 때 사용된다. 7일간 보지 않겠습니까? 와 자동 로그인과 같은 상황들이 발생될때 쿠키가 필요하다. 그럼 이런 쿠키가 왜 필요하게 된 것일까? 라는 의문이 생겼다.

Cookie가 필요한 이유

HTTP는 Stateless통신이기 때문에 한번 통신 된 뒤에는 연결이 끊긴다. 즉 클라이언트와 서버간의 대화는 지속적이지 않다는 뜻이다. 그렇다면 이런 stateless통신일때 나갔다가 들어온 홈페이지에서 로그인을 다시해야되는 불상사와 내가 굳이 보지 않고 싶은 광고를 계속해서 띄어주는 일같은 불편함이 존제한다면 그 홈페이지는 사람들이 이용하지 않을 것이다. 그런 이유로 Cookie를 사용했다. 정보이기 때문에 컴퓨터내에 바이러스를 심는다는지 그런 행위는 벌어지기 힘들다고 한다. 그저 HTTP통신에서 헤더를 통해서 옮겨진다. header에 Set-cookie에서 정보를 옮긴다.

Cookie의 문제점

쿠키는 정보를 매 헤더에 추가하여 보내기 때문에 상당한 트래픽을 발생시킨다. 그리고 결제정보등 쿠키에 저장된 중요한 정보들은 보안에 취약하다는 문제점도 발생 할 수 있다.

Session

세션은 쿠키의 트래픽과 보안 이슈를 해결하기 위해 등장했다. HTTP Session id를 식별자로 구별하여 데이터를 사용자의 브라우저에 쿠키형테가 아닌 서버에서 정보를 저장한다. 즉 서버 메모리에 저장한다. HTTP Session Id를 쿠키로 클라이언트는 가지고 있다.

Session이 필요한 이유

클라이언트가 서버에 resource를 요청하면 HTTP Request를 통해 쿠키에서 Session id를 확인 한 뒤에 Set-Cookie에 Session id가 없으면 보낸다. 클라이언트가 id가 포함된 Resource를 요청하면 서버는 Sessionid를 통해 해당 세션을 찾아 클라이언트 상태 정보를 유지하며 적절한 응답을 해준다. Cookie는 브라우저 내에서 조작이 가능하기 때문에 보안상 문제가 있지만 세션을 사용하게 되면 서버에서 비교하기 때문에 보안 문제를 조금이나마 해결 할 수 있다.

Session의 문제점

세션은 메모리에 저장되는 원리이다. 결국 많아지면 메모리의 한계를 이기지 못한다.

Token

토큰은 이러한 문제를 해결하고 나왔다. 서버 세션을 사용하면 유저가 인증 할 때, 서버 저장 메모리를 사용하기 때문에 서버 기능적 문제가 발생한다. 또 이를 데이터베이스에 저장 할 수 있지만 이 또한 데이터베이스에 문제를 이르키기 때문에 안된다. 그럼 토큰은 무엇인가? 토큰은 인증정보를 서버나 세션에 담아두지 않는다. 클라이언트가 post를 보내면 서버는 토큰을 생성하고 응답을 한다. 정상적으로 발급된 토큰을 같이 보내준다. 클라이언트는 이 토큰을 저장한다. 그 뒤에 서버에 요청 할 때 마다 토큰을 함께 서버에 전달하고 서버는 이 토큰을 검증한뒤 응답을 해주는 방식이다.

궁금한 점

오늘 처음 인증에 대해 배워봤다. 아직 궁금한점이 많이 남아있다.
1. 쿠키와 토큰은 굉장히 흡사하다고 생각되지만 차이가 있다. 서버에서 토큰을 검증 한다는 차이다. 이러한 장점은 알겠다. 그럼 쿠키에서 상당한 트래픽을 발생시키는데 이는 토큰 세션도 마찬가지 라는 생각이 든다. 이는 점점 프로그램을 만들어보며 차이를 느끼겠지만 좀 더 공부를 해봐야 겠다.

profile
공부하는 개발자 재밌게 일하고 싶습니다.

0개의 댓글