240529
오늘의 학습
● 1. 과제 5단계 JWT 인가/인증 구현
JWT ( JSON Web Token )
클라이언트와 서버간의 토큰을 이용하여 사용자의 정보를 Stateful(상태유지) 하게 웹 서비스를 제공할때 사용 하게 된다.
웹 서버는 HTTP 프로토콜을 이용하여 서버와 클라이언트가 통신을 주고 받게 된다.
HTTP 프로토콜은 Stateless(무상태) 프로토콜이다. 이러한 점 때문에 사용을 하게 되는 것이 JWT이다.
( 정리 : 로그인을 유지 시키기 위한 것임 )
1. Stateful (상태 유지 프로토콜 방식)
Stateful은 서버와 클라이언트의 상태를 유지시켜주는 프로토콜 방식이다. 즉, 서버와 클라이언트간의 연결을 지속적으로 시켜주기 때문에 로그인을 하고 페이지를 이동을 하게 되더라도 로그인 즉, 상태가 유지되는 프로토콜 방식이다.
하지만 사용자의 요청이 많을수록 연결을 유지시키기에는 어려움이 있어 HTTP는 Stateless를 이용하게 된다.
2. Stateless (무상태 프로토콜 방식)
Stateless는 서버가 클라이언트의 상태를 보존하지 않는 프로토콜 방식이다. 즉, 서버와 클라이언트 간의 연결을 지속적으로 하지 않고 필요한 데이터만 주고(request) 받고(response) 연결을 끊어버리는 방식인 것이다.
이런식으로 주고 받고 바로 연결을 끊기 때문에 서버는 클라이언트의 정보를 유지시키지 못한다. 유지시킬 필요도 없다.
이러한 방식 덕분에 많은 요청이 와도 무리가 없다는 장점이 있다. 하지만 상태를 유지시키지 못하기 때문에
로그인을 하고 페이지를 넘어가게 되면 상태가 유지되지 못하는 단점이 있다. 이건 JWT가 해결을 해준다.
3. JWT ( JSON Web Token )
JWT를 쓴다고 해서 상태를 유지시키는건 아니다. 앞에서 봤듯 웹 서버는 Stateless(무상태) HTTP 프토로콜 방식이기 때문에 상태를 유지 시키기에는 어려움이 있다. 이러한 웹에서 상태를 유지시키는 것 처럼 사용할 수 있는 것이 JWT이다.
4. JWT 동작
인증 및 인가를 통해서 사이트의 접근 권한을 얻어내기 위해서는 토큰을 서버에서 발급을 받아야 한다.
- 클라이언트는 서버에게 토큰을 로그인 등등의 방법을 통해 요청을 하게 된다.
- 서버는 요청을 받고 서버에서 JWT 라이브러리를 이용하여 토큰을 만들게된다.
- 만든 토큰을 서버에서는 응답을 보내줄 때 응답 데이터로 헤더나 쿠키에 저장을 해서 보내주게 된다.
- 클라이언트는 응답이 돌아온 토큰을 브라우저의 쿠키 저장소, 스토리지 저장소에 보관을 하게 된다.
- 클라이언트는 토큰에 대한 권한이 필요한 api에 접근을 하게 될 때 스토리지나 저장소에 보관을 해둔 토큰을 들고 서버에 api를 요청하게 된다.
- 서버는 요청을 받고 토큰을 검증하고 성공적으로 검증이 완료 돼었으면 요청에 대한 응답을 보내게 된다.
이렇듯 클라이언트가 토큰을 관리하고 서버는 토큰을 발급 및 검증만 하면 되기 때문에 동시 접속자가 많을 때 서버 측
부하를 낮출수 있게 된다는 장점이 있다. 세션 방식은 서버에 사용자의 세션을 저장해두기 때문에 요청이 많이 오면 서버
측의 부하가 커진다.
# 오늘의 회고
오늘은 JWT와 Filter에 대해 깊은 공부를 했고, 그리고 자바의 매우 기본적인 부분 중에 모르는 부분이 나와서 당황한 하루였다. 바로 메서드의 return; 키워드 였다. 보통은 return을 사용할 때 뒤에 반환값을 보내주는데 return; 만 쓴걸 보고 이게 뭐지 싶어서 좀 알아보게 되었다. 단 5분만에 알아내긴 했지만 이런 기본적인걸 모르고 있었다는걸 보고 다시금 기본기를 틈틈히 다져보기로 마음을 먹게 되었다.
'내일배움캠프 Spring 5기' 카테고리의 다른 글
내일배움캠프 32일차 TIL - JDBC & JPA (0) | 2024.05.31 |
---|---|
내일배움캠프 31일차 TIL - 책 리뷰 및 개인 과제 질문 (1) | 2024.05.30 |
내일배움캠프 29일차 TIL - ExceptionHandler (0) | 2024.05.28 |
내일배움캠프 28일차 TIL - Filter (0) | 2024.05.27 |
내일배움캠프 27일차 TIL - JWT (0) | 2024.05.24 |