1️⃣ 개발 패턴 (Development Patterns)
마이크로서비스 개발 시 설정 관리, 서비스 발견, 통신과 같은 개발의 핵심 요소를 처리합니다.
📌 주요 패턴
- 분산 설정 관리 패턴
- 도구: Spring Cloud Config
- 목적: 설정 파일을 중앙화된 서버에서 관리해 모든 마이크로서비스가 공유합니다.
- 예시:
spring: cloud: config: uri: http://localhost:8888
- 서비스 디스커버리 패턴
- 도구: Eureka, Consul
- 목적: 서비스 간 동적 연결 및 위치 검색을 지원합니다.
- 예시:
eureka: client: service-url: defaultZone: http://localhost:8761/eureka/
- 서비스 간 통신 패턴
- 유형: 동기 통신 (Feign), 비동기 통신 (Kafka, RabbitMQ)
- 예시:
@FeignClient(name = "order-service") public interface OrderClient { @GetMapping("/orders/{id}") Order getOrder(@PathVariable Long id); }
2️⃣ 라우팅 패턴 (Routing Patterns)
API 요청을 효율적으로 라우팅하고 게이트웨이에서 공통 기능을 처리합니다.
📌 주요 패턴
API 게이트웨이 패턴
- 도구: Spring Cloud Gateway, Zuul
- 목적: 클라이언트 요청을 적절한 마이크로서비스로 전달하고 필터링/보안을 적용합니다.
- 예시:
spring: cloud: gateway: routes: - id: user-service uri: lb://USER-SERVICE predicates: - Path=/users/**
로드 밸런싱 패턴
- 도구: Spring Cloud LoadBalancer (Ribbon 대체)
- 목적: 여러 서비스 인스턴스에 부하를 분산합니다.
- 예시:
@LoadBalanced @Bean public RestTemplate restTemplate() { return new RestTemplate(); }
3️⃣ 클라이언트 회복성 패턴 (Client Resilience Patterns)
장애 발생 시 시스템의 안정성을 유지하기 위한 패턴입니다.
📌 주요 패턴
서킷 브레이커 패턴
도구: Resilience4j
목적: 장애가 발생한 서비스에 대한 요청을 일시적으로 차단해 시스템 보호
예시:
@CircuitBreaker(name = "userService", fallbackMethod = "fallback") public String callUserService() { return restTemplate.getForObject("http://user-service/users", String.class); } public String fallback(Exception e) { return "Service unavailable"; }
재시도 패턴 (Retry Pattern)
- 도구: Resilience4j Retry
- 목적: 일시적인 장애 발생 시 요청을 재시도
- 예시:
@Retry(name = "userService", fallbackMethod = "fallback") public String retryUserService() { return restTemplate.getForObject("http://user-service/users", String.class); }
시간 초과 패턴 (Timeout Pattern)
- 목적: 응답 시간이 오래 걸리는 요청을 일정 시간 내에 종료
- 설정 예시:
resilience4j: timeout: instances: userService: timeout-duration: 2s
4️⃣ 빌드/배포 패턴 (Build/Deployment Patterns)
마이크로서비스를 효율적으로 빌드하고 배포하는 패턴입니다.
📌 주요 패턴
컨테이너화 패턴
- 도구: Docker
- 목적: 마이크로서비스를 독립된 컨테이너로 패키징하여 이식성을 높입니다.
- 예시:
FROM openjdk:17 COPY target/user-service.jar app.jar ENTRYPOINT ["java", "-jar", "app.jar"]
CI/CD 패턴
- 도구: Jenkins, GitHub Actions, GitLab CI
- 목적: 지속적인 통합 및 배포를 통해 개발 속도를 높이고 오류를 줄입니다.
블루-그린 배포 패턴
- 목적: 배포 시 두 개의 환경(블루/그린)을 유지하여 무중단 배포를 지원합니다.
5️⃣ 로깅 패턴 (Logging Patterns)
분산 시스템의 로그를 집계, 분석, 추적하는 패턴입니다.
📌 주요 패턴
분산 추적 패턴
- 도구: Spring Cloud Sleuth + Zipkin
- 목적: 서비스 간 요청 흐름을 추적합니다.
- 예시:
spring: zipkin: base-url: http://localhost:9411
중앙 집중식 로그 관리
- 도구: ELK 스택, Fluentd
- 목적: 모든 마이크로서비스의 로그를 한 곳에 수집해 시각화 및 분석
6️⃣ 보안 패턴 (Security Patterns)
마이크로서비스의 인증, 인가, 데이터 보안을 강화하는 패턴입니다.
📌 주요 패턴
API 보안 패턴
- 도구: Spring Security, OAuth 2.0, JWT
- 목적: API 접근을 제어하고 인증/인가를 수행합니다.
- 예시:
@Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .authorizeRequests(auth -> auth.anyRequest().authenticated()) .oauth2Login(); return http.build(); }
HTTPS/TLS 적용 패턴
- 목적: 서비스 간 통신을 암호화하여 보안성을 높입니다.
- 설정:
server: ssl: enabled: true key-store: classpath:keystore.p12 key-store-password: password
게이트웨이 보안 패턴
- API Gateway 레벨에서 보안 필터를 통해 인증과 접근 제어를 수행합니다.
🎯 최종 정리: 스프링 클라우드 패턴
- 개발 패턴: 설정 관리, 서비스 디스커버리, 서비스 간 통신
- 라우팅 패턴: API 게이트웨이, 로드 밸런싱
- 클라이언트 회복성 패턴: 서킷 브레이커, 재시도, 시간 초과
- 빌드/배포 패턴: 컨테이너화, CI/CD, 블루-그린 배포
- 로깅 패턴: 분산 추적, 중앙 집중식 로그 관리
- 보안 패턴: 인증/인가 (Spring Security, OAuth2), HTTPS 암호화
'Microservices Architecture' 카테고리의 다른 글
엘라스틱서치(Elasticsearch) (0) | 2024.12.10 |
---|---|
12 팩터 앱(12 Factor App) (0) | 2024.12.10 |
Resilience4j (2) | 2024.12.09 |
온프레미스(On-Premise) (2) | 2024.12.09 |
프로비저닝(Provisioning) (1) | 2024.12.09 |