부트캠프

첫 번째 팀프로젝트 회고 - JWT 담당

달팽이포뇨 2023. 8. 11. 02:03
  • 기간: 2023.08.07~08.11 (근데 사실상 3.5일정도 진행했다.)
  • 개발환경: Java, Spring, AWS RDS
  • 게시판 만들기
  • 총 5인 백엔드 개발 협업 프로젝트 - 나의 역할: JWT 부분 담당
  • 목표: JWT 토큰을 이용하여 유저 관련 기능, 로그인 기능을 개발할 때, Spring Security를 이용하는 것보다 쉬운 방법을 찾아보자!

 

  • Argument Resolver를 이용해보자!HandlerMethodArgumentResolver를 implements한 MemberArgumentResolver를 만들었습니다.

MemberArgumentResolver.java
supportsParameter 메소드 설명
JWT 토큰을 decode하여 AuthInfo 객체에 바인딩

  • supportsParameter와 resolveArgument 두 가지 메소드를 오버라이드하여 사용하였습니다.
  • MemberArgumentResolver가 JWT 토큰의 내용을 AuthInfo 파라미터에 넣도록 작동하도록 설계하였습니다. 어노테이션을 활용하여 @TokenEmailAndId이 붙어있는 AuthInfo에서만 resolver가 작동하도록 하였습니다.
  • WebMvcConfigurer를 implements한 WebConfig 클래스를 정의하고 addArgumentResolvers 메소드를 오버라이드하여 resolver를 등록하였습니다.

즉, 컨트롤러가 동작하기 전에 MemberArgumentResolver가 Request의 Header의 JWT 토큰을 읽어서 AuthInfo 파라미터에 넣어주고 동작하도록 구현하였습니다.

 

알게된 점

JWT 토큰을 처음으로 사용해보았고, Argument Resolver에 대해서도 처음 알게 되었습니다. 원래 핸들러 어댑터에서 핸들러(컨트롤러)를 호출하는 것은 알았는데 그 사이에 Argument Resolver를 넣을 수 잇다는 것을 처음 알았습니다. 어노테이션 이용해서 사용하는 곳 지정도 할 수 있다는 점이 굉장히 신기했습니다. 또한, 그동안 궁금했던 swagger를 제대로 써봤는데 기본적인 API 설명, 파라미터 설명부터 Header 기능 추가하는 방법까지 알게 되었습니다.

 

개선해야할 점

현재 access token만 있고, refresh token은 없는 상태입니다. refresh token까지 구현하면 좋겠지만 제가 JWT 토큰 사용하는 것이 처음이었기 때문에 JWT 토큰 사용법에 대해서 확실하게 파악하고, Argument Resolver 또한 확실하게 파악하는 것이 더 중요하다고 해서 이렇게까지만 구현하였습니다. 나중에 DB 유저 테이블에 refresh token 컬럼 하나 만들어서 refresh token과 access token 함께 사용할 수 있도록 코드를 작성할 생각입니다.

 

느낀 점

아직 Spring boot에 대해서 배울 점이 많다고 다시 한번 느꼈습니다. 그리고 지금까지 1인 백엔드 개발만 해와서 이번에 백엔드 개발 협업을 처음 해봤는데 재밌었습니다. 처음에 Git 때문에 헤맸었는데, 팀원분들이 너무 친절하게 잘 도와주셔서 너무 감사했습니다. 전반적으로 팀 분위기가 화목해서 너무 좋았고 많이 배웠습니다!! 역시 개발은 협업이라는 것을 다시 한번 느꼈습니다.

 

Github

https://github.com/mkwkw/2C-server/tree/develop-server