본문 바로가기

IT 세상

[MSA] 후보 서비스 평가 기준 및 설계 표준, 트랜잭션 설계 및 업무 프로세스 개선안

MSA 기반의 어플리케이션 구축 방안

1. 요구사항 분석 및 서비스 분할

  • 비즈니스 요구사항 분석:
    • 시스템의 기능과 요구사항을 명확히 이해하고이를 바탕으로 서비스 분할 전략을 수립합니다.
  • 서비스 정의:
    • 각 비즈니스 도메인을 식별하고이를 기반으로 독립된 서비스로 분할합니다(예사용자 관리 서비스주문 관리 서비스결제 서비스 등)

2. 아키텍처 설계

  • 서비스 간 통신:
    • 서비스 간의 통신 방식 선택 (RESTful API, gRPC, 메시지 큐 등).
    • 서비스 간의 데이터 공유 및 통신을 효율적으로 관리하기 위한 전략 수립. (gRPC: google에서 개발한 오픈소스 RPC(Remote Procedure Call) 프레임워크)
  • 데이터베이스 설계:
    • 각 서비스가 독립된 데이터베이스를 가질 수 있도록 분리.
    • 서비스 간의 데이터 일관성을 유지하기 위한 전략 (사후 일관성이벤트 소싱 등). (사후 일관성모든 데이터 변경 사항이 결국 모든 복제본에 전파되어 일관된 상태를 이루게 되는 것을 의미시스템이 일정 시간이 지나면 최종적으로 일관된 상태에 도달하지만특정 시점에서는 일관되지 않을 수 있다는 것을 허용=Cassandra,DynamoDB) (이벤트 소싱시스템 상태를 직접 저장하지 않고상태 변화 자체를 나타내는 일련의 이벤트를 저장하여 시스템 상태를 재구성.)
  • API 게이트웨이:
    • 클라이언트 요청을 라우팅하고서비스 간의 API 통신을 관리하기 위한 API 게이트웨이 설정.

3. 개발 및 배포

  • 개발 환경 설정:
    • 독립적인 서비스 개발을 위한 공통 개발 환경 및 툴 체인 설정 (CI/CD 파이프라인버전 관리 시스템 등).
  • 컨테이너화:
    • 각 서비스를 컨테이너로 패키징 (Docker ).
    • 컨테이너 오케스트레이션 도구 선택 (Kubernetes ).
  • 배포 전략:
    • 각 서비스의 독립적인 배포 및 롤백을 위한 전략 수립 (블루-그린 배포카나리 배포 등).

4. 운영 및 모니터링

  • 모니터링 및 로깅:
    • 서비스 상태 및 성능을 모니터링하기 위한 도구 설정 (Prometheus, Grafana ).
    • 분산 로깅 시스템 구축 (ELK Stack ).
  • 서비스 장애 복구:
    • 장애 대응 및 자동 복구를 위한 전략 수립 (Circuit Breaker 패턴장애 격리 등).
  • 보안:
    • 서비스 간 통신 보안인증 및 인가 관리 (OAuth2, JWT ).
    • 데이터 암호화 및 보안 강화.

5. 성능 및 확장성

  • 자동 확장:
    • 서비스의 부하에 따라 자동으로 확장 및 축소할 수 있는 기능 설정 (Kubernetes HPA ).
  • 성능 최적화:
    • 서비스 성능을 최적화하고 병목 지점을 식별 및 개선.

6. 테스트 및 품질 관리

  • 자동화 테스트:
    • 단위 테스트통합 테스트시스템 테스트 등 다양한 테스트 자동화.
  • 지속적인 품질 관리:
    • 지속적인 코드 품질 검사 및 보안 검토 (SonarQube ).
예시
  • 온라인 쇼핑몰 애플리케이션
  • 서비스 분할:
    • 사용자 관리 서비스 (User Service)
    • 상품 관리 서비스 (Product Service)
    • 주문 관리 서비스 (Order Service)
    • 결제 서비스 (Payment Service)
  • 아키텍처 설계:
    • API 게이트웨이를 통해 클라이언트 요청을 각 서비스로 라우팅.
    • 각 서비스는 독립적인 데이터베이스를 사용하며, Kafka를 이용해 이벤트를 전달.
  • 개발 및 배포:
    • Docker와 Kubernetes를 이용해 각 서비스를 컨테이너화하고 배포.
    • CI/CD 파이프라인을 설정해 코드 변경 사항을 자동으로 배포.
  • 운영 및 모니터링:
    • Prometheus와 Grafana를 이용해 서비스 상태 모니터링.
    • ELK Stack을 이용해 로그 수집 및 분석.
  • 성능 및 확장성:
    • Kubernetes HPA를 이용해 서비스 자동 확장.
    • 캐싱 전략을 통해 응답 시간 최적화.

 

