Spring Cloud Cloud란?
Spring에서는 흔히 설정과 관련된 정보를 application.properties나 application.yml에서 관리합니다.
설정에는 API Secret이나 암호키 같은 민감한 정보가 있을 수 있기 때문에 보통 환경변수나 jar 실행 시의 argument로 이런 값을 받게 해서 유출을 방지합니다.
하지만 이런 방식은 같은 instance 여러개가 다른 시간에 배포되는 MSA 같은 환경에서는 관리가 너무 어려워 비현실적입니다. 이를 해결하기 위한게 Spring Cloud Config입니다.
Spring Cloud Config를 쓰면...
- Backend(Git, Vault 등)에서 설정 파일들을 버전 관리 가능
- instance의 재시작 없이 주기적으로 새로운 설정으로 업데이트
- MS를 시작할 때 마다 환경변수나 program argument를 전달하지 않아도 됨
Spring Cloud Config의 단점
MSA는 개별 MS의 개발 복잡도를 낮추는 대신, 전체 시스템의 운영 복잡도는 늘리는 구조입니다.
Eureka, Gateway, Config 등 다 해결하려는 문제가 있고 그 문제를 잘 해결해 주는 도구들이지만, 서버가 1개 늘어날 때 마다 관리해야 할 대상, 취약점도 1개씩 늘어나는 겁니다.
그래서 일부 사람들은 Spring Cloud Config를 사용하지 말고 AWS Centralized Configuration Store같은 Managed Solution을 사용해야 한다고 주장하고, 저도 가능하면 Managed Solution을 사용하는게 맞는 주장이라고 생각합니다.
Config Server 구성하기
1. Spring Cloud Config Server 의존성을 추가합니다.
implementation('org.springframework.cloud:spring-cloud-config-server')
2. @EnableConfigServer를 추가합니다.
@SpringBootApplication
@EnableConfigServer
public class BookItOutConfig {
public static void main(String[] args) {
SpringApplication.run(BookItOutConfig.class, args);
}
}
3. Github에 private repo를 만들고 설정 파일들을 업로드 합니다.
- 따로 설정을 할게 아니라면 root에 넣어야 합니다
- 파일 형식은 MS이름-프로파일.yml 으로 해야 합니다 (MS이름은 spring.application.name에서 설정한 이름을 말함)
4. ssh 키를 만들고 public key는 Github에 업로드 하고, private key는 Spring Cloud Config 설정에 넣어야 합니다.
spring:
cloud:
config:
server:
git:
uri: GITHUB_SSH_경로
privateKey: SSH_PRIVATE_KEY
이렇게 하면 Spring Cloud Config Server는 완성됩니다. 이제 다른 MS들이 Config Server를 써서 설정을 할 수 있습니다. 설정 파일에 접근하려면( /MS이름/프로파일형식으로) 아래와 같이 나옵니다.
Config Client 구성하기
Config Client은 Config Server가 SSH private key로 받아오고 있는 설정을 받아와서 사용하는 MS들을 말합니다.
1. Spring Cloud Config 의존성을 추가합니다.
implementation("org.springframework.cloud:spring-cloud-starter-config")
2. application.yml에 Config Server 주소와 애플리케이션 이름을(Github 파일 형식과 같아야 함) 적어줍니다.
spring:
application:
name: core
config:
import: configserver:http://config:8888/
Client 설정은 이걸로 끝입니다!
'👨💻 프로그래밍 > Architecture' 카테고리의 다른 글
Redis, RabbitMQ, Kafka를 각각 Message Queue로 사용할 때의 장단점 (1) | 2023.09.30 |
---|---|
🔒 분산 Architecture에서 Redlock으로 Lock 걸기 (0) | 2023.09.28 |
MSA 환경에서 Circuit Breaker를 쓰는 이유, 그럼에도 발생하는 문제 Bulkhead로 해결하기 (0) | 2023.09.24 |
로드 밸런서(Load Balancer)에 쓰이는 알고리즘 (0) | 2023.04.01 |
마이크로서비스(MSA)를 쓰는 이유 (0) | 2023.03.28 |