거누의 개발노트

[항해] JWT 토큰 인증 방식, API - 회고 본문

CS

[항해] JWT 토큰 인증 방식, API - 회고

Gogozzi 2022. 5. 15. 12:18
반응형

이번에 항해에서 미니 프로젝트를 진행했는데 JWT 토큰 방식의 로그인 방식을 사용했다.

그런데 인증 방법은 어떤것이 있고 왜 JWT 토큰방식을 이용해야하는지에 대한 이해가 필요했다.

토큰(Tocken)기반 인증은 모던 웹서비스에서 정말 많이 사용되고 있다고 한다.
웹 서비스를 개발한다면 토큰을 사용하여 유저들의 인증작업을 처리하는것이 가장 좋다고 한다.

그럼 서버 기반 인증과 토큰 방식 인증을 알아보자.

서버 기반 인증 흐름

  1. 사용자가 로그인을 요청한다.
  2. 서버는 인증정보를 확인 후 세션을 생성 후 다시 사용자에게 응답한다.
  3. 회원 서비스를 요청 했을 때는 요청한 사용자 정보와 세션 저장소의 내용과 일치하는 정보가 있는지 확인 후 응답한다.

서버 기반 인증의 문제점

세션

유저가 인증을 할 때, 서버는 이 기록을 서버에 저장을 해야한다. 이를 세션이라고 부른다. 대부분의 경우엔 메모리에 이를 저장하는데, 로그인 중인 유저의 수가 늘어난다면 서버의 램에 많은 과부화가 걸리게되고 이를 피하기 위해서는 세션을 데이터베이스 시스템에 저장하는 방식도 있지만, 이 또한 유저의 수가 많으면 데이터베이스의 성능에 무리를 줄 수 있다.

확장성

세션을 사용하면 서버를 확장하는 것이 어려워진다. 여기서 서버의 확장이란, 단순히 서버의 사양을 업그레이드 하는것이 아니라, 더 많은 트래픽을 감당하기 위하여 여러개의 프로세스를 돌리거나, 여러대의 서버 컴퓨터를 추가 하는것을 의미한다. 세션을 사용하려면 분산된 시스템을 설계하는건 불가능한것은 아니지만 과정이 매우 복잡해진다.

토큰 기반 인증

  1. 사용자가 로그인을 요청한다.
  2. 서버에서는 암호화를 통해 토큰을 생성한다.
  3. 생성된 토큰을 클라이언트에 저장한다.
  4. 회원 서비스를 요청 했을 때는 토큰을 서버에 전송하여 서버가 로그인정보를 확인한다.

토큰 기반 인증의 장점

무상태, 확장성

토큰은 클라이언트 사이드에 저장하기 때문에 완전히 무상태라고 한다. 무상태란 서버가 식별할 수 없는 상태라고 이해하면 된다.
확장성이 좋은이유는 세션과 비교해보면 알 수 있다. 만약 세션을 서버측에 저장하고 있고, 서버를 여러대를 사용하여 요청을 분산하였다면, 어떤 유저가 로그인했을땐, 그 유저는 처음 로그인 했었던 해당 서버에만 요청을 보내도록 설정해야한다. 하지만 토큰을 사용한다면 어떤 서버로 요청이 들어가던 상관이없다.

보안성

클라이언트가 서버에 요청을 보낼 때, 더 이상 쿠키를 전달하지 않음으로 쿠키를 사용함으로 인해 발생하는 취약점이 사라집니다. 토큰을 사용하는 환경에서도 취약점이 존재할 수있으니 언제나 취약점에 대비해야합니다.

그럼 JWT에 대해 알아보자!

JWT란?

JSON 웹 토큰은 선택적 서명 및 선택적 암호화를 사용하여 데이터를 만들기 위한 인터넷 표준으로,
페이로드는 몇몇 클레임 표명을 처리하는 JSON을 보관하고 있다. 토큰은 비공개 시크릿 키 또는 공개/비공개 키를 사용하여 서명된다.

JWT 인증 방식

1. 클라이언트 로그인 요청이 들어오면, 서버는 검증 후 클라이언트 고유 ID 등의 정보를 Payload에 담는다.
2. 암호화할 비밀키를 사용해 Access Token(JWT)을 발급한다.
3. 클라이언트는 전달받은 토큰을 저장해둔다.
4. 서버에 요청할 때 마다 토큰을 요청 헤더에 포함시켜 함께 전달한다.
5. 서버는 토큰의 서명을 비밀키로 복호화한 다음, 위변조 여부 및 유효 기간 등을 확인한다.
6. 유효한 토큰이라면 요청에 응답한다.

미니 프로젝트 때, 기능기능 마다 API를 구현했다.

API에 대해서 좀 더 확실히 공부해 두어야겠다는 생각이 들어 적어보려고한다.

API는 그림에서 보는것 처럼 점원이라고 생각하면 된다. 중간에서 요구사항을 받고 전달해주는 역할을 한다.

API

1. API는 서버와 데이터베이스에 대한 출입구 역할을 한다.
데이터베이스에는 소중한 정보들이 저장된다. 그래서 모든 사람들이 이 데이터베이스에 접근하면 정보가 유출 될 수 있다. API는 이를 방지하기 위해 서버와 데이터베이스에 대한 출입구 역할을 하며, 허용된 사람들에게만 접근성을 부여해준다.

2. API는 애플리케이션과 기기가 원활하게 통신할 수 있도록 한다.
API는 애플리케이션과 기기가 데이터를 원활히 주고받을 수 있도록 돕는 역할을 한다.

간단한 회고

JWT 토큰 로그인 방식은 들어만 봤지 이번에 사용하는건 처음이었다.
토큰방식의 인증개념을 더 확실히 알게되었다.
항해가 벌써 일주일이 지나갔다.
9 to 9 이상으로 공부하고 생각하고 있지만 힘들다고 느낀적이 별로 없다.
해야할것도 많고 어렵기도 하지만 그래도 게더에서 화상을키고 같이 공부하는게 즐겁다.

반응형

'CS' 카테고리의 다른 글

자료구조/알고리즘 - 이진트리(1)  (0) 2022.05.24
[항해] 알고리즘 1주차 회고 (자료구조-알고리즘)  (0) 2022.05.22
비트 모아 데이터  (0) 2022.05.21
[자료구조] 해시테이블  (0) 2022.05.19
SSD와 HDD의 차이  (0) 2022.05.17
Comments