> For the complete documentation index, see [llms.txt](https://docs.sysout.co.kr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.sysout.co.kr/web/back-end/what-is-spring-framework/spring-mvc-project.md).

# Spring MVC Project

## Spring MVC 프로젝트 구조

Spring MVC Project의 구성은 다음 그림과 같다. Java EE Project보다 파일과 폴더가 더 늘어났다.

![Spring MVC project structure](https://4208234536-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M_TNZwLuHV9ipYLbvRq%2Fuploads%2FTkkvmpZO6imJJaiUBmNh%2Fimage.png?alt=media\&token=89323e8d-160d-4969-a5e2-420e51753a98)

## pom.xml

pom.xml은 Maven Framework의 설정 파일이다. Spring MVC Project는 기본 빌드 시스템으로 Maven Framework를 사용하며, 이를 위한 설정을 pom.xml에 작성할 수 있다.

자세한 작성 내용은 [Maven 설정](/web/back-end/what-is-spring-framework/spring-environment-setting/maven-setting.md#pom)을 참조한다.

## src

src는 source 폴더로 build에 관여하는 파일들을 배치한다. src는 크게 세 가지로 구분한다.

* <mark style="color:blue;">`main`</mark> - build에 포함될 코드를 보관하기 위한 폴더
* <mark style="color:blue;">`test`</mark> - build에 포함되지 않는 테스트 코드를 보관하기 위한 폴더
* <mark style="color:blue;">`webapp`</mark>&#x20;
  * 만들어질 Web Application이 반드시 가져야 하는 상위 폴더
  * build 시 src/main의 내용이 /WEB-INF/classes 내부에 포함된다.

등록된 Source Directory는 총 네 개이며, 다음과 같다.

* src/main/java
* src/main/resources
* src/test/java
* src/test/resources

등록된 경로들은 <mark style="color:blue;">`classpath:`</mark>로 탐색이 가능하며, 설정을 통해 build 포함 여부를 정할 수 있다.

{% hint style="info" %}

#### Test 폴더의 특징

src/test 폴더는 빌드에 포함되지 않을 뿐 아니라 Junit 등 테스트를 위한 라이브러리들을 사용할 수 있도록 설정되어 있다.
{% endhint %}

## WEB-INF

웹 애플리케이션 배포 시 실행하는 컨테이너가 적용해야 하는 설정, 라이브러리, 클래스 요소들이 배치된 폴더이다. 클래스의 경우 src에 있지만 build 과정에서 WEB-INF 내부의 classes 폴더로 이동한다.

## web.xml

웹 애플리케이션의 사양(운영 지침)을 명시한 설정파일. Spring 뿐 아니라 Java EE 스펙을 가진 애플리케이션이라면 반드시 존재해야 한다. <mark style="color:blue;">Spring MVC Project</mark>에서는 <mark style="color:blue;">`web.xml`</mark>에 Core Servlet인 DispatcherServlet을 등록하여 사용할 수 있도록 구성되어 있으며, 각종 Spring 설정 파일에 대한 정보도 이곳에 등록되어 있다.

{% hint style="info" %}

#### Q) Spring Boot를 사용하는데 web.xml이 안보입니다

Spring Boot에서는 ServletInitializer 클래스가 web.xml의 역할을 대신한다.
{% endhint %}

## spring

스프링 설정이 위치한 폴더

## root-context.xml

Spring 전역(Global) 설정 파일.

이 파일에서 설정한 내용들은 하위 요소인 <mark style="color:blue;">`servlet-context.xml`</mark> 에서 사용 가능하다.'

## servlet-context.xml

Spring DispatcheServlet에 대한 설정 파일

요청에 대한 처리 내용을 작성한다.

### lib

라이브러리가 추가될 폴더. Maven Framework를 사용하므로 직접 추가하지 않고 pom.xml 설정을 통해 추가한다.

### views

화면에 출력하기 위한 View(JSP) 파일이 존재하는 위치. 기본적으로 제공되는 home.jsp가 있으나 필수 코드가 없는 과거 버전이므로 사용하지 않는다.

## log4j.xml

Java 진영의 Logging Framework인 Log4j의 설정 파일이다.

## target

Maven Build 수행 시 결과물이 저장되는 폴더이다. 시간이 저장되며 build 시 매번 변경되므로 Git과 같은 버전 관리 도구에서 충돌의 주요 원인이 된다. <mark style="color:red;">`.gitignore`</mark> 설정으로 업로드에서 제외한다.
