본문 바로가기

트러블슈팅

[Spring Cloud OpenFeign] Spring Cloud 2020.x -> 2021.x Compression(gzip,deflate) 이슈

OpenFeign이 11버전이 되면서 기존에 제공하지 않던 Compression 처리를 OpenFeign 기본 Client에서 해줍니다.

이로 인해 Spring Cloud OpenFeign 3.1.x 부터는 OpenFeign 11을 사용하고 이로 인해 아래와 같이 변경되었습니다.

    - Response Decode 과정에 자동으로 포함되던 Compresssion 처리가 중복이 될 수 있어 제거

    - Compresssion 처리는 각 Http Client(Apache HttpClient, okhttp 등)에서 처리될 것 기대

Spring Cloud 2021.x 부터는 Spring Cloud OpenFeign 3.1.x 가 사용되기 때문에

Apache HttpClient를 사용하고 Compression 까지 사용한다면 에러가 발생하게 됩니다.

이는 SpringCloud에서 기본 제공되는 ApacheHttpClientFactory인 DefaultApacheHttpClientFactory에서는 Compression 처리가 비활성화되어 있기 때문입니다. (아마도 BREACH 공격 때문에 Compression과 Cookie 처리를 비활성화 해둔 것 같습니다)

그래서 ApacheHttpClient를 Feign의 HttpClient로 사용하고 있는 경우 Compresssion 처리하기 위해서는 ApacheHttpClientFactory를 빈으로 등록해줄 필요가 있습니다.

기존에 Compresssion을 사용하기도 했고 내부망에서만 통신 되기 때문에 아래와 같이 Compresssion 처리를 활성화된 CustomApacheHttpClientFactory를 정의하고 빈으로 등록해 처리 하였습니다.

public static class CustomApacheHttpClientFactory implements ApacheHttpClientFactory {

    private HttpClientBuilder builder;

    public CustomApacheHttpClientFactory(HttpClientBuilder builder) {
        this.builder = builder;
    }

    @Override
    public HttpClientBuilder createBuilder() {
        return this.builder.disableCookieManagement().useSystemProperties();
    }
}