개발자의 길

[자바] 초간단 REST 서비스 하기 [#3] 본문

4. JAVA

[자바] 초간단 REST 서비스 하기 [#3]

자르르 2011. 5. 16. 19:15


약속대로 코딩을 하겠습니다. 백문이 불여일코드.. 설명보단 일단 결과물을 보시죠~!
그럼 따라가보죠 ㅎㅎ

1. 환경설정
- jersey 라이브러리 : https://jersey.dev.java.net/

먼저 이클립스와 톰캣을 설치합니다. 아, 물론 Java SDK는 설치하셨겠죠?-0-
jersey 라이브러리는 압축을 풀고 대기탑니다.

2. 프로젝트 생성
- new -> Other -> Web -> Dynamic Web Project
- Project Name : RestScoreBoard
- Target runtime : Apache Tomcat vX.X(여기서는 6.0)
- Dynamic web module version : 2.5
- Configuration : Default Configuration for Apache Tomcate VX.X
- Finish
3. 라이브러리 추가
- jersey압축폴더/jersey-archive-1.3/lib을 복사한다.
- WebContent/lib 에 붙여넣기 한다.

4. 클래스 추가

일반적인 요즘 웹 서비스의 형태가 아닐까 합니다..;; 대충 포조기반의 모델을 만들어두고~
이 모델을 이용하여 비즈니스 로직만 담긴 녀석을 만들고~ 대충 가공해서 서비스를 하는 그런 방식이겠죠. 

정리하면 Score라는 포조기반 모델이 있고~ 이녀석을 지지고 볶는 비즈니스 로직을 정의한 IScoreService가 있구~ 이 녀석을 사용해 REST형태로 서비스 해주는 RestScoreReturnJson이 있겠습니다~


- example1.score.model.Score
먼저 단순 POJO Score 클래스 입니다. 유저아이디와.. 점수만 기록하네요.
특이한건 클래스위에 정의된 어노테이션이 있네요.. 이부분은 다음에^^ 일단 따라합시다~
눈치 빠르신분은.. 클래스를 XML형태로 자동 변환해줄것 같은 느낌이 오시겠죠?
 
package example1.score.model;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Score {
private String userId;
private int    score;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public Score(String userId, int score) {
super();
this.userId = userId;
this.score = score;
}
public Score(){}
}
 

- example1.score.business.IScoreService
일단은 두가지 기능만 있는 서비스 입니다. 점수 가져오기.. 점수 입력하기.. 머 별로 없습니다.
 
package example1.score.business;

import java.util.List;

import example1.score.model.Score;

public interface IScoreService {
public List<Score> GetScoreList();
public void AddScore(Score score);
}
 


- example1.score.business.GlobalMemoryScoreService
초 급조한 티가 나는 서버가 죽어버리면 다 날라가게 되는 초 허접버전 서비스 입니다.
대충 리스트를 static으로 만들고, 입력하고 날리고 해버리네요..
 
package example1.score.business;

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

import example1.score.model.Score;

public class GlobalMemoryScoreService implements IScoreService {

private static ArrayList<Score> scores = new ArrayList<Score>();
@Override
public void AddScore(Score score) {
scores.add(score);
}

@Override
public List<Score> GetScoreList() {
return scores;
}

}
 


- example1.score.rest.RestScoreReturnJson
드뎌 Rest를 하는 클래스 입니다. 여기서도 어노테이션이 몇개 보이는데요.
이부분도 나중에 알아보도록 하죠~ 일단 따라합시다.
대충 눈치가 오시는 분들은.. 잘 아시겠죠? ^^; Score클래스에서 정의한 어노테이션때문에 자동으로 Json이 만들어 질거라는거..;;
 
package example1.score.rest;

import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import example1.score.business.GlobalMemoryScoreService;
import example1.score.business.IScoreService;
import example1.score.model.Score;

@Path("/score")
public class RestScoreReturnJson {
//private IScoreService scoreService = null;
//아래 부분은 나중에.. IoC로 적용~!
private IScoreService scoreService = new GlobalMemoryScoreService(); 
public void SetScoreService(IScoreService scoreService)
{
this.scoreService = scoreService;
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("add/{id}={score}")
public String addScore(
@PathParam("id") final String id,
@PathParam("score") final int score
)
{
scoreService.AddScore(new Score(id,score));
return "[{\"Result\":\"true\"}]";
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("get")
public List<Score> addScore()
{
List<Score> scores = scoreService.GetScoreList();
return scores;
}
}
 

5. web.xml 설정 변경
Rest도 일종의 웹 어플리케이션이기 때문에~ 아래와 같이 설정을 해줍니다. jersey는 서블릿의 변종인가 보네요..~
 
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>sample1.RestScoreBoard</display-name>
  <servlet>
    <servlet-name>ScoreRestService</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>example1.score.rest</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>ScoreRestService</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app>
 

6. 실행
그럼.. WAS를 실행하고 웹 브라우저를 오픈합니다+_+

그리고.. 다음과 같이 창에 입력을~
머.. 점수 등록입니다~
           
          

등록된 점수 가져오는겁니다!
          예상 결과 : {"score":[{"userId":"zerry","score":"3000"},{"userId":"user","score":"5000"}]}
          
           
          
          
          히야.. 일단 된거 같네요.. 그럼 다음번엔 하나하나 파헤쳐 보도록 하죠~
          
          
          머.. REST고 JSON이고 모고 간에.. 그냥 자바프로그래밍만 알아도 되겠네요.. 점점 코딩 할께 없어지고 있는 세상입니다. 하하하-_- (과연?)
          
          
          그럼.. 패키지로 묶어버린 war파일 입니다.. 톰캣 6.0, jee galileo, jre 1.6으로 했었드랬어요..


이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공유하기 링크
Comments