[꼼꼼한 개발자] 꼼코더

17. 코드로 배우는 스프링 웹 프로젝트 -[스프링 MVC 설정] - 스프링 MVC의 기본 구조와 내부 구조(코드 실습) 본문

Spring/코드로 배우는 스프링 웹 프로젝트

17. 코드로 배우는 스프링 웹 프로젝트 -[스프링 MVC 설정] - 스프링 MVC의 기본 구조와 내부 구조(코드 실습)

꼼코더 2023. 1. 5. 00:56
반응형
 

👨🏻‍💻 코드 예제(XML 설정)

‘Spring Legacy Project’ → ‘Spring MVC Project’ → ‘org.zerock.controller’ → ‘ex01’ 프로젝트 생성

생성된 프로젝트는 스프링 버전이 3 버전이므로 pom.xml을 수정하여 5.0.7 버전으로 변경한다.

또한 Lombok 기능을 이용해서 간단한 코드를 작성하고, 테스트 할 것이므로 pom.xml에 추가한다.

 

Spring Legacy Project로 생성된 프로젝트는 서블릿 버전이 2.5 버전을 사용하지만

Java 설정 등을 이용하려면 서블릿 3.0 이상을 사용하는 것이 좋다.

pom.xml 파일을 수정한다. (기존 > 주석 처리 or 삭제)

Maven의 컴파일 옵션은 1.8버전으로 변경하고 프로젝트 우클릭 → ‘Maven’ → ‘update project’ 실행

 

웹 프로젝트는 가능하면 절대 경로를 이요하는 구조로 사용하는 것이 바람직하다.

따라서 TomCat → Modules 메뉴 → ‘/’ 경로로 프로젝트가 실행될 수 있도록 처리한다.

💁🏻‍♂️ 결과


👨🏻‍💻 코드 예제(Java 설정)

위와 같이 동일한 방법으로 프로젝트 ‘jex01’ 생성 (설정들 포함)

java 설정 방식이므로 web.xml 파일과 spring 폴더(servlet-context, root-context)는 삭제한다.

java 설정 이용시 pom.xml에 web.xml이 없다는 설정을 추가한다.

 

👨🏻‍💻 RootConfig 클래스 작성

Servlet-context.xml이 없는 상태에서 프로젝트를 시작하게 되므로

org.zerock.config 패키지 생성 → WebConfig 클래스, RootConfig 클래스를 작성한다.

 


👨🏻‍💻 ServletConfig, WebConfig 작성

Spring MVC를 이용하는 경우 servlet-context.xml을 대신하는 별도의 ServletConfig 클래스를 작성한다.

ServleConfig 클래스는 기존의 servlet-context.xml에 설정된 모든 내용 아래와 같은 방식으로 담아야 한다.

 

  • @EnableWebMvc 어노테이션 + WebMvcConfigurer 인터페이스를 구현하는 방식
  • @Configuration 어노테이션 + WebMvcConfigurationSupport 클래스를 상속 하는 방식

 

예제는 @EnableWebMvc 어노테이션을 이용해서 제작하겠다.

기존 servlet-context.xml(그림 좌)의 내용을 아래 코드(그림 우)를 통해서 설정한다.

 

 

WebMvcConfigurer는 스프링 MVC와 관련된 설정을 메서드로

오버라이드 하는 형태를 이용할 때 사용한다.

 

ServletConfig 클래스 역시 @ComponentScan을 이용해서

다른 패키지에 작성된 스프링의 객체(Bean)를 인식할 수 있다.

 

 

작성된 ServletConfig 클래스를 실행하기 전 WebConfig 설정은 아래와 같이

ServletConfig를 이용하고, 스프링 MVC의 기본 경로도 ‘/’로 변경되어야 한다.

 

💁🏻‍♂️ 결과


🚜 예제 프로젝트의 로딩 구조

 

프로젝트가 정상적으로 실행되었다면 서버 구동 시 약간의 로그가 기록되는 것을 볼 수 있다.

이 로그를 이용해서 ‘어떤 과정’을 통해서 프로젝트가 실행되는지를 엿볼 수 있다.

 

프로젝트 구동 시 관여하는 XML은 web.xml, rootcontext.xml, servlet-context.xml 파일이다.

  • 스프링과 관련된 설정 : rootcontext.xml, servlet-context.xml
  • Tomcat 구동과 관련된 설정 : web.xml

 

프로젝트 구동은 web.xml에서 시작한다.

web.xml 상단에는 가장 먼저 구동되는 Context Listenter가 등록되어 있다.

 

  • <context-param> : root-context.xml의 경로가 설정.
  • <listener> : 스프링 MVC의 ContextLoaderListener가 등록.

 

ContextLoaderListener는 해당 웹 애플리케이션 구동 시 같이 동작하므로 프로젝트 실행 후 가장 먼저 로그를 출력하면서 기록하는 것을 확인할 수 있다.

root-context.xml이 처리되면 파일에 있는 빈(Bean) 설정들이 동작하게 된다.

이를 그림으로 표현하면 다음과 같다.

 

root-context.xml에 정의된 객체(Bean)들은 스프링의 영역(context) 안에 생성되고

객체들 간의 의존성이 처리된다.

 

root-context.xml이 처리된 후에는 스프링 MVC에서 사용하는 DispatcherServlet이라는

서블릿과 관련된 설정이 동작한다.

 

org.springframework.web.servlet.DispatcherServlet 클래스는

스프링 MVC의 구조에서 가장 핵심적인 역할을 하는 클래스이다.

 

내부적으로 웹 관련 처리의 준비작업을 진행한다

이때 servlet-context.xml 파일을 사용한다.

 

로그를 보면 DispatcherServlet에서 XMLWebApplicationContext를 이용해서

servlet-context.xml을 로딩하고 해석하기 시작한다.

 

이 과정에서 등록된 객체(Bean)들은 기존에 만들어진 객체(Bean)들과 같이 연동되게 된다.


 

🧹 과정 간략 정리

  • 프로젝트 구동시 web.xml을 시작.
  • web.xml 상단에 ContextListenter가. root-context.xml를 읽는다.
  • ContextLoaderListener는 프로젝트 실행 후 가장 먼저 로그를 출력(root-context.xml 실행 확인)
  • root-context.xml에 정의된 빈(Bean)들 동작.
  • 객체(Bean)들은 스프링의 영역(context) 안에 생성 후 객체들 간의 의존성이 처리.
  • 이 후 web.xml에서 MVC의 구조에서 가장 핵심적인 DispatcherServlet이라는 서블릿 관련 설정 동작.
  • servlet-context.xml 파일을 사용하여 내부적으로 웹 관련 처리의 준비작업을 진행
  • 이 과정에서 등록된 객체(Bean)들은 기존에 만들어진 객체(Bean)들과 같이 연동.

 

 

 

위 내용은 코드로 배우는 스프링 웹 프로젝트 교재를 참고하여 작성되었습니다.

 

코드로 배우는 스프링 웹 프로젝트 - YES24

이 책은 Spring Framework(이하 스프링)를 사용해서 말 그대로 ‘웹 프로젝트’를 어떻게 진행하는지를 설명하는 책이다. 웹 프로젝트라고 거창하게 표현하지만, 좀 더 구체적으로는 스프링으로 웹

www.yes24.com

 

 

 

 

 

Comments