Spring boot로 Restful APIs 만들기
지난시간엔 Spring Boot로 Web 모듈이 탑재된 프로젝트를 만들었다.
이 프로젝트를 만들어 놓고 pom.xml 파일을 열어보자. 아참, 본인의 특별한 능력으로 Gradle로 만든 친구들은 build.gradle 파일을 열어보면 될 것이다.
이 포스팅은 Maven 기반으로 프로젝트를 이끌어 갈 것이라는 것만 알아두면 좋겠다.
pom.xml 파일을 열어본 뒤 가장 먼저 해야할 일은 Spring boot의 버전을 바꿔주는 것이다.
STS에서 프로젝트를 만들게 되면 Stable 버전으로 1.5.8을 기본셋팅해주는데 이걸 1.5.6 으로 변경해주는 것이 처음 할 일이다. 나중 일이지만 JPA 셋팅을 하고 QueryDSL을 셋팅해서 DB에서 데이터를 들고 올때 EntityManager 객체를 통해서 가져오게 되는데 이 녀석은 QueryDslRepositorySupport 라는 객체에서 Autowired를 통해 주입받게 된다. 그런데 문제는 1.5.8에선 이 EntityManager객체를 주입받지 못하는지 값이 null이 되면서 톰캣 실행을 멈춰버리게 되는 버그가 있다.
무슨 소린지 모르겠다면 1.5.8에는 나중에 DB연결할때 문제가 좀 있으니 1.5.6으로 변경하는 것이 정신건강에 도움이 된다고 이해하면 된다.
내가 진짜 이것 때문에 별별짓을 다하다가 1주일동안 삽질한 끝에 알아냈다.
무슨 Notice나 Note를 안 읽어봐서 모르겠지만 1.5.8 에서는 QueryDSL 사용하는 방법이 좀 달라졌거나 실수했거나 둘중 하나 일거라고 생각된다.
암튼 아래의 코드처럼 1.5.6으로 변경한다.(이러한 이슈때문인가 1.5.9버전으로 긴급업데이트를 한것 같다. 최신의 코드는 1.5.9 버전으로 작업하면 된다.)
<parent>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-parent</artifactid>
<version>1.5.6.RELEASE</version>
</parent>
일단 이렇게 만들어놨다면 급한 볼일은 마친거라고 보면 된다.
오늘은 Controller를 하나 만들어서 Restful API를 하나 만들거다. 그러기 위해서는 패키지 하나를 추가해 놓는 것이 좋겠지.
다른 해야할 설명들이 많지만 일단 목표에 충실하도록 하자.
STS에서 패키지를 하나 만드는 방법은 간단하다.
이렇게 하면 controller라는 패키지 경로가 만들어진다. 그리고 이 controller에 HelloController.java 클래스 파일을 만들어보도록 하자.
그리고 코드는 아래와 같이 작성하면 된다.
package com.example.sample.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloContrller {
@RequestMapping(value="/hello", method= RequestMethod.GET)
public String helloWorld() {
return "hello, World";
}
}
이렇게 작성하면 일단 기본적인 Hello,World를 내뱉는 Restful API를 만들어 낸거다.
이건 한번 만들어본거지 정석적인 ApiResponseMessage는 아니다. 그런건 나중에 다 만들거니까 보채지 말 것.
정상적으로 동작하는지 확인해보기 위해서 이 코드를 실행해야하는데 어떻게 하는 것이냐 하면.
STS 화면 좌측 하단에 가서 보면(화면 구성이나 위치를 자신이 변경하지 않았다면) Boot Dashboard라고 하는 창이 있는 것을 확인할 수 있다.
여기서 sample이라고 하는 자신의 프로젝트를 선택하고 위에 있는 저 빨강 네모와 녹색 삼각형을 클릭하면 서버가 실행된다.
Spring boot 에 Web 프로젝트를 만들면 자동으로 Tomcat 이 탑재되서 따로 Tomcat을 설치하고 셋팅할 필요가 없다.(우왕굳굳)
아참, 까먹고 설명안한게 하나 있는데 아무런 셋팅없이 그냥 실행하면 서버가 8080포트로 시작된다. 따로 8080포트를 이용하는 중이라면 잠시 스톱하고 실행하길 바란다.
아무런 에러메시지가 뜨지 않고 있다면
2017-11-24 12:12:16.362 INFO 293688 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2017-11-24 12:12:16.383 INFO 293688 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2017-11-24 12:12:16.385 INFO 293688 --- [ main] com.example.sample.SampleApplication : Started SampleApplication in 0.931 seconds (JVM running for 1.229)
그리고 막 이런 메시지가 나왔다면 서버의 기동은 완료된거다.
브라우저를 띄워서 localhost:8080/hello 로 접속해보면 Hello, World 가 나오는 걸 확인할 수 있다.
여기까지 했으면 일단 Restful API를 만드는데 있어서 밑바닥은 닦은 셈이다.
다음시간엔 ApiResponseMessage를 이용해 메시지를 전달하는 방법에 대해서 알아보도록 하겠다.
오늘은 여기까지.
안녕!