JWT란 무엇인가? 로그인 구조 이해하기
웹 서비스에서 로그인 기능은 가장 기본적이면서도 중요한 요소입니다. 사용자가 로그인하면 서버는 “이 사용자가 누구인지”를 확인하고, 이후 요청에서도 그 사용자를 식별해야 합니다. 전통적으로는 세션(Session) 기반 방식이 사용되었지만, 최근에는 JWT(JSON Web Token) 기반 인증 방식이 많이 활용되고 있습니다. 그렇다면 JWT란 무엇이며, 로그인 구조는 어떻게 동작할까요?
먼저 JWT의 정의부터 살펴보겠습니다. JWT는 JSON Web Token의 약자로, 사용자 인증 정보를 JSON 형식으로 담아 서명(Signature)한 토큰입니다. 이 토큰은 클라이언트와 서버 사이에서 인증 정보를 안전하게 전달하기 위한 표준 형식(RFC 7519)입니다.
JWT는 세 부분으로 구성됩니다.
- Header
- Payload
- Signature
이 세 부분은 점(.)으로 구분되어 하나의 문자열로 만들어집니다.
Header에는 토큰 타입(JWT)과 사용된 암호화 알고리즘 정보가 들어갑니다.
Payload에는 사용자 정보(예: userId, role, 만료 시간 등)가 담깁니다.
Signature는 Header와 Payload를 기반으로 서버의 비밀 키로 생성한 서명입니다.
Signature는 매우 중요합니다. 이는 토큰이 위조되지 않았음을 보장합니다. 클라이언트는 Payload를 볼 수는 있지만, Signature를 생성할 수는 없습니다. 서버만이 비밀 키를 알고 있기 때문입니다.
이제 로그인 구조를 단계별로 이해해보겠습니다.
1단계: 로그인 요청
사용자가 아이디와 비밀번호를 입력하면 서버로 로그인 요청을 보냅니다.
2단계: 인증
서버는 입력된 정보를 데이터베이스와 비교하여 사용자의 신원을 확인합니다.
3단계: JWT 발급
인증에 성공하면 서버는 사용자 정보를 Payload에 담고, 서명을 포함한 JWT를 생성하여 클라이언트에 전달합니다.
4단계: 토큰 저장
클라이언트는 이 JWT를 로컬 스토리지나 쿠키에 저장합니다.
5단계: 요청 시 토큰 전송
이후 API 요청을 보낼 때 Authorization 헤더에 “Bearer 토큰값” 형태로 함께 전송합니다.
6단계: 토큰 검증
서버는 전달된 JWT의 Signature를 검증합니다. 유효한 서명인지 확인하고, 만료 시간이 지나지 않았는지 검사합니다. 문제가 없다면 요청을 처리합니다.
이 구조의 가장 큰 특징은 “무상태(Stateless)”라는 점입니다. 서버는 사용자의 로그인 상태를 별도로 저장하지 않습니다. 세션 방식과 달리 서버 메모리에 사용자 정보를 유지할 필요가 없습니다. 모든 인증 정보는 토큰 안에 포함되어 있습니다.
이 때문에 JWT는 확장성에 유리합니다. 서버를 여러 대로 늘리는 수평 확장 환경에서 세션을 공유할 필요가 없습니다. 클라우드 환경이나 마이크로서비스 아키텍처에서 특히 많이 사용되는 이유입니다.
하지만 JWT에도 단점은 존재합니다. 가장 큰 문제는 토큰 무효화가 어렵다는 점입니다. 세션 방식은 서버에서 세션을 삭제하면 즉시 로그아웃이 됩니다. 하지만 JWT는 발급 후 만료되기 전까지는 유효합니다. 이를 해결하기 위해 짧은 만료 시간과 Refresh Token을 함께 사용하는 방식이 일반적입니다.
Refresh Token은 액세스 토큰이 만료되었을 때 새로운 토큰을 발급받기 위한 별도의 토큰입니다. 이를 통해 보안과 사용자 편의성을 동시에 유지합니다.
보안 설정도 중요합니다. JWT를 쿠키에 저장할 경우 HttpOnly, Secure 옵션을 설정해야 XSS 공격을 방지할 수 있습니다. 또한 HTTPS 환경에서만 사용해야 합니다.
비유를 들어보면 JWT는 일종의 “디지털 출입증”과 같습니다. 건물에 들어갈 때 출입증을 발급받고, 이후 출입증을 보여주면 별도의 신원 확인 없이 통과할 수 있습니다. 출입증 안에는 사용자 정보와 유효 기간이 포함되어 있고, 위조를 막기 위한 보안 장치(서명)가 있습니다.
정리하자면 JWT는 사용자 인증 정보를 담은 서명된 토큰이며, 로그인 후 클라이언트가 이를 저장하고 요청마다 함께 전송하는 구조입니다. 서버는 토큰을 검증하여 사용자를 식별합니다. 무상태 구조 덕분에 확장성이 뛰어나며, 현대 웹 서비스에서 널리 사용됩니다.
서버와 API 보안을 이해하려면 JWT 로그인 구조를 반드시 알아야 합니다. 세션 기반 방식과의 차이, 토큰 발급 과정, 서명 검증 원리를 이해하는 것이 안전한 인증 시스템 설계의 핵심입니다.
Leave a Reply