JWT 알아보기!

송수용·2022년 5월 15일
0

항해99

목록 보기
5/12

Auth(인증)을 통해 서비스는 유저를 검증할 수 있다.
Auth를 만들어야한다면 쿠키 세션 토큰 JWT를 알아야하는데
각 의미를 알아보고, 언제 무엇을 써야될지도 한번 알아보자!

Cookie

  • 쿠키를 이용해서 서버는 브라우저에 저장
    사이트에 방문하면 브라우저는 서버에 요청을 보낸다.
    서버는 이에 응답하고 그 응답에는 모든데이터와 클라이언트가 찾던 페이지 정보가 있다.
    그 브라우저에 저장하고자 하는 쿠키가 있다.

클라이언트가 브라우저에 쿠키를 저장한 후
해당 웹사이트를 방문할 때 마다 브라우저는 해당 쿠키도 요청과 함께 보내게 된다.
쿠키는 도메인에 따라 제한되기도 한다.
쿠키는 유효기간이 있다.쿠키는 인증뿐만아니라 여러가지 정보를 저장할 수 있따.

Session과 token

왜 세션과 토큰이 필요한가!

  • 서버로 가는 모든 요청이 이전 request와 독립적으로 다뤄진다.
    요청이 끝나면 서버는 클라이언트가 누군지 모른다.
    그래서 요청할 때마다 클라이언트가 누군지 알려줘야 한다.
    이때 사용하는 방법 중 하나가 Session이다.

로그인을 할 때 아이디 비밀번호를 서버에 보낸다
비밀번호가 맞으면 서버는 Session DB에 유저를 생성한다
해당 Session에는 별도의 ID가 존재
해당 Session ID는 Cookie를 통해 브라우저로 돌아오고 저장된다.
같은 웹사이트의 다른 페이저로 이동하면 브라우저는 Session ID를 갖고
있는 Cookie를 서버에게 보냄

Cookie는 자동으로 보내지는데
서버는 들어오는 Cookie를 보고 SessionID와 함께 오는 Cookie를 확인한다.
서버는 Session ID가 있는 Cookie를 지닌 요청만 있다는 것만 알뿐!
해당 Session ID를 가지고 Session DB를 확인할 것이고
거기서 해당 ID는 User ID 을 알게되면서, 서버까지 닿게 된다.

해당 요청이 끝나고 다른 페이지로 이동하게되면 이 프로세스가 반복된다.

중요한 유저정보는 모두 서버에 있다.
유저가 갖고있는것은 Session ID 뿐

Cookie는 그저 Session ID를 전달하기 위한 매개체일뿐이다.

Session을 이용해 IOS,Android 앱을 만들 수 있지만,
쿠키는 사용할 수 없다. 그래서 token 을 사용한다.

token

  • 서버에 토큰을 보내면 서버는 Session DB에서 해당 토큰과 일치하는 유저를 찾는다.
    유저인증을 처리하면 Session DB를 가질 필요가 없다

세션에서 중요한 것

  • 현재 로그인한 유저들의 모든 Session ID를 DB에 저장해야하는 것
    요청이 들어올때마다 서버는 Cookie를 받아서 Session ID를보고 일치하는 찾고
    그제서야 다음 작업을 수행 요청이 있을 때마다 DB를찾고 해야한다는 것이다.
    즉, 유저가 늘어남에 따라 DB 리소스가 더 필요하다.

JWT와 Session의 차이점

Session :
유저가 로그인 하려면 유저명 비밀번호를 서버에 보낸다.
DB에 뭔가를 생성하지 않는다.

JWT :
Cookie는 공간제약이 있지만 JWT는 없다
동일하게 로그인을 했는데 DB를 건드리는 대신 정보를 사인하고 전달하는게 끝
이제 서버에 요청을 보내려면 Session ID에
해당 사인된 정보 혹은 토큰을 서버에 보낸다
서버는 토큰을 받으면 해당 사인이 유효한지체크하고 이는 토큰을 조작했는지 체크하는 것
토큰이 유효하다면 서버는 우리를 유저로 인증함

바로 이것이 세션과 JWT의 가장 큰 차이점이다.

세션에선 그냥 Session ID 만 주면됨 세션에 대한 모든 정보는 Session DB에 저장되어있다
페이지를 요청하면 서버는 Session ID를 DB에서 찾으면 됨
JWT에서는 서버는 유저를 인증하는데 필요한 정보를 토큰에 저장한다
그리고 해당 토큰을 우리에게 준다
페이지를 요청하면 서버는 해당 토큰이 유효한지만 검증하면 된다.
DB를 가질 필요없이!
주의할 점은 JWT는 암호화 되지는 않았다
암호화되었다면 아무도 읽수도 없고 이해할수없다
JWT의 경우 누구나 열어서 해당 컨텐츠를 볼 수있따
비밀정보를 JWT안에 둬서는 안된다
핵심은 토큰을 사인하고 이를 통해 유효한지 검증한다는것

JWT Session 장단점

Session

Session을 사용하면 서버는 로그인된 유저의 모든 정보를 저장함.
해당 정보를 이용하면 새로운 기능을 추가할 수 있다
특정 유저를 강퇴하고 싶을때 세션을 삭제할 수도 있다.

  • 활용사례
  1. 예를 들어 인스타그램에서 원하지 않은 디바이스에서 강제 로그아웃이 가능
  2. 넷플릭스 처럼 공유 개수를 제한할 수도 있음

이모든기능이 가능한 것 이유
서버가 누가 로그인했는지 저장했고 세션 db가 있기 때문이다.

다만, 염두할 점은 DB를 사고 유지해야하는 경제적 비용이 발생한다.
그리고 사용자가 늘어나면 날수록 DB도 커져야한다.
이를 위한 DB로는 Redis를 사용하는데 (Redis를 사용하는 회사들이 종종 있음.)
위 목적을 수행하기 위한 빠르고 저렴한 DB다

JWT

JWT를 사용하면 생성된 토큰을 추적하지 않는다.
서버가 아는 것은 토큰이 유효한가 여부일 뿐이다.
JWT는 DB를 따로 살 필요가 없다.
Session처럼 강제 로그아웃 기능을 사용 할 순 없다

데이터를 사인하고 유저에게 보내고 해당 데이터를 돌려받을때 유효성을 검증할 수 있다
DB없이 모든 것이 가능하다

  • 활용사례
    한국에서 코로나 때문에 QR체크인 JWT가 들어간 QR코드이다

Session이나 DB없이 유저 인증이 가능하다.
JWT인증의 제약만 잘 알아두면 된다
서비스가 더 커지고 유저 계정을 좀 더 잘 관리하고 싶다면 그때는 Session 으로 옮기자

쿠키 = 그냥 옮기는 시스템 매개체.
토큰 = 서버가 기억하는 긴 텍스트.

JWT 정보를 갖고있는 토큰 DB없이 검증할 수 있음
유저 인증을 위해서 JWT혹은 Session 을 사용가능

profile
#공부중 #협업 #소통중시 #백엔드개발자 #능동적 #워커홀릭 #스파르타코딩 #항해99 #미니튜터 #Nudge #ENTJ #브레인스토밍 #아이디어뱅크

0개의 댓글