JWT (JSON Web Token) 이해하기
JWT(JSON Web Token)는 당사자 간에 정보를 JSON 객체로 안전하게 전송하기 위한 개방형 표준(RFC 7519)입니다. 주로 웹 서비스에서 인증(Authentication)과 인가(Authorization)를 처리할 때 사용됩니다.
1. 로그인 프로세스에서의 JWT 작동 방식
전통적인 세션 방식과 달리, JWT는 서버가 상태를 저장하지 않는 Stateless 방식입니다.
- 로그인 요청: 사용자가 아이디와 비밀번호를 입력하여 서버에 로그인을 시도합니다.
- 토큰 생성: 서버는 사용자 정보가 맞다면, 비밀키를 사용하여 암호화된 JWT를 생성합니다.
- 토큰 전달: 서버는 생성된 토큰을 클라이언트(브라우저)에게 보냅니다.
- 토큰 저장: 클라이언트는 토큰을 LocalStorage나 Cookie에 저장합니다.
- 이후 요청: 클라이언트는 이후 서버에 요청을 보낼 때마다 HTTP 헤더(Authorization)에 토큰을 담아 보냅니다.
- 토큰 검증: 서버는 받은 토큰이 유효한지(변조되지 않았는지) 확인하고 사용자를 인가합니다.
2. JWT의 구조
JWT는 점(.)으로 구분된 세 부분으로 구성됩니다.
- Header (헤더): 토큰의 타입(JWT)과 사용된 암호화 알고리즘(예: HS256)을 명시합니다.
- Payload (페이로드): 사용자의 ID, 이름, 권한, 토큰 만료 시간 등의 데이터를 담고 있습니다. (정보의 조각을 'Claim'이라고 합니다.)
- Signature (서명): 헤더와 페이로드를 서버의 비밀키로 암호화한 값입니다. 토큰이 도중에 변조되지 않았음을 증명합니다.
3. JWT의 장점
- Stateless: 서버가 사용자의 세션 정보를 메모리에 저장할 필요가 없어 서버 부하를 줄이고 확장성이 좋습니다.
- 모바일 연동: 세션 방식과 달리 모바일 앱에서도 다루기 매우 간편합니다.
- CORS 해결: 여러 도메인에서 서비스를 운영할 때 인증을 유지하기 유리합니다.