spring cloud feign 이란 것을 알게 됐는데 진짜 조또 모르겠다. cloud, zuul, ribbon, eureka 등 등이 있는데 진짜 모르겠다.
우선 여기서 feign 은 예제 코드를 간단하게 짜 볼 수 있을 것 같아서 github 랑 구글링 좀 해서 대충 어떤 건지 보고 한 번 짜보았다.
쉽게 생각해서 feign 은 A 란 서비스가 있을 때 A 가 다른 서비스와 http 통신을 할 수 있도록 해주는 것 같다. (A 에서 B란 서버의 api 호출하거나 등)
feign 구글링 했을 때 application.yml 로 무슨 설정 같은 것을 많이 하던데 우선 나는 그런거 다 제끼고 뭔가 동작하는 것을 봐야 이해할 수 있을 것 같아서 설정파일은 건드리지 않았다.
코드로 보면 더 이해하기 쉬울 것이다.
우선 우리는 api.github.com 에서 제공하는 api 들을 사용할 것이다.
[사진 1 : github.com 에서 제공하는 api]
api.github.com 에서는 [사진 1]과 같은 api 들을 제공한다. feign 테스트를 하기 정말 좋은 것 같다.
필자는 Intellij 라이센스가 존재하기 때문에 필자에 개발환경에 맞춰서 설명하겠다. 참고로 gradle 기반의 spring boot 2.0.0 프로젝트이다
[사진 2: Spring boot 프로젝트 생성하기]
Spring boot 를 사용하기 위해 [Spring Initializr] 로 프로젝트를 생성해야 한다.
group id 와 artifact id 는 알아서 설정하자.
[사진 3: dependency 추가]
이제 feign 을 추가하자. 형광색 부분에 Feign 부분에 체크해주면 된다. 아!!!!!!!!!! core 인가 어느 부분에 lombok 이라고 있는데 이것도 추가해주자.
이제 프로젝트가 생성됐을 것이다.
대략적인 프로젝트 구조는 다음과 같다.
[사진 4: 프로젝트 구조]
package com.hojak90.springbootsamplefeign;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class Contributor {
private String login;
private int contributions;
}
package com.hojak90.springbootsamplefeign;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
@Service
@FeignClient(url = "https://api.github.com", name = "GitHub")
interface GitHubClient {
@RequestMapping(method = RequestMethod.GET, value = "/repos/{owner}/{repo}")
String contributors(
@RequestParam("owner") String owner,
@RequestParam("repo") String repo);
}
package com.hojak90.springbootsamplefeign;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@EnableFeignClients
@EnableWebMvc
@SpringBootApplication
public class SpringBootSampleFeignApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(SpringBootSampleFeignApplication.class, args);
}
}
package com.hojak90.springbootsamplefeign;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class TestController {
@Autowired
public GitHubClient gitHubClient;
@RequestMapping("/")
public String home() {
return "index";
}
@RequestMapping("/{owner}/{repo}")
@ResponseBody
public String contributors(@PathVariable String owner, @PathVariable String repo) {
return gitHubClient.contributors(owner, repo);
}
}
다음과 같이 클래스와 인터페이스를 생성해주자.
그리고 포스트맨으로 확인해주면 된다. 나는 localhost:8080/hojak99/TIL 로 한 번 접속해보겠다.
앙 성공띠