1. Enable MVC Configuration
@EnableWebMvc 애노테이션은 Spring MVC 설정을 자동으로 활성화하는 역할을 해. 이 애노테이션을 클래스에 붙이면, Spring은 기본적인 MVC 설정을 제공해주고, 이 설정을 기반으로 추가적인 설정을 할 수 있게 돼. @EnableWebMvc는 WebMvcConfigurer를 사용하여 커스터마이징할 수 있는 기능을 제공해.
@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 설정 방식을 통해 유연하게 설정을 관리할 수 있어.
'Note-Taking' 카테고리의 다른 글
React 정리 (2) | 2024.11.13 |
---|---|
Spring Data JPA 정리 (0) | 2024.10.28 |
C언어, Java에서의 Server, Client 프로그래밍 정리 (0) | 2024.09.27 |
Spring Framework의 주요 메서드와 기능 정리 (6) | 2024.09.24 |
Java 메서드의 주요 개념과 정리 (2) | 2024.09.24 |