DEVLOG

웹 프로그래밍 설계 모델 본문

Spring

웹 프로그래밍 설계 모델

BINTHEWORLD 2022. 6. 8. 14:42

웹 프로그래밍을 구축하기 위한 설계 모델

Model1

모듈화하지 않고, 하나의 파일에 HTML + Java + <태그>가 모두 들어있는 설계 모델이다.
개발속도는 빠를 수 있으나 유지보수가 어렵다.

Model2

Model1 단점 보완을 위해 나온 기능별로 모듈화된 설계모델
MVC방식(M : Model(데이터베이스의 데이터를 다룸) View(JSP) Controller(기능 or 뷰 제어)으로 설계되어 유지보수가 편리하다.

스프링 MVC 프레임워크 설계 구조

우선 클라이언트가 브라우저에 요청하면 DispatcherServlet이 받는다.
1. DispatcherServlet -> HandlerMapping 요청 : 여러 개의 Controller(Service, Dao, DB 등) 중(@Controller) 적합한 Controller를 DispatcherServlet에게 전달한다.
2. DispatcherServlet -> HandlerAdpater 요청 : 하나의 Controller의 여러 메소드 중 사용자의 요청을 처리할 수 있는 가장 적합한 메소드(@RequestMapping("사용자가 요청한 값"))를 찾아내어 ModelAndView 객체로 DispatcherServlet에게 넘겨준다. (Service, DAO, DB)
3. DispatcherServlet -> ViewResolver(View) 요청 : Model 데이터와 View 정보가 왔으니, View에 해당하는 가장 적합한 JSP 페이지를 찾아낸다.
4. ViewResolver에게 받은 View로 Model을 넘겨 View를 출력한다.
5. 클라이언트에게 응답(JSP) 요청

흐름도 참조
https://wjddyd66.github.io/spring/Spring-Basic/

 

Spring-기본 개념

Spring스프링이란 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임 워크이다. 즉, 애플리케이션 개발의 전 과정을 빠르고 편리하며 효율적으로 진행하는데 일차적

wjddyd66.github.io

DispatcherServlet 설정

JSP 환경설정 파일인 web.xml에 서블릿을 매핑

  • WEB-INF폴더에 web.xml파일 만들고, <servlet>태그와 <servlet-mapping>태그를 이용한다.
  • appServlet은 <url-pattern>/</url-pattern>, 즉 루트는 클라이언트로부터 들어오는 모든 요청을 다 처리한다는 의미이다.

web.xml

<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>

만약 초기 파라미터로 스프링 설정파일을 지정하지 않은 경우, 스프링 프레임워크가 자동으로 appServlet-context.xml 을 찾아 스프링 컨테이너를 생성하고, HandlerMapping, HandlerAdpater, ViewResolver 등 필수적인 빈(Bean) 객체를 생성한다.

Controller 객체 - @Controller 어노테이션 사용

HomeController.java

...
<annotation-driven /> // @Controller 어노테이션 사용할 때 필요한 태그이며, 스프링 컨테이너 생성을 위한 빈(Bean) 객체들이 만들어진다.

@Controller // Controller 객체로 사용할 클래스 정의
public class HomeController{
	...
}

Controller 아래 메소드 선언방법

@RequestMapping("/success") // 사용자로부터 들어오는 요청을 매핑시켜 메소드 실행될 수 있게 하는 어노테이션
public String success(Model model) {
	return "success";
}

-> http://.../.../success(매핑값)를 요청하였을 때 위 메소드가 호출된다.

Controller 객체 - Model 타입의 파라미터

model.setAttribute("tempData", "model has data!");

개발자는 Model 객체에 데이터를 담아서 DispatcherServlet에 전달할 수 있다.
DispatcherServlet에 전달된 Model 데이터는 View에서 가공되어 클라이언트한테 응답처리 된다.

View 객체

ViewResolver는 가장 적합한 JSP 페이지를 찾아내기 위해 스프링 설정파일에 InternalResourceViewResolver 빈(Bean) 객체를 생성한다. 이 객체는 @Controller 아래 매핑 메소드의 리턴값과 InternalResourceViewResolver 객체에서 만들어준 suffix 값을 합친 파일을 찾는다. 파일 상위 경로는 prefix 값이다.

만약
@Controller 아래 매핑 메소드가 아래와 같다면

// 매핑 메소드
@RequestMapping("/success")
public String success(Model model) {
	return "success"; // 리턴값
}
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<beans:property name="prefix" value="/WEB-INF/views/" />
   	<beans:property name="suffix" value=".jsp" />
</beans:bean>

찾아야 할 JSP 파일명은 /WEB-INF/views/success.jsp 이다.

Comments