
MSA 애플리케이션을 잘 설계하려면
“서비스를 잘게 나누는 것”보다
“운영·배포·장애·설정·관찰까지 한 흐름으로 관리하는 것”이 더 중요하다.
통신 표준화
자원 중심 설계
URI는 자원(Resource)을 의미 있게 표현
/users, /orders/{orderId}, /products/{productId}HTTP 메서드로 행위 표현
GET 조회, POST 생성, PUT/PATCH 수정, DELETE 삭제버전 관리
API 변경 시 호환성 유지를 위한 버저닝
/api/v1/users, /api/v2/users구버전 삭제 시점까지 병행 운영 전략 필요
단일 진입점
공통 기능 집중
로드 밸런싱·스케일 아웃
애플리케이션 코드는 그대로 두고, 설정만 바꿔도 되게 만드는 것이 핵심이다.
공통 개념
Spring Cloud Config Server
그 외 대안
Consul (서비스 디스커버리 + KV 저장소)
Kubernetes ConfigMap / Secret
클라우드 서비스
메트릭·상태 수집
시각화
경고(Alert)
Circuit Breaker
Fallback
서비스 호출 실패 시
사용자 경험을 완전히 끊지 않기 위한 안전장치
중앙 로그 수집 (ELK)
분산 추적
자동화 파이프라인
테스트
롤백 전략
implementation 'org.springframework.cloud:spring-cloud-config-server'
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: [설정 파일이 있는 Git 레포지토리]
implementation 'org.springframework.cloud:spring-cloud-starter-config'
implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'
spring:
application:
name: user-service
cloud:
config:
uri: http://localhost:8888 # Config Server 주소
name: user-service-config # 가져올 설정 파일 이름 prefix
spring:
config:
import:
- classpath:/bootstrap.yml
Spring Boot 애플리케이션의 상태·메트릭·환경 정보를 노출하는 모듈
운영/모니터링에 특화
implementation 'org.springframework.boot:spring-boot-starter-actuator'
management:
endpoints:
web:
base-path: /management # 기본은 /actuator
management:
endpoints:
web:
exposure:
include: health,info,beans,conditions
exclude: threaddump,heapdump
/actuator/health (또는 /management/health)/actuator/info/actuator/metrics/actuator/env/actuator/loggers/actuator/beans/actuator/threaddump/actuator/httpexchanges운영 환경에서는 보안·인증과 반드시 같이 묶어서 사용해야 한다.
Circuit Breaker
Fallback
Circuit Breaker가 열리거나 호출이 실패했을 때 실행할 대체 로직
예)
흐름
fallbackUri: forward:/fallback/user 로 포워딩장점
상황
처리
@CircuitBreaker(name = "userServiceCB", fallbackMethod = "fallbackGetUserGrade") 적용
fallbackGetUserGrade 에서는
효과
정리하면,
좋은 MSA 애플리케이션은 단순히 서비스들을 “잘게 나눈 구조”가 아니라
까지 한 세트로 설계된 구조다.
이 퍼즐들이 맞춰질수록 시스템은 “변화에 강하고, 장애에도 버티는” 구조가 된다.