Spring RestTemplate은 스프링에서 제공하는 http 통신에 유용하게 사용가능한 템플릿이다. 스프링 3.0에서 추가되었고 HttpClient를 추상화하여 제공한다. 동기적인 HTTP요청을 한다.
RestTemplate deprecate 되었다(?) deprecate란 대안 기술이 나왔기에 사용하는 것을 권장하지 않음 or 곧 제거될 예정 이라는 뜻이다. 스프링 프로젝트 리드개발자분이 올린 issue 에는 “Deprecation은 정확하지 읂는 표현임. 유지관리모드에 있다가 더 정확판 표현” 이라 나와있다. WebClient를 사용해보기로 했다.
스프링 공식문서에도 다음과 같이 나와있다.
참고 : 5.0 기준 으로이 클래스는 유지 보수 모드에 있으며, 변경 사항과 버그는 앞으로 수락해야합니다. 보다 최신 API를 가지고 동기화, 비동기 및 스트리밍 시나리오를 지원하는org.springframework.web.reactive.client.webclient를 사용해보십시오.
@Value 어노테이션 null 인식 문제
developer key값을 숨기는 과정에서 사용되는 @Value 어노테이션으로 연결해준 변수가 인식이 안되는 문제 발생.
public void run(String... args) throws Exception {
SearchChannelAndVideoService searchChannelAndVideoService = new SearchChannelAndVideoService();
searchChannelAndVideoService.search();
}
다음과 같이 Controller를 만들기전 Service객체를 바로 생성했다. 이렇게 사용하면 스프링 DI 메커니즘에 의해 관리되는 Bean 객체가 아니기 때문에 @Value를 사용한 필드 주입이 동작하지 않았다. @Value 어노테이션을 사용하려면 SearchChannelAndVideoService를 스프링 빈으로 등록하고 스프링 컨텍스트에서 해당 빈을 가져와서 사용해야한다. 스프링 부트의 @SpringBootApplication 어노테이션이 지정된 클래스 내에서 SearchChannelAndVideoService 를 빈으로 븡록하고 해당 빈을 사용하는 방식으로 테스트해야한다.
다음은 해결한 코드이다.
@SpringBootApplication
public class YoutubeCommentSearchApplication implements CommandLineRunner {
@Autowired
private SearchChannelAndVideoService searchChannelAndVideoService;
public static void main(String[] args) {
SpringApplication.run(YourApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
searchChannelAndVideoService.search();
}
}
WebClient vs RestTemplate
Spring RestTemplate은 스프링에서 제공하는 http 통신에 유용하게 사용가능한 템플릿이다. 스프링 3.0에서 추가되었고 HttpClient를 추상화하여 제공한다. 동기적인 HTTP요청을 한다.
RestTemplate deprecate 되었다(?) deprecate란 대안 기술이 나왔기에 사용하는 것을 권장하지 않음 or 곧 제거될 예정 이라는 뜻이다. 스프링 프로젝트 리드개발자분이 올린 issue 에는 “Deprecation은 정확하지 읂는 표현임. 유지관리모드에 있다가 더 정확판 표현” 이라 나와있다. WebClient를 사용해보기로 했다.
스프링 공식문서에도 다음과 같이 나와있다. 참고 : 5.0 기준 으로이 클래스는 유지 보수 모드에 있으며, 변경 사항과 버그는 앞으로 수락해야합니다. 보다 최신 API를 가지고 동기화, 비동기 및 스트리밍 시나리오를 지원하는org.springframework.web.reactive.client.webclient를 사용해보십시오.
@Value 어노테이션 null 인식 문제
developer key값을 숨기는 과정에서 사용되는 @Value 어노테이션으로 연결해준 변수가 인식이 안되는 문제 발생.
다음과 같이 Controller를 만들기전 Service객체를 바로 생성했다. 이렇게 사용하면 스프링 DI 메커니즘에 의해 관리되는 Bean 객체가 아니기 때문에 @Value를 사용한 필드 주입이 동작하지 않았다. @Value 어노테이션을 사용하려면 SearchChannelAndVideoService를 스프링 빈으로 등록하고 스프링 컨텍스트에서 해당 빈을 가져와서 사용해야한다. 스프링 부트의 @SpringBootApplication 어노테이션이 지정된 클래스 내에서 SearchChannelAndVideoService 를 빈으로 븡록하고 해당 빈을 사용하는 방식으로 테스트해야한다. 다음은 해결한 코드이다.