반응형
해당 글에서는 Java에서 발생한 Service id not legal hostname 오류에 대해 해결방법에 대해 알아봅니다
1) 문제점
💡 문제점
- 로컬 서버를 실행하는 중에 Service id not legal hostname 문제점이 발생하였습니다.
- 이는 주로 Spring Cloud Feign Client를 사용하는 도중에 발생하는 문제를 의미합니다.
- 서비스 ID가 올바른 호스트네임 형식이 아닐때 나타나는 문제점입니다.
반응형
2) 해결책
💡 해결책
- 아래와 같이 @FeignClient 어노테이션을 통해서 name, url을 지정을 하는데 “json placeholder”라는 이름으로 지정을 하였습니다.
- 이는 허용되지 않은 호스트 네임에 속합니다. “특수문자나 공백”을 포함하는 경우 허용되지 않는 호스트 네임을 의미합니다.
- 반대로 허용되는 호스트 네임의 경우는 서비스 이름에는 영문자, 숫자, 하이픈(-)만 사용하는 것이 안전하며 호스트네임은 DNS 명명 규칙을 따라야합니다.
@FeignClient(name = "json placeholder", url = "<https://jsonplaceholder.typicode.com>") // 잘못된 사용예시(X) - 공백이 포함됨
@FeignClient(name = "json placeholder^^", url = "<https://jsonplaceholder.typicode.com>") // 잘못된 사용예시(X) - 특수문자가 포함됨
@FeignClient(name = "json-placeholder", url = "<https://jsonplaceholder.typicode.com>") // 올바른 사용예시(O) - 하이픈(-)으로 문자 연결
@FeignClient(name = "jsonPlaceholder", url = "<https://jsonplaceholder.typicode.com>") // 올바른 사용예시(O) - CamelCase로 문자를 구성
public interface OpenFeignService {
@GetMapping("/posts")
List getPosts();
@GetMapping("/posts/{id}")
PostResponseDto getPostById(@PathVariable("id") String id);
}
1. 참고 : @FeignClient
💡 @FeignClient
- HTTP 클라이언트를 생성하기 위한 인터페이스를 선언하는 어노테이션입니다. 이 어노테이션을 사용하면 REST API를 호출하는 인터페이스를 쉽게 정의할 수 있습니다.
- 선언만으로 REST 클라이언트를 정의하며, Spring Runtime 단계에서 해당 인터페이스의 구현체를 자동으로 생성합니다.
- @GetMapping, @PostMapping 등의 Spring MVC 어노테이션을 그대로 사용할 수 있습니다.
💡 [참고] @FeignClient 속성
속성 | 리턴 타입 | default value | 설명 |
name | String | - | FeignClient의 이름을 지정합니다. (필수) |
url | String | "" | 대상 서버의 URL을 지정합니다. |
configuration | Class<?>[] | FeignClientsConfiguration.class | FeignClient에 대한 사용자 정의 구성 클래스 지정합니다. |
fallback | Class<?> | void.class | 장애 발생 시 대체할 구현 클래스 지정합니다. |
fallbackFactory | Class<?> | void.class | 동적 fallback 객체 생성을 위한 Factory 클래스 지정합니다. |
path | String | "" | 모든 메서드에 적용될 공통 prefix 경로를 지정합니다. |
decode404 | boolean | false | 404 응답을 에러로 처리할지 여부를 지정합니다. |
primary | boolean | true | 동일한 타입의 여러 빈이 있을 때 우선 선택할지 여부를 지정합니다. |
3) 결과확인
💡 결과확인
- 아래와 같이 정상적으로 서버가 실행됨을 확인하였습니다.
오늘도 감사합니다. 😀
반응형