스프링 부트(Spring boot)로 restful API 서버 개발하기

스프링 부트를 이용한 api서버를 만들겠습니다.

서버에 요청하면 json형식으로 결과를 내려주는 서버를 만들게 됩니다.


프로젝트 생성

메이븐 프로젝트를 생성해 줍니다.

new-project-Maven Project해서 생성하시던지

그냥 프로젝트 생성 후 confiture-convert to maven project를 해줍니다.

아래와 동일한 프로젝트 구조가 생성이 됩니다.

2016/09/07 - [개발/JAVA] - 스프링 부트(Spring boot)로 개발하기


라이브러리 추가

pom.xml


<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
 
  <groupId>net.donnert</groupId>
  <artifactId>spring.boot.web</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
 
  <name>spring.boot.web</name>
  <url>http://maven.apache.org</url>
 
  <properties>
    <project.build.sourceencoding>UTF-8</project.build.sourceencoding>
  </properties>
 
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.1.RELEASE</version>
  </parent>
 
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  </dependencies>
</project>

스프링 부트 parent와 starter-web을 달아줍니다.

배치때 사용한 것은 그냥 starter입니다. 뒤에 web을 붙여줍니다.


Application.java

package net.donnert.spring.boot.web;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }
}

그냥 스타트.


Article.java

package net.donnert.spring.boot.web;

public class Article {
	
	private long seq;
	private String title;
	private String text;
	private String writer;
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getText() {
		return text;
	}
	public void setText(String text) {
		this.text = text;
	}
	public String getWriter() {
		return writer;
	}
	public void setWriter(String writer) {
		this.writer = writer;
	}
	public long getSeq() {
		return seq;
	}
	public void setSeq(long seq) {
		this.seq = seq;
	}
}

클라이언트로 전달 될 클래스입니다.


ArticleController.java

package net.donnert.spring.boot.web;

import java.util.ArrayList;
import java.util.List;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ArticleController {
	
	@RequestMapping(value = "list", method = RequestMethod.GET)
	public List
test() { List
list = new ArrayList
(); for(int i=1; i<=10; i++) { Article article = new Article(); article.setSeq(i); article.setText("This is text"); article.setTitle("This is title"); article.setWriter("I am writer"); list.add(article); } return list; } @RequestMapping(value = "article/{seq}", method = RequestMethod.GET) public Article detail(@PathVariable("seq") long seq) { Article article = new Article(); article.setSeq(seq); article.setText("This is text"); article.setTitle("This is title"); article.setWriter("I am writer"); return article; } }

@RestController 어노테이션을 통해 컨트롤러를 restful로 정의해줍니다.

이렇게 될 경우 @ResponseBody가 필요 없어집니다.


목록과 상세 2개의 url이 매핑되어있습니다.


테스트

Application.java를 실행하면 자체 서버가 뜹니다.

2016-10-07 15:20:52.554  INFO 4148 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/list],methods=[GET]}" onto public java.util.List net.donnert.spring.boot.web.ArticleController.test()
2016-10-07 15:20:52.556  INFO 4148 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/article/{seq}],methods=[GET]}" onto public net.donnert.spring.boot.web.Article net.donnert.spring.boot.web.ArticleController.detail(long)
2016-10-07 15:20:52.561  INFO 4148 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2016-10-07 15:20:52.562  INFO 4148 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2016-10-07 15:20:52.611  INFO 4148 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-10-07 15:20:52.611  INFO 4148 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-10-07 15:20:52.758  INFO 4148 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-10-07 15:20:53.325  INFO 4148 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2016-10-07 15:20:53.686  INFO 4148 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)

스프링 부트 스타터 웹에는 톰캣이 내장되어있습니다.

내장 톰캣이 8080으로 뜨는걸 볼 수 있습니다.


