스프링은 RestController라는 훌륭한(!?) 에노테이션을 제공해준다 

http://dev-khm.tistory.com/16?category=287920



위와같은 개발환경에대한 설정이 끝났다면 본격적으로 Rest Service를 구현해보자


예전에 만들어두었던 ExamplePrj 프로젝트 이용해 

Rest서비스의 간단한 구성이후 mysql를 이용한 데이터 리턴까지 한번구성을해보자


만들어 두었던 프로젝트의 controller라는 패키지를 추가해주자



컨트롤러 패키지는 알다시피 Request와 비즈니스 로직을 처리하는 MVC 패턴의 C인 컨트롤러가 맞다.

정상적으로 처리가 되었다면 이제 RestCotroller에 포함되는 스프링 라이브러리를 사용하기 위해 pom.xml에 추가할 내용들이 있다.


일단 스프링 버전을 올려주어야한다. 그리고Jackson이란 라이브러리도 다운받아줘야한다.또한 차후 Mysql를 사용하기 위해서도 추가할 내용들이 있다.

일일히 말해주기가 어려우니 통쨰로 올리자면 아래와같다.

 <?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 http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>com.pratice</groupId>

<artifactId>project</artifactId>

<name>ExamplePrj</name>

<packaging>war</packaging>

<version>1.0.0-BUILD-SNAPSHOT</version>

<properties>

<java-version>1.7</java-version>

<org.springframework-version>4.1.4.RELEASE</org.springframework-version>

<org.aspectj-version>1.7.4</org.aspectj-version>

<org.slf4j-version>1.7.5</org.slf4j-version>

<com.fasterxml.jackson-version>2.5.1</com.fasterxml.jackson-version>

<com.amazonaws-version>1.9.23</com.amazonaws-version>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

</properties>

<dependencies>

<!-- JDBC + DBCP -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jdbc</artifactId>

<version>4.1.4.RELEASE</version>

</dependency>


<dependency>

<groupId>commons-dbcp</groupId>

<artifactId>commons-dbcp</artifactId>

<version>1.4</version>

</dependency>


<!-- 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>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-test</artifactId>

<version>${org.springframework-version}</version>

</dependency>


<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context-support</artifactId>

<version>${org.springframework-version}</version>

</dependency>


<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-oxm</artifactId>

<version>${org.springframework-version}</version>

</dependency>



<!-- Spring aop -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-aop</artifactId>

<version>${org.springframework-version}</version>

</dependency>


<!-- Aspectj -->

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjrt</artifactId>

<version>1.8.5</version>

</dependency>

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjweaver</artifactId>

<version>1.8.5</version>

</dependency>


<!-- @Inject -->

<dependency>

<groupId>javax.inject</groupId>

<artifactId>javax.inject</artifactId>

<version>1</version>

</dependency>


<!-- Mysql -->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.34</version>

</dependency>


<!-- Mybatis -->

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis</artifactId>

<version>3.2.8</version>

</dependency>


<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis-spring</artifactId>

<version>1.2.2</version>

</dependency>

<!-- IOUtil -->

<dependency>

<groupId>commons-io</groupId>

<artifactId>commons-io</artifactId>

<version>2.4</version>

</dependency>


<!-- ArrayUtil -->

<dependency>

<groupId>org.apache.commons</groupId>

<artifactId>commons-lang3</artifactId>

<version>3.3.2</version>

</dependency>

<!-- Jackson -->

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-core</artifactId>

<version>${com.fasterxml.jackson-version}</version>

</dependency>

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-databind</artifactId>

<version>${com.fasterxml.jackson-version}</version>

</dependency>

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-annotations</artifactId>

<version>${com.fasterxml.jackson-version}</version>

</dependency>


<!-- AspectJ -->

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjrt</artifactId>

<version>${org.aspectj-version}</version>

</dependency>


<!-- Logging -->

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-api</artifactId>

<version>${org.slf4j-version}</version>

</dependency>

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>jcl-over-slf4j</artifactId>

<version>${org.slf4j-version}</version>

<scope>runtime</scope>

</dependency>

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-log4j12</artifactId>

<version>${org.slf4j-version}</version>

<scope>runtime</scope>

</dependency>

<dependency>

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

<version>1.2.15</version>

<exclusions>

<exclusion>

<groupId>javax.mail</groupId>

<artifactId>mail</artifactId>