후보 서비스 평가 기준 및 설계 표준(비즈니스 로직 재구성, Saga패턴 적용 등)

< 후보 서비스 평가 기준 >

  • 마이크로서비스 아키텍처(MSA) 기반의 애플리케이션 구축에서 후보 서비스 평가 기준과 설계 표준을 제시하면보다 체계적이고 일관된 방식으로 서비스를 설계하고 개발할 수 있습니다.. 아래는 이러한 기준과 표준에 대한 상세한 가이드입니다.
  • 독립성:
    • 서비스가 독립적으로 배포되고 확장될 수 있는지 평가합니다.
    • 서비스가 다른 서비스와의 의존성을 최소화하고 있는지 확인합니다.
  • 응집도:
    • 서비스가 하나의 주요 기능 또는 비즈니스 도메인에 집중하고 있는지 평가합니다.
    • 내부 기능들이 서로 밀접하게 관련되어 있는지 확인합니다.
  • 결합도:
    • 서비스 간의 결합도가 낮아야 합니다서비스가 다른 서비스에 강하게 의존하지 않아야 합니다.
    • API 계약을 통해 서비스 간의 인터페이스를 명확히 정의합니다.
  • 성능 및 확장성:
    • 서비스가 필요에 따라 독립적으로 확장 가능한지 평가합니다.
    • 서비스의 성능 요구사항을 충족할 수 있는지 확인합니다.
  • 데이터 소유권:
    • 각 서비스가 자신만의 데이터베이스를 소유하고 있는지 평가합니다.
    • 데이터 일관성을 유지하기 위한 메커니즘이 있는지 확인합니다.
  • 보안:
    • 서비스가 적절한 보안 메커니즘을 갖추고 있는지 평가합니다.
    • 데이터 전송 시 암호화 및 인증/인가 메커니즘이 적용되어 있는지 확인합니다.

 

< 설계 표준 > 

1. 비즈니스 로직 재구성

  • 단일 책임 원칙(SRP: Single Responsibility Principle): 각 마이크로서비스가 단일한 기능 또는 책임만을 가지도록 설계되어야 한다는 원칙
    • 각 서비스는 단 하나의 비즈니스 기능에 대한 책임을 가져야 합니다.
    • 사용자 서비스는 사용자 관련 로직만 처리하고주문 서비스는 주문 관련 로직만 처리합니다.
  • 도메인 주도 설계(DDD: Domain-Driven Design): 시스템의 도메인(업무 영역)에 대한 깊은 이해를 바탕으로 설계도메인 전문가와 개발자 간의 긴밀한 협력을 통해 도메인 지식을 소프트웨어 모델에 녹여내는 것을 목표
    • 각 서비스는 도메인 모델을 기반으로 설계됩니다.
    • 핵심 도메인서브 도메인바운디드 컨텍스트 등을 정의하여 비즈니스 로직을 명확히 구분합니다.
  • API 계약:
    • 각 서비스 간의 인터페이스를 명확히 정의하여 상호 작용을 표준화합니다.
    • RESTful API, gRPC 등을 사용하여 서비스 간의 통신을 설계합니다.

2. Saga 패턴 적용

  • Saga 패턴 개요:
    • 분산 트랜잭션을 관리하기 위해 Saga 패턴을 적용합니다.
    • 각 서비스가 자신의 데이터베이스 트랜잭션을 처리하고다른 서비스와의 트랜잭션 조정을 이벤트로 관리합니다.
  • Saga 실행 방식:
    • 조정자 기반(Coordinator-Based): 중앙 조정자가 Saga를 관리하고 단계별로 실행합니다.
    • 오케스트레이션 기반(Orchestration-Based): 중앙 오케스트레이터가 각 서비스의 트랜잭션을 순차적으로 실행하고 롤백을 관리합니다.
    • 상태 기반(State-Based): 각 서비스가 자체적으로 트랜잭션을 관리하고상태를 공유하여 협력합니다.
  • 보상 트랜잭션:
    • 각 단계에서 실패 시 이전 상태로 복구하기 위한 보상 트랜잭션을 설계합니다결제 실패 시 주문 취소재고 복구 등의 보상 작업을 정의합니다.

