• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

WebConfig 구조질문

23.08.29 17:49 작성 조회수 243

0

아래 코드와 같이 webconfig 에 대한 코드를 치고 봤더니 3번째 메서드 logFilter()는 @Bean을 붙여주어서 이 주석을 해제하면 웹설정이 동작하는건 이해가 가는데 첫번째 두번째 메서드는 WebMvcConfigurer 인터페이스의 메서드들을 오버라이딩해서 구현하고 @bean을 안붙였는데 웹 설정이 어떻게 적용이 되는지 궁금합니다.

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LogInterceptor()).order(1).addPathPatterns("/**").excludePathPatterns("/css/**","*.ico","/error-page/**") ; //오류 페이지 경로 제외



    }

    @Override
    public void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
        resolvers.add(new MyHandlerExceptionResolver());
    }

    //@Bean
    public FilterRegistrationBean logFilter(){
        FilterRegistrationBean<Filter> filterFilterRegistrationBean = new FilterRegistrationBean<>();
        filterFilterRegistrationBean.setFilter(new LogFilter());
        filterFilterRegistrationBean.setOrder(1);
        filterFilterRegistrationBean.addUrlPatterns("/*");
        filterFilterRegistrationBean.setDispatcherTypes(DispatcherType.REQUEST,DispatcherType.ERROR);
        return filterFilterRegistrationBean;
    }

답변 1

답변을 작성해보세요.

0

y2gcoder님의 프로필

y2gcoder

2023.08.30

안녕하세요. 코더님, 공식 서포터즈 y2gcoder입니다.

스프링 부트는 실행시에 많은 설정을 자동으로 적용하는 과정을 먼저 거치게 됩니다. 그 중 웹 MVC에 대한 설정도 있습니다. 여기까지 듣고 눈치채셨을 수도 있지만 스프링 부트도 실행하면서 WebMvcConfigurer를 구현한 어떤 구현체를 이용해서 MVC와 관련한 설정을 만들고, 자동으로 적용합니다.

저희는 WebMvcConfigurer를 구현한 클래스를 만들고 @Configuration을 이용해 빈으로 등록하고 있습니다. 또한 메서드를 override하고 있습니다. 이 설정 클래스는 스프링 부트 실행 시, MVC 관련하여 자동 설정을 만드는 과정에서 참여하게 되어, 저희가 커스텀하게 만든 설정 또한 추가하게 되는 것입니다. resolver.add, addInterceptors() 라는 이름에서 보이듯이 자동 설정을 바꾼다기보단 자동 설정과 더불어 저희가 만든 설정을 추가해주는 개념이기 때문에 저희가 오버라이딩해서 인터셉터나 ExceptionResolver를 임의로 추가해도 별다른 문제가 발생하지 않습니다.

감사합니다.

코더님의 프로필

코더

질문자

2023.08.30

감사합니다 혹시 그럼 오버라이딩해서 구현한 메서드들은 자동으로 웹설정이 적용이 되고 오버라이딩 안한 메서드(위 질문에서 LogFilter())는 @bean으로 수동으로 등록해줘야 웹 설정이 적용된다고 이해하면 될까요?

y2gcoder님의 프로필

y2gcoder

2023.08.30

네 저도 그렇게 이해하고 있습니다!

코더님의 프로필

코더

질문자

2023.08.30

빠른답변 감사합니다!!