Hello, Freakin world!

[Spring Cloud Config] 2.서비스 연결하기 본문

Spring Cloud/Config

[Spring Cloud Config] 2.서비스 연결하기

johnna_endure 2021. 2. 10. 17:44

버전 정보

Spring boot 2.4.2, Java 11

 

컨피그 서버 만들기에 이어 이번에는 컨피그 서버를 이용하는 클라이언트 서비스를 만들어보자.

javachoi.tistory.com/390

 

[Spring Cloud Config] 1.컨피그 서버 만들기

대략적인 동작 방식 서비스 A의 소스를 그레이들이나 메이븐으로 빌드할 경우 jar 형식의 아티팩트가 만들어집니다. 서비스 A의 구성 정보에는 config 서버의 url 정보가 있습니다. jar가 실행될 때 S

javachoi.tistory.com

 

클라이언트 서비스

 

스프링 이니셜라이저를 이용해 Spring Actuator, Web, Spring Config Client Server 의존성을 추가해 프로젝트를 생성한다.

build.gradle

plugins {
    id 'org.springframework.boot' version '2.4.2'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'my.springboot'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenCentral()
}

ext {
    set('springCloudVersion', "2020.0.1")
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.cloud:spring-cloud-starter-config'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

test {
    useJUnitPlatform()
}

 

그 다음 구성 정보로 주입된 메세지를 보여줄 엔드 포인트를 작성한다.

 

HelloRestController

@RestController
public class HelloRestController {

	@Autowired ServerConfig serverConfig;

	@GetMapping("/hello")
	public String hello() {
		return serverConfig.getValue();
	}
}

 

ServerConfig

@Component
public class ServerConfig {

	@Value("${msg:default}")
	private String value;

	public String getValue() {
		return value;
	}
}

@Value 애너테이션을 이용하면 ${키} 라는 표현식을 이용해 프로퍼티 값에 접근할 수 있다. :default 는 값는 존재하지 않는 경우 default를 기본값으로 하겠다는 의미다.

 

애플리케이션 코드를 여기서 마무리.

클라이언트 서버가 요청할 컨피그 서버의 url을 지정해줘야 한다.

 

application.properties

spring.application.name=webclient
spring.profiles.active=default
spring.config.import=configserver:http://localhost:8888
//#spring.cloud.config.uri=http://localhost:8888 <== 주석 처리됨
management.endpoints.web.exposure.include=*

참고 : bootstrap.properties 파일에 프로파일 정보와 url을 지정하면 동작을 하지 않는다. application.properties 파일에 작성해줘야 된다.

 

management.endpoints.web.exposure.include=* 는 스프링 액추에이터에서 자동 생성해주는 관리 엔드포인트를 모두 접근 가능하도록 하겠다는 의미다.

 

그리고 스프링 부트 2.4부터 추가적인 config 정보를 불러오는 방식이 약간 바뀌었다. spring.config.import라는 프로퍼티를 이용해야된다. 주석 처리된 부분 스프링 클라우드 컨피그 공식 문서에 기재된 방식인데 2.4 버전에선 동작하지 않는다.

이에 대해서는 spring.io/blog/2020/08/14/config-file-processing-in-spring-boot-2-4 를 읽어보면 도움이 될 것 같다.

 

위의 프로파일과 url 정보는 jar 파일 java 명령어를 통해 구동시키면서 덮어쓸 수 있다는 것도 알아두자.

 

위 프로젝트를 IDE에서 구동시키고 로그를 살펴보자.

 

 

 

컨피그 서버에서 뭔가를 가져왔다는 로그가 찍혔다.

 

서버를 실행시키고 브라우저에서 /hello를 호출해보자.

 

 

 

 

메세지가 잘 찍힌다.

프로파일을 dev로 바꿔주면 어떨까? webclient-dev.yml 에는 msg="hello, world! dev" 값이 들어있다.

프로파일을 dev로 바꿔주고 IDE에서 다시 시작해보자.

 

 

 

프로파일에 따라 다른 구성 정보가 출력되고 있다.

 

마지막으로 액추에이터에서 제공하는 /actuator/env 엔드포인트를 이용해 환경변수들을 살펴보자.

 

 

위처럼 JSON 데이터를 정리해서 보여준다.

오!! 현재 프로파일은 dev인데 default 프로파일의 구성정보까지 모두 가져온 점이 눈에 띄인다.

 

 

Comments