testconfig-{profiles} 의 yml 파일 생성하기
- testconfig.yml
test:
message: default yml
- testconfig-dev.yml
test:
message: dev yml
- testconfig-prod.yml
test:
message: prod yml
위 파일들은 로컬 컴퓨터에 특정 폴더 안에 생성되어 있을 것이다. 해당 파일들을 git repository 에 push 한다.
(예상 경로 : https://github.com/seohae/microservice-config)
Config 관리 프로젝트 생성
1) SpringBoot 프로젝트를 생성하였다. ConfigApplication.java 파일 안에 아래 코드를 추가하여 Config Server로 등록하자.
@SpringBootApplication
@EnableConfigServer /* config server 등록 */
public class ConfigApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigApplication.class, args);
}
}
2) application.yml 파일에 이전에 git에 push했던 testconfig.yml 의 git 경로 설정을 추가하자.
server:
port: 6060
spring:
application:
name: config
cloud:
config:
server:
git:
uri: https://github.com/seohae/microservice-config
#private git repository 일 경우 username, password 입력 필요
#username: seohae
#password:
Service 프로젝트 설정 추가
- 1) pom.xml
이전에 생성했던 Config 프로젝트를 해당 Service 프로젝트에서 testconfig.yml 등의 config 설정을 적용할 수 있도록 아래 dependency를 추가하자.
<!-- common config -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
- 2) resources/bootstrap.yml 신규 파일 생성
application.yml 과 같은 경로에 bootstrap.yml 파일을 생성하자.
spring:
cloud:
config:
uri: http://127.0.0.1:6060
name: testconfig # git repository 에 있는 .yml 파일의 파일명
Profiles 설정 추가 (dev, prod 등)
- 1) bootstrap.yml 파일에 아래 코드를 추가하자.
spring:
cloud:
config:
uri: http://127.0.0.1:6060
name: testconfig # git repository 에 있는 .yml 파일의 파일명
profiles:
active: dev
우리는 아까 git Repository에 총 3개의 파일을 push 했다.
- testconfig.yml
- testconfig-dev.yml
- testconfig-prod.yml
위 3개의 파일 중에서 방금 bootstrap.yml에 추가한 active: dev 로 인해 testconfig-dev.yml 파일로 적용됨을 확인하자.
Service 프로젝트에서 Config 설정 적용 여부 확인
모든 설정을 끝낸 후, Service 프로젝트를 재시작 후 아래 API를 호출하면 우리가 git에 추가했던 application.yml 파일이 적용되었음을 알 수 있다.
@RestController
@RequestMapping("")
@RequiredArgsConstructor
@Slf4j
public class UserController {
private final Environment environment;
@GetMapping("/test")
public String status() {
log.info(environment.getProperty("test.message"));
}
}
재기동 없이 Config 수정내용 적용하기
Service 프로젝트에 적용되어있는 공통 testconfig.yml 등의 파일에 수정이 일어나면 Service 프로젝트를 재기동해야 적용된다. 이는 불편함을 가지고 있으므로, 재기동 없이 적용할 수 있도록 설정을 추가하자.
Service 프로젝트에 Actuator 적용
- 1) pom.xml
<!-- 재기동 없이 config (.yml) 적용 (/refresh 호출해야함) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
- 2) application.yml
management:
endpoints:
web:
exposure:
include: refresh
- http://localhost:8080/actuator/refresh 호출
include: 뒤에 올 수 있는 속성들은 여러가지가 있지만 Config의 재기동 없는 적용을 위한 refresh만 우선 추가했다. 이제 Service 프로젝트를 기동하여 http://localhost:8080/actuator/refresh 를 호출해보자. 호출 이후에 수정된 Config 내용이 적용됨을 확인할 수 있다.
RabbitMQ 를 사용하여 Spring-Cloud-Bus 설정
우선 위 방법에는 단점이 존재하는데, 변경된 config 설정을 적용하고자 모든 프로젝트의 /refresh 를 호출해줘야한다. 이를 해결하기 위해 아래 포스팅을 참고하자.
- 1) RabbitMQ 설치
https://devfunny.tistory.com/438
- 2) Spring-Cloud-Bus 설정
https://devfunny.tistory.com/439
'Coding > Spring' 카테고리의 다른 글
스프링 부트 @SpringBootApplication (0) | 2021.07.08 |
---|---|
Spring Cloud Bus 적용하기 (0) | 2021.06.11 |
Spring 에서 Entity -> Dto 로 변환하는 ModelMapper 사용 (0) | 2021.06.07 |
CommonException 으로 @Valid 어노테이션 BindingException, MethodArgumentNotValidException 처리하기 (0) | 2021.02.18 |
SpringBoot + PasswordEncoder 사용하여 패스워드 암/복호화 실행하기 (0) | 2021.02.18 |