728x90
1. JWT (JSON Web Token)란?
2. 쿠키 기반 인증 vs JWT
1. JWT (JSON Web Token)란?
JWT는 Header, Payload, Signature로 구성된 토큰 기반 인증 방식입니다. 데이터를 Base64로 인코딩하고, 세 요소를 마침표(.)로 연결하여 하나의 토큰으로 만듭니다.
1 ) JWT 구조
(1) Header: 서명 알고리즘과 토큰 타입 정보를 포함.
- 예: {"alg": "HS256", "typ": "JWT"}
(2) Payload: 사용자 정보와 클레임(예: 만료 시간 exp, 사용자 ID sub) 등을 포함.
- 예: {"sub": "user123", "exp": 1700000000}
(3) Signature: Header + Payload를 서버의 Secret Key로 서명한 값.
- 예: HMACSHA256(Base64UrlEncode(Header) + "." + Base64UrlEncode(Payload), SecretKey)
-> 이 3가지 값들이 BAse64Url로 인코딩 되어 마침표(.)으로 연결함으로써 JWT가 구성
2) JWT 인증 원리
(1) 클라이언트가 서버로부터 JWT를 전달받아 저장.
(2) 클라이언트가 요청 시 JWT를 함께 전송.
(3) 서버는 전달받은 JWT의 Signature를 검증하여 토큰이 조작되지 않았음을 확인.
- 서명 알고리즘, Payload, Secret Key를 이용해 Signature를 생성하고, 전달받은 토큰의 Signature와 비교.
- 토큰 검증 과정에서 DB를 조회하지 않아도 되기 때문에 서버 부하를 줄일 수 있음
2. 쿠키 기반 인증 vs JWT
1) 쿠키 기반 인증

- 브라우저가 로그인을 시도하면 애플리케이션 서버는 DB를 조회해서 회원 유무 확인
- 회원 정보가 있다면 Session table에 어떤 사용자가 로그인했고 session id 라고 하는 임시 비밀번호를 발급
- 이를 서버가 다시 쿠키값으로 브라우저에게 응답
- 이 값은 브라우저에 저장되고 다음에 접속할때마다 서버에 저장됨.
단점
- 추가 조회 필요: Session ID만으로는 사용자의 세부 정보를 알 수 없어 추가적인 DB 조회가 필요.
- 서버 부하: 요청마다 Session Table 확인이 필요.
- 확장성 부족: 새로운 장치로 로그인 시 Session Table에 새로운 데이터가 추가되어 관리 부담 증가.
2) JWT

- 브라우저에서 로그인을 시도하면, 애플리케이션 서버는 데이터베이스를 조회하여 회원 유무를 확인
- 회원 정보가 존재하면, 서버는 JWT를 생성하여 브라우저로 전달
- 클라이언트는 전달받은 JWT를 쿠키나 로컬스토리지와 같은 저장소에 보관
- 클라이언트는 인증이 필요한 서비스 이용 시 저장된 JWT를 포함하여 서버에 요청
- 서버는 전달받은 JWT를 디코딩하여 Header, Payload, Signature 정보를 추출
- 서버는 Secret Key를 사용해 Header와 Payload로 새로운 Signature를 생성하고, 이를 JWT의 Signature와 비교합니다. Signature가 일치하고 JWT가 유효한 경우, 클라이언트의 요청에 필요한 응답을 반환
장점
1. 애플리케이션에 필요한 정보를 payload에 담아둘 수 있음
2. 로그인과정에서 한번만 DB에 접근하고 그 이후의 인증과정에서는 DB에 접근할 필요가 없음
-> 서버의 부담을 완화 할 수 있음
참고자료
https://www.youtube.com/watch?v=36lpDzQzVXs
728x90
반응형
'Backend' 카테고리의 다른 글
[Backend] Access Token & Refresh Token (0) | 2024.12.12 |
---|