스프링의 뷰 리졸버
2022. 1. 24. 12:15
Spring
뷰 리졸버의 동작 방식을 살펴 보자. 먼저 아래와 같이 Controller 인터페이스를 사용한 어댑터로 테스트를 해보자. return new ModelAndView(”new-Form”); 과 같이 사용할 수 있다. @Component("/springmvc/old-controller") public class OldController implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("OldController.handleRequest"); return new Mode..
스프링의 핸들러 매핑과 어댑터
2022. 1. 24. 12:10
Spring
스프링은 어댑터 패턴 기반의 프론트 컨트롤러 패턴으로 컨트롤러를 제공하는 핸들러 매핑과 어댑터를 제공한다. 과거에 사용했던 것들을 알아 보자. Controller 인터페이스 @Controller 아님 package org.springframework.web.servlet.mvc; @FunctionalInterface public interface Controller { /** * Process the request and return a ModelAndView object which the DispatcherServlet * will render. A {@code null} return value is not an error: it indicates that * this object completed r..
스프링 MVC 구조 알아보기
2022. 1. 24. 12:08
Spring
이전 글에서 프론트 컨트롤러 패턴으로 프레임 워크를 구현해봤는데 그 구조는 스프링 MVC와 동일하다. 직접 만든 프레임워크와 스프링 MVC 비교 FrontController → DispatcherServlet handlerMappingMap → HandlerMapping(inerterface) MyHandlerAdapter → HandlerAdapter ModelView → ModelAndView viewResolver → ViewResolver(interface) MyView → View(인터페이스) 디스패쳐 서블릿(DispatchServlet) 구조 지금까지 위의 내용은 스프링 MVC를 아주 간단하게 만든 프레임워크이다. 즉, 스프링에서 DispatcherServlet이 프론트 컨트롤러이며, 가장 핵..
프론트 컨트롤러 패턴
2022. 1. 24. 12:06
Spring
프론트 컨트롤러란? 서블릿 하나로 클라이언트의 요청을 다 받아서 공통 처리를 중복없이 하기 위해 사용된다. 이후 나머지 컨트롤러들은 서블릿이 사용하지 않는다. 프론트 컨트롤러가 요청을 받고 응답하기 때문이다. 프론트 컨트롤러가 받아서 다른 컨트롤러를 사용하기 떄문이다. 스프링도 DispatcherServlet이 FrontController이다. 출처 : 김영한의 MVC1편 위와 같이 프론트 컨트롤러에 모든 요청이 오고 공통 작업을 처리하고 각 컨트롤러를 호출해 주는 것이다. 구조 살펴 보기 구조를 살펴보면 아래와 같다. 프론트 컨트롤러에 요청이 온다. → 프론트 컨트롤러는 HttpServlet을 상속 받는다. 프론트 컨트롤러는 컨트롤러들의 URL 관련 정보들을 갖고 있는데 여기서 조회를 한다. → int..
서블릿, JSP, MVC 패턴의 차이
2022. 1. 24. 12:01
Spring
순서대로 보자면, 발전 순서는 이렇다. 순수 자바로 모든 웹 처리 구현 → 서블릿 → JSP → MVC1 → MVC2 어떤 차이점이 있는지 알아보자. 서블릿 JSP, MVC도 모두 서블릿을 활용한 기술이다. 하지만 서블릿은 개발자가 웹 응답이냐 요청 처리에 관여를 해야하고 동적 HTML 생성도 불편하기 때문에 불편함을 느끼게 되었다. 어떤 것이 불편했을까 살펴 보자. 어떤 것이 불편 했을까 웹 서버 요청, 응답에 대한 처리를 직접 해야 함. 동적 HTML 생성이 아주 불편함. 등 여러가지 아래 코드는 서블릿으로 구현한 회원 가입 기능이다. 보는 바와 같이 브라우저에 응답할 Content-Typer과 같은 정보들을 직접 컨트롤 해야 하고 특히 HTML 처리가 엄청나다. 이런 징그러운 코드를 사용하지 않기 ..
서블릿과 톰캣의 관계
2022. 1. 24. 11:57
Spring
서블릿이란 HTTP 요청으로부터 웹 페이지를 동적으로 생성하는 서버 프로그램이다.(자바 클래스) 개발할 때 마다 이런 기능을 구현할 수 있겠지만 불편하기 때문에 서블릿이라는 것이 생겨났고, 성능 향상이 되었다. 서블릿은 JPA와 같이 인터페이스가 되며, 이를 지원하는 것이 아파치 톰캣(WAS)이다. JSP와 비슷하지만 서블릿은 자바 코드에서 HTML을 포함하고, JSP는 HTML에 자바 코드를 포함한다. 서블릿에서 동적으로 HTM 만들기 어려워서 JSP가 등장한 것이다. JSP는 결국 내부적으로 서블릿을 호출하게 된다. 이 JSP와 서블릿을 실행할 수 있는 것이 아파치 톰캣이다. 출처 : 위키백과 만약 서버를 바꾸고 싶다면 초록색 박스인 톰캣만 서블릿과 JSP(JSP를 사용한다면)를 지원하는 서버로 갈아..
서블릿과 동시 요청 처리(멀티 쓰레드)
2022. 1. 24. 11:53
Spring
서블릿은 웹 요청과 응답 처리를 해주는 자바 API이다. 즉, 웹 서버처리에 필요한 요청과 응답을 관리하는 것이다. 서블릿을 구현(서블릿은 인터페이스)하는 것들이 톰캣과 같은 WAS 서버인데 톰캣은 apache라는 웹 서버를 포함하고 있다. 즉, 우리가 HttpServlet 같은 것을 사용하여 요청 받고 응답받고 하는 코드들이 톰캣이 서블릿을 구현하여 웹 요청을 처리 해주기 때문인 것이다. 자세히 알아보도록 하자.https://dev-monkey-dugi.tistory.com/119 웹 서버에서는 정확히 무엇을 처리해야 할까? 웹 서버는 웹의 요청과 응답을 관리한다고 했다. 일단 요청이 오고 응답을 주어야 애플리케이션 로직이 당연히 의미가 있는 것이니까 **여기서 웹 서버가 처리한다고 하는 것은 정적 리..
Web Server와 WAS
2022. 1. 24. 11:43
Spring
Web Server 정적 리소스 파일 웹 서버도 프로그램 실행하는 기능을 포함하기도 한다고 함... Web Application Server 애플리케이션 로직이 들어간 것(프로그램을 실행하는 것) 애플리케이션 코드를 실행하는데 더 특화 됨. 자바는 서블릿 컨테이너 기능을 제공하면 WAS라고 볼 수도 있지만 서블릿 없이 자바 코드를 실행하는 프레임 워크도 있음. 실무에서 선정 방법 WEB Server와 WAS를 분리하는 이유 WAS도 정적 리소스를 제공할 수 있고, WEB도 동적 기능을 제공할 수 있음. 그런데 왜 분리하지? WAS는 로직을 처리하므로 하는 일이 많기 때문에 정적 리소스까지 처리하면, WAS가 너무 많은 역할을 담당하게 되므로 서버 과부하 우려가 있음 WAS 장애 시 WEB요청 자체가 불가..