JWT 토큰으로 인증하기 (1)
JWT는 JSON Web Token의 약어로, JSON 형식의 데이터를 저장하는 토큰입니다. JWT는 다음과 같이 세 부분으로 구성되어 있습니다.
- 헤더(HEADER): 토큰 종류와 해시 알고리즘 정보가 들어 있습니다.
- 페이로드(PAYLOAD): 토큰의 내용물이 인코딩된 부분입니다.
- 시그니처(SIGNATURE): 일련의 문자열이며, 시그니처를 통해 토큰이 변조되었는지 여부를 확인할 수 있습니다.
시그니처는 JWT 비밀 키로 만들어집니다. 이 비밀 키가 노출되면 JWT 토큰을 위조할 수 있으므로 비밀 키를 철저히 숨겨야 합니다. 시그니처 자체는 숨기지 않아도 됩니다.
JWT 토큰 예시
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30
JWT에는 민감한 내용을 넣으면 안 됩니다. 내용을 볼 수 있기 때문입니다.JWT 토큰은 JWT 비밀 키를 알지 앟는 이상 변조가 불가능합니다. 변조한 토큰은 시그니처를 비밀 키를 통해 검사할 때 들통납니다. 변조할 수 없으므로 내용물이 바뀌지 않았는지 걱정할 필요가 없습니다. 다시 말하면 내용물을 믿고 사용할 수 있습니다.단, 외부에 노출되어도 좋은 정보에 한해서입니다. 비밀번호를 제외하고 사용자의 이메일이나 사용자 권한 같은 것들을 넣어두면 데이터베이스 조회 없이도 그 사용자를 믿고 권한을 줄 수 있습니다.JWT 토큰의 단점은 용량이 크다는 것입니다. 내용물이 들어 있으므로 랜덤한 토큰을 사용할 때와 비교해서 용량이 클 수 밖에 없습니다. 매 요청 시 토큰이 오고 나서 데이터양이 증가합니다. 이렇게 장단점이 뚜렷하므로 적절한 경우에 사용하면 좋습니다. 비용을 생각해보면 판단하기 쉽습니다. 랜덤 스트링을 사용해서 매번 사용자 정보를 조회하는 작업의 비용이 더 큰지, 내용물이 들어 있는 JWT 토큰을 사용해서 데이터 비용이 더 큰지 비교하면 됩니다.
'프로그래밍 언어 > NODE JS' 카테고리의 다른 글
| 다른 서비스에서 호출하기 (0) | 2025.11.28 |
|---|---|
| JWT 토큰으로 인증하기 (0) | 2025.11.25 |
| Nodebird 서비스와 데이터베이스를 공유하는 프로젝트 구조 갖추기(2) (0) | 2025.11.16 |
| Nodebird 서비스와 데이터베이스를 공유하는 프로젝트 구조 갖추기(1) (0) | 2025.11.13 |
| API 서버 이해하기 (0) | 2025.11.10 |