🌳 고급 보안
JWT 토큰은 왜 안전한가요?
쉽게 이해하기
여권을 생각해보세요. 여권에는 당신의 정보가 적혀 있고, 정부의 위조 방지 홀로그램이 붙어 있죠. 공항에서는 여권만 보고 신원을 확인해요. 매번 본국 정부에 전화해서 확인하지 않아도 되는 거예요. JWT도 비슷해요. 토큰 자체에 정보와 서명이 들어 있어서 서버가 매번 DB를 확인할 필요가 없어요.
핵심 정리
JWT는 서명으로 위변조를 막고, stateless 방식으로 서버 부담을 줄이는 인증 토큰이에요
자세히 알아보기
JWT(JSON Web Token)는 웹 개발에서 가장 많이 쓰이는 인증 방식이에요. 왜 안전한지, 어떻게 동작하는지 이해하면 실무에서 자신 있게 쓸 수 있어요.
구조는 세 부분으로 나뉘어요. Header(알고리즘 정보), Payload(사용자 정보), Signature(서명)예요. 예를 들어 `eyJhbGc...`처럼 점(.)으로 구분된 긴 문자열이죠. 핵심은 Signature예요. 서버만 아는 비밀 키로 Header와 Payload를 암호화한 거라, 누가 토큰을 조작하면 서명이 안 맞아서 바로 걸려요.
Stateless가 최대 장점이에요. 세션 방식은 서버가 '누가 로그인했는지' 메모리나 Redis에 저장해야 해요. 서버가 여러 대면 세션 동기화도 필요하죠. 하지만 JWT는 토큰 자체에 모든 정보가 있어서 서버가 저장할 필요가 없어요. 수평 확장이 쉬운 거죠.
하지만 단점도 있어요. 첫째, 토큰이 탈취되면 만료 전까지 막을 방법이 없어요. 그래서 유효 기간을 짧게(15분~1시간) 설정하고, Refresh Token으로 갱신하는 전략을 써요. 둘째, Payload는 암호화가 아니라 Base64 인코딩이라 누구나 디코딩해서 볼 수 있어요. 민감한 정보(비밀번호, 카드번호)는 절대 넣으면 안 돼요.
실무 팁: HTTPS 필수예요. HTTP에서는 토큰이 평문으로 날아가서 가로채기 당할 수 있거든요. HttpOnly 쿠키에 저장하면 XSS 공격도 방어할 수 있어요. JWT는 만능이 아니라 상황에 맞게 써야 해요.