1. 개요

이것은 Java 기반 구성과 XML 구성을 사용하여 Spring MVC 프로젝트를 설정하는 방법을 보여주는 간단한 Spring MVC 사용방법(예제) 입니다.

Spring MVC 프로젝트에 대한 Maven 의존성은 Spring MVC 의존성 문서 에 자세히 설명되어 있습니다.

2. 스프링 MVC란?

이름에서 알 수 있듯이 Model-View-Controller 또는 MVC 패턴을 다루는 Spring 프레임워크의 모듈입니다. MVC 패턴의 모든 장점과 Spring의 편리함을 결합합니다.

Spring 은 DispatcherServlet 을 사용하여 전면 컨트롤러 패턴 으로 MVC를 구현 합니다.

간단히 말해서 DispatcherServlet 은 요청을 의도한 목적지로 라우팅하는 주 컨트롤러 역할을 합니다. 모델은 애플리케이션의 데이터일 뿐이며 뷰는 다양한 템플릿 엔진 으로 표현됩니다 .

잠시 후 예제에서 JSP를 살펴보겠습니다.

3. Java 구성을 사용하는 Spring MVC

Java 구성 클래스를 통해 Spring MVC 지원을 활성화하려면 @EnableWebMvc 어노테이션 을 추가하기 만 하면 됩니다 .

@EnableWebMvc
@Configuration
public class WebConfig {

    /// ...
}

이렇게 하면 컨트롤러 및 매핑 등록, 형식 변환기, 유효성 검사 지원, 메시지 변환기 및 예외 처리와 같은 MVC 프로젝트에 필요한 기본 지원이 설정됩니다.

이 구성을 사용자 지정하려면 WebMvcConfigurer 인터페이스 를 구현해야 합니다 .

@EnableWebMvc
@Configuration
public class WebConfig implements WebMvcConfigurer {

   @Override
   public void addViewControllers(ViewControllerRegistry registry) {
      registry.addViewController("/").setViewName("index");
   }

   @Bean
   public ViewResolver viewResolver() {
      InternalResourceViewResolver bean = new InternalResourceViewResolver();

      bean.setViewClass(JstlView.class);
      bean.setPrefix("/WEB-INF/view/");
      bean.setSuffix(".jsp");

      return bean;
   }
}

이 예제에서는 /WEB-INF/view 디렉토리 에서 .jsp 뷰를 반환할 ViewResolver 빈을 등록했습니다.

여기서 매우 중요한 것은 ViewControllerRegistry  를 사용하여 URL과 뷰 이름 사이에 직접 매핑을 생성하는 뷰 컨트롤러를 등록할 수 있다는 것 입니다. 이렇게 하면 둘 사이에 컨트롤러가 필요하지 않습니다.

컨트롤러 클래스도 정의하고 스캔 하려면 컨트롤러가 포함된 패키지에 @ComponentScan 어노테이션을 추가할 수 있습니다.

@EnableWebMvc
@Configuration
@ComponentScan(basePackages = { "com.baeldung.web.controller" })
public class WebConfig implements WebMvcConfigurer {
    // ...
}

이 구성을 로드하는 애플리케이션을 부트스트랩하려면 초기화 클래스도 필요합니다.

public class MainWebAppInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(final ServletContext sc) throws ServletException {

        AnnotationConfigWebApplicationContext root = 
          new AnnotationConfigWebApplicationContext();
        
        root.scan("com.baeldung");
        sc.addListener(new ContextLoaderListener(root));

        ServletRegistration.Dynamic appServlet = 
          sc.addServlet("mvc", new DispatcherServlet(new GenericWebApplicationContext()));
        appServlet.setLoadOnStartup(1);
        appServlet.addMapping("/");
    }
}

Spring 5 이전 버전 의 경우 인터페이스 대신 WebMvcConfigurerAdapter 클래스를 사용해야 합니다.

4. XML 구성을 사용하는 Spring MVC

