adSense 900*70


Retrofit을 통해 간단한 REST 서비스 만들기(1) JSP


Retrofit을 통해 간단한 REST 서비스 만들기(1)

준비 및 REST API 만들기

개요

Retrofit library를 사용하여 간단한 REST 서비스를 만들어 보겠다. Retrofit library를 사용하게 되면 실제 많은 이득이 되는 것은 client쪽 혹은 test code작성이 아닐까 생각된다. Retrofit library은 REST API에 대한 interface를 가지고 해당 REST 서비스를 호출하는 client를 만들어 주기 때문이다.

실제 이런 방법으로 REST 서버, 앱을 개발한 경험이 있고 앱 개발 시 서버와의 통신에 대한 구현 시간이 상당히 단축이 되었었다.

그렇다고 Retrofit library가 만능은 아니다. Retrofit library가 제공해주는 기능과 그렇지 못한 부분은 잘 살펴서 보는 것이 중요하다.

준비

Tomcat 설치

웹 개발을 해본 사람이라면 Tomcat설치정도는 다 할 수 있을 것이라고 생각되기때문에 건너띈다.

Spring framework

maven 혹은 gradle을 사용하여 프로젝트를 생성하였다면 spring framework library에 대한 dependency만 설정해주면 된다. 그렇지 않으면 spring framework library들을 모두 다운로드 받아 classpath하위의 library 폴더에 넣어주면된다.

Retrofit 라이브러리

Retrofit사이트에 가면 maven, gradle dependency code가 나와있다. 복사해서 붙여 넣으면 된다.

Project 생성

일단 프로젝트는 아래와 같이 세개의 프로젝트로 나누어 개발을 할것이다.


  1. core: 메세지 송/수신에 필요한 bean 객체와 REST API만을 포함하는 프로젝트

  2. rest: spring framework 기반의 web 프로젝트로 REST API를 구현하는 controller 및 service등을 포함한다.

  3. client: Retrofit library를 사용하여 rest service를 호출하는 프로젝트이다.

core project - bean, REST API

일반 maven 프로젝트로 생성한다. 생성 시 Create simple project항목을 선택한다.


  • group id: com.sample

  • artifact id: core

  • version: 0.0.1-SNAPSHOT

  • packaging: jar

beans
package com.core.domain;

import lombok.Data;

@Data
public class Message {
private String id;
private String title;
private String content;
private String timeStamp;
}
REST API

실제 서버와 통신을 어떻게 할것인지를 기술하는 interface(API)를 만든다. 이때 Retrofit에서 제공하는 각 http method에 해당하는 @GET, @POST, @DELETE 등의 annotation을 사용하여 메서드를 선언하고 메서드에 대한 인자값은 @Path, @Body의 annotation을 사용하여 선언한다.
해당 annotation 이름만으로도 어떤 역활을 하는지 알 수 있을 것이다.
예제 코드는 아래와 같다.

import java.util.List;

import retrofit.http.Body;
import retrofit.http.DELETE;
import retrofit.http.GET;
import retrofit.http.POST;
import retrofit.http.Path;

import com.core.domain.Message;

public interface MessageApi {
public static final String BASE_MESSAGE_PATH = "/message";
public static final String GET_MESSAGE_LIST = BASE_MESSAGE_PATH + "/list";
public static final String DETAIL_MESSAGE = BASE_MESSAGE_PATH + "/{id}";
public static final String ADD_MESSAGE = "/add"+BASE_MESSAGE_PATH;
public static final String UPDATE_MESSAGE = "/update"+DETAIL_MESSAGE;
public static final String DELETE_MESSAGE = DETAIL_MESSAGE;

@GET(GET_MESSAGE_LIST)
public List<Message> getMessageList();

@GET(DETAIL_MESSAGE)
public Message getMessage(@Path("id") String messageId);

@POST(ADD_MESSAGE)
public boolean addMessage(@Body Message message);

@POST(UPDATE_MESSAGE)
public boolean updateMessage(@Path("id") String messageId,@Body Message message);

@DELETE(DETAIL_MESSAGE)
public boolean deleteMessage(@Path("id") String messageId);
}

위와 같은 API에 대한 interface만 선언을 해 놓고 Retrofit을 통해 해당 interface에 대한 구현체, 즉, API를 호출할 수 있는 client를 생성할 수 있다. 아래와 같은 코드를 통해 client instance를 생성 할 수 있다.

public static <T> T build(Class<T> clazz, String url){
return new RestAdapter.Builder()
.setEndpoint(url)
.setLogLevel(LogLevel.FULL)
.build()
.create(clazz);
}

다음편에는 실제 Retrofit(구체적으로는 Retrofit의 RestAdapter)을 통해 client instance를 생성하고 잘 작동하는지를 테스트 하는 코드를 작성하여
어떻게 돌아가는 것인지 살펴 보겠다.


덧글

댓글 입력 영역


side adsense

adSense 900*70