Spring Security + JWT 에서 로그인 로직 위치 고민

Gunjoo Ahn·2022년 8월 10일
0
post-thumbnail

Spring Security + JWT

Spring security와 JWT로 로그인 서비스를 처음 개발을 하려고 여러 예제들을 찾아봤다. 꽤 많은 예제들이 로그인 성공 후 JWT 발급 로직을 contoller-service 레이어에서 처리하는 것을 보았다.

별 근거없이 서블릿에 들어가기 전인 filter에서 모든 로그인 관련 로직을 작성하려고 했었는데 생각보다 로그인 로직을 controller-service 레이어에서 많이 다루고 있었다. 그래서 filter에서 로직을 구현할지, controller-service에서 로직을 구현할지, 무엇이 더 나은 방법이지? 고민하게 되었다.

로그인 로직을 어디서? Filter VS Service

별 근거없이 filter에서 로그인 로직을 전부 구현하려고 한 이유가 무엇일까?

Spring security filter에서 로그인 로직에 대한 response를 만들어 보내주고 있었기 때문이다

그렇다, 큰 고민이 없었던 이유는 스프링이 저렇게 하니까 당연히 보통 저렇게 하는구나 생각했던 것이다. 하지만 많은 예제들이 테스트를 위해서든 스터디를 위해서든 JWT 로그인 로직을 controller-service 레이어에서 하고 있었다. 물론 아닌 예제들도 많았지만 맡은 프로젝트에서 왜 로그인 로직을 filter에서 구현했는지 근거를 찾고 싶었다. 그래서 아래와 같은 나름의 근거로 filter를 선택했다.

1. 인증에 관련한 모든 도메인 및 로직을 한 곳에서 담당하자. 여기서는 spring security 프레임워크가 담당하고 있고 spring security는 filter 기반의 프레임워크이니 filter에서 모든 로직을 해결하자.
2. 성능적으로 filter에서 전부 해결하는 것이 dispatch servlet을 타고 controller를 타서 로그인 로직를 수행하는 것보다 낫다.

사소한 문제

filter로 작성하고 나니 사소한 문제가 생겼는데, MVC로 테스트가 생각보다 어려웠다는 것이다. 결국 DB를 붙이는 통합테스트와 Spring과는 별개로 정말 filter만 떼와서 unit test를 하였다.

Spring 공식 github에서도 usernamepasswordfilter unit test를 filter만 떼서 테스트하길래 따라서 했다.

profile
Backend Developer

0개의 댓글