</exclusion>

<exclusion>

<groupId>javax.jms</groupId>

<artifactId>jms</artifactId>

</exclusion>

<exclusion>

<groupId>com.sun.jdmk</groupId>

<artifactId>jmxtools</artifactId>

</exclusion>

<exclusion>

<groupId>com.sun.jmx</groupId>

<artifactId>jmxri</artifactId>

</exclusion>

</exclusions>

<scope>runtime</scope>

</dependency>


<!-- @Inject -->

<dependency>

<groupId>javax.inject</groupId>

<artifactId>javax.inject</artifactId>

<version>1</version>

</dependency>


<!-- Servlet -->

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>servlet-api</artifactId>

<version>2.5</version>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>javax.servlet.jsp</groupId>

<artifactId>jsp-api</artifactId>

<version>2.1</version>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>jstl</artifactId>

<version>1.2</version>

</dependency>


<!-- Test -->

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.7</version>

<scope>test</scope>

</dependency>

</dependencies>

<build>

<plugins>

<plugin>

<artifactId>maven-eclipse-plugin</artifactId>

<version>2.9</version>

<configuration>

<additionalProjectnatures>

<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>

</additionalProjectnatures>

<additionalBuildcommands>

<buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>

</additionalBuildcommands>

<downloadSources>true</downloadSources>

<downloadJavadocs>true</downloadJavadocs>

</configuration>

</plugin>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<version>2.5.1</version>

<configuration>

<source>1.6</source>

<target>1.6</target>

<compilerArgument>-Xlint:all</compilerArgument>

<showWarnings>true</showWarnings>

<showDeprecation>true</showDeprecation>

</configuration>

</plugin>

<plugin>

<groupId>org.codehaus.mojo</groupId>

<artifactId>exec-maven-plugin</artifactId>

<version>1.2.1</version>

<configuration>

<mainClass>org.test.int1.Main</mainClass>

</configuration>

</plugin>

</plugins>

</build>

</project>



설정을 하고 save를 누르면 시간이 좀걸린후에 정상적으로 라이브러리를 받았을것이다.


아여기서 개인 취향인지는 모르겠지만 나는 패키지를 볼때 Hierarchical를 좋아한다. 보기도편하고

Project Explorer탭 오른쪽 화살표에 설정할 수 있다.



정상적으로 바뀌었다면 위와 다르게 아래와 같이 바뀐다.


이제 좀보기 편해졌다. controller package에 이제 클래스를 추가해보자.

간단하게 TestController라고 만들어보자. 클래스가 만들어졌다면 아래와 같이 코드를 작성해보자


 package com.pratice.project.controller;


import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;


@RestController

public class TestController {


@RequestMapping (value = "/test/rest", method = RequestMethod.GET)

public String getName(HttpServletRequest request, HttpServletResponse response)

{

return null;

}

}


 


이게 기본구성이다.

간단하게 설명하자면

@RestController는 스프링 4.x대에서 제공하는 스프링 라이브러리를 사용하여 컨트롤러를 구성해주고

@RequestMapping 을 이용하여 URL를 설정해주고 Method는 Get방식으로 설정했다는 소리다.

Method이름은 getName으로 지정해주었는데 자신의 컨트롤러 성격에 맞추어 네이밍을 해주면된다.



이제 리턴시켜줄 객체 즉 Model를 만들어보자.

아래와같이 말이다.


모델 패키지 안에 Name 클래스를 만들어주자.

이 클래스는 객체의 역할을한다. 객체는 Rest를 Return할때 해당 객체를 사용하게된다.


해당 Name의 클래스를 만들었다면

간단하게 String name를 선언해주고 Get Set 메서드를 만들어주자. Get Set은 이클립스에서 제공을 해준다.


코드로 보면 아래와같다.

 package com.pratice.project.model;


public class Name {

private String name;


public String getName() {

return name;

}


public void setName(String name) {

this.name = name;

}


}

 

알다시피 get은 객체안에 포함되어있는 이름 값을 가지고 오는것이고 set 객체의 이름을 설정하는 부분이다.


이제 다시 컨트롤러로 돌아와서 아래와 같이 코드를 변경한다.


 package com.pratice.project.controller;


import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;


import com.pratice.project.model.Name;


@RestController

