본문 바로가기
Dev/Spring Boot

[스프링 부트 개념과 활용] 스프링 REST 클라이언트 2부

by dev_jsk 2020. 9. 3.
728x90
반응형

커스터마이징

RestTemplate와 WebClient의 HttpTemplate

RestTemplate

  • java.net.HttpURLConnection 사용

WebClient

  • Reactor Netty의 HTTP 클라이언트 사용

로컬 커스터마이징

WebClient baseUrl 적용

// RestRunner.java

@Component
public class RestRunner implements ApplicationRunner {

    @Autowired
    WebClient.Builder builder;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        WebClient webClient = builder.baseUrl("http://localhost:8080").build();  // baseUrl 적용
        
        StopWatch stopWatch = new StopWatch();
        stopWatch.start();

        Mono<String> helloMono = webClient.get().uri("/hello").retrieve().bodyToMono(String.class);
        helloMono.subscribe(s -> {
            System.out.println(s);

            if(stopWatch.isRunning()) {
                stopWatch.stop();
            }

            System.out.println(stopWatch.prettyPrint());
            stopWatch.start();
        });

        Mono<String> worldMono = webClient.get().uri("/world").retrieve().bodyToMono(String.class);
        worldMono.subscribe(s -> {
            System.out.println(s);

            if(stopWatch.isRunning()) {
                stopWatch.stop();
            }

            System.out.println(stopWatch.prettyPrint());
            stopWatch.start();
        });

    }
}

결과

baseUrl 설정 시 WebClient.Uri()호출Url만 입력할 수 있다.

 

글로벌 커스터마이징

1. WebClientCustomizer 이용 baseUrl 설정하기

// Application.java

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    // WebClientCustomizer Bean 등록
    @Bean
    public WebClientCustomizer webClientCustomizer() {
        return new WebClientCustomizer(){
            @Override
            public void customize(Builder webClientBuilder) {
                webClientBuilder.baseUrl("http://localhost:8080");  // baseUrl 설정
            }
        };
    }
}

// RestRunner.java

@Component
public class RestRunner implements ApplicationRunner {

    @Autowired
    WebClient.Builder builder;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        WebClient webClient = builder.build();  // baseUrl 설정 제거
        ...
    }
}

결과

baseUrl 설정 시 WebClient.Uri()호출Url만 입력할 수 있다.

2. RestTemplateCustomizer 이용 Apach Http Client로 변경하기

(1) 의존성 추가

// pom.xml

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
</dependency>

(2) Application 클래스 수정

// Application.java

@SpringBootApplication
public class Application {
	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}

	@Bean
	public RestTemplateCustomizer restTemplateCustomizer() {
		return new RestTemplateCustomizer(){
			@Override
			public void customize(RestTemplate restTemplate) {
				// 각각 원하는 구현체에 맞는 Adaptor 형식의 RequestFactory가 있다.
				// Spring PSA(Portable Service Abstraction)가 잘 적용되어 있다.
				restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
			}
		};
	}
}

결과

RestTemplateJava에 있는 기본 HttpConnection 대신 Apache에서 제공하는 HttpClient를 사용한다.

728x90
반응형

댓글