Spring Cloud OpenFeign 사용해보기

2024. 5. 13. 19:56Spring Cloud

반응형

들어가며

Spring Cloud OpenFeign은 Spring 어플리케이션에 REST 클라이언트를 제공하기 위한 라이브러리이다.

어플리케이션 개발자가 서비스에 로우레벨 코드 대신 쉽게 HTTP 요청을 보낼 수 있게 해준다.

Spring Cloud OpenFeign 사용해보기

의존성 관리 - build.gradle

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
}

FeignClient 사용 설정

@SpringBootApplication
@EnableFeignClients
public class FeignsampleApplication {

    public static void main(String[] args) {
        SpringApplication.run(FeignsampleApplication.class, args);
    }
}
  • @EnableFeignClient 어노테이션을 사용하여 FeignClient 사용을 명시

Custom Feign Client 추가

@FeignClient(value = "jplaceholder", url = "<https://jsonplaceholder.typicode.com/>")
public interface CustomFeignClient {
    @GetMapping(value = "/posts")
    List getPosts();

    @GetMapping(value = "/posts/{postId}", produces = "application/json")
    Post getPostById(@PathVariable("postId") Long postId);
}
  • @FeignClient
    • value : 요청을 보낼 클라이언트의 이름
    • url : 요청을 보낼 클라이언트의 URL
  • @GetMapping
    • 요청할 HTTP 메서드. 샘플에서는 GET 요청 구현
    • 각각의 엔드포인트에 따른 파라미터를 어노테이션 방식으로 구현 가능

Response 객체 설정

@Data
public class Post {
    Long userId;
    Long id;
    String title;
    String body;
}

Controller 구현

@RestController
public class CustomFeignController {
    private CustomFeignClient customFeignClient;

    @GetMapping("/posts")
    public List<Post> getPosts() {
        return customFeignClient.getPosts();
    }

    @GetMapping("/posts/{id}")
    public Post getPost(@PathVariable Long id) {
        return customFeignClient.getPostById(id);
    }
}

호출 결과 확인

$ curl <http://localhost:8080/posts>

// Res
[
  {"userId":1,"id":1,"title":"sunt aut facere repellat provident occaecati excepturi optio reprehenderit","body":"quia et suscipit\\nsuscipit recusandae consequuntur expedita et cum\\nreprehenderit molestiae ut ut quas totam\\nnostrum rerum est autem sunt rem eveniet architecto"},
  {"userId":1,"id":2,"title":"qui est esse","body":"est rerum tempore vitae\\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\\nqui aperiam non debitis possimus qui neque nisi nulla"},
  ...
]

$ curl <http://localhost:8080/posts/1>

// Res
{"userId":1,"id":1,"title":"sunt aut facere repellat provident occaecati excepturi optio reprehenderit","body":"quia et suscipit\\nsuscipit recusandae consequuntur expedita et cum\\nreprehenderit molestiae ut ut quas totam\\nnostrum rerum est autem sunt rem eveniet architecto"}

Resources

반응형