푸념! 요즘은 과거 "성문법", "맨투맨"식 영어 교육시대를 살아가는 느낌입니다. 영어를 배우는건지 영어를 가르치기 위한 용어를 배우기 위해 공부를 하는지 알 수 없는 시대! 용어 보다는 실제로 경험해온 개발방법에 최근 정리된 방법론들을 해석해 봅니다.
EDD역시도 MSA의 보편화로 인해 파생된 개발 방법론인듯한다. Kafka, RabbitMQ등의 clustered message broker를 적극 활용하여 고가용/고성능, 손쉬운 확장성을 구현해 내기 위한 방법론이다.
이 개념 역시도 새로운 개념은 아니다. 꼰대의 입장에서 보면 Kafka 그 자체이다.
누군가 데이터를 만들어내고 (producer), 누군가가 그 데이터를 소비하며 ( consumer ), 누군가가 데이터를 소비(consume)하여 새로운데이터를 만들어(produce)에 낸다 ( aggregation ), 관심사는 topic을 통하여 분리한다.
message broker를 통한 business의 구현의 다음과 같은 장점을 가진다.
- fire & forget이 가능하다.
- producer는 필요한 시기에 데이터를 소비하고 원하는 시점에 데이터를 생산한다.
- peer의 performance 수신여부등에는 관심이 없다.
- feature 마다 route를 설정 할 필요가 없다.
- 어디서 생성된 데이터 인지는 모르겠지만 내가 필요한 데이터를 소비하여 내 비지니스를 간단히 완성한다.
- 어디서 쓸지는 모르겠지만 내가 만들어낸 데이터를 버리지 않고 생상해 낸다.
- bussines 확장이 용이하다.
- 필요한 / 필요할지도 모르는 데이터는 최대한 생성해 두고
- feature / bussiness 가 필요한다. aggregation하고 소비하여 완성하면된다.
- 계속된 data aggregation / transform을 통하여 data의 품질을 높이고 단순화해 나가면서 복잡한 비지니스를 완성한다.
- 이러한 이유로 기계학습 (DNN)에 많이 추천되는듯한다.
단점이 없는것은 아니다.
- broker의 장애는 전면장애다.
- data schema의 변경이 어디로 전파될지 모른다 ( 변경이 어렵다 )
- data producing및 latency의 변경이 어디서 문제가 생길지 예측하기 어렵다.
단점을 극복하려면
- 모니터링 강화
- 어떤 변경이 어떤 영향을 미치지 모르므로 전체 시스템에 대한 견고한 모니터링이 필요하다.
- infra performance - 경험상 이부분에서 거의 모든 이슈가 시작된다.
- service별 perofrmance
- topic / parition별 performance
- 데이터 흐름에 대한 visualizing
- domain간 data schema의 철저한 분리
- clean architecture
- 관리부서 domain간의 data schema를 변환하여 사용한다.
- domain간 schema 변경 및 로직의 변경이 consumer들의 data driven에 영향을 미치지 않아야한다.
- data schema versioning & registering
- 아무리 data schema를 분리하여도 외부 schema 변경이 없을수는 없다.
- data schema에 version을 두어 consumer가 분리하여 처리 할수있도록 한다.
- data schema에 대한 registering을 통하여 consumer가 consumming schema를 검증할수있도록 한다.
'architecture' 카테고리의 다른 글
PKI ( Private Key Infrastructure ) + X.509 + SSL (0) | 2023.05.31 |
---|---|
Proxy ( Forward & Reverse ) (0) | 2023.05.31 |
Agile(Scrum)에 대한 ... (0) | 2023.05.11 |
TDD ( Test Driven Development ) (0) | 2023.05.11 |
SOLID : Object Oriented Design (0) | 2023.05.11 |