Note-Taking / / 2024. 10. 15. 16:23

Spring MVC 구성 요소와 설정 방법에 대한 정리

1. Enable MVC Configuration

 

@EnableWebMvc 애노테이션은 Spring MVC 설정을 자동으로 활성화하는 역할을 해. 이 애노테이션을 클래스에 붙이면, Spring은 기본적인 MVC 설정을 제공해주고, 이 설정을 기반으로 추가적인 설정을 할 수 있게 돼. @EnableWebMvcWebMvcConfigurer를 사용하여 커스터마이징할 수 있는 기능을 제공해.

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    // 커스터마이징할 설정 추가 가능
}

 

2. MVC Config API

 

Spring MVC에서 제공하는 다양한 설정들을 WebMvcConfigurer 인터페이스를 통해 커스터마이징할 수 있어. 여기에는 인터셉터, 리소스 핸들러, 뷰 리졸버 등을 설정하는 메서드들이 포함돼 있어.

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

 

3. Type Conversion (타입 변환)

 

Spring MVC는 기본적으로 클라이언트가 보낸 문자열 요청 파라미터를 Java 객체로 타입 변환해 줘. **Converter**와 Formatter 인터페이스를 사용하여 커스텀 타입 변환기를 만들 수 있어.

 

Converter: 하나의 타입에서 다른 타입으로 변환하는 기능.

Formatter: 객체를 문자열로 포맷하거나, 문자열을 객체로 변환할 때 사용.

public class StringToDateConverter implements Converter<String, Date> {
    @Override
    public Date convert(String source) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        return format.parse(source);
    }
}

 

4. Validation (검증)

 

Spring MVC에서 데이터 유효성 검사@Valid 또는 @Validated 애노테이션을 사용해서 수행돼. 이를 통해 입력된 데이터를 검증하고, 유효성 검증을 실패하면 오류 메시지를 처리할 수 있어.

@PostMapping("/submit")
public String submitForm(@Valid @ModelAttribute User user, BindingResult result) {
    if (result.hasErrors()) {
        return "formPage";
    }
    return "success";
}

 

5. Interceptors (인터셉터)

 

인터셉터는 요청 전후추가 작업을 할 수 있는 컴포넌트야. HandlerInterceptor 인터페이스를 구현하여, preHandle(), postHandle(), afterCompletion() 메서드를 통해 요청 전, 후, 완료 후에 각각 작업을 처리할 수 있어.

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        // 요청 전에 실행
        return true;  // 요청 계속 진행
    }
}

 

6. Content Types (콘텐츠 유형)

 

Spring MVC에서는 클라이언트와 서버 간의 **콘텐츠 유형(Content-Type)**을 관리할 수 있어. 서버가 반환할 때 JSON, XML, HTML 등의 콘텐츠 유형을 명시할 수 있어.

@GetMapping(value = "/user", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<User> getUser() {
    return new ResponseEntity<>(new User("John", "Doe"), HttpStatus.OK);
}

 

7. Message Converters (메시지 컨버터)

 

**HttpMessageConverter**는 Spring MVC에서 요청과 응답의 바디 데이터를 직렬화/역직렬화하는 역할을 해. 주로 JSON, XML 등을 변환할 때 사용해. Spring은 기본적으로 여러 메시지 컨버터를 제공하고 있으며, Jackson 라이브러리를 통해 JSON 데이터를 처리하는 **MappingJackson2HttpMessageConverter**가 대표적이야.

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    converters.add(new MappingJackson2HttpMessageConverter());
}

 

8. View Controllers (뷰 컨트롤러)

 

View Controller비즈니스 로직 없이 특정 경로에 대해 뷰만 반환하는 간단한 컨트롤러야. 주로 정적 페이지나 간단한 경로에 사용돼.

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

 

9. View Resolvers (뷰 리졸버)

 

View Resolver는 컨트롤러가 반환하는 뷰 이름을 실제 뷰 파일로 변환하는 역할을 해. JSP, Thymeleaf, Freemarker 등 여러 템플릿 엔진을 사용할 수 있으며, InternalResourceViewResolver는 JSP 파일을 처리할 때 주로 사용돼.

@Bean
public InternalResourceViewResolver viewResolver() {
    InternalResourceViewResolver resolver = new InternalResourceViewResolver();
    resolver.setPrefix("/WEB-INF/views/");
    resolver.setSuffix(".jsp");
    return resolver;
}

 

10. Static Resources (정적 리소스)

 

정적 리소스(CSS, JS, 이미지 등)를 제공하기 위해 Spring MVC에서 addResourceHandlers() 메서드를 사용해 리소스 핸들러를 설정할 수 있어.

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/static/**")
            .addResourceLocations("classpath:/static/");
}

 

11. Default Servlet (기본 서블릿)

 

기본 서블릿은 정적 자원(이미지, CSS, JS 등)을 처리하기 위한 서블릿으로, configureDefaultServletHandling() 메서드를 통해 활성화할 수 있어.

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    configurer.enable();
}

 

12. Path Matching (경로 매칭)

 

Spring MVC는 요청 경로와 핸들러를 매핑할 때 경로 패턴을 사용할 수 있어. 이를 통해 와일드카드정규 표현식을 사용할 수 있으며, configurePathMatch()를 통해 설정을 커스터마이징할 수 있어.

@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
    configurer.setUseTrailingSlashMatch(true);  // 경로 끝 슬래시 허용
}

 

13. Advanced Java Config (고급 자바 설정)

 

Spring MVC 설정을 자바 코드로 작성하는 자바 설정 방식은, XML 설정 없이 모든 설정을 자바 코드에서 처리할 수 있게 해. 이를 통해 유연성유지보수성을 높일 수 있어.

@Configuration
@EnableWebMvc
@ComponentScan("com.example.app")
public class WebConfig implements WebMvcConfigurer {
    // MVC 설정 관련 코드 추가
}

 

14. Advanced XML Config (고급 XML 설정)

 

XML 설정 방식은 XML 파일을 통해 Spring MVC 설정을 정의하는 방법이야. 고급 XML 설정을 통해 여러 설정을 xml로 정의할 수 있지만, 최근에는 자바 설정 방식이 더 선호돼.

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc">

    <mvc:annotation-driven/>
    <mvc:view-controller path="/home" view-name="home"/>
    
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

 

요약:

 

Spring MVC의 다양한 구성 요소는 웹 애플리케이션에서 요청 처리, 타입 변환, 유효성 검사, 정적 자원 관리, 인터셉터 사용, 뷰 렌더링 등을 효과적으로 관리하고 확장할 수 있도록 도와줘. 자바 설정 방식과 XML 설정 방식을 통해 유연하게 설정을 관리할 수 있어.

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유