Spring security의 test 오류 관련 문제 해결

jihunnit·2022년 9월 29일
0

프로젝트를 진행하면서 테스트 코드를 작성하는 것이
매우 중요하다는 것은 잘 알고 있었지만

역시 현실에서는 프로젝트의 일정을 조정하다보면
테스트하기도 전에 코드를 폭풍처럼 작성해서
일단 굴러가는 코드를 완성해야 할 때가 있다..ㅠ

이번에도 TDD는 커녕 개발을 하며 중간부터는
"일단 완성시키고 꼭 테스트 코드 다 다시 작성해서 확인해야지"
라는 발칙한 생각과 함께 개발을 쭈욱 해왔고

어쩌다보니 시간은 흐르고 안정기에 다다랐다.
이제 드디어 안정기구나. 테스트 코드를 작성해볼까? 했는데
갑자기 문제가 발생했다.
ThrowableProxy라는 원인모를 에러가 잔뜩 나왔다.


정말 당황스럽게 이런 오류가 계속, 심지어 모든 테스트에서 발생했다.
이게 대체 무슨 일??

심지어 중간에 테스트 코드 작성을 멈췄던 때도 있었기에
이 오류가 어디서 발생한건지에 대해서도
전혀 감을 못 잡고 있었다.

너무 충격적이었다ㅠㅠ
그렇게 무조건, 아무리 급해도, 테스트 코드를 작성하자는
다짐을 마음속으로 하고

오류의 원인을 찾아나서기 시작했다.

그리고 시간이 좀 지나서 겨우 찾았다.

원인은 Spring Security에 있었다.

spring security는 사실 매우 어렵고 복잡한데
심지어는 22년에 업데이트가 일어나며
다양한 부분이 바뀌고 deprecated 되는 등의 일이 있어서
(대표적으로 WebSecurityConfigurerAdapter가 deprecated 되었다.)

나같은 초보 개발자는 정보 찾기도 어렵고
하면서도 이게 맞나..? 하며 반신반의 했었다.
그럼에도 어찌저찌 코드를 작성해서 잘 완성했다고 생각했는데,
그리고 실제로 배포했을 시 정상적으로 동작함을 확인했으나,
나의 내부 테스트를 망치고 있었다.

원인은 다음과 같았다.
위에서도 말했듯이, WebSecurityConfigurerAdapter가
deprecated 되고 bean 등록 방식으로 바뀌면서
생긴 혼동으로 인해
마구잡이로 코드를 작성하다가

굳이 할 필요 없는 AdaptManager의 bean 등록으로 인해
코드 전체에 문제가 발생한 것이었다.

@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
    return authenticationConfiguration.getAuthenticationManager();
}

요거 때문이었다.

솔직히 아직 공부가 정확하진 않지만,
이 글을 참조해서 ,위의 코드를 이렇게 바꿔주었다.

//    @Bean
//    public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
//        return authenticationConfiguration.getAuthenticationManager();
}
@Bean
public DaoAuthenticationProvider myDaoAuthenticationProvider(){
    DaoAuthenticationProvider dap = new DaoAuthenticationProvider();
    dap.setUserDetailsService(memberDetailsService());
        return dap;
    }
@Bean
public ProviderManager providerManager(){
    return new ProviderManager(myDaoAuthenticationProvider());
    }

이렇게 providerManager를 내뱉는 방식으로 바꿨다.
(나는 로컬로그인 없이 OAuth2를 이용했기에, 비밀번호 없어요)

이렇게 하니 테스트가 정상적으로 작동하였다.

그야말로 이게 왜 돼? 지만
일단 확인한 결과 security를 이용하는
회원가입과 로그인쪽도 크게 문제는 없다.

성공..이겠지??

profile
인간은 노력하는 한 방황한다

0개의 댓글