3. 공통 설계 원칙

  • 컨테이너화 및 오케스트레이션:
    • Docker를 사용하여 각 서비스를 컨테이너화합니다.
    • Kubernetes 등을 사용하여 서비스 오케스트레이션을 관리합니다.
  • CI/CD 파이프라인:
    • 지속적 통합(CI) 및 지속적 배포(CD) 파이프라인을 설정하여 코드 변경 사항을 자동으로 테스트하고 배포합니다.
  • 모니터링 및 로깅:
    • Prometheus, Grafana, ELK Stack 등을 사용하여 서비스 모니터링 및 로그 관리를 표준화합니다.
    • 각 서비스의 성능 및 상태를 지속적으로 모니터링합니다.
  • 보안 표준:
    • OAuth2, JWT 등을 사용하여 인증 및 인가 메커니즘을 구현합니다. OAuth2: 사용자 비밀번호를 공유하지 않고도 애플리케이션간 리소스에 접근할 수 있도록 허용하는 인증 프로토콜 JWT(Json Web Token): JSON 객체를 사용하여 두 시스템 간 정보를 안전하게 전송하기 위한 표준(RFC 7519) 세션관리 용도
    • 데이터 전송 시 암호화를 적용하고각 서비스의 보안 요구사항을 문서화합니다.
  • 에러 처리 및 복구:
    • 글로벌 에러 처리 전략을 수립하고서비스 장애 시 복구 메커니즘을 설계합니다.
    • Circuit Breaker 패턴 등을 사용하여 장애 격리 및 복구를 관리합니다.
예시
  • 온라인 쇼핑몰 애플리케이션
  • 후보 서비스 평가:
    • 사용자 관리 서비스상품 관리 서비스주문 관리 서비스결제 서비스 각각의 독립성응집도결합도성능데이터 소유권보안 평가.
  • 비즈니스 로직 재구성:
    • 사용자 관리 서비스는 사용자 등록로그인프로필 관리 등 사용자 관련 로직만 처리.
    • 주문 관리 서비스는 주문 생성주문 조회주문 상태 변경 등 주문 관련 로직만 처리.
  • Saga 패턴 적용:
    • 주문 생성 Saga: 주문 서비스가 주문을 생성하고결제 서비스가 결제를 처리한 후재고 서비스가 재고를 감소시키는 순서로 트랜잭션 관리.
    • 결제 실패 시 보상 트랜잭션으로 주문 취소 및 재고 복구.
  • 공통 설계 원칙 적용:
    • Docker와 Kubernetes를 사용하여 모든 서비스를 컨테이너화하고 오케스트레이션.
    • Jenkins를 사용하여 CI/CD 파이프라인 설정.
    • Prometheus와 Grafana로 서비스 모니터링, ELK Stack으로 로그 관리.
    • OAuth2와 JWT로 인증 및 인가 관리.

 

 

트랜잭션 설계 및 업무 프로세스 개선안 제시

 

MSA 기반의 애플리케이션에서 트랜잭션 설계 및 업무 프로세스 개선안은 매우 중요합니다이는 서비스 간의 데이터 일관성을 유지하고비즈니스 프로세스를 효율적으로 운영하는 데 필수적입니다.

< 트랜잭션 설계 >

1. 트랜잭션 관리

  • 로컬 트랜잭션(Local Transactions):
    • 각 서비스는 자신의 데이터베이스에서만 트랜잭션을 관리합니다.
    • 단일 서비스 내의 트랜잭션은 전통적인 트랜잭션 관리 방식을 사용합니다.
  • 분산 트랜잭션(Distributed Transactions):
    • 여러 서비스에 걸쳐 트랜잭션이 발생할 때, 2PC(Two-Phase Commit)와 같은 분산 트랜잭션 기법은 복잡하고 성능에 영향을 미칠 수 있으므로, MSA에서는 주로 Saga 패턴을 사용합니다.

