728x90
개요
프로젝트에서 외부 REST API와 통신할 때 Feign Client를 사용하여 API를 호출했습니다.
GET, POST, DELETE 등은 문제없이 동작했으나, PATCH 메서드를 호출하려고 하던 중 에러가 발생하는 상황을 겪었습니다. Feign에서는 기본적으로 PATCH를 바로 지원하지 않으며, 이를 처리하려면 약간의 추가 설정이 필요하다는 사실을 알게되었습니다.
java.net.ProtocolException: Invalid HTTP method: PATCH
PATCH 메서드를 그대로 사용하게 된다면 위와 같은 유효하지 않은 HTTP method라는 에러가 발생합니다.
해결 방법
해결방법은 Apache HttpClient나 OkHttp 방법이 있습니다.
Apache HttpClient
1. 의존성 추가
implementation 'io.github.openfeign:feign-httpclient:11.8'
2. Configuration 설정
@Configuration
public class FeignApacheHttpConfiguration {
@Bean
public Client client() {
return new ApacheHttpClient();
}
}
3. 사용
@FeignClient(name = "example-api", configuration = FeignApacheHttpConfiguration.class)
public interface ExampleApiClient {
// 메서드 정의
}
OkHttp
1. 의존성 추가
implementation 'io.github.openfeign:feign-okhttp:11.8'
2. Configuration 설정
@Configuration
public class FeignOkHttpConfiguration {
@Bean
public OkHttpClient client() {
return new OkHttpClient();
}
}
3. 사용
@FeignClient(name = "example-api", configuration = FeignOkHttpConfiguration.class)
public interface ExampleApiClient {
// 메서드 정의
}
Apache HttpClient vs OkHttpClient
두 방식 모두 유효하지만, 약간의 차이가 있습니다.
- 성능
- OkHttpClient가 일반적으로 더 나은 성능을 보입니다.
- 기능
- 두 클라이언트 모두 다양한 기능을 제공하지만, OkHttp는 더 현대적인 API를 가지고 있습니다.
- 사용 편의성
- OkHttpClient 설정이 조금 더 간단합니다.
에러가 발생하는 주요 원인
Feign Client에서 PATCH 메서드 사용 시 에러가 발생하는 주요 원인은 다음과 같습니다.
- Java의 HttpURLConnection 제한
- Feign의 기본 클라이언트는 Java의 HttpURLConnection을 사용합니다.
- HttpURLConnection은 기본적으로 PATCH 메서드를
지원하지 않습니다.
- HTTP 1.1 스펙
- HTTP 1.1 스펙에서 PATCH 메서드는 선택적(optional) 메서드로 정의되어 있습니다.
- 이로 인해 일부 HTTP 클라이언트 구현체에서는 기본적으로 지원하지 않을 수 있습니다.
- Feign의 기본 설정
- Feign은 기본적으로 GET, POST, PUT, DELETE 등의 일반적인 HTTP 메서드만을 지원하도록 설계되었습니다.
- PATCH와 같은 덜 일반적인 메서드는 추가 설정 없이는 지원되지 않습니다.
- 보안 및 호환성 고려
- 일부 네트워크 인프라나 프록시 서버에서 PATCH 요청을 차단하거나 제대로 처리하지 못할 수 있어, 기본적으로 비활성화되어 있을 수 있습니다.
'TIL,일일 회고' 카테고리의 다른 글
[TIL, 일일 회고] 2024.09.25 - Arrays.fill() 메서드 (프로그래머스 - 덧칠하기) (1) | 2024.09.25 |
---|---|
[TIL, 일일 회고] 2024.09.24 - 나머지 연산(%)을 활용한 배열 순환 처리 방법 (1) | 2024.09.24 |
[TIL, 일일 회고] 2024.09.22 - 대용량 데이터 에러 해결 트러블 슈팅 (0) | 2024.09.22 |
[TIL, 일일 회고] 2024.09.21 - N+1 문제 해결 및 성능 최적화: HubPath 조회 트러블슈팅 (0) | 2024.09.22 |
[TIL, 일일 회고] 2024.09.20 - N+1 문제에서 Fetch Join을 선택하는 이유 (0) | 2024.09.20 |