[Spring] 스프링 MVC 프로젝트 구조 정리

han·2022년 3월 10일
0
post-custom-banner

웹 서비스를 구축할 때 주로 사용하는 Spring에 대해서 공부하려고 한다.

Spring이란 무엇인가?

Spirng이란?

  • Spring은 주로 자바 기반의 애플리케이션을 개발할 때 사용되는 오픈 소스 프레임워크이다.

MVC란?

  • MVC 패턴이라 불리며 Model-View-Controller의 약자로, 소프트웨어 애플리케이션의 구조를 조직하는 디자인 패턴이다.
  • 이 패턴은 사용자 인터페이스와 애플리케이션 로직을 분리하여 개발과 유지보수를 용이하게 한다.
  • Model (모델) : 애플리케이션의 데이터와 비즈니스 로직을 담당하며 , 데이터베이스와의 상호작용을 관리하며, 사용자 요청에 따라 데이터의 상태를 업데이트한다.
  • View (뷰) : 사용자에게 보여지는 UI(사용자 인터페이스)를 담당하며 , 모델에서 데이터를 받아와서 적절한 형태로 사용자에게 표시한다.
  • Controller (컨트롤러) : 사용자의 입력을 처리하고, 모델과 뷰 간의 상호작용을 조정한다. 요청을 받아 그에 맞는 모델을 업데이트하거나 적절한 뷰를 선택하여 사용자에게 반환한다.
  • 이러한 구조를 통해 MVC 패턴은 코드의 모듈화, 재사용성, 그리고 유연성을 높여준다. 다양한 웹 프레임워크(예: Spring MVC, Ruby on Rails 등)에서 이 패턴을 광범위하게 사용한다.

Spring MVC 프로젝트 구조

[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을 통해 설정할 수 있다.

Spring 프레임워크의 전체 동작 순서

  1. 사용자의 모든 Request 요청은 Controller인 DispatcherServlet을 통해서 처리한다.
  2. DispatcherServlet은 받은 요청을 HandlerMapping으로 전달.
  3. HandlerMapping은 요청의 처리를 담당하는 컨트롤러를 찾기 위해서 존재한다. HandlerMapping 인터페이스를 구현한 여러 객체들 중 RequestMappingHandlerMapping의 경우, @RequestMapping 어노테이션을 기준으로 판단하게 된다. 요청받은 URL을 분석하여 적합한 컨트롤러를 반환한다다.
  4. DispatcherServlet이 HandlerAdapter를 이용해서 해당하는 컨트롤러를 동작시킨다.
  5. Controller는 개발자가 작성하는 클래스로, 실제 요청을 처리하는 Business Logic을 작성하게 된다. 이때 View에 전달해야 하는 데이터는 주로 Model이라는 객체에 담아서 전달한다.
  6. Controller는 View의 이름을 DispatcherServlet에 반환한다.
  7. DispatcherServlet은 ViewResolver를 호출하여 Controller가 반환한 View의 이름을 기반으로 적합한 View를 찾아준다.
  8. DispatcherServlet이 View에 처리 결과를 넘겨 최종 결과를 보여주도록 요청한다.
  9. View는 실제로 응답 보내야 하는 데이터를 jsp 등을 이용해서 생성하는 역할을 한다. 만들어진 응답은 DispatcherServlet을 통해서 최종결과를 전송한다.

참고 : https://engkimbs.tistory.com/688

profile
개인 공부 및 기록겸 벨로그 시작
post-custom-banner

0개의 댓글