Spring Framework 에서는 클라이언트의 화면을 표현하기 위한 View와 **서비스를 수행하기 위한 개발 로직 부분(Model)**을 나누는 MVC2 패턴을 지원한다.
Model, View, Controller 사이의 의존 관계를 DI 컨테이너에서 관리하여 유연한 웹 어플리케이션을 쉽게 구현 및 개발할 수 있다.
Spring Legacy Project 생성 가능
<aside> 💡 프로젝트 생성 시, 기본적인 패키지 생성 단계를 포함.
패키지 이름은 보통 3단계 이상인데, OO사.XX부서.△△프로젝트 형식으로 프로젝트 그룹을 명확화하여 작업 중인 프로젝트의 소속을 표시하기 위함이다.
ex) com.kh.springProject
</aside>

MVC 요청 처리 과정 - 흐름 파악 중요
DispatcherServlet(web.xml 파일에 설정 → root-context.xml 파일 참조하는 곳)이 이를 받아
<servlet>
<!-- 모든 요청을 DispatcherServlet 이 받아서 request가 어디로 갈지 물어봄.-->
<!-- DispatcherServlet 이라는 클래스를 appServlet 이라는 이름으로 사용할 것을 명명 -->
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- DispatcherServlet 은 servlet-context.xml 설정 파일을 따른다. -->
<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 을 받겠다는 뜻 -->
<url-pattern>/</url-pattern>
<!-- 혹은 아래와 같이 *.do 로 작성해서 .do 로 끝나는 모든 url 을 받도록
설정할 수 있다.
<url-pattern>*.do</url-pattern>
-->
</servlet-mapping>
HandlerMapping 으로 URL 과 매핑되는 컨트롤러를 검색하게 합니다.
해당 컨트롤러를 리턴하여 로직 수행 후에
ViewResolver(컨트롤러가 전달한 값을 이용해서 응답 화면을 생성할 뷰를 결정)를 통해
<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>
“home" 이라는 String 값을 리턴하면 ViewResolver 가 위와 같이 설정한대로 “home” 앞에 /WEB-INF/views/(prefix; 접두어), 뒤에 .jsp(suffix; 접미어) 를 붙여서 최종적으로 /WEB-INF/views/home.jsp 경로를 통해 jsp 파일을 찾아 DispatcherServlet 에 전달한다.index.jsp 를 만들었을 경우 home.jsp 보다 더 우위이기 때문에 index.jsp 가 먼저 뜬다.(매핑 url이 똑같이 /일 때)실행 결과 view(JSP나 Velocity 등을 이용하여 뷰영역의 코드를 작성)를 리턴하여 응답 생성하고 출력합니다.
WEB-INF - spring - appServlet 의 servlet-context.xml 과 root-context.xml 은 Simple Java Project 의 beans.xml 과 같은 역할을 한다.