2. Saga 패턴

  • 오케스트레이션 방식:
    • 중앙 오케스트레이터가 각 서비스의 트랜잭션 단계를 관리합니다예시주문 생성 후 결제 요청결제 성공 시 재고 감소 등.
  • 코레오그래피 방식코레오그래피(Choreography): 중앙 조정자 없이 각 서비스 자체적으로 이벤트를 생성하고해당 이벤트를 구독(subscribe)하여 필요한 동작을 수행
    • 각 서비스가 이벤트를 통해 트랜잭션 단계를 관리합니다예시주문 생성 이벤트 -> 결제 서비스가 결제 처리 -> 결제 성공 이벤트 -> 재고 서비스가 재고 감소.

3. 보상 트랜잭션

  • 보상 트랜잭션 설계:
    • 트랜잭션 실패 시 상태를 원래대로 되돌리기 위한 보상 작업을 설계합니다예시결제 실패 시 주문 취소재고 복구 등.

4. 상태 기반 트랜잭션 관리

  • 상태 전이 관리:
    • 트랜잭션 상태를 데이터베이스에 저장하고상태 전이를 통해 트랜잭션 진행 상황을 추적합니다.
    • 각 상태 변화 시 이벤트를 발생시키고다음 단계를 실행합니다.

 

< 업무 프로세스 개선안 >

1. 프로세스 자동화

  • 업무 흐름 자동화:
    • 반복적이고 일관된 작업을 자동화하여 인적 오류를 줄이고 효율성을 높입니다예시주문 처리결제 승인송장 발행 등.

2. 데이터 일관성 유지

  • 최종 일관성(Eventual Consistency): 분산 시스템 데이터의 일관성 보장 모델, 시스템이 모든 데이터 복제본 간에 일관성을 유지하는 데 시간이 걸릴 수 있음을 인정시간이 지나면 모든 복제본이 동일한 데이터 상태를 갖게 될 것을 보장
    • 분산 시스템에서 즉각적인 일관성 대신 최종 일관성을 지향합니다.
    • 이벤트 소싱(Event Sourcing) 및 CQRS(Command Query Responsibility Segregation) 패턴을 사용하여 데이터 일관성을 유지합니다. CQRS: 애플리케이션의 데이터 읽기 작업과 쓰기 작업을 분리하여 읽기 모델과 쓰기 모델을 각각 별도로 정의하여독립적으로 최적화할 수 있도록 함. (쓰기:일관성읽기:성능)

3. 실시간 모니터링 및 알림

  • 서비스 상태 모니터링:
    • 각 서비스의 상태와 성능을 실시간으로 모니터링합니다.
    • 문제가 발생하면 자동으로 알림을 보내고대응할 수 있도록 합니다예시: Prometheus, Grafana 등을 사용한 모니터링 시스템 구축. Prometheus:모니터링 및 경보 도구로주로 시간 시계열 데이터(Time Series Data)의 수집과 저장을 위해 설계 오픈소스 Grafana:시각화 및 모니터링 오픈소스

4. 비즈니스 프로세스 재설계

  • 프로세스 맵핑 및 분석:
    • 현재 비즈니스 프로세스를 맵핑하고병목 지점 및 개선 가능 영역을 분석합니다.
    • 업무 흐름을 단순화하고불필요한 단계를 제거합니다.
  • 고객 중심 설계:
    • 고객 경험을 개선하기 위해 프로세스를 재설계합니다예시주문 처리 시간을 단축하고고객 문의에 대한 응답 속도를 개선.

5. 교육 및 변경 관리

  • 직원 교육:
    • 새로운 시스템과 프로세스에 대한 교육을 제공하여 직원들이 적응할 수 있도록 합니다예시새로운 트랜잭션 처리 방식자동화 도구 사용법 등.
  • 변경 관리:
    • 프로세스 변경 시모든 이해관계자가 변경 사항을 인지하고 적응할 수 있도록 변경 관리 전략을 수립합니다예시변경 관리 계획 수립변경 사항 커뮤니케이션피드백 수렴 등.
예시온라인 쇼핑몰 애플리케이션


트랜잭션 설계


1. 주문 생성 및 결제:
  • 오케스트레이션 방식:
    • 주문 서비스가 주문을 생성하고결제 서비스에 결제 요청.
    • 결제 성공 시 재고 서비스에 재고 감소 요청.
    • 결제 실패 시 주문 취소 및 재고 복구.
