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 등).
예시
|
후보 서비스 평가 기준 및 설계 표준(비즈니스 로직 재구성, 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 패턴 등을 사용하여 장애 격리 및 복구를 관리합니다.
예시
|
트랜잭션 설계 및 업무 프로세스 개선안 제시
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. 주문 생성 및 결제:
|
** 핵심키워드 명세 **
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 |