JWT토큰이란?
JWT(JSON WEB TOKEN)은 당사자 간에 정보를 JSON 개체로 안전하게 전송하기 위한 간결하고 독립적인 방법을 정의하는 개방형 표준입니다.

토큰은 기본적으로 서버에게 본인 확인을 증명하는 수단으로 이해할 수 있습니다.
JWT토큰 HS 기반 설명
HS256은 HMAC SHA 256의 약자로, 헤더, 페이로드, 비밀키를 SHA256으로 암호화하는 방식입니다.

1. 클라이언트 로그인
사용자가 아이디와 비밀번호를 입력하여 서버에 전송합니다.
2. 서버 인증
@PostMapping("/login")
public Response<MemberLoginResponse> login(@RequestBody MemberJoinRequest request) {
String token = memberService.login(request.getUsername(), request.getPassword());
return Response.success(new MemberLoginResponse(token));
}
서버는 데이터베이스에서 사용자 존재 여부를 확인합니다.
성공 응답:
{
"resultCode": "SUCCESS",
"result": {
"token": "eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyTmFtZSI6InVzZXJuYW1lIiwiaWF0IjoxNjg4NTI4Mzk4LCJleHAiOjE2OTExMjAzOTh9.nKespnex3zaEd_TOK5kTfJ3J9vkKNJaR98NRUiyHaQk"
}
}
3. JWT 토큰 생성
Base64UrlEncode(헤더) + "." + Base64UrlEncode(페이로드) + "." +
HS256(Base64UrlEncode(헤더) + "." + Base64UrlEncode(페이로드), 비밀 키)
4. JWT 토큰 암호화
- 헤더와 페이로드는 Base64로 인코딩 (복호화 가능)
- 서명은 비밀키를 이용한 SHA256 단방향 암호화
5. JWT 토큰 검증
SHA256 방식은 단방향이지만 동일한 input값을 암호화 한다면 결과값은 동일한 output이 나온다는 원리를 활용합니다.
- 서버가 헤더와 페이로드를 디코딩
- 비밀키로 서명을 재생성
- 전달받은 서명과 비교
6. JWT 서버에서 토큰 전송
토큰은 응답 본문에 포함되어 클라이언트로 전송되며, 클라이언트는 LocalStorage나 Cookie에 저장합니다.
localStorage.setItem('token', res.data.result.token);
7. 클라이언트 요청
axios({
url: '/api/v1/posts?size=5&sort=id&page=' + pageNum,
method: 'GET',
headers: {
Authorization: 'Bearer ' + localStorage.getItem('token'),
},
})
Bearer 토큰
Bearer 토큰은 토큰 소유자에게 액세스 권한을 부여하는 토큰입니다. Authorization 헤더에 ‘Bearer’ 접두사로 시작하는 약속된 형식입니다.
핵심: JWT는 서명을 통해 토큰의 무결성을 검증하며, 비밀키는 절대 노출되어서는 안 됩니다.