본문 바로가기

JAVA/Spring Boot

애플리케이션 설정

반응형

웹 애플리케이션 설정

웹 애플리케이션을 설정하는 방법은 크게 3가지로 분류

  1. 스프링 웹 프레임워크에서 제공하는 확장 인터페이스를 사용하여 필요한 기능을 추가하거나 교체하는 방법
  • WebMvcConfigurer 인터페이스에 제공하는 콜백메서드를 개발자가 설정할 부분만 구현하는 것이다.
  • 애플리케이션을 실행하면 개발자가 구현한 메서드가 실행되고 설정된다.
  1. 스프링 프레임워크에 기본 설정으로 만들어진 스프링 빈을 재설정하는 방법
  • @Primary 사용하여 스프링 빈을 덮어 정의한다.
  1. 스프링 웹 MVC 프레임워크에서 미리 정의한 스프링 빈 이름과 타입으로 사용자가 생성하는 방법
  • 애플리케이션을 실행하면 스프링 프레임워크는 미리 정의된 이름의 스프링 빈이 있는지 확인하고 있으면 로딩한다.
  • DispatcherServlet은 코드 내부에 확장할 수 있는 스프링 빈 이름을 상수로 정의한다.
  • 웹 애플리케이션이 실행하면 정의된 스프링 빈 이름으로 빈을 획득한다.
  • DispatcherServlet 내부에서 ApplicationContext의 getBean() 메서드를 사용하는 코드를 볼수 있다.
  • 이때 이름과 일치하는 스프링 빈이 있다면 해당 스프링 빈을 애플리케이션 내부에 주입하고 동작한다.

웹 애플리케이션 기본 설정

스프링 부트 프레임워크는 가장 일반적이고 보편화된 방식으로 스프링의 수많은 기능을 자동으로 설정하는 기능을 제공한다.
따라서 자동 설정된 스프링 웹 MVC의 기능을 바로 사용할 수 있다.
그러나 스프링 웹 MVC 프레임워크를 사용하여 애플리케이션을 직접 설정하면 설정한 기능만 사용할 수 있으며 설정하지 않는 기능들을 사용할 수 없다.
개발자가 대신 설정하는 기능을 제공하는 프레임워크가 스프링 부트 프레임워크이다.

스프링 웹 MVC 프레임워크를 직접설정하는 방법

  • 의존성 설정파일에 spring-webmvc 의존성을 추가
  • @EnableWebMvc 자바 설정 클래스에 선언
    애플리케이션을 실행하면 @EnableWebMvc 애너테이션을 포함된 설정 클래스들이 필요한 기본 설정을 로딩하고 애플리케이션을 실행한다.

스프링 부트 프레임워크

  • 의존설정에 spring-boot-starter-web 의존성 추가 (@EnableWebMvc를 명시적으로 선언하지 않아도 된다.)
  • 스프링부트에서 제공하는 자동 설정 기능들은 필요한 의존성 라이브러리만 있으면 동작하는 구조를 갖고 있다.
  • spring-boot-starter-web 의존성을 추가하면 웹 애플리케이션을 자동 설정한다.

웹 애플리케이션 설정 매커니즘

@EnableWebMvc 과 DelegatingWebMvcConfiguration 클래스

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import(DelegatingWebMvcConfiguration.class)
public @interface EnableWebMvc {


}

public class DelegatingWebMvcConfiguration extends WebMvcConfiguratioinSupport {
    private final WebMvcConfigurerComposite configurers = new WebMvcConfigurerComposite();

    public DelegatingWebMvcConfiguration() {
    }
}
  1. @Import를 사용하여 DelegatingWebMvcConfiguration 클래스를 임포트한다.
  • 그래서 @EnableWebMvc 애너테이션이 선언된 자바 설정 클래스가 로딩될때 DelegatingWebMvcConfiguration 클래스도 같이 로딩된다.
  1. DelegatingWebMvcConfiguration 클래스는 WebMvcConfiguratioinSupport를 상속한다.
  • 클래스 내부 변수로 WebMvcConfigurerComposite 타입의 configurers를 포함한다.
  • WebMvcConfiguratioinSupport 클래스는 스프링 웹 애플리케이션의 기본 기능을 설정하는 역할을 한다.

예)
DispatcherServlet이 사용자 요청을 컨트롤러 클래스의 핸들러 메서드를 매핑하는 RequestMappingHandlerMapping을 설정한다.
또한 적절한 핸들러 메서드를 찾으면 사용자 요청을 전달하는 RequestMappingHandlerAdapter 객체를 생성하고 설정한다.
그리고 @RequestBody, @ResponseBody 애너테이션이 선언된 객체를 변경하는 HttpMessageConverter객체들도 설정한다.
이외에도 뷰나 예외를 처리하는 HandlerExceptionResolver를 설정ㅇ하는 등 DispatcherServlet과 같이 동작하는 여러 컴포넌트를 생성하여 기본값으로 설정한다.

  • DelegatingWebMvcConfiguration의 내부 속성인 WebMvcConfigurerComposite은 List<WebMvcConfigurer>를 감싼 합성 클래스다.
  • 내부에 WebMvcConfigurer 리스트를 포함한 래핑 클래스다.
  • 내부의 WebMvcConfigurer를 호출할 수 있는 메서드도 제공한다.

예)
WebMvcConfigurerComposite 클래스의 addFormatter() 메서드는 List의 엘리먼트인 WebMvcConfigurer의 addFormatter() 메서드를 반복하여 호출한다.
DelegatingWebMvcConfiguration은 프레임워크를 설정할 때 WebMvcConfigurerComposite의 메서드를 호출하면서 WebMvcConfigurer의 값들을 참조하여 설정한다.
이 과정에서 스프링 프레임워크는 WebMvcConfigurer 인터페이스를 사용하여 개발자가 프레임워크 설정 과정에 개입할 수 있는 방법을 제공한다.
WebMvcConfigurer 인터페이스를 구현한 구현 클래스를 스프링 빈으로 등록하면 스프링 프레임워크는 이를 WebMvcConfigurerComposite에 포함시킨다.
애플리케이션이 실행되면서 프레임워크 설정과정을 거치고, 사용자 의도대로 설정된 WebMvcConfigurer 구현체의 값을 사용하게 된다.
사용자가 구현한 메서드를 애플리케이션이 다시 호출하는 구조라서 WebMvcConfigurer의 메서드를 콜백 메서드라고 한다.
또한 개발자는 모든 메서드를 구현할 필요 없이 필요한 메서드만 구현하면 된다.

출처 - 스프링 부트로 개발하는 MSA 컴포넌트
저자 - 김병부

반응형

'JAVA > Spring Boot' 카테고리의 다른 글

스프링 부트 기본설정 및 기본 테스트  (0) 2021.06.04
Swagger-UI url 변경  (0) 2021.05.31
스프링 부트 기본-#2  (0) 2020.10.15
스프링 부트 기본-#1  (0) 2020.10.15
Spring MyBatis사용 및 설정  (1) 2020.10.13