스프링 MVC 프레임워크 기반의 웹 프로그래밍 구조에 대한 학습
M : Model
V : View
C : Controller
#웹 프로그래밍을 구축하기 위한 설계 모델
Model 1
클라이언트가 서버에 무언가를 요청했을때에 WAS(웹 어플리케이션 서버)에서 처리를 하고
데이터베이스에서 무언가에 대한 정보를 받아오고 다시 WAS에서 받아 UI처리 작업을 한 후에
다시 클라이언트에게 보내준다.
이 모든것을 나누지않고 하나의 파일로 처리하는것을 Moder 1 방식이라 한다
장점 : 하나의 파일 안에다 모든것을 짬뽕해서 넣기 때문에 개발속도가 빠르다
단점 : 유지보수가 힘들고 복잡도가 높아진다(알아보기가 힘들다)
Model 2
클라이언트가 서버에 무언가를 요청했을때에 WAS에 Controller가 요청을 받아
어떠한 서비스(모듈)한태 작업을 시킬지 controll하고 Dao모듈을 이용하여 Model이라는 객체를 이용해
데이터 베이스와 통신하여 필요한 값을 가져와서 컨트롤러는 View라는 객체(보통 jsp, 사용자에게 보여지는 부분)에게 전달하여
다시 클라이언트에게 전달하여 준다.
장점 : 각각의 기능들이 분리되어있기에 유지보수가 필요한 부분만 수정할 수 있다.
현재 웹 어플리 케이션들은 Model 2 가 기본적으로 사용된다.
# 스프링 MVC플레임워크 설계 구조
Controller는 여러개가 있을수 있다 예를들어 영화예매관리, 스포츠 예매 관리 등...
이있는데 DispatcherServlet는 알맞은 컨트롤러를 찾아준다.
1. HandlerMapping : 가장 적합한 컨트롤러를 찾아준다.
2. HandlerAdapter : 해당 컨트롤러에 가장 적합한 메서드를 찾아준다.
3. ViewResolver : 해당 컨트롤러에 가장 적합한 JSP문서를 찾아준다
4. View : ViewResolver 에서 받아온 JSP문서 응답 생성후 클라이언트에게 보여준다.
# DispatcherServlet 설정(개발자는 설정만 해주면된다)
web.xml에 서블릿을 매핑
WEB-INF폴더의 web.xml파일 만들고, <servlet>태그와 <servlet-mapping>태그를 이용한다.
<servlet>
<servlet-name>서블릿 별칭</servlet-name>
<servlet-class>서블릿명(패키지 이름을 포함한 전체서블릿명)</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>서블릿별칭</servlet-name>
<url-pattern>/맵핑명</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml(스프링 설정 파일을 등록)</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
스프링 컨테이너가 만들어 지고 난후에는 HandlerMapping ,HandlerAdapter , ViewResolver 는 자동으로 생성된다
실제 작업할 것은 Controller와 View밖에 없다.
(전체적인 순서 정리)
# Controller를 만드는 방법
스프링 설정파일에 <annotation-driven/> 을 붙여주면 컨테이너를 사용하기위한 여러가지 클래스들이
Bean객체로 존재하게 된다.
그리고 컨트롤러로 사용할 클래스에
@Controller 어노테이션 컨트롤러를 붙여준다
(컨트롤러를 사용하려면 스프링 설정파일에 <annotation-driven/>를 반드시 넣어줘야한다)
# 컨트롤러의 기능 사용법
@RequestMapping("/날씨")
public String 날씨(Model model){
return "날씨";
}
컨트롤러에는 많은 메서드가 있는데 HandlerAdapter에 의해서
어떠한 메서드가 나와야 할지 찾아야하는데
@RequestMapping("/날씨") 로 명시해두면 사용자로부터 들어오는 요청을 특정 문자로 Mapping시켜서
예로든 날씨라는 요청이 들어왔을때에 이 기능이 실행된다.
# Model
서비스,dao,db 작업이 된것을 DispatcherServlet 으로 보내주는데
모델은 컨트롤러에서 메서드에 매개변수로 넣어 보내준다
@RequestMapping("/날씨")
public String 날씨(Model model(매개변수, 파라미터)){
return "날씨";
}
모델데이터를 뷰에서 사용할때에는
model.setAttribute("tempData"(속성이름) , "model has date!!"(속성값));
이런 식으로 사용한다.
# View
HandlerMapping ,HandlerAdapter를 이용하여
컨트롤과 메서드를 찾았으니
ViewResolver라는 객체에게 위임하고
ViewResolver는 스프링 설정파일에 InternalResourceViewResolver라는 빈 객체를 생성하여준다.
컨트롤러에서 요청받은 리턴값과 .jsp값 을받아 적합한 요청값.jsp파일을 찾아 사용자가
요청한 정보에 알맞은 View를 만들어 보내준다.
보통 View를 프론트엔드가 담당하며
Controller를 백앤드가 담당한다고 한다.
둘다 할 수도 있다고도 한다!
'공부 > Spring 복습' 카테고리의 다른 글
스프링 MVC웹 서비스 2 (0) | 2021.08.30 |
---|---|
스프링 MVC웹 서비스 (0) | 2021.08.30 |
어노테이션을 이용한 스프링 설정 2. (0) | 2021.08.29 |
어노테이션을 이용한 스프링 설정방법 1. (0) | 2021.08.29 |
스프링 생명 주기(Life Cycle) (0) | 2021.08.29 |