본문 바로가기
Dev/Spring

스프링MVC 5.0.7 버전 설정 및 테스트

by vellahw 2022. 10. 28.

 

 

1
2
3
4
5
6
<properties>
        <java-version>1.8</java-version>
        <org.springframework-version>5.0.7.RELEASE</org.springframework-version>
        <org.aspectj-version>1.6.10</org.aspectj-version>
        <org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
cs

생성된 프로젝트의 pom.xml에서 스프링 버전 변경 (3 > 5.0.7)

 

1
2
3
4
5
6
7
8
9
10
11
12
<!-- Spring -->
<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.0</version>
    <scope>provided</scope>
</dependency>
cs

Lombok 기능 사용을 위한 pom.xml에 코드 추가

 

1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
</dependency>
cs

Java 설정 등을 이용하기 위해선 서블릿 3.0 이상을 사용하는 것이 좋으므로 기존 2.5부분은 주석 처리 후 pom.xml에 코드 추가 

 

1
2
3
4
5
6
7
8
9
10
11
12
<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>
cs

Maven 컴파일 옵션 1.8 버전으로 변경

 

프로젝트 우클릭 후 Maven-Update Project 실행

 

정상 작동 확인!

 

💡.경로에 패키지명(위 사진 속 'contorller/') 나오지 않게 하기 위한 설정

서버를 멈춰놓은 후 서버 탭의 톰캣 더블클릭 후 Modules 메뉴로 이동

 

해당 Path 선택 후 Edit 버튼을 눌러 '/' 경로로 수정

 

프로젝트를 재실행 하면 수정된 경로를 확인 할 수 있다.

 

 


🎇 예제

1) 컨트롤러 클래스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package org.hw.controller;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
 
import lombok.extern.log4j.Log4j;
 
@Controller
@RequestMapping("/sample/*")
@Log4j
public class SampleContorller {
    
    @RequestMapping("")
    public void basic() {
        log.info("basic...............");
    }
}
cs

@Controller 어노테이션이 적용 되었는데 위 클래스는 자동으로 스프링의 객체(Bean)로 등록된다. 그 이유는

servlet-context.xml 파일의 일부에 작성된 위 코드 속 <<context:component-scan> 태그가 선언된 패키지를 스캔하면서 스프링에서 객체(Bean) 설정에 사용되는 어노테이션들을 가진 클래스들을 파악하고 필요하다면 이를 객체로 생성해서 관리하기 때문

클래스가 스프링에서 관리하게 되면 위 사진 처럼 클래스 옆에 's' 아이콘이 추가된다.

 

@RequestMapping 어노테이션은 클래스와 메소드에서 선언 할 수 있다.

클래스에 선언된 경로는 현재 클래스의 모든 메소드들의 기본적인 URL경로가 된다. /sample/aaa 같은 URL을 모두 위 클래스에서 처리 된다.

 

위 클래스는 Lombok의 @Log4j를 사용하는데 Spring Legacy Project로 생성한 프로젝트는 기본적으로 Log4j가 추가 되어 있기 때문에 별도의 설정이 필요 하지 않다.

 

콘솔창 로그

프로젝트 실행 후 URL에 /sample/을 입력 해주면 별도의 뷰 파일 작업이 없었기 때문에 브라우저 상에선 404 오류가 발생 하지만 콘솔창을 확인 해보면 위와 같은 로그가 찍힌 것을 확인 할 수 있다.

 

💡 @RequestMapping의 변화

@Controller 어노테이션은 추가적인 속성을 지정할 수 없지만 @RequestMapping의 경우 몇 가지 속성을을 추가 할 수 있는데, 그 중 가장 많이 사용하는 속성은 method 속성이다.

Method 속성은 흔히 GET 방식, POST 방식을 구분해서 사용 하는데, 스프링 4.3 버전 부터는 이러한 @RequestMapping을 줄여서 사용 할 수 있는 @GetMapping, @PostMapping이 등장했다.

 

위에서 작성한 SampleContorller 클래스에 위와 같은 코드를 추가 했는데 프로젝트 실행 후 URL에 sample/basic, sample/basicOnlyGet을 차례로 입력하면 콘솔창에서 아래와 같은 로그가 찍힌 것을 확인 할 수 있다. 

콘솔창 로그

 

위 코드 속 basicGet()  메소드에 적용한 @RequestMapping과 같이 @RequestMapping 어노테이션은 GET, POST 방식 모두를 지원해야 하는 경우에 배열로 처리해서 지정할 수 있다.

 

 

2) Controller 파라미터 수집

Controller를 작성할 때 가장 편리한 기능은 파라미터가 자동으로 수집되는 기능이다. 즉, 자동으로 전송된 값을 받을 수 있다. 이 기능을 이용하면 매번 request.getParameter()를 이용하는 불편함을 없앨 수 있다.

 

테스트를 위해 위와 같은 클래스를 작성 했고 lombok의 @Data를 이용했기 때문에 별도의 get/set 코드를 작성할 필요가 없다.

 

리턴값은 임의로 작성함

위에서 작성한 SampleContorller 클래스에 위와 같은 코드를 추가 했고 ex01 메소드가 SampleDTO를 파라미터로 사용하게 되면 자동으로 set 메소드가 동작하면서 파라미터를 수집하게 된다.

 

@GetMapping이 사용 되었으므로 위와 같이 name, age 형태를 추가해서 호출 할 수 있다.

SampleDTO 객체 안에 name과 age 속성이 제대로 수집된 것을 알 수 있다.

 

🎇 Controller가 파라미터를 수집하는 방식은 파라미터 타입에 따라 자동으로 변환하는 방식을 이용한다.

위에서 작성한 SampleContorller 클래스에 위와 같은 코드를 추가 했는데 실행 결과를 보면

 

URL에 입력한 age의 99는 int 타입이 아니지만 자동으로 타입이 변환 되어 수집 된 것을 알 수 있다.

 

 

댓글