728x90
반응형
Spring Framework에서 RestTemplate과 ResponseEntity는 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
반응형
'JAVA > 이론' 카테고리의 다른 글
79. [JAVA] @OneToMany & @ManyToOne ?? (1) | 2025.01.15 |
---|---|
60. [ JAVA ] SpringBoot JPA @Entity 사용법 (0) | 2025.01.12 |
54. [ JAVA ] Spring Boot에서 발생하는 예외처리(@Exception Hander) (0) | 2025.01.11 |
36. [ JAVA ] 배열 : HashMap (0) | 2024.12.17 |
35. [ JAVA ] 배열 : ArrayList (0) | 2024.12.17 |