Microservices Architecture / / 2024. 12. 10. 09:15

스프링 클라우드 패턴

1️⃣ 개발 패턴 (Development Patterns)

마이크로서비스 개발 시 설정 관리, 서비스 발견, 통신과 같은 개발의 핵심 요소를 처리합니다.

📌 주요 패턴

  1. 분산 설정 관리 패턴
    • 도구: Spring Cloud Config
    • 목적: 설정 파일을 중앙화된 서버에서 관리해 모든 마이크로서비스가 공유합니다.
    • 예시:
      spring:
        cloud:
          config:
            uri: http://localhost:8888
  2. 서비스 디스커버리 패턴
    • 도구: Eureka, Consul
    • 목적: 서비스 간 동적 연결 및 위치 검색을 지원합니다.
    • 예시:
      eureka:
        client:
          service-url:
            defaultZone: http://localhost:8761/eureka/
  3. 서비스 간 통신 패턴
    • 유형: 동기 통신 (Feign), 비동기 통신 (Kafka, RabbitMQ)
    • 예시:
      @FeignClient(name = "order-service")
      public interface OrderClient {
          @GetMapping("/orders/{id}")
          Order getOrder(@PathVariable Long id);
      }

2️⃣ 라우팅 패턴 (Routing Patterns)

API 요청을 효율적으로 라우팅하고 게이트웨이에서 공통 기능을 처리합니다.

📌 주요 패턴

  1. API 게이트웨이 패턴

    • 도구: Spring Cloud Gateway, Zuul
    • 목적: 클라이언트 요청을 적절한 마이크로서비스로 전달하고 필터링/보안을 적용합니다.
    • 예시:
      spring:
        cloud:
          gateway:
            routes:
              - id: user-service
                uri: lb://USER-SERVICE
                predicates:
                  - Path=/users/**
  2. 로드 밸런싱 패턴

    • 도구: Spring Cloud LoadBalancer (Ribbon 대체)
    • 목적: 여러 서비스 인스턴스에 부하를 분산합니다.
    • 예시:
      @LoadBalanced
      @Bean
      public RestTemplate restTemplate() {
          return new RestTemplate();
      }

3️⃣ 클라이언트 회복성 패턴 (Client Resilience Patterns)

장애 발생 시 시스템의 안정성을 유지하기 위한 패턴입니다.

📌 주요 패턴

  1. 서킷 브레이커 패턴

    • 도구: 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";
      }
  2. 재시도 패턴 (Retry Pattern)

    • 도구: Resilience4j Retry
    • 목적: 일시적인 장애 발생 시 요청을 재시도
    • 예시:
      @Retry(name = "userService", fallbackMethod = "fallback")
      public String retryUserService() {
          return restTemplate.getForObject("http://user-service/users", String.class);
      }
  3. 시간 초과 패턴 (Timeout Pattern)

    • 목적: 응답 시간이 오래 걸리는 요청을 일정 시간 내에 종료
    • 설정 예시:
      resilience4j:
        timeout:
          instances:
            userService:
              timeout-duration: 2s

4️⃣ 빌드/배포 패턴 (Build/Deployment Patterns)

마이크로서비스를 효율적으로 빌드하고 배포하는 패턴입니다.

📌 주요 패턴

  1. 컨테이너화 패턴

    • 도구: Docker
    • 목적: 마이크로서비스를 독립된 컨테이너로 패키징하여 이식성을 높입니다.
    • 예시:
      FROM openjdk:17
      COPY target/user-service.jar app.jar
      ENTRYPOINT ["java", "-jar", "app.jar"]
  2. CI/CD 패턴

    • 도구: Jenkins, GitHub Actions, GitLab CI
    • 목적: 지속적인 통합 및 배포를 통해 개발 속도를 높이고 오류를 줄입니다.
  3. 블루-그린 배포 패턴

    • 목적: 배포 시 두 개의 환경(블루/그린)을 유지하여 무중단 배포를 지원합니다.

5️⃣ 로깅 패턴 (Logging Patterns)

분산 시스템의 로그를 집계, 분석, 추적하는 패턴입니다.

📌 주요 패턴

  1. 분산 추적 패턴

    • 도구: Spring Cloud Sleuth + Zipkin
    • 목적: 서비스 간 요청 흐름을 추적합니다.
    • 예시:
      spring:
        zipkin:
          base-url: http://localhost:9411
  2. 중앙 집중식 로그 관리

    • 도구: ELK 스택, Fluentd
    • 목적: 모든 마이크로서비스의 로그를 한 곳에 수집해 시각화 및 분석

6️⃣ 보안 패턴 (Security Patterns)

마이크로서비스의 인증, 인가, 데이터 보안을 강화하는 패턴입니다.

📌 주요 패턴

  1. 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();
      }
  2. HTTPS/TLS 적용 패턴

    • 목적: 서비스 간 통신을 암호화하여 보안성을 높입니다.
    • 설정:
      server:
        ssl:
          enabled: true
          key-store: classpath:keystore.p12
          key-store-password: password
  3. 게이트웨이 보안 패턴

    • API Gateway 레벨에서 보안 필터를 통해 인증과 접근 제어를 수행합니다.

🎯 최종 정리: 스프링 클라우드 패턴

  1. 개발 패턴: 설정 관리, 서비스 디스커버리, 서비스 간 통신
  2. 라우팅 패턴: API 게이트웨이, 로드 밸런싱
  3. 클라이언트 회복성 패턴: 서킷 브레이커, 재시도, 시간 초과
  4. 빌드/배포 패턴: 컨테이너화, CI/CD, 블루-그린 배포
  5. 로깅 패턴: 분산 추적, 중앙 집중식 로그 관리
  6. 보안 패턴: 인증/인가 (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
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유