Spring/Spring Web MVC
[Spring Web MVC] 응답 정보 다루기
[Spring Web MVC] 응답 정보 다루기
2022.08.17정적 리소스 / 뷰 템플릿 (동적) / HTTP 메세지 응답도 이렇게 세 가지 방법으로 나눌 수 있다. 정적 리소스 /src/main/resources 다음 경로의 /static /public / resources /META-INF/resources 해당 디렉토리에 정적 리소스를 제공한다. src/main/resources/static/basic/adsf.html 파일이 들어있으면 웹 브라우저에서는 basic/asdf.html 을 입력해서 파일을 열어볼 수 있다. 뷰 템플릿 뷰 템플릿을 거쳐 HTML이 생성되고, 뷰가 응답을 만들어 전달한다. (HTML 외에 뷰 템플릿이 만들 수 있는건 다 가능) 보통 WEB-INF 디렉토리에 위치하도록 해서 웹 브라우저에서 직접 접근이 불가능하도록 설정한다. 이 부분은..
[Spring Web MVC] 요청 정보 다루기
[Spring Web MVC] 요청 정보 다루기
2022.08.17@GetMapping("/mapping/{userId}") public String mappingPath(@PathVariable("userId") String id){ log.info("logging... {}", id); return "chk"; } URL 경로에 변수를 넣어 템플릿 형식으로 설정할 수 있고, @PathVariable 애너테이션으로 그 값을 꺼내 메서드에서 사용할 수 있다. (경로 변수) @GetMapping("/mapping/users/{userId}/order/{orderID}") public String mappingPath(@PathVariable("userId") String id, @PathVariable("orderID") String order){ log.info("lo..
[Spring Web MVC] Spring MVC
[Spring Web MVC] Spring MVC
2022.08.16실제 Spring MVC 프레임워크의 구조이다. 지난번에 만든 MVC 프레임워크와 크게 다른 점은 없다. 다르게 사용되는 용어들만 새로 정리하자. FrontController -> DispatcherServlet handlerMappingMap -> HandlerMapping MyHandlerAdapter -> HandlerAdapter ModelView -> ModelAndView viewResolver -> ViewResolver (Interface) MyView -> View (Interface) 여기서 DispatcherServlet이 가장 중요하다. 프론트 컨트롤러 대신 사용하는 용어로, 역시 HttpServlet을 상속받아 서블릿으로 동작한다. WebSerblet 애너테이션을 사용하는 대신 스..
[Spring Web MVC] Adaptor
[Spring Web MVC] Adaptor
2022.08.16서버에서 클라이언트로 데이터를 전송할 때 ModelView 객체를 만들어서 데이터를 전송하기도 하고 Map 자료구조를 사용해 데이터를 전송하는 방식도 경험 해 봤는데.. 특정 부분에는 첫 번째 방식을, 또 어느 부분에는 두 번째 방식을 사용해 데이터를 전송하게 할 수는 없을까? 어댑터 패턴을 사용하면 프론트 컨트롤러가 다양한 방식의 컨트롤러를 처리할 수 있다. 핸들러 : 클라이언트의 요청을 처리하는 객체 (컨트롤러) 클라이언트의 요청의 URL에 따라 매핑된 정보를 핸들러 매핑을 통해 조회한다. 그 후 프론트 컨트롤러는 해당 컨트롤러를 직접 호출하지 않고 핸들러 어댑터를 통해 호출해야 한다. 핸들러 어댑터에게 핸들러를 넘겨주면 핸들러 어댑터는 해당하는 핸들러를 호출해 실행 결과를 받고 프론트 컨트롤러에게 ..
[Spring Web MVC] Model
[Spring Web MVC] Model
2022.08.15컨트롤러 입장에서는 request 객체를 Model로 활용하는 것 외에는 사용하지 않는다. 그러면 Model 객체를 따로 만들면 컨트롤러는 request와 response를 아예 신경쓰지 않게 할 수 있지 않을까? 또, 뷰의 이름에서 중복되는 부분을 프론트 컨트롤러가 단순화하도록 하면 뷰의 이름도 간단하게 작성할 수 있지 않을까? 귀찮은 일은 프론트 컨트롤러로 등록된 서블릿에게 맡기고, 핵심 로직은 컨트롤러가 맡도록 하자. @Getter @Setter public class ModelView { private String viewName; private Map model = new HashMap(); public ModelView(String viewName) { this.viewName = viewNa..
[Spring Web MVC] Front Controller
[Spring Web MVC] Front Controller
2022.08.15프론트 컨트롤러를 도입해 공통되는 요소를 하나로 묶어서 처리할 수 있다. 프론트 컨트롤러 역할을 수행하는 서블릿 하나로 클라이언트의 요청을 받고, 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출한다. 해당 컨트롤러만 서블릿으로 등록해서 사용할 수 있어 편리하다. public interface ControllerV1 { void process(HttpServletRequest request , HttpServletResponse response) throws IOException, ServletException; } 서블릿과 비슷한 형태의 컨트롤러 인터페이스를 도입하자. 각 컨트롤러들은 해당 인터페이스를 구현하고, 프론트 컨트롤러는 인터페이스를 호출해 구현에 상관 없이 로직의 일관성을 가진다. @We..
[Spring Web MVC] 서블릿과 HTTP 통신
[Spring Web MVC] 서블릿과 HTTP 통신
2022.08.14서블릿을 직접 사용해보자. @WebServlet(name = "helloServlet", urlPatterns = "/hello") public class HelloServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("start!"); } } @ServletComponentScan 애너테이션으로 스프링이 서블릿을 등록해서 사용할 수 있도록 하자. @WebServlet 애너테이션은 서블릿 이름과 URL 매핑을 지정한다. 스프링이 내장 톰캣 서버를 실행한다...
[Spring Web MVC] 웹 애플리케이션
[Spring Web MVC] 웹 애플리케이션
2022.08.13웹은 HTTP 프로토콜을 기반으로 통신한다. Web Server : 정적 리소스와 기타 부가기능을 제공한다. (APACHE, nginx) Web Application Server : 웹 서버 기능 + 동적 리소스를 제공한다. (Tomcat) / 애플리케이션 코드를 실행하는데 특화됨. 스프링 MVC는 WAS 에서 동작한다. 웹 시스템은 WEB / WAS / DB로 구성된다. 웹 서버는 정적 리소스를 처리하고, 중요한 애플리케이션 로직은 웹 애플리케이션 서버가 담당한다. WAS 하나로 두 작업을 함께 처리할 수도 있지만, 서버의 안정성과 효율적인 리소스 관리를 위해 이렇게 설계하는 편이 합리적이다. 이렇게 설계 시 웹 애플리케이션 서버가 죽더라도 웹 서버가 살아서 클라이언트에게 오류 메세지를 보내줄 수 있다..