1. 구조 및 포트 할당

  • MyRestServer : 8180 포트
  • MyRestClient : 8888 포트

2. 코드

Server App, Client App 2개를 생성한다.

2.1. MyRestServer

package io.sarc.springcloud.MyRestServer;
 
import java.util.Arrays;
import java.util.List;
import java.util.Random;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
@SpringBootApplication
@RestController
public class MyRestServerApplication {
  private static Logger log = LoggerFactory.getLogger(MyRestServerApplication.class);
 
  @RequestMapping(value = "/greeting")
  public String greet() {
    log.info("Access /greeting");
 
    List<String> greetings = Arrays.asList("Hi", "Hello", "Greetings");
    Random rand = new Random();
 
    int randomNum = rand.nextInt(greetings.size());
    return greetings.get(randomNum);
  }
 
  public static void main(String[] args) {
    SpringApplication.run(MyRestServerApplication.class, args);
  }
}

application.yml

spring:
  application:
    name: my-rest-server

server:
  port: 8180

2.2. MyRestClient

package io.sarc.springcloud.MyRestClient;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
 
@SpringBootApplication
@RestController
public class MyRestClientApplication {
  @Bean
  RestTemplate restTemplate() {
    return new RestTemplate();
  }
 
  @Autowired
  RestTemplate restTemplate;
 
  public static void main(String[] args) {
    SpringApplication.run(MyRestClientApplication.class, args);
  }
 
  @RequestMapping("/hello")
  public String hello(@RequestParam(value="name", defaultValue="sarc.io") String name) {
    String greeting = this.restTemplate.getForObject("http://localhost:8180/greeting", String.class);
    return String.format("Hello from '%s %s'!", greeting, name);
  }
}
 

application.yml

spring:
  application:
    name: my-rest-client

server:
  port: 8888

7.3. REST 테스트

$ curl http://localhost:8888/hello
Hello from 'Hi sarc.io'!
$ curl http://localhost:8888/hello
Hello from 'Greetings sarc.io'!
$ curl http://localhost:8888/hello?name=Seoul
Hello from 'Greetings Seoul'!