프로젝트를 진행하다보면 인가 방식에대해서 세션방식을 사용하게 될지 토큰 방식을 사용하게 될지에 대해서 결정하고 커스텀하는 경우를 거치게 된다.
장고 프로젝트의 기본 인증, 인가방식은 세션방식을 따르게 되고 이를 커스텀하여 jwt 방식으로 바꾸는 방식으로 학습하게 되는 경우가 대부분이기 때문에 처음 학습을 진행하는 입장에서는 세션방식은 기능적으로 나쁘고 jwt 방식은 좋다고 생각을 할 수 있다.
하지만 위에 표현한 전제는 잘못된 내용이라고 생각할 수 있다. session과 jwt는 방식의 차이가 있고 서비스가 확대되고 다수의 서버를 사용하게 되는 환경의 변화때문에 jwt가 좋다고 생각되는거지 각각의 장단점이 있는 인가 방식으로 생각해야되는 것이 맞으며 이를 jwt의 관점에서 장단점으로 간략하게 정리해보겠다.
인가를 하는 방식으로 session 방식과 jwt 방식을 비교하자면 간단하게 session의 경우에는 인증이 될때 session ID를 클라리언트에 제공하게 되고 이것을 쿠키에 담고 있다가 인가를 할때 사용하게 되며 서버에서는 이 session에 대한 정보를 메모리의 한 장소에 저장하여 메모리를 할당해야한다. 반면에 jwt토큰의 경우에는 인증을 할때 토큰을 발급받게되며 이 토큰은 헤더와 페이로드 시그니쳐를 담고 있어서 이것을 이용하여 서버에 있는 시크릿키를 이용하여 인가를 수행하게 되어 서버에 시크릿키 이외의 별도의 공간을 차지하지 않는다는 차이점이 있다.
여기서 첫번째 jwt의 장점이 나오게 된며 밑에 장점을 나열해 보겠다.
1. jwt를 사용할 경우에는 별도 저장소가 불필요하며 서버 자원을 절약할 수 있다.
2. 불필요한 인증과정이 감소 되어 트래픽에 대한 문제도 감소한다.
- 이 내용은 인가를 수행할때 시크릿키와 헤더 페이로드의 연산을 통하여 시그니쳐와의 비교만으로 인등하기 때문에 세션방식처럼 저장되어있는 값에 접근하여 비교하는 방식등의 과정을 줄일 수 있다는 점이다.
3. 그리고 다수의 서버를 사용할때 이점이 있다.
- session 방식에서 여러가지 서버를 사용하게 된다면 각각의 서버는 사용자에대한 session ID 인가정보를 가지고 있지 않을 가능성이 있으며 이를 각각 알려주던지 공용 session 저장소를 이용하는 방식등을 사용하여야 하는데 token방식에서는 이러한 걱정을 하지 않아도 된다.
3가지 장점을 써보고 반면 발생할 수 있는 단점을 생각해 본다면
1. 특정 아이피정보등에서 사용하는 session ID 정보를 판별하는 방식등이 아니기 때문에 외부 공격자가 접근하기 쉽고, 노출이 가능하다.
2. 1번과 같은 이유로 페이로드 데이터 등에 저장할 수 있는 정보가 제한적이다.
3. 암호화가 풀릴 가능성을 배제 할 수 없다.
이러한 장단점들이 있고 실제 사용사례등을 살펴보면 두가지 방법 모두 방식만을 가지고 정답을 내리기는 무리가 있다는 것을 알게되었으며 자신이 만들고 싶은 서비스의 종류에 따라서 선택하여 사용해야 된다고 생각을 하였다.
참고자료
인가방식 예시
'DevLog' 카테고리의 다른 글
[프로그래머스] SQL DATETIME에서 DATE로 형 변환 (1) | 2022.09.30 |
---|---|
[프로그래머스] SQL 최댓값 구하기 (0) | 2022.09.30 |
[WIL] 프리온보딩 세번째 과제 회고록 - 게임듀오 (2) | 2022.07.19 |
[Docker] 제 3장 Elastic IP이용하여 고정 아이피 설정 하기 (0) | 2022.07.19 |
[Docker] 제 1장 터미널을 이용하여 EC2 접근하기 (0) | 2022.07.18 |