JAVA/이론

90. [ JAVA ] RestTemplate과 ResponseEntity의 차이와 활용법

천재단미 2025. 1. 19. 05:55
728x90
반응형

 

 

 

 

 

 

 

 

 

Spring Framework에서 RestTemplateResponseEntity는 HTTP 통신을 다루는 데 사용되며, 각각 클라이언트 측과 서버 측에서 중요한 역할을 합니다. 이번 글에서는 두 개념의 주요 차이점과 예제를 통해 활용법을 알아보겠습니다.

 

RestTemplate

 

RestTemplate은 클라이언트 측에서 RESTful 웹 서비스와 통신하기 위한 유틸리티 클래스입니다. HTTP 요청을 간단히 보내고 응답을 처리할 수 있도록 다양한 메서드를 제공합니다.

RestTemplate의 주요 특징

  • HTTP 요청 지원: GET, POST, PUT, DELETE와 같은 다양한 HTTP 메서드 지원.
  • 직렬화/역직렬화: JSON, XML 데이터를 Java 객체로 자동 변환.
  • 간편성: 간단한 API로 빠르게 외부 API 호출 가능.

RestTemplate 예제

외부 API 호출하기

@RestController
@RequestMapping("/api")
public class ApiController {

    private final RestTemplate restTemplate = new RestTemplate();

    @GetMapping("/get-data")
    public String getDataFromExternalApi() {
        String url = "<https://jsonplaceholder.typicode.com/posts/1>";
        ResponseEntity response = restTemplate.getForEntity(url, String.class);
        return response.getBody(); // 응답 본문 반환
    }
}

  • 설명:
    • getForEntity()를 사용해 외부 API로 GET 요청을 보냅니다.
    • 응답은 ResponseEntity로 반환되며, 본문(getBody())을 추출하여 반환합니다.

ResponseEntity

 

ResponseEntity는 서버 측에서 클라이언트로 HTTP 응답을 보낼 때 사용되는 객체입니다. 응답 상태 코드, 헤더, 본문을 모두 포함하여 세밀하게 응답을 제어할 수 있습니다.

ResponseEntity의 주요 특징

  • 상태 코드 관리: 상태 코드를 명시적으로 설정 가능.
  • 헤더 설정: HTTP 헤더를 설정할 수 있어, 클라이언트와의 통신을 유연하게 처리.
  • 본문 데이터: JSON 또는 객체를 응답 본문으로 설정 가능.

ResponseEntity 예제

서버에서 클라이언트로 응답 보내기

@RestController
@RequestMapping("/api")
public class ApiController {

    @GetMapping("/get-response")
    public ResponseEntity<String> getCustomResponse() {
        HttpHeaders headers = new HttpHeaders();
        headers.add("Custom-Header", "CustomValue");

        return new ResponseEntity<>("Hello, Client!", headers, HttpStatus.OK);
    }
}

  • 설명:
    • HttpHeaders로 응답 헤더를 설정.
    • 본문은 "Hello, Client!"로 설정되며, 상태 코드는 200 OK로 지정됩니다.

 RestTemplate과 ResponseEntity의 차이점 

차이점비교 

목적 클라이언트에서 HTTP 요청을 보냄 서버에서 HTTP 응답을 구성
사용 시점 외부 API 호출 시 클라이언트 요청에 대한 응답 생성 시
기능 다양한 HTTP 메서드 요청 지원 상태 코드, 헤더, 본문을 캡슐화하여 응답
반환 타입 객체 또는 ResponseEntity 항상 ResponseEntity
유연성 간단한 요청 생성 세밀한 응답 제어 가능

 RestTemplate과 ResponseEntity  

 

RestTemplate으로 외부 API를 호출하고, 그 결과를 ResponseEntity로 반환하는 구조는 많이 사용됩니다.

조합 활용 예제

@RestController
@RequestMapping("/api")
public class ApiController {

    private final RestTemplate restTemplate = new RestTemplate();

    @GetMapping("/fetch-and-respond")
    public ResponseEntity fetchAndRespond() {
        String url = "<https://jsonplaceholder.typicode.com/posts/1>";
        ResponseEntity externalResponse = restTemplate.getForEntity(url, String.class);

        if (externalResponse.getStatusCode() == HttpStatus.OK) {
            return new ResponseEntity<>(externalResponse.getBody(), HttpStatus.OK);
        } else {
            return new ResponseEntity<>("Error fetching data", HttpStatus.BAD_REQUEST);
        }
    }
}

  • 설명:
    • RestTemplate을 사용하여 외부 API에서 데이터를 가져옵니다.
    • 응답 상태에 따라 적절한 ResponseEntity를 반환합니다.

결론

  • RestTemplate: 클라이언트 측에서 RESTful API와 통신할 때 사용.
  • ResponseEntity: 서버에서 HTTP 응답을 제어할 때 사용.
  • 두 개념을 함께 활용하면 외부 API 통신부터 클라이언트 응답까지 효과적으로 처리할 수 있습니다.

 

 

추가

 

Spring RestTemplate 에 대한 설명과 RestTemplate과 WebClient 차이에 대하여 

추가  하여 전달 드리겠습니다. 

 

출처: https://heekim0719.tistory.com/425 [별토끼 DEVLOG:티스토리]

 

 

 

 

728x90
반응형
home top bottom
}