스프링 MVC는 스프링의 서브(sub) 프로젝트 입니다. https://spring.io/projects 를 보면 Spring Framework라는 메인 프로젝트 외에도 여러 종류의 서브 프로젝트가 존재하는데, 스프링 MVC 역시 이러한 프로젝트 중 일부입니다.
스프링은 하나의 기능을 위해서만 만들어진 프레임워크가 아니라 '코어'라고 할 수 있는 프레임워크에 여러 서브 프로젝트를 결합해서 다양한 상황에 대처할 수 있도록 개발되었습니다. 서브 프로젝트라는 의미를 개발자의 입장에서 가장 쉽게 이해할 수 있는 방법은 '별도의 설정이존재할 수 있다'라는 개념입니다. Spring Legacy Project로 생성한 예제의 경우에도 servlet-context.xml과 root-context.xml로 설정 파일이 분리된 것을 볼 수 있습니다.
스프링 MVC 프로젝트의 내부 구조
스프링 MVC 프로젝트를 구성해서 사용한다는 의미는 내부적으로 root-context.xml로 사용하는 일반 Java 영역(흔히 POJO(Plain Old Java Object))과 servlet-context.xml로 설정하는 Web 관련 영역을 같이 연동해서 구동하게 됩니다. 그림으로 간단하게 표현하면 다음과 같은 구조라고 볼 수 있습니다.
바깥쪽에 있는 WebApplicationContext라는 존재는 기존의 구조에 MVC 설정을 포함하는 구조로 만들어 집니다. 스프링은 원래 목적 자체가 웹 애플리케이션을 목적으로 나온 프레임 워크가 아니기 때문에 달라지는 영역에 대해서는 완전히 분리하고 연동하는 방식으로 구현되어 있습니다.
Eclipse(STS) 내 'Spring Legacy Project'를 이용해서 'ex01' 프로젝트를생성합니다. 프로젝트는 'Spring MVC Project'로 생성합니다. 패키지명은 기존과 동일하게 'org.noel.controller'로 지정합니다.
생성된 프로젝트는 스프링 버전이 3버전이므로 pom.xml을 수정해서 스프링을 5.2.7버전으로 변경합니다.
▶ pom.xml의 일부
<properties>
<java-version>1.6</java-version>
<org.springframework-version>5.2.7.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
작성된 프로젝트 역시 Lombok 기능을 이용해서 간단한 코드를 작성하고, 테스트할 것이므로 pom.xml에 추가합니다.
▶ pom.xml의 일부
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
<scope>provided</scope>
</dependency>
Spring Legacy Project로 생성된 프로젝트는 서블릿 버전이 2.5버전을 사용하지만 Java 설정 등을 이용하려면 서블릿 3.0 이상을 사용하는 것이 좋습니다. pom.xml 파일을 아래와 같이 2.5 버전은 주석 처리하거나 삭제하고 3.1.0 이상 버전(나는 4.0.1 버전을 사용했다)을 사용하도록 수정합니다.
▶ pom.xml의 일부
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
junit 또한 버전이 낮기 때문에 4.12 버전을 사용하도록 수정합니다.
▶ pom.xml의 일부
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
Maven의 컴파일 옵션은 1.8 버전으로 변경하고 프로젝트의 'Maven' 메뉴에서 'update project'를 실행합니다.
▶ pom.xml의 일부
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
생성된 프로젝트를 실행하고 이상이 없는지 확인합니다.
웹 프로젝트는 가능하면 절대 경로를 이용하는 구조를 사용하는 것이 바람직하므로 Tomcat의 'Modules' 메뉴를 이용해서 '/' 경로로 프로젝트가 실행될 수 있도록 처리합니다(혹은 해당 프로젝트 Properties의 'Web Project Settings' 속성을 '/'로 지정합니다.)
'Back-end > Spring Web Project' 카테고리의 다른 글
[Spring Web Project] 스프링 MVC의 Controller(2) - Controller의 리턴 타입 (1) | 2023.11.21 |
---|---|
[Spring Web Project] 스프링 MVC의 Controller(1) - Controller의 파라미터 (1) | 2023.11.21 |
MyBatis와 스프링 연동(2) - Mapper XML 설정 (0) | 2023.11.15 |
MyBatis와 스프링 연동(1) - MyBatis 연동 (0) | 2023.11.14 |
[Spring Web Project] 스프링과 Oracle Database 연동(3) - 커넥션 풀 설정 (0) | 2023.11.13 |