브라우저를 열고 url을 입력합니다.(http://localhost:8080/list)

[{"seq":1,"title":"This is title","text":"This is text","writer":"I am writer"},{"seq":2,"title":"This is title","text":"This is text","writer":"I am writer"},{"seq":3,"title":"This is title","text":"This is text","writer":"I am writer"},{"seq":4,"title":"This is title","text":"This is text","writer":"I am writer"},{"seq":5,"title":"This is title","text":"This is text","writer":"I am writer"},{"seq":6,"title":"This is title","text":"This is text","writer":"I am writer"},{"seq":7,"title":"This is title","text":"This is text","writer":"I am writer"},{"seq":8,"title":"This is title","text":"This is text","writer":"I am writer"},{"seq":9,"title":"This is title","text":"This is text","writer":"I am writer"},{"seq":10,"title":"This is title","text":"This is text","writer":"I am writer"}]

article 10개가 json형식으로 변환되어서 출력되는 것이 보입니다.


브라우저를 열고 url을 입력합니다.(http://localhost:8080/article/3)

{"seq":3,"title":"This is title","text":"This is text","writer":"I am writer"}

3번 article 역시 json으로 보여지고 있습니다. @PathVariable를 통해 url의 파라메터를 가져왔습니다.


간단하게 api서버가 완성(?)되었습니다.

logback, mybatis연결 등은 배치 예제에서와 동일한 방법으로 하시면 됩니다.

yml을 이용한 프로파일 적용 역시 동일합니다.

2016/09/23 - [개발/JAVA] - 스프링 부트(Spring boot)에서 mybatis(oracle) 적용하기

0  Comments,   0  Trackbacks
댓글 쓰기
상수 라멘트럭

유명한 라멘트럭입니다.  이름이야 워낙 유명해서 가봐야지.. 하다가 드디어 방문!

상수역에서 멀지 않습니다.

 

4시반에 도착해서 1등으로 대기열에 이름을 적습니다.  대기열 이름부터 적으세요 무조건..

5시가 되어서 입장할때쯤 보니 대기팀이 10팀정도..;;  

안쪽 자리가 15석 정도니 오픈시간에 맞추면 오래 기다립니다..


메뉴

메뉴는 사진이 없지만 간단합니다.

라면 : 7000, 면추가 : 1000, 차슈추가 : 1000, 달걀추가 : 1000, 맥주 : 3000

저희는 기본 라면을 주문했습니다.  다른분들은 대부분 차슈나 달걀을 추가하시더라구요.


라면(7000)

드디어 등장한 라멘.. 국물을 먹어보니.. 맛있습니다.

차슈도 부드러운게 맛있습니다.  으아 이거 왜 추가안했지 하고 물어보니 나중에 추가 가능하답니다.


 

그리하여 나온 추가 차슈..  역시 맛있습니다..

계란을 반으로 쪼개면 살짝 반숙의 짭쪼롬한 맥반석 달걀 맛이 납니다.


총평

반찬은 김치 하나인데 곁들이면 딱 좋습니다.  청양고추도 있으니 넣어서 드시면 됩니다.

그냥 맛집정도로 생각했다가 웨이팅을 보고 '이집 뭐야..'. 했다가 먹어보니 이해가 됩니다.

먹고있는데 불편할까봐 머리끈도 챙겨주시더군요.

추천합니다.


위치



이 장소를 Daum지도에서 확인해보세요.
서울 마포구 상수동 328-7 | 라멘트럭
도움말 Daum 지도

'맛집' 카테고리의 다른 글

합정 라멘집 길라멘  (0) 2018.05.04
상수 라멘트럭  (0) 2016.10.10
아우라지 삼산점  (0) 2016.10.07
더 파스텔라(THE PASTELA!)  (0) 2016.09.18
명동교자  (0) 2016.09.12
0  Comments,   0  Trackbacks
댓글 쓰기
아우라지 삼산점

인천에 있는 아우라지에 방문했습니다.

예전에 한번 갔던 집인데 맛이 괜찮아서 다시 한번 갔습니다.



뭐 이렇다네요


들어가서 카운터쪽에서 안을 본 사진입니다.

자리는 꽤 넓은데 주말이라 그런지 사람들이 많네요.


메뉴

 

 

메뉴판입니다.  성인 4명(남2, 여2) 참게빠가메기매운탕 대자를 주문했습니다.

참게랑 빠가사리, 메기가 들어갑니다.



라면사리, 수제비 반죽입니다.  가서 그냥 가져오시면 됩니다.

나중에 가져오기 귀찮으니 미리 세팅을..


참게빠가메기매운탕

요리가 나왔습니다.  참게는 1인당 반개씩 4개가 나오네요.

팔팔팔 끓여줍니다.


위처럼 보글보글 끓기 시작하면 야채를 먼저 건져 먹습니다.

빠가사리와 메기도 있는데 사진이 없다니...

국물은 기름져보이는데 맛은 의외로 깔끔합니다.

매운 매운탕을 생각하시고 오시면 실망하실수도 있습니다. 

안 칼칼하다고 맛이 없는건 아닙니다.


건더기를 사악 건져먹고 국물이 남으면..


수제비와 라면을 넣어줍니다..


그리고 짠 완성되면~ 짭니다~

물을 좀 넣어서 먹으면 괜찮습니다.


총평

깔끔하게 떨어지는 국물 맛이 좋습니다.  깍두기 맛있는데 사진이 없네요.

아무튼 엄청 칼칼하게 매운 매운탕이 아닙니다.

칼칼하진 않지만 국물맛이 좋아서 무난하게 맛있게 느껴집니다.

재방문의사 O


위치


이 장소를 Daum지도에서 확인해보세요.
인천 부평구 삼산동 427-4 | 아우라지 삼산점
도움말 Daum 지도

'맛집' 카테고리의 다른 글

합정 라멘집 길라멘  (0) 2018.05.04
상수 라멘트럭  (0) 2016.10.10
아우라지 삼산점  (0) 2016.10.07
더 파스텔라(THE PASTELA!)  (0) 2016.09.18
명동교자  (0) 2016.09.12
0  Comments,   0  Trackbacks
댓글 쓰기