본문 바로가기
반응형

소프트웨어 아키텍처 the hard parts10

[MSA] 분산된 서비스 간의 WorkFlow(워크플로) 관리 - 오케스트레이션과 코레오그래피 분산된 서비스 환경에서 도메인에 특정한 작업을 수행하고, 그와 관련된 부수적인 문제를 처리하기 위해 둘 이상의 분산된 서비스를 하나의 WorkFlow(워크플로)로 조합하는 방법을 알아본다. WorkFlow관리 방법에는 크게 오케스트레이션(Orchestration) 패턴과 코레오그래피(Choreography) 패턴이 있다. MSA에서 보상트랜잭션 관리를 위한 Saga에서 얘기하는 오케스트레이션, 코레오그래피 패턴과 동일하다. 1. 오케스트레이션(Orchestration) 패턴 오케스트레이터(중재자)를 활용해서 중앙에서 워크플로 상태, 선택적 로직, 에러 처리, 알림 등 워크플로를 관리하는 방법MSA에서는 워크플로당 오케스트레이터를 하나씩 두는 것이 일반적 임경계조건과 에러 조건 등이 복잡한 워크플로 모델링.. 2024. 9. 7.
[MSA] 분산 데이터 액세스 패턴(분산된 데이터에 어떻게 접근할 것인가) MSA에서 서비스를 분리하게 되면 기존 통합되어 있던 데이터도 함께 분리가 된다. 이렇게 분산된 서비스 환경에서 서비스가 자신이 소유하지 않는 데이터에 접근하는 방법들에 대해 알아본다. 1. 서비스 간 통신 패턴다른 서비스에 필요한 데이터를 요청하는 가장 일반적인 패턴(타 서비스 API 호출)단순하고 직관적이나, 서비스 간 동적 커플링이 발생 함장점단점 단순하고 직관적  네트워크, 데이터, 보안 Latency가 발생(성능 저하) 데이터 용량 문제가 없음 확장성/처리량 이슈(타 서비스와 함께 확장 필요)  결합도에 따른 내고장성/가용성 저하  서비스 간 계약이 필요(API명세 등) 2. 컬럼 스키마 복제 패턴필요한 컬럼을 분산된 서비스의 여러 테이블에 복제해서 다른 바운디드 컨텍스트에서 자급자족적으로 사용.. 2024. 9. 1.
[MSA] 서비스 분리 해야할 때와 통합 해야할 때(서비스 분해와 통합 요인) MSA에서 서비스 분리를 고려할 때 어떤 경우에 서비스를 분리해야하고 반대로 어떤 경우에 서비스를 통합해야하는지 서비스의 분해인과 통합인에 대해서 알아본다. 간단하게 모률화, 세분도라는 용어부터 알아보자모듈화: 사용상의 유연성과 다양성을 위해 표준화된 단위로 만듬, 시스템을 별도의 파트로 분해하는 것세분도: 더 큰 단위를 형성하는 많은 입자 중 하나로 구성하거나, 그렇게 보임. 모듈화로 나눠진 개별 파트의 사이즈에 관한 것MSA에서 이 세분도를 어디까지 어떻게 가져가야 하는지에 대한 고민을 많이하게 된다. 서비스를 너무 작게 나누면 관리의 복잡도, 통신 복잡도, 결국 아키텍처의 복잡도가 증가하게 되고, 너무 큰 단위로 나누게 되면 서비스간의 결합도, 영향도 등이 증가하게 된다. 아래의 서비스 분해인과 통.. 2024. 8. 31.
[MSA] 데이터베이스 종류와 데이터베이스 선택 평가 항목 MSA에서 데이터베이스를 분리하면 각 서비스의 목적에 맞는 최적의 데이터베이스 타입을 선택해서 적용할 수 있다. 데이터베이스 타입의 종류와 타입을 선택하기 위한 평가 항목, 항목 별 대략적인 평가 점수를 정리해본다.  데이터베이스 타입 종류DB설명RDB - 일반적으로 ACID를 지원하는 관계형 데이터베이스 - Oracle, MySQL, Postgresql 등Key-Value DB - 키와 값으로 이루어진 저장과 조회라는 가장 간단한 원칙에 충실한 데이터베이스 - Redis, Riak, Oracle Berkely, AWS DynamoDB 등문서형(Document) DB - 키와 값이라는 기본 구조이지만 값을 문서로 저장. - 별도 스키마가 없고 문서를 추가하면 그게 바로 스키마가 됨 - MongoDB,.. 2024. 8. 25.
[MSA] 모놀리식 데이터베이스 분해 과정 MSA에서 데이터베이스 분해하는 과정을 알아본다. 아래 내용들은 도서 '소프트웨어 아키텍처 The Hard Parts'를 참조해서 정리한 내용이다. 모놀리식 데이터베이스를 분해해서 독립적인 데이터 도메인을 생성하는 5단계의 프로세스는 아래와 같다. 데이터 도메인이란 특정 도메인과 관련된 테이블, 뷰, 외래키, 트리거 등의 연관된 데이터베이스 아티팩트들의 집합이라고 할 수 있다.  데이터베이스 분해 과정 5단계1. 데이터베이스 분석 및 데이터 도메인 생성일반적인 모놀리식 시스템은 모든 서비스가 모든 데이터베이스의 데이터에 접근 가능한 구조 임(공유 데이터베이스 통합 스타일) → 데이터와 서비스가 서로 단단하게 결합되어 있어 데이터베이스 변경 관리가 어려움데이터베이스 분해를 위해서는 데이터 베이스 내에서 구.. 2024. 8. 24.
[MSA] 데이터베이스 분해인과 통합인 - 어떤 이유로 분해 또는 통합해야하는가? MSA에서 어떤 경우에 데이터베이스를 분리를 해야하는지?(분해인), 또 어떤 경우에 데이터베이스 통합을 고려해야하는지?(통합인)를 살펴본다.  데이터베이스 분해인- 데이터베이스를 분해해야하는 명분(어떤 경우, 어떤 이유로 데이터베이스 분리를 하는가?)- 데이터베이스를 분리하면 아래 표의 분해인 항목에 대한 장점을 가질 수 있다.분해인설명변경관리-  테이블,컬럼 등 변경 시 얼마나 자주 변경되고, 얼마나 많은 서비스가 영향을 받는가?    (데이터베이스 변경에 따른 서비스 변경, 테스트, 재배포 등의 범위와 영향도 줄일 수 있음)커넥션 관리- 데이터베이스가 여러 분산된 서비스와 커넥션을 맺을 수 있는가?   (데이터베이스의 최대 가용 커넥션 수에 도달 및 초과할 수 있는가?) - 서비스마다 자체 커넥션 풀.. 2024. 8. 18.
[MSA] 모놀리식 어플리케이션 분해 전략(서비스 분리) 모놀리식 어플리케이션을 분해하는 전략을 알아본다. 아래 내용들은 도서 '소프트웨어 아키텍처 The Hard Parts'를 참조했다.  아래 그림은 모놀리식 분해 전략을 위한 의사 결정 트리이다. 먼저 어플리케이션이 모듈화할 명분이 있는가?를 식별한다. 다시 말해 유지보수성, 테스트성, 배포성, 민첩성, 유연성 등을 필요로 하는 모놀리식 어플리케이션인지를 판단한다. 모놀리식 어플케이션 분해(모듈화)의 필요성에 대한 자세한 내용은 아래 링크를 참조한다.https://happy-jjang-a.tistory.com/323 다음으로 분해가 가능한 코드인지를 평가한다. 코드 내부 구조가 적절한지 판별하는 절대적인 기준은 없으나, 코드의 특성을 거시적으로 살펴보는 방법들을 활용하면 내부 구조(특히, 컴포넌트/패키지 .. 2024. 8. 17.
[MSA] 모듈화와 아키텍처 퀀텀 시스템 및 서비스 모듈화가 왜 필요하고 이와 관련된 아키텍처 퀀텀이라는 것은 무엇인지 정리해본다. 모듈화(분산 시스템)모듈화란 시스템을 작은 단위로 분리하여 나누는 것으로 기본적으로 결합도를 낮추는 것이라고 할 수 있다. 비즈니스가 경쟁 우위를 유지하기 위해서는 아래 그림처럼 시장 출시 속도가 빨라야 하고, 이를 위해서는 민첩성이 필요하다. 기술적으로 보면 가용성, 확장성, 배포성, 시험성(테스트), 유지 보수성이 필요하다고 할 수 있다. 특히, 기술 때문에 비즈니스가 발목을 잡히지 않게 하려면 민첩성(배포성, 시험성(테스트), 유지 보수성)은 필수이다. 그리고 모듈화를 통해서 기술적인 부분들이 용이해 질 수 있다.  확장성, 탄력성 모듈화를 통해 필요한 기능만 독립적으로 리소스 낭비없이 빠른 속도로 대.. 2024. 8. 15.
반응형