Java/오류노트

[Java/오류노트] Solved - Service id not legal hostname (xxxx)

adjh54 2024. 11. 25. 20:01
728x170
해당 글에서는 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 동일한 타입의 여러 빈이 있을 때 우선 선택할지 여부를 지정합니다.

 

 

FeignClient - spring-cloud-openfeign-core 3.1.9 javadoc

Latest version of org.springframework.cloud:spring-cloud-openfeign-core https://javadoc.io/doc/org.springframework.cloud/spring-cloud-openfeign-core Current version 3.1.9 https://javadoc.io/doc/org.springframework.cloud/spring-cloud-openfeign-core/3.1.9 pa

javadoc.io

 

 

Spring Cloud OpenFeign

Feign is a declarative web service client. It makes writing web service clients easier. To use Feign create an interface and annotate it. It has pluggable annotation support including Feign annotations and JAX-RS annotations. Feign also supports pluggable

docs.spring.io

 

3) 결과확인


💡 결과확인

- 아래와 같이 정상적으로 서버가 실행됨을 확인하였습니다.

 

 

 

 

오늘도 감사합니다. 😀

 

 

 

그리드형