6 - 왜 JWT 토큰을 사용했을까?

Updated:

Categories:

다양한 옵션 중 어떤 기술을 왜 선택했는가?

일반적으로 로그인 구현에서 많이 사용되는 기술은 JWT 토큰 방식이다. 이 방식을 사용하게된 계기는 Session 방식과 비교해서 더 복잡하고 처리해야 될 것들이 많았기 때문이다. 하지만 이것은 구현하기 위한 생각일 뿐이다. 더 중요한 건, 그러니까 “다른 많은 좋은 재료들도 많은데.. 넌 왜? 이걸 선택한 거야?” 라는 제일 중요한 물음에 답을 할 수 없다는 것이다. 좋다. 그렇다면 왜 이런 사고 방식이 필요한 걸까? 궁금해서 찾아보았다.

“ 기술을 선택하는 과정에서, 우선 해당 프로젝트나 업무에서 해결해야 할 문제가 무엇인지 명확히 이해해야 한다. 그 문제를 해결하기 위해 기존 방식에서 고려할 수 있는 여러 대안들이 존재할 것이다. 이 대안들 중에서 특정 기술을 선택할 때는, 각 기술의 특징과 장단점을 비교 분석한 후, 그 기술이 왜? 가장 적합한지를 논리적으로 설명해야 한다. 또한, 해당 기술을 선택하고 적용한 결과로 어떤 변화나 성과가 있었는지, 즉, 이전 방식보다 개선된 점이나 해결된 문제를 구체적으로 설명할 수 있어야 한다. “


그래서 왜 JWT인가?

나는 JWT 토큰이 Stateless 특성을 가지고 있어서 서버가 사용자 토큰 때문에 지장을 받지 않기 때문이다. 특히 동일 선상의 세션과 비교했을 때 더더욱 그렇다.

세션 방식은 Stateful 특성을 가지고 있기 때문에 서버가 사용자 세션 정보를 일일히 소유해서 관리하게 된다. 이는, 사용자 수가 많지 않을 때는 영향이 없겠지만, 동시 접속자 수가 많아지면 서버는 감당하지 못할 트래픽을 여러 서버로 scale out 분산 처리하여 이를 해결하려고 할 것이다. 하지만 여기서 진짜 문제가 발생하게 된다. 바로 각 사용자 수만큼 관리하고 있는 Session 값들을 분산한 서버마다 공유해야 하기 때문이다. 즉 유저 수 * N 만큼의 세션 값들이 늘어나게 된다. 이는 비효율적인 방식이라고 할 수 있다.

토큰은 사용자에게 토큰을 발급 이후 위조 여부만 알고리즘을 통해 확인하면 되기 때문에 stateless 하다. 이로써 서버는 더이상 N개 만큼의 세션 값을 복제할 필요도 없기 때문에 성능, 유지보수, 확장성을 가질 수 있게 된다.

토큰의 또 다른 강점은 보안이라고 할 수 있는데, 그 이유는 토큰의 암호화 방식에 있다. 보통 양방향 암호화 방식인 비대칭 혹 대칭 키 전략을 사용해서 외부에서 키가 노출이 되더라도 내용은 민감한 데이터를 보통 넣어두지 않기 때문에 의미가 없어지게 되고 그리고 변조하더라도 토큰을 복호화 이후 변조 여부를 알 수 있기 때문에 공격자가 악의적인 행위를 할 수가 없다. 이 때문에 쿠키, 세션과 비교하더라도 가장 보안이 우수하다고 할 수 있다.

댓글남기기