위의 Java 구성 대신 순수한 XML 구성을 사용할 수도 있습니다.

<context:component-scan base-package="com.baeldung.web.controller" />
<mvc:annotation-driven />    

<bean id="viewResolver" 
      class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/view/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <mvc:view-controller path="/" view-name="index" />

</beans>

순수한 XML 구성을 사용하려면 애플리케이션을 부트스트랩하기 위해 web.xml 파일도 추가해야 합니다. 이 접근 방식에 대한 자세한 내용은 이전 기사 를 확인하십시오 .

5. 컨트롤러와 뷰

기본 컨트롤러의 예를 살펴보겠습니다.

@Controller
public class SampleController {
    @GetMapping("/sample")
    public String showForm() {
        return "sample";
    }

}

해당 JSP 리소스는 sample.jsp 파일입니다.

<html>
   <head></head>

   <body>
      <h1>This is the body of the sample view</h1>	
   </body>
</html>

JSP 기반 뷰 파일은 프로젝트의 / WEB-INF 폴더 아래에 위치하므로 직접적인 URL 액세스가 아닌 Spring 인프라에서만 액세스할 수 있습니다.

6. 부트가 있는 스프링 MVC

Spring Boot는 Spring 플랫폼에 추가되어 독립 실행형 프로덕션 등급 애플리케이션을 시작하고 생성하기가 매우 쉽습니다. Boot 는 Spring을 대체하기 위한 것이 아니라 더 빠르고 쉽게 작업할 수 있도록 하기 위한 것입니다.

6.1. 스프링 부트 스타터

새 프레임워크는 특정 기능에 필요한 모든 기술을 가져올 수 있는 의존성 설명자인 편리한 스타터 의존성을 제공합니다 .

이들은 더 이상 각 의존성에 대한 버전을 지정할 필요가 없고 대신 스타터가 의존성을 관리할 수 있다는 이점이 있습니다.

시작하는 가장 빠른 방법은 spring-boot-starter-parent pom.xml 을 추가하는 것입니다 .

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.2</version>
</parent>

이것은 의존성 관리를 처리합니다.

6.2. 스프링 부트 진입점

Spring Boot 를 사용하여 빌드된 각 애플리케이션 은 기본 진입점을 정의하기만 하면 됩니다.

이것은 일반적으로 @SpringBootApplication 어노테이션이 달린 기본 메서드 가 있는 Java 클래스입니다 .

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

이 어노테이션은 다음과 같은 다른 어노테이션을 추가합니다.

  • @Configuration 은 클래스를 빈 정의의 소스로 표시합니다.
  • @EnableAutoConfiguration 은 프레임워크에 클래스 경로의 의존성을 기반으로 빈을 자동으로 추가하도록 지시합니다.
  • @ComponentScan 은 애플리케이션 클래스 이하 와 동일한 패키지에서 다른 구성 및 빈을 스캔합니다 .

Spring Boot를 사용하면 섹션 3에 정의된 ViewResolver를 사용하지 않고 Thymeleaf 또는 JSP를 사용하여 프런트 엔드를 설정할 수 있습니다. pom.xml에 spring-boot-starter-thymeleaf 의존성을 추가하면 Thymeleaf가 활성화되고 추가 구성이 필요하지 않습니다.

Boot 앱의 소스 코드는 언제나처럼 GitHub 에서 사용할 수 있습니다 .

마지막으로 Spring Boot를 시작하려는 경우 여기에서 참조 소개를 살펴보십시오 .

7. 결론

이 기사에서는 Java 구성을 사용하여 간단하고 기능적인 Spring MVC 프로젝트를 구성했습니다.

이 Spring MVC 사용방법(예제)의 구현은 GitHub 프로젝트 에서 찾을 수 있습니다 .

프로젝트가 로컬에서 실행되면 http://localhost:8080/spring-mvc-basics/sample 에서 sample.jsp  에 액세스할 수 있습니다 .

Generic footer banner