public class TestController {


@RequestMapping (value = "/test/rest", method = RequestMethod.GET)

public Name getName(HttpServletRequest request, HttpServletResponse response)

{

Name Testreturn= new Name();

Testreturn.setName("jiwon");

return Testreturn;

}

}


변경된 내용이 보이는가? Name 객체를 리턴하게끔 바뀌었고

객체를 생성하여 해당 url로 들어오는 결과를 객체로 리턴하게끔 변경하였다.


저장을하고 서버를 재시작한후에 해당 url로 호출해보면..



내가 만든 객체가 json형태로 리턴된것을 알 수 가 있다.


정말 단순하지않은가? 


Rest를 좀더 잘보기위해서는 구글의 RESTCLIENT를 설치를 추천한다.

앞으로 예제에서도 마찬가지로 필요하게 된다.


크롬 메인화면으로 가보자. 새탭의 앱을 눌러보자



여기서 웹스토어를 들어가자. 스토어 검색에 Rest Client를 검색한후  Advanced Rest client를 다운받자.


정상적으로 받으면 아래와같은 화면으로 나타난다. 




누른 후 들어가서 URL를 설정해주자. Get형태로 받는것또한 설정해주자 우리가 만든 API로!  

우측상단에 세이브를 눌러서 api를 저장해주자




이제 Send를 눌러보자



위와같이 200 코드가 뜨는것을 확인할수있으며 로딩타임부터 헤더값도 전부 알수 있고 리스폰스도 알 수 있다.


다음 챕터는 서비스 패키지를 만들어보고 REST PUT를 구현해서 로그로 띄우는것까지 해보자.



'DEV > SPRING' 카테고리의 다른 글

Rest Service 구현[5]  (0) 2018.05.11
Rest Service 구현[4]  (0) 2018.05.11
Rest Service 구현[3]  (0) 2018.05.11
Rest Service 구현[2]  (0) 2018.05.11
Spring restful service 참고사이트  (0) 2018.05.11

Restful Service를 스프링으로 구현해보자!

라는 생각을가지고 각종원문 레퍼런스등 한국 사이트등 여러 곳을 참고해보고 참고사이트를 정리해봤습니다. 해당 내용으로 Restful 서비스 구축, Mybatis를 활용한 DB컨트롤 및 쿼리로 데이터 받아오기,에러 핸들러처리, 컨트롤러 전처리 후처리, 로그를 파일형태로 남기는 방법, 톰캣 WAR 원격으로 배포, SVN으로 레파지토리에 버전관리 까지 정리가 되었습니다. 원래 영어로 된 원문 레퍼런스가 많았는데 최대한 한국어 위주로 정리를 했습니다.


많은 도움이 되시길..



Spring : https://spring.io/

Maven Repository : http://mvnrepository.com/

RESTful Web Service[예제-영문] : https://spring.io/guides/gs/rest-service/

MyBatis 3 : http://mybatis.github.io/mybatis-3/ko/index.html#

MyBatis 예제 : http://mybatis.co.uk/index.php/category/getting-started-with-mybatis

Mybatis 좋은 팁 : http://knight76.tistory.com/entry/Mybatis-%EC%A2%8B%EC%9D%80-%ED%8C%81-%EC%97%AC%EB%9F%AC%EA%B0%9C%EC%9D%98-%ED%8C%8C%EB%9D%BC%EB%AF%B8%ED%84%B0%EB%A5%BC-%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C-map%EC%9C%BC%EB%A1%9C-%EC%A0%81%EC%9A%A9%ED%95%A0-%EC%88%98-%EC%9E%88%EB%8A%94-%EB%B0%A9%EB%B2%95

MyBatis Resultmap tip : http://noritersand.tistory.com/229

MyBatis - MyBatis 3 | Mapper XML 파일 : http://mybatis.github.io/mybatis-3/ko/sqlmap-xml.html

ControllerAdvice를 이용한 익셉션 처리 : http://krespo.net/191

HttpStatus Code : http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/HttpStatus.html

Servlet Filter에서 Spring Bean 사용 : http://regexr.tistory.com/8

Spring 버전 별 controller Interceptor 설정 방법 : http://blog.anyframejava.org/?p=125

mvc:interceptors 를 사용한 Controller 공통로직 처리 예제 : http://springsource.tistory.com/110

Controller 파라미터의 종류 : http://springsource.tistory.com/13

log4j 정리[properties,xml] : http://hongkyu.tistory.com/76

