인프런 커뮤니티 질문&답변

rrallvv .J님의 프로필 이미지
rrallvv .J

작성한 질문수

이미지 관리 풀스택(feat. Node.js, React, MongoDB, AWS)

리펙토링

세션에 대해서 질문이 있습니다.

작성

·

279

1

강의 너무 감사히 잘 듣고 있습니다.

강의를 들다 궁금한게 있어서 질문을 드립니다.

개인적으로 서버를 구축할떄  JWT가 간단하고 추가적으로 Redis server를 추가할 필요가 없어서 jwt를 선호합니다.

실무에서는 세션 vs JWT중 어떤것을 많이 쓰는지와 트랜드 혹은 선호되는 이유를 알 수 있을까요?

답변 1

1

김시훈님의 프로필 이미지
김시훈
지식공유자

rrallvv .J님 안녕하세요 :)

좋은 질문입니다. 음 일반적으로는 둘다 괜찮은데 상황에 따라 좀 더 적합한게 있을 수 있어요.

일단 세션의 가장 큰 점은 이 유저의 상태를 실시간으로 관리할 수 있다는 점이에요. 예를 들어 해커가 JWT 토큰을 탈취를 하게 되면 토큰이 만료되기 전까지는 저희가 요청을 차단할 수 있는 방법이 없어요. 그래서 JWT를 사용하게 되면 이런 악행을 최소화시키기 위해 만료기간이 짧은 accessToken과 만료기간이 긴 refreshToken을 두게 되죠. accessToken이 만료되면 refreshToken으로 새로운 accessToken을 발급하게 되는데 이 때 데이터베이스에 저장되어 있는 유저의 상태(예를 들어 해킹유무)를 확인하고 refreshToken이 있음에도 불구하고 accessToken 발급을 차단하게 됩니다.

또 하나의 예시로는 만약 제3자가 저에게 권한들을 부여한다고 했을 때 이런 권한정보들을 JWT에 담아주는게 좋은데요. 문제는 accessToken이 만료되고 재발급되기 전까지는 즉시 반영이 되지 않을 수도 있다는거에요. 하지만 세션에 이런 해킹유무, 권한 업데이트와 같은 정보들이 실시간으로 반영된다면 요청마다 즉시 반영되겠죠.

그리고 강의에서처럼 꼭 레디스가 아니라 몽고디비와 같은 메인 데이터베이스로 세션을 관리해도 되긴 해요. 레디스로 하는건 요청마다 반복적으로 호출이 되는데 이걸 조금이라도 빨리 불러오고 메인 디비에 부하를 줄이기 위해서니까요. 그래서 만약 세션 기반으로 가실거면 처음에는 메인 디비로 했다가 서비스가 성장하면서 레디스 같은걸로 옮길 수 있겠죠.

대부분의 서비스들은 JWT로 개발을 해도 특별히 문제 되지 않아요. 말씀하신대로 요청마다 세션을 확인해야하는 부하도 줄고 복잡성도 그만큼 주는 단점이 일단 제일 매력적이죠. 저도 JWT를 실제로 더 선호하고 왠만하면 JWT기반으로 개발하고 있습니다. 세션 기반을 모르고 JWT를 사용하는거랑 알고 사용하는거랑 다르다고 생각해요. 그리고 세션 기반으로 돌아가는 서비스들도 아직 많기 때문에 기본적으로 알고 있으면 좋다고 봐요. 둘 다 알고 적재적소로 사용하시면 좋을 것 같아요.

GraphQL 백엔드 강의를 준비하고 있는데 여기서는 JWT기반(access & refresh) 인증인가를 다룰 예정이에요 :)

rrallvv .J님의 프로필 이미지
rrallvv .J
질문자

답변 감사합니다.

많은 도움이 되고있어요^^

rrallvv .J님의 프로필 이미지
rrallvv .J

작성한 질문수

질문하기