36) JWT 란?
JWT 사용이유 파악
서버가 1대인 경우

서버가 2대 이상인 경우

세션 저장소 생성

JWT 사용
로그인 정보를 Server 에 저장하지 않고, Client 에 로그인정보를 JWT 로 암호화하여 저장 → JWT 통해 인증/인가

모든 서버에서 동일한 Secret Key 소유
Secret Key 통한 암호화 / 위조 검증 (복호화 시)

JWT 장/단점
JWT 사용 흐름 Overview
Client 가 username, password 로 로그인 성공 시
"로그인 정보" → JWT 로 암호화 (Secret Key 사용)
Sample

JWT 를 Client 응답에 전달
Client 에서 JWT 저장 (쿠키, Local storage 등)
Client 에서 JWT 통해 인증방법
JWT 를 API 요청 시마다 Header 에 포함
예) HTTP Headers
Content-Type: application/json
**Authorization: Bearer** **<JWT>
...**
Server
JWT → "로그인 정보" (UserDetailsImpl) 만들어 사용
ex) GET /api/products : JWT 보낸 사용자의 관심상품 목록 조회
JWT 구조
JWT 는 누구나 평문으로 복호화 가능
하지만 Secret Key 가 없으면 JWT 수정 불가능
→ 결국 JWT 는 **Read only 데이터**

Header
{
"alg": "HS256",
"typ": "JWT"
}
Payload
{
"sub": "1234567890",
"username": "제이홉",
"admin": true
}
Signature
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
37) JWT 로그인 이해

**Authorization: BEARER** <JWT>
ex)
**Authorization: BEARER** eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJzcGFydGEiLCJVU0VSTkFNRSI6IuultO2DhOydtCIsIlVTRVJfUk9MRSI6IlJPTEVfVVNFUiIsIkVYUCI6MTYxODU1Mzg5OH0.9WTrWxCWx3YvaKZG14khp21fjkU1VjZV4e9VEf05Hok 