Spring Web MVC
DispatcherServlet
g
Spring MVC는 DispatcherServlet이 애플리케이션의 중심에서 요청 처리를 위해 공유되는 알고리즘을 제공하고 실제 동작은 따로 설정 가능한 대리 컴퍼넌트가 하게 되는 front controller 패턴으로 설계되었다.
기본적인 요청 처리 흐름
DispatcherServlet이 클라이언트로부터 요청을 전달받는다.DispatcherServlet이HandlerMapping인터페이스에게 요청 처리에 적합한 Controller를 찾는 작업을 위임한다.HandlerMapping으로부터 받은 controller 정보를 바탕으로DispatcherServlet이HandlerAdapter인터페이스에게 해당 controller 클래스 내의 handler 메서드를 호출하는 작업을 위임한다.HandlerAdapter가 controller 내의 handler를 호출하여 model과View정보를 받아오고 이를 바탕으로DispatcherServlet이 적합한View인터페이스를 찾는 작업을ViewResolver인터페이스에게 위임한다.ViewResolver에게 받은View정보를 바탕으로DispatcherServlet이View에게 응답 데이터 생성(렌더링)을 위임한다.View로부터 받은 응답 데이터를DispatcherServlet이 클라이언트로 전달한다.
References
@SpringBootApplication
Using the @SpringBootApplication Annotation
@RequestMapping
Further Reading
- MIME types (IANA media types) - HTTP | MDN
- HTTP request methods - HTTP | MDN
- HTTP response status codes - HTTP | MDN
HTTP Headers
HttpServletRequest에서 요청 header를 확인할 수 있고,
HttpServletResponse에 응답 header를 설정할 수 있다.- User-Agent
Custom Headers
- HTTP headers and Application Load Balancers, AWS ELB
- Create custom headers in backend services, Google Cloud Load Balancing
REST Clients
URI Links
HttpMessageConverter
Validation
@Valid, @Validated
- 핸들러 메서드에서
@Valid나@Validated를@RequestBody와 같은 매개변수에 써서 인자로 들어오는 객체를 validation할 수 있다. - 메서드 매개변수에
@Positive등 Java Bean Validation API를 사용하려면 클래스나 메서드에@Validated를 작성해야 한다.- 인자로 들어오는 객체 자체를 validation하는 데에는 굳이 클래스, 메서드 단계에
@Validated를 작성할 필요없다.
- 인자로 들어오는 객체 자체를 validation하는 데에는 굳이 클래스, 메서드 단계에
References
Lombok
@Getter, @Setter, @AllArgsConstructor, @NoArgsConstructor, @Data, @ToString
MapStruct
Gradle Configuration
...
plugins {
...
id "com.diffplug.eclipse.apt" version "3.26.0" // Only for Eclipse
}
dependencies {
...
implementation "org.mapstruct:mapstruct:${mapstructVersion}"
annotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}"
// If you are using mapstruct in test code
testAnnotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}"
}
...