상황
인증 객체 시 쿼리 발생
원하는 메서드 요청 시 DB 조회
User 조회 시 발생한 쿼리인데 인증 객체를 생성할 때 User DB를 조회하는 것을 알 수 있었다.
해당 상황으로 인증을 할 때 항상 DB를 불필요하게 조회한다는 것을 발견했다.
문제 확인
사용자 정보 로드
해당 코드에서 DB를 통해 사용자 정보를 로드하는 것을 알 수 있다.
인증 객체 생성
DB를 통해 사용자 정보 로드한 메서드 loadUserByUsername()을 통해 인증 객체를 생성해주었다.
따라서 이 상태는 인증 객체 생성 시 필수적으로 DB 조회를 하고 있는 상황이었다.
해결 방법 고안
DB를 조회하지 않고 JWT 토큰에 최소 User의 정보만 담아서 인증하기 위해 JWT에 설정한 Claims에 담아놓은 정보들로 사용자를 load하도록 메서드를 만들었다.
이후 사용자 인증 객체를 생성해주는 곳에서 기존 DB를 조회하는 메서드가 아닌 해당 메서드를 이용해 인증 객체를 만들어줬다.
해결
이후 메서드 요청 시 필요한 해당 메서드에서 조회하는 쿼리만 조회되고 인증 때 쿼리는 조회되지 않았다.
이를 통해 불필요한 DB 조회를 줄여 원하는 메서드 호출 시 시간을 줄여 성능을 조금 더 향상 시킬 수 있었다.