웹 서비스를 구축할 때 주로 사용하는 Spring에 대해서 공부하려고 한다.
- Spring은 주로 자바 기반의 애플리케이션을 개발할 때 사용되는 오픈 소스 프레임워크이다.
- MVC 패턴이라 불리며 Model-View-Controller의 약자로, 소프트웨어 애플리케이션의 구조를 조직하는 디자인 패턴이다.
- 이 패턴은 사용자 인터페이스와 애플리케이션 로직을 분리하여 개발과 유지보수를 용이하게 한다.
- Model (모델) : 애플리케이션의 데이터와 비즈니스 로직을 담당하며 , 데이터베이스와의 상호작용을 관리하며, 사용자 요청에 따라 데이터의 상태를 업데이트한다.
- View (뷰) : 사용자에게 보여지는 UI(사용자 인터페이스)를 담당하며 , 모델에서 데이터를 받아와서 적절한 형태로 사용자에게 표시한다.
- Controller (컨트롤러) : 사용자의 입력을 처리하고, 모델과 뷰 간의 상호작용을 조정한다. 요청을 받아 그에 맞는 모델을 업데이트하거나 적절한 뷰를 선택하여 사용자에게 반환한다.
- 이러한 구조를 통해 MVC 패턴은 코드의 모듈화, 재사용성, 그리고 유연성을 높여준다. 다양한 웹 프레임워크(예: Spring MVC, Ruby on Rails 등)에서 이 패턴을 광범위하게 사용한다.
[New > Spring Legacy Project > Spring MVC Project] 로 생성된 프로젝트의 구조는 다음과 같다.
- JAVA 파일 : 자바 파일들이 위치해 있는 디렉터리. 자바로 작성된 Controller, Service, DAO 파일들이 위치해있다.
- webapp : 웹과 관련된 파일들이 위치해있는 디렉터리. html, css, js, jsp 파일이 위치해있다. 또한 웹 어플리케이션 구동에 필요한 XML 설정파일들이 위치해있다.
- webapp의 resources : JSP파일을 제외한 html, css, js 파일이 위치해있다.spring 폴더 : 스프링 컨테이너를 생성하기 위한 스프링 설정파일이 위치해있다.
- views 폴더 : View로 사용될 JSP파일이 위치해있다.
- pom.xml : Maven 설정파일이다. Maven은 프로젝트 빌드 도구 및 관리 도구로서 pom.xml을 통해 설정할 수 있다.
- 사용자의 모든 Request 요청은 Controller인 DispatcherServlet을 통해서 처리한다.
- DispatcherServlet은 받은 요청을 HandlerMapping으로 전달.
- HandlerMapping은 요청의 처리를 담당하는 컨트롤러를 찾기 위해서 존재한다. HandlerMapping 인터페이스를 구현한 여러 객체들 중 RequestMappingHandlerMapping의 경우, @RequestMapping 어노테이션을 기준으로 판단하게 된다. 요청받은 URL을 분석하여 적합한 컨트롤러를 반환한다다.
- DispatcherServlet이 HandlerAdapter를 이용해서 해당하는 컨트롤러를 동작시킨다.
- Controller는 개발자가 작성하는 클래스로, 실제 요청을 처리하는 Business Logic을 작성하게 된다. 이때 View에 전달해야 하는 데이터는 주로 Model이라는 객체에 담아서 전달한다.
- Controller는 View의 이름을 DispatcherServlet에 반환한다.
- DispatcherServlet은 ViewResolver를 호출하여 Controller가 반환한 View의 이름을 기반으로 적합한 View를 찾아준다.
- DispatcherServlet이 View에 처리 결과를 넘겨 최종 결과를 보여주도록 요청한다.
- View는 실제로 응답 보내야 하는 데이터를 jsp 등을 이용해서 생성하는 역할을 한다. 만들어진 응답은 DispatcherServlet을 통해서 최종결과를 전송한다.