2. 보상 트랜잭션:
  • 결제 실패 시 주문 상태를 '취소'로 변경하고재고를 원래 상태로 복구.
업무 프로세스 개선안
  • 프로세스 자동화:
    • 주문 생성 후 결제 요청결제 승인 후 자동으로 재고 감소 및 배송 요청 생성.
    • 고객에게 주문 상태 업데이트를 실시간으로 알림.
  • 실시간 모니터링 및 알림:
    • Prometheus와 Grafana를 사용하여 주문 서비스결제 서비스재고 서비스의 상태 모니터링.
    • 결제 실패나 재고 부족 시 자동 알림 발송.
  • 비즈니스 프로세스 재설계:
    • 주문 처리 시간을 단축하기 위해 주문 생성과 동시에 결제 및 재고 확인을 병렬 처리.
    • 고객 문의 대응 프로세스를 간소화하여 고객 만족도 향상.
  • 직원 교육 및 변경 관리:
    • 새로운 트랜잭션 처리 방식과 자동화 도구 사용법에 대한 교육 제공.
    • 변경 사항을 정기적으로 커뮤니케이션하고피드백을 수렴하여 지속적으로 개선.

 

 

** 핵심키워드 명세 **

 

1. MSA 기반의 어플리케이션 구축 방안

 

핵심 키워드:

  • 마이크로서비스 아키텍처(MSA)
  • 서비스 분할
    • 독립성
    • 응집도
  • API 게이트웨이
  • 데이터베이스 설계
  • 데이터 소유권
  • 컨테이너화
    • Docker
    • Kubernetes
  • CI/CD 파이프라인
    • 지속적 통합(CI)
    • 지속적 배포(CD)
  • 모니터링 및 로깅
    • Prometheus
    • Grafana
    • ELK Stack
  • 보안
    • OAuth2
    • JWT
  • 배포 전략
    • 블루-그린 배포
    • 카나리 배포
  • 자동 확장
    • Kubernetes HPA

2. 후보 서비스 평가 기준 및 설계 표준

  • 후보 서비스 평가 기준 핵심 키워드:
    • 독립성
    • 응집도
    • 결합도
    • 성능 및 확장성
    • 데이터 소유권
    • 보안
  • 설계 표준 핵심 키워드:
    • 비즈니스 로직 재구성
      • 단일 책임 원칙(SRP) SRP(Single Responsibility Principle)
      • 도메인 주도 설계(DDD) DDD(Domain-Driven Design)
    • API 계약
    • Saga 패턴
      • 오케스트레이션 방식
      • 코레오그래피 방식
      • 보상 트랜잭션
    • 컨테이너화 및 오케스트레이션
    • CI/CD 파이프라인
    • 모니터링 및 로깅
    • 보안 표준
      • 인증 및 인가
    • 에러 처리 및 복구
      • Circuit Breaker 패턴 Circuit Breaker:외부 API 호출 시 오류 응답 갯수와 시간으로 외부 서비스 장애 판단 후 장애 전파 차단. Closed:정상, Open:차단상태, HalfOpen:Open에서 Closed 상태 전이중

3. 트랜잭션 설계 및 업무 프로세스 개선안

  • 트랜잭션 설계 핵심 키워드:
    • 로컬 트랜잭션
    • 분산 트랜잭션
      • 2PC (Two-Phase Commit)
      • Saga 패턴
        • 오케스트레이션 방식
        • 코레오그래피 방식
      • 보상 트랜잭션
    • 상태 기반 트랜잭션 관리
  • 업무 프로세스 개선안 핵심 키워드:
    • 프로세스 자동화
    • 데이터 일관성 유지
      • 최종 일관성(Eventual Consistency)
      • 이벤트 소싱(Event Sourcing)
      • CQRS (Command Query Responsibility Segregation)
    • 실시간 모니터링 및 알림
    • 비즈니스 프로세스 재설계
      • 프로세스 맵핑 및 분석
      • 고객 중심 설계
    • 교육 및 변경 관리
      • 직원 교육
      • 변경 관리

 

'IT 세상' 카테고리의 다른 글

API Gateway  (0) 2024.08.12
MSA 심층 서술형 예상 문제  (0) 2024.08.11
Application Architect 심층 서술형 예상 질문  (0) 2024.08.11
Application Architect 직무 면접, 채용 예상 질문  (0) 2024.08.11
ACID  (0) 2024.08.11