[java] Spring RestTemplate을 이용한 RESTful 서비스 호출

Spring RestTemplate은 Spring 프레임워크에서 제공하는 HTTP 클라이언트 라이브러리로, RESTful 서비스를 호출하는데 매우 편리한 기능을 제공합니다. 이 글에서는 RestTemplate을 사용하여 RESTful 서비스를 호출하는 방법에 대해 알아보겠습니다.

의존성 추가하기

먼저, Maven이나 Gradle을 사용하여 프로젝트에 Spring RestTemplate의 의존성을 추가해야 합니다.

Maven:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Gradle:

implementation 'org.springframework.boot:spring-boot-starter-web'

RestTemplate 사용하기

RestTemplate은 HTTP 요청을 보내고 응답을 받는데 사용됩니다. 주요 메소드는 다음과 같습니다.

GET 요청 보내기

RestTemplate restTemplate = new RestTemplate();
String url = "http://example.com/api/users/{id}";

User user = restTemplate.getForObject(url, User.class, 1);
System.out.println(user.getName()); // 사용자의 이름 출력

POST 요청 보내기

RestTemplate restTemplate = new RestTemplate();
String url = "http://example.com/api/users";

User newUser = new User("John Doe");

ResponseEntity<User> response = restTemplate.postForEntity(url, newUser, User.class);
if (response.getStatusCode() == HttpStatus.CREATED) {
    User createdUser = response.getBody();
    System.out.println(createdUser.getId()); // 생성된 사용자의 ID 출력
}

요청 매개변수 수정하기

URL에 포함되는 매개변수를 동적으로 설정하려면, getForObject 메소드의 세 번째 매개변수에 UriVariables를 사용하면 됩니다.

RestTemplate restTemplate = new RestTemplate();
String url = "http://example.com/api/users/{id}";

Map<String, String> params = new HashMap<>();
params.put("id", "1");

User user = restTemplate.getForObject(url, User.class, params);
System.out.println(user.getName()); // 사용자의 이름 출력

응답을 커스터마이즈하기

RestTemplate은 기본적으로 JSON 형식의 응답을 처리할 수 있습니다. 하지만, 다른 형식의 응답을 처리해야 할 때는 커스터마이즈해야 합니다. 예를 들어, XML 형식의 응답을 처리하려면 Jackson 외에 추가적인 라이브러리가 필요합니다.

Maven:

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
</dependency>

Gradle:

implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml'

RestTemplate을 생성할 때, 커스터마이즈된 HttpMessageConverter를 추가해야 합니다.

RestTemplate restTemplate = new RestTemplate();

MappingJackson2XmlHttpMessageConverter xmlConverter = new MappingJackson2XmlHttpMessageConverter();
xmlConverter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_XML));

restTemplate.getMessageConverters().add(xmlConverter);

이제 RestTemplate을 사용하여 XML 형식의 응답을 처리할 수 있습니다.

결론

Spring RestTemplate을 사용하여 RESTful 서비스를 호출하는 방법을 알아보았습니다. RestTemplate은 다양한 HTTP 메소드를 지원하며, 요청과 응답을 커스터마이즈할 수 있는 기능을 제공합니다. 좀 더 복잡한 상황에서는 WebClient를 고려해볼 수도 있습니다. Spring에서 제공하는 HTTP 클라이언트 라이브러리 중에서 선택해 사용하는 것이 중요합니다.

참고 자료: