DRF JWT 인증 전략을 이용한 회원가입 로그인 (1 User Custom)
쿠키는 서버의뢰인 간 통신 과정에서, 의뢰인 측이 자신이 로그인한 사용자인지 증명하는 수단입니다. 예를 들어 롯데월드에 돈을 내고 입장하면 종이 팔찌를 채워주죠. 이게 쿠키발급입니다. 그리고 각 놀이기구마다. 직원이 사람들의 손목을 보며 팔찌를 확인합니다. 이건 로그인 체크 과정이구요. 하지만 어떤 사람들은 팔찌를 위조해서 만들수도 있지 않을까요? 아마 롯데워드는 매일 팔찌의 디자인과 색상을 달리하거나 위조를 방지하기 위한 수단을 도입했겠죠. 팔찌를 어떠한 식으로 만드느냐가 롯데월드 맘대로인 것처럼, 쿠키에 무엇을 담아주느냐도 서버에 따라 다릅니다.
쿠키에 어떤 데이터를 담을 것인가에 따라 로그인 구현 방법은 세션 기반 인증과 JWT 토큰 기반 인증으로 분류할 수 있습니다. 이외에도 더 많은 방식의 인증 방법이 있겠지만, 이 두가지 방식이 가장 보편적인 방법인 것 같습니다.
3 로그인 정보 구현
KakaoLoginViewModel의 User를 활용하여 단순하게 프로필 사진과 닉네임 받아올 수 있습니다. 등등 정보들은 상단에 능력은 User 클래스를 활용하시면 됩니다. 작업물의 결과는 위와 같습니다. 글 주제와 연관이 없어서 사용하진 않았지만, 서비스로 적용하기 위해서는 상태관리와 관련하여 경우에 따라 데이터베이스화를 적용해야 합니다. 로그인으로 받아온 결괏값을 ViewModel이 아닌 상태관리툴을 이용하여 어떠한 식으로 관리할지에 대해서는 다음 포스팅에서 다루도록 하겠습니다.
1 동의 항목 설정
좌측 탭에 물품 설정 카카오 로그인 동의 항목 탭에서 설정할 수 있습니다. 로그인 이용시 유저로부터 제공받을 항목을 설정하는 단계입니다.
필수로 동의받아야 할 항목과 선택적으로 동의받아야 할 항목을 각각 설정하며, 동의 목적은 아래 예시와 같이 명료하게 적어주시면 됩니다. 선택적 제공을 했을 경우에는 null 값이 들어올 수 있으므로 별도로 널처리를 할 것도 염두에 두셔야 합니다.
테스트1 결과에 대한 해석
테스트 1의 평균 응답 시간은 74ms로 테스트2의 평균 응답시간 440ms에 비해 5배 이상 빠른 모습을 보입니다. 테스트1은 네트워크 및 디스크 IO 작업 필요로 하지 않기 때문입니다. 테스트1은 JWT 토큰을 생성하고, 서명을 심사숙고하는 작업 필요로합니다. 이 작업들은 공개키 알고리즘 기반으로 동잡합니다. 그러므로 CPU 사용률이 5060로 테스트2에 비해 다소 높은 모습을 보입니다.
chapter 3 결론
테스트 결과, JWT 기반의 로그인이 세션 기반의 로그인보다. 5배 가량 빨랐습니다. 하지만, 두 방식 모두 동시접속자가 1,000명인 상태에서 평균 응답속도 1,000ms를 충족하기 때문에 응답 속도 외에 다른 관점에서 고민을 해보았는데요. 보안성이 유리한 방식은 무엇일지, 개발 속도가 빠른 방식은 무엇일지 고민한 끝에 세션을 선택하였습니다. 만약 쿠키가 제 3자에 의해 탈취된다면 어떠한 식으로 해야될까요? 탈취된 쿠키 속의 인증 수단이 더 이상 사용되지 못하도록 조치를 취해야할 것입니다.
토큰 방식의 경우, 우선 토큰이 발급되면 해당 토큰을 관리하는 것은 클라이언트의 몫입니다. 서버에서 토큰을 만료시킬 방법이 없습니다. 서버에서 어떤 고객의 토큰이 탈취되었다는 사실을 알더라도, 탈취된 토큰이 사용되는 것을 막을 수 없습니다.는 치명적인 문제가 있습니다.
로그인 과정 예시 네이버
Naver 선택 UserDetailsService 일반적인 FormHTML을 이용한 로그인은 유저정보를 가져오는 인터페이스입니다. UserDetails UserDetailsService의 loadUserByUsername 리턴 값으로, 유저정보를 담는 객체입니다. OpenID ConnectOIDC CustomOAuth2UserService와 비슷하게 CustomOidcUserService를 작성해보자 너무 내용이 딱딱하고 진지해서 재미가 없어 걱정이 됩니다.
조금이나마, Spring OAuth2 Client의 개념에 대한 이해와 예제 들을 통하여 돕기 위해 작성한 글입니다. 참고와 출처를 통하여 더 디테일하게 알아 보는 것을 권장하고, 학습 후 서비스에 적용하기를 바란다.
자주 묻는 질문
3 로그인 정보 구현
KakaoLoginViewModel의 User를 활용하여 단순하게 프로필 사진과 닉네임 받아올 수 있습니다 더 알고싶으시면 본문을 클릭해주세요.
1 동의 항목 설정
좌측 탭에 물품 설정 카카오 로그인 동의 항목 탭에서 설정할 수 있습니다 더 알고싶으시면 본문을 클릭해주세요.
1 동의 항목 설정
테스트 1의 평균 응답 시간은 74ms로 테스트2의 평균 응답시간 440ms에 비해 5배 이상 빠른 모습을 보입니다 더 알고싶으시면 본문을 클릭해주세요.
댓글