Spring Framework/RestTemplate
-
RestTemplate Retry와 Interceptor 동작원리 - RestTemplate Hands On 8Spring Framework/RestTemplate 2023. 9. 30. 00:01
개요 Retry와 Interceptor의 동작원리에 대해 알아보고자 합니다. Interceptor의 등록 public RestTemplateBuilder additionalInterceptors(ClientHttpRequestInterceptor... interceptors) { Assert.notNull(interceptors, "interceptors must not be null"); return additionalInterceptors(Arrays.asList(interceptors)); } additionalInterceptors 메서드를 통해 인터셉터가 추가됩니다. ClientHttpRequestInterceptor는 Spring 3.1부터 사용가능하며 해당 인터페이스를 구현하여 RestTem..
-
RestTemplate Retry 실습 - RestTemplate Hands On 7Spring Framework/RestTemplate 2023. 9. 29. 00:01
개요 일시적인 네트워크 이슈로 에러가 발생하는 경우에는 한 번만 실패하고 끝내야 할까? 이런 경우에는 한번 더 재시도하면 성공할 가능성이 있습니다. RestTemplate Retry는 어떻게 가능할까요? 떠오르는 가장 간단한 방법 @RestController class RestTemplateRetryTestController( private val restTemplate: RestTemplate, ) { @GetMapping("time-out-retry") fun timeOut(){ val url = "http://localhost:8080/time-out-retry-test" var responseEntity: ResponseEntity try { responseEntity = restTemplate...
-
RestTemplate Timeout - ResetTemplate Hands On 7Spring Framework/RestTemplate 2023. 9. 28. 00:01
개요 만약 호출하는 서버에 네트워크에 문제가 생겨서 응답시간이 지연되거나, 장애로 응답시간이 지연되는 경우 어떻게 처리해야 할까요? 무한정 대기를 하게 되면 쓰레드를 점유하게 되어 서버의 자원도 낭비되고, 유저가 응답을 받기까지 무한정 대기할 수도 없습니다. @RestController class RestTemplateTimeoutTestController( private val restTemplate: RestTemplate, ) { @GetMapping("time-out") fun timeOut(){ val url = "http://localhost:8080/time-out-test" val newCreateRestTemplate = RestTemplate() newCreateRestTemplate...
-
RestTemplate Error Handling - RestTemplate Hands On 6Spring Framework/RestTemplate 2023. 9. 27. 00:01
개요 이전 글들에서는 RestTemplate의 Get, Post, Delete 등에 대해 알아보았습니다. 이번 글에서는 RestTemplate Error Handling에 대해 알아보고자 합니다. 에러는 매우 다양하게 발생할 수 있습니다. 일시적인 네트워크 에러, 호출하는 서버의 다운, 잘못된 요청 등등.. 에러를 발생시키는 코드 @RestController class RestTemplateErrorHandling { val baseUrl = "localhost:8080" @GetMapping("/error-handle") fun errorHandle(){ val apiUrl = "/error-handle-test" val restTemplate = RestTemplate() val responseEnt..
-
RestTemplate Post Request - RestTemplate Hands On 4Spring Framework/RestTemplate 2023. 9. 24. 00:01
개요 이전 글에서는 RestTemplate을 활용하여 Get 요청의 QueryParam, PathVariable, Header등에 대해 학습했었습니다. 이번 글에서는 RestTemplate Post Request에 대해 학습해 보겠습니다. RestTemplate Post로 요청 보내기 @RestController class RestTemplatePostTestController { val baseUrl = "http://localhost:8080" @PostMapping("post-test") fun postTest() { val apiPath = "/post-test-call" val restTemplate = RestTemplate() val person = Person() val headers = ..
-
RestTemplate Get Request - RestTemplate Hands On 3Spring Framework/RestTemplate 2023. 9. 23. 00:01
개요 이전의 RestTemplate Get Request 파라미터 없는 요청에 대한 응답위주로 다루었다면 이번글은 QueryParam, PathVariable, Header 등 요청에 필요한 부가정보들을 어떻게 활용할 수 있는지 알아보고자 합니다. QueryParam 호출해보기 @GetMapping("/query-test-call") fun getQueryParamCall(@RequestParam param: Map): String { println(param) return "query" } Map으로 QueryParamater를 받는 api를 하나 준비했습니다. RestTemplate으로 queryParam 인자로 넘겨 호출하기 @GetMapping("/query-test") fun getQueryPa..
-
RestTemplate Get Request - RestTemplate Hands On 2Spring Framework/RestTemplate 2023. 9. 21. 00:01
개요 이전의 RestTemplate 생성과정에 이어 RestTemplate Get Request를 실습해보려 합니다. 글에서는 다음과 같은 테스트를 수행해 봅니다. Get으로 String 객체 호출해 보기 getForEntity와 getForObject의 차이점 String을 returnType으로 받지만 MyObject가 오는 경우 내가 원하는 필드만 발라내기 중첩 객체 필드도 받을 수 있는가 외부 호출 Controller 준비 @RestController class TestController { @GetMapping("/outer-call") fun outerCall(): String{ sleep(1000) return "process 1s job" } } // intellij HTTP plugin을..
-
RestTemplate이란? - RestTemplate Hands On 1Spring Framework/RestTemplate 2023. 9. 20. 00:01
개요 평소에 RestTemplate이란 기술을 알고 있었지만 FeignClient를 주로 활용하여 활용하곤 했습니다. 그러면 FeignClient를 더 학습하는게 좋을 텐데 굳이 RestTemplate을 학습하는 이유는 무엇일까요? 다른 개발자들은 Feign을 활용하는 대신 RestTemplate을 더 선호할 수 있습니다. RestTemplate을 활용하여 외부호출이 적용된 프로젝트들을 만날 수도 있습니다. RestTemplate을 활용하는 프로젝트를 만났기 때문에 이를 위해 공부해보고자 합니다. 이전에 FeignClient, WebClient, RestTemplate에 대해 비교하며 정리한글도 첨부해봅니다. RestTemplate이란? RestTemplate은 spring 3.0부터 등장한 기능입니다...