본문 바로가기

Spring/MVC

(41)
[Spring MVC] HTTP Response 이번 장에서는 스프링 MVC의 HTTP Reponse에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 내용은 강의나 공식문서에서 확인한다. 모든 코드는 깃허브(링크)에 올려두었다. 정적 리소스 스프링 부트는 클래스패스의 다음 디렉토리에 있는 정적 리소스를 반환한다. /static /public /resources /META-INF/resources src/main/resources는 리소스를 보관하는 곳이며 클래스패스의 시작 경로다. src/main/resources/static 디렉토리에 리소스를 넣으면 스프링 부트가 정적 리소스로 서비스를 제공한다. 뷰 템플릿 우리의 서비스는 뷰 템플릿을 사용하여 HTML 파일을 생성하여 클라이언트에게 전달한다. 스프링 부트는 ..
[Spring MVC] HTTP Request 이번 장에서는 스프링 MVC의 HTTP Request의 기본적인 사용법에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 내용은 강의나 공식문서에서 확인한다. 모든 코드는 깃허브(링크)에 올려두었다. 헤더 조회 아래와 같은 방법으로 @RequestHeader 애노테이션을 사용하여 헤더의 정보를 조회할 수 있다. @Slf4j @RestController @RequestMapping(value = "/basic-request") public class BasicRequestController { @GetMapping(value = "/header") public String headers( HttpServletRequest request, HttpServletRespon..
[Spring MVC] HTTP Request Mapping 이번 장에서는 스프링 MVC의 HTTP Request를 매핑하는 방법에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 내용은 강의나 공식문서에서 확인한다. 모든 코드는 깃허브(링크)에 올려두었다. Request Mapping(요청 매핑) @Slf4j @RestController public class MappingController { @RequestMapping(value = {"/basic", "/basics" }) public String basic() { log.info("basic"); return "OK"; } } @RestController이 사용되면 반환된 문자열로 View를 찾는 것이 아니라 HTTP 메시지 바디에 문자열을 바로 입력한다. @Cont..
[Spring MVC] @RequestMapping 이번 장에서는 스프링 MVC 핸들러(링크)에 이어 스프링 MVC의 @RequestMapping에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 내용은 강의나 공식문서에서 확인한다. 모든 코드는 깃허브(링크)에 올려두었다. @RequestMapping @RequestMapping을 사용하면 핸들러(컨트롤러)로 등록된다. 이렇게 등록된 핸들러는 RequestMappingHandlerMapping과 RequestMappingHandlerAdapter를 통해서 처리된다. 현재 대부분의 실무에서는 @RequestMapping을 사용하여 개발을 진행하는 추세이다. 이번 장에서는 기존의 코드를 @RequestMapping을 사용하여 리팩토링을 진행하고 코드가 어디까지 간결해지는..
[Spring MVC] Handler 이번 장에서는 스프링 MVC 구조(링크)에 이어 스프링 MVC의 핸들러에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 내용은 강의나 공식문서에서 확인한다. 모든 코드는 깃허브(링크)에 올려두었다. 스프링 MVC의 동작을 이해하기 위해 이전 장에서 그렸던 그림을 다시 한 번 살펴본다. Handler 우리가 MVC 프레임워크를 만들면서 최초 버전에서는 유연성이나 확장성이 떨어졌던 것과 유사하게 스프링 MVC 또한 초반에는 딱딱한 구조를 가지고 있었다. 아래는 스프링 초창기의 Controller 인터페이스다. @FunctionalInterface public interface Controller { /** * Process the request and return a ..
[Spring MVC] Structure 지금까지 우리는 MVC 프레임워크를 만들어보았다. 이번 장부터는 우리가 만든 MVC 프레임워크와 스프링 MVC의 차이를 알아보면서 스프링 MVC의 구조를 학습해본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 내용은 강의나 공식문서에서 확인한다. 모든 코드는 깃허브(링크)에 올려두었다. 우리의 MVC 프레임워크 vs 스프링 MVC 지금까지 우리가 만든 MVC 프레임워크는 아래와 같은 구조를 가지고 있다. 스프링 MVC의 구조는 우리의 MVC 프레임워크와 거의 동일한 구조를 가지고 있으며 명칭만 다르다. 구조간의 차이는 아래와 같다. FrontController -> DispatcherServlet handlerMappingMap -> HandlerMapping(인터페이스) MyH..
[MVC] Front Controller Version5 이번 장부터 프론트 컨트롤러 Version4(링크)에 이어 MVC 프레임워크를 만들어본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 내용은 강의나 공식문서에서 확인한다. 모든 코드는 깃허브(링크)에 올려두었다. 이전 장에서는 컨트롤러가 ViewModel 객체를 생성하는 것이 아니라 단순히 ViewName을 반환하도록 수정해서 컨트롤러에게서 ViewModel을 생성하는 책임을 제거하였다. 하지만 기존 Version3 방식처럼 ModelView를 반환하는 컨트롤러를 사용하고 싶다면 현재 구조에서는 MyControllerV3, MyControllerV4가 완전히 다른 인터페이스이기 때문에 불가능하다. 서로 호환되지 않는 컨트롤러들 간에 호환을 맞추기 위해 중간에 어댑터를 두는 어댑터..
[MVC] Front Controller Version4 이번 장부터 프론트 컨트롤러 Version3(링크)에 이어 MVC 프레임워크를 만들어본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 내용은 강의나 공식문서에서 확인한다. 모든 코드는 깃허브(링크)에 올려두었다. 이전 장에서는 서블릿의 의존성을 제거하기 위하여 HttpServletRequest가 아닌 자바의 Map으로 데이터를 전달하였다. 하지만 아직 매번 ModelView 객체를 생성하고 반환해야하는 번거로운 부분이 있다. 이번 장에서는 컨트롤러가 ModelView를 생성하는 것이 아니라 View의 이름만 반환하도록 수정해본다. 전체적인 구조를 확인해보면 이전 장에서 다루었던 Version3와 동일하고 컨트롤러가 ModelView 객체가 아닌 ViewName을 반환하도록 변경되..