1. ✅ 인증(Authentication) vs 인가(Authorization)

구분 설명 예시
인증 사용자가 누구인지 확인하는 절차 로그인
인가 인증된 사용자가 특정 리소스에 접근 가능한지 확인하는 절차 관리자만 글 삭제 가능

2. 🔐 JWT (JSON Web Token)

🔸 JWT란?

서버에서 인증이 완료된 사용자 정보를 토큰 형태로 클라이언트에게 발급하여,

이후 모든 요청에 토큰을 포함시켜 인증 상태를 유지할 수 있도록 하는 방식.

서버는 상태를 기억할 필요가 없으므로, 무상태(stateless) 인증 방식이다.


🔸 JWT 구조

Header.Payload.Signature
Header: {
  "alg": "HS256",
  "typ": "JWT"
}

Payload: {
  "sub": "user123",
  "role": "ROLE_USER",
  "exp": 1712345678
}

Signature: HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

🔸 JWT 인증 흐름 예시

1. 사용자가 로그인(ID/PW) 요청
2. 서버가 사용자 인증 후 JWT 토큰 발급
3. 클라이언트는 이 토큰을 저장 (보통 LocalStorage 또는 Cookie)
4. 이후 요청 시 Authorization 헤더에 토큰 포함
   → Authorization: Bearer {토큰}
5. 서버는 토큰의 유효성을 검증하고, 사용자 인증 처리

🔸 Spring Boot 적용 흐름

  1. 로그인 시 JWT 생성 → 클라이언트 전달
  2. 이후 요청에 토큰 포함