log4j 설정 및 사용법[properties] : http://changpd.blogspot.kr/2013/05/spring-lo4j.html

log4j에서 여러파일에 로그남기기[properties] : http://adamtop.tistory.com/entry/log4j%EC%97%90%EC%84%9C-%EC%97%AC%EB%9F%AC%ED%8C%8C%EC%9D%BC%EC%97%90-%EB%A1%9C%EA%B7%B8%EB%82%A8%EA%B8%B0%EA%B8%B0

자주쓰이는 이노테이션 : http://noritersand.tistory.com/156

Eclipse의 Maven plugin으로 Tomcat에 WAR 배포하기 : http://jjorae.com/posts/778

Maven Tomcat Plugin - Maven 2 Tomcat Plugin :http://mojo.codehaus.org/tomcat-maven-plugin/deployment.html

Apache Subversion Binary Packages[다운로드 장소] : http://subversion.apache.org/packages.html

SVN 서버 설치 및 거북이(Tortoise) SVN 설치하기 : http://gmprog.tistory.com/17

SVN 서버 설치 및 셋팅방법 : http://sjs0270.tistory.com/

TortoiseSVN 레퍼런스 : http://tortoisesvn.net/docs/nightly/TortoiseSVN_en/index.html

SVN을 효율적으로 사용하기 위한 여러 기능 : http://www.imc.co.kr/1366

 

'DEV > SPRING' 카테고리의 다른 글

Rest Service 구현[5]  (0) 2018.05.11
Rest Service 구현[4]  (0) 2018.05.11
Rest Service 구현[3]  (0) 2018.05.11
Rest Service 구현[2]  (0) 2018.05.11
Rest Service 구현[1]  (0) 2018.05.11

지난 포스트에 

ExamplePrj에 SVN설정을 하였는데

이와 반대로 Git hub도 연동을 할 수있다.


Help - Eclipse MarketPlace

에서 git를 검색해보자



위에서 Git Team Provider 4.1.0을 설치해주자


연동방법은


간단하다. 일단 올릴 임시용으로 GitTest란 SpringMVC 프로젝트로 만들어준다.


다음으로는 레파지토리 연동이 필요한 부분인데 window - show view - other..를 눌러서 git를 검색후에

Git Repositories를 눌러주자


일단 연동준비는 끝난 상태인데 이제 사이트에 가서 깃허브를 가입하고 나의 레파지토리를 만들어주자!


깃허브의 주소는 https://github.com/ 이다

가입이 안되어있다면 가입을해주자. 가입 후에 화면은 아래와 같다.


오른쪽중단에 있는 New repository를 눌러주자

위에 레파지토리 이름을 만들어주고 디스크립션을 간단하게 설정해주자

public으로 설정후에 Initialize this repository with a README 체크해주자

ㄴ아래와 같이 말이다.


여기서 생성을 하면 정상적으로 생성이 된것을 볼수 있고 우측하단쪽에 보면 이 레파지토리에 접근할 수 있는 URL를 알 수 있다.



그다음으로는 다시 이클립스로 돌아가보자. 만들어 두었던 GitTest란 프로젝트을 우측클릭하고 Team - share project 를 눌러보자



위와같이 뜰것이고 우측상단에 create를 눌러주자. 깃허브는 로컬 레파지토리를 설정하고 그로컬레파짓 토리와 깃허브 레파짓 토리에

둘다 커밋을 하는 구조로 되어있다. 로컬 레파지토리를 아래와 같이 설정해주자




완료후 finish를 눌러주면 아래와같이 뜨게된다.



이제 내가 깃허브에 만들어둔 레파짓토리에 접근해보자.

Team-Commit를 눌러주고 코멘트를 작성해주고 파일을 전부 선택하자



이제 설정이됐다면 Commit and Push를 눌러주자

URL설정이 나오는데 아까 설정했던 URL로 그대로 설정해주자



Branch name은 취향따라 정하면된다 나는 그냥 디폴트인 master로 정했다.

여기서 non forward ...어쩌구 오류가 날수 있는데 이럴경우 Team-Pull를 해주고 그이후에 다시 시도하면 정상적으로

커밋이된다.




'DEV > ENVIRONMENT' 카테고리의 다른 글

Java7+Tomcat7+Maven3.x+이클립스+Spring(STS)+SVN 환경설정  (0) 2018.05.11

+ Recent posts