강의

멘토링

커뮤니티

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

최성준님의 프로필 이미지
최성준

작성한 질문수

한 입 크기로 잘라먹는 실전 프로젝트 - SNS 편

(6.1) 인증과 인가 이해하기

실무에서의 JWT에 대해서 질문드려요

작성

·

6

0

JWT가 이론적으로는 DB에 액세스하는 과정없이 인증이 가능하다고는 하지만,, jwt.io같은데서 payload의 조회를 쉽게 할 수 있기도 하다보니 웬만한 개인정보를 넣는 것은 지양하는 걸로 알고 있습니다.

 

실무에서는 사실상 payload에 userId정도만 넣어두고, 서버에서 이 JWT를 받아 디코딩하여 받은 userId로 DB에 액세스하여 유저정보를 가져와서 유효한 유저인지 파악한 다음 클라이언트에 응답하는 것이 일반적인 케이스가 아닌가.. 그러면 세션과 큰차이가 사실상 없는 것이 아닌가 궁금하여 질문드립니다!

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 최성준님.

JWT(JSON Web Token)는 주로 서버와 클라이언트 간의 인증 용도로 많이 사용됩니다. JWT를 사용할 때의 장점 중 하나로는, 서버 측에서 세션을 유지하지 않더라도 클라이언트가 제공하는 토큰을 통해 인증 상태를 확인할 수 있다는 것입니다. 그러나, JWT의 payload 부분은 누구나 디코딩이 가능하기 때문에 민감한 정보를 포함하지 않는 것이 중요합니다.

실무에서의 JWT 사용 방식

  1. 유효성 검사: 보통 JWT는 클라이언트 측에서 발급받은 후, 서버로의 요청 시 Authorization 헤더에 담겨 전송됩니다. 서버에서는 해당 JWT의 서명을 검증해 유효성을 확인합니다.

  2. payload의 정보: 일반적으로 payload에는 userId 또는 기타 특정 ID와 같은 식별자를 저장합니다. 사용자 이메일, 비밀번호 같은 민감한 개인정보는 넣지 않습니다. 이를 통해 서버는 userId를 이용하여 데이터베이스에서 추가 사용자 정보를 조회할 수 있습니다.

  3. 데이터베이스 조회: 서버는 JWT의 userId를 사용해 데이터베이스를 조회하고, 사용자 정보를 가져올 수 있습니다. 이를 통해 인증된 사용자인지 확인합니다. 이것은 적은 개인정보만을 일시적으로 저장하고, 필요한 경우 데이터베이스에서 필요한 정보를 조회하는 방식을 취합니다.

세션과의 차이점

  • 세션 기반 인증: 서버에 사용자의 상태를 저장하며, 클라이언트는 세션 ID를 통해 인증을 유지합니다. 서버가 사용자의 상태 정보를 관리해야 하기 때문에 서버 측 리소스를 사용합니다.

  • JWT 기반 인증: 서버는 클라이언트에게만 토큰의 유효성을 확인하고, 별도의 세션 저장소가 필요 없습니다. 이를 통해 서버의 부담이 줄어들고, 특히 멀티 서버 환경에서 유리하게 동작할 수 있습니다.

다만, JWT는 인증 정보를 담고 있기 때문에 만료 시간 설정 등 관리가 중요합니다. 만료된 토큰을 걸러내고, 사용자가 로그아웃할 경우 토큰을 블랙리스트에 등록하여 관리하는 방식도 같이 사용됩니다.

관련 정보는 다음 게시글을 통해 더 알아보실 수 있습니다:
- React로 로그인 부분 처리하는데 질문이 있습니다.
- useReducer 상태관리 질문있습니다 ㅠㅠ

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

최성준님의 프로필 이미지
최성준

작성한 질문수

질문하기