웹에서 차트를 구현했던적이 있었는데 이를 위해 받아오는 데이터가 외부도메인인 탓에
CORS 정책때문에 삽질을 하던 적이 있었다.
그 때 사용했던게 Spring의 RestTemplate이였다.
RestTemplate은 Spring의 HTTP 통신 템플릿인데 이를 이용하여
서버 내부적으로 호출 한 뒤 컨트롤러 단에서 데이터를 다시 전송하는 방식으로 구현했었다.
예제를 위해 간단한 Test code를 올려둔다.
일단 pom.xml에 http관련 라이브러리를 추가한다.
<!-- http -->
<!-- httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.8</version>
</dependency>
<!-- httpcore -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.10</version>
</dependency>
<!-- httpasyncclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpasyncclient</artifactId>
<version>4.0-beta3</version>
</dependency>
그리고 root-context.xml에 restTemplate의 bean을 추가해준다.
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
<property name="requestFactory">
<bean class="org.springframework.http.client.SimpleClientHttpRequestFactory">
<property name="connectTimeout" value="5000" />
<property name="readTimeout" value="5000" />
</bean>
</property>
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
</list>
</property>
</bean>
마지막으로 테스트 코드를 작성한다.
import java.net.URI;
import java.util.Arrays;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
public class RestTemplateTest {
private static final Logger logger = LoggerFactory.getLogger(RestTemplateTest.class);
@Test
public void restTemplateTest() throws Exception{
RestTemplate restTemplate = new RestTemplate();
URI uri = URI.create("http://요청 url");
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36");
HttpEntity<String> entity = new HttpEntity<String>("parameters", headers);
ResponseEntity<String> result = restTemplate.exchange(uri, HttpMethod.GET, entity, String.class);
logger.info(result.toString());
}
}
restTemplate 객체 생성 후 header 객체에 헤더정보를 담아준다.
그리고 exchage 메서드로 uri와 헤더정보를 담아서 실행하는 코드이다.
이제 테스트메서드를 JUnit 테스트로 돌려보면?
로그에 데이터가 정상적으로 호출되는걸 확인할 수 있다.
이제 요청한 데이터를 가져가다 요리지지고 조리지지고 해서 쓰면 된다!
나 같은 경우엔 가져온 데이터를 스크립트단에서 차트에 붙이는데에 삽질을 했었다.
두번 다시는 하고싶지 않은 삽질의 추억..😢
'Spring' 카테고리의 다른 글
[Spring] Spring loaded 이용하여 톰캣 재시작없이 반영하기 (0) | 2020.09.03 |
---|---|
[Spring]client IP 를 얻기 위한 X-Forwarded-For(XFF) http header (0) | 2020.01.09 |
[Spring] lombok library 를 활용한 Annotation (0) | 2019.12.05 |
[Spring] Twilio api를 이용한 문자전송 서비스 (4) | 2019.09.26 |
[Spring] Jsoup을 활용한 웹 크롤링 (0) | 2019.09.26 |