JAVA/WEB - Spring

Spring 5 legacy - Maven - pom.xml

개봉박살 2021. 4. 7. 00:37

ⓒDevple

Spring Legacy Project

스프링 레거시 프로젝트로 스프링부트같이 빌드를 해보자는 생각으로 이 테스트를 진행해 보았다.
목표는 RESTful한 API컨트롤러를 구성하는 것이다.

기존에 스프링부트에서는 build.gradle파일에
implementation 'org.springframework.boot:spring-boot-starter-web'한줄만 추가하면 jackson라이브러리까지 세팅이 되어 따로 버전관리의 부담이 줄었었다.
부득이하게 스프링부트에 준하는 프로젝트를 진행해야 한다면??
예를 들어 스프링부트는 war파일로 익스포트하기가 여간 까다롭다...로깅도 제대로 출력이 안되는 일이 많다..

심지어 스프링부트 도큐먼트에는 war로 배포하는것을 권장하지 않는다고 한다.

오늘은 일단 maven을 이용해 spring5 버전으로 스프링 레거시 프로젝트를 빌드해보자

  1. pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.spring</groupId>
    <artifactId>five</artifactId>
    <name>spring5test</name>
    <packaging>war</packaging>
    <version>1.0.0-BUILD-SNAPSHOT</version>
    <properties>
          <!-- 자바 버전 -->
        <java-version>1.8</java-version>
          <!-- 스프링 레거시 최신버전(today 2021.04.07) -->
        <org.springframework-version>5.3.5</org.springframework-version>
        <org.aspectj-version>1.9.6</org.aspectj-version>
        <org.slf4j-version>1.7.30</org.slf4j-version>
    </properties>
    <dependencies>
      <!-- Spring -->
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${org.springframework-version}</version>
        <exclusions>
          <!-- Exclude Commons Logging in favor of SLF4j -->
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${org.springframework-version}</version>
      </dependency>
      .....중략 ....

지금까지 스프링 프로젝트는 5.3.5까지 릴리즈된것으로 확인되었으니 버전을 맞춰줬다.

  1. RestController테스트 컨트롤러 작성
    스프링 3버전에서는 없던 RestConrollerGet,Post,Put,Patch,Delete메소드에 해당하는 맵퍼어노테이션이 추가되었다.
  2. @RestController 
    @RequestMapping(path="/api") 
    public class RestApiController { 
        private static final Logger log = LoggerFactory.getLogger(RestApiController.class); 
    
        @PostMapping(path="/test") 
        public Map<String,Object> test(@RequestBody Map<String,Object> param){ 
            log.debug("post request"); 
            return param; 
        } 
    
        @GetMapping(path="/test") 
        public Map<String,Object> test2(@RequestParam Map<String,Object> param){ 
            log.debug("get request"); 
            return param; 
        } 
    
        @PutMapping(path="/test") 
        public Map<String,Object> test3(@RequestBody Map<String,Object> param){ 
            log.debug("put request"); 
            return param; 
        } 
    
        @DeleteMapping(path="/test") 
        public Map<String,Object> test4(@RequestParam Map<String,Object> param){ 
            log.debug("delete request"); 
            return param; 
        } 
    
        @PatchMapping(path="/test") 
        public Map<String,Object> test5(@RequestBody Map<String,Object> param){ 
            log.debug("patch request"); 
            return param; 
        } 
    }

여기서 알수있는건 path가 모두 같다는것이다. 그리고 같은 URL이라도 method로 구분지어 요청을 따로 처리 할 수 있다.
뭐...Rest api의 의의를 생각해본다면 별 의미는 없지만 알아서 나쁠건없으므로 그러려니 하자.

하지만 여기서 알고 넘어가야 할 것은 Post, Put, Patch 는 Body에 데이터를 담아서 전달한다.
반대로 Get, Delete 는 Body를 사용하지 않고 Query Parameter를 이용해야한다.


테스트

POST


GET


PUT


DELETE


PATCH


LOG


마치며

잘 사용된다.
이를 이용해서 RESTfull 한 서버를 만들어보자~
그럼 이만