caffeine-library / Domain-Driven-Design

🌱 에릭 에반스의 '도메인 주도 설계'를 읽는 스터디
4 stars 0 forks source link

[question] 대규모 구조의 정의 #66

Closed kth990303 closed 1 year ago

kth990303 commented 1 year ago

질문

이번 장에서는 대규모 구조에 따른 리팩터링 얘기가 주를 이룹니다. 대규모일수록 의존성이 낮을 때 편리하고 모두가 개발하기 좋은 아키텍처로 설계해야 한다고 강조했던 것으로 기억해요.

이번 챕터를 읽으면서 드는 생각은, 어느 정도의 규모여야 대규모라 할 수 있을까? 에 대한 생각이 들었어요. 트래픽이 어느 정도여야, 인프라 아키텍처가 어때야 대규모 구조라 할 수 있을까?

흔히들 얘기하는 MQ (RabbitMQ, Kafka 등) 가 필요한 환경? 아니면 멀티모듈? MSA? (MSA가 꼭 필요하다면 사실상 대규모 맞는 것 같긴 하지만...) 대규모 구조란 어떤 때에 쓸 수 있으며, 또 대규모 프로젝트라면 어떠한 설계와 아키텍처가 있는 게 좋을지 궁금합니다.

또, 책에서는 DDD를 다루다보니, 도메인 중점 설계에 대해서만 얘기가 나오는데요. 대규모 구조에서 권장되는 인프라 아키텍처트래픽 처리, 트랜잭션 처리 관련해서 얘기 나누어도 좋을 거 같아 이슈를 만들어봅니다.

연관 챕터

64

wooyounggggg commented 1 year ago

예상하시다시피, 단어의 기준이 모호하기 때문에 명확하게 어떤 기준을 갖고서 이래야만 대규모이다라고 정의하긴 어려운 것 같습니다. 관련하여 GPT는 이렇게 답변하는데요.

Q) 소프트웨어 시스템에서 '대규모'의 기준은 어느정도라고 할 수 있을까?

A) 소프트웨어 시스템에서 '대규모'는 상황에 따라 다를 수 있으며, 일반적으로는 다음과 같은 요소를 고려하여 판단됩니다: 사용자 규모: 시스템이 다루는 사용자의 수를 고려해야 합니다. 작은 규모의 시스템은 몇 십 명에서 몇 백 명의 사용자를 다룰 수 있으며, 대규모 시스템은 수천 명에서 수백만 명의 사용자를 다룰 수 있습니다.

데이터 양: 시스템이 처리하는 데이터의 양과 복잡성도 고려해야 합니다. 작은 데이터베이스와 몇 가지 테이블로 구성된 시스템은 일반적으로 작은 규모로 간주됩니다. 그러나 수백만 개의 레코드와 복잡한 데이터 구조를 다루는 시스템은 대규모로 간주될 수 있습니다.

트랜잭션 처리량: 시스템이 처리해야 하는 트랜잭션의 양과 동시성도 고려해야 합니다. 초당 수백 건의 트랜잭션을 처리하는 시스템은 작은 규모로 간주될 수 있지만, 초당 수천 건 이상의 트랜잭션을 처리해야 하는 시스템은 대규모로 간주될 수 있습니다.

아키텍처와 인프라스트럭처: 시스템의 아키텍처와 인프라스트럭처도 고려해야 합니다. 대규모 시스템은 일반적으로 분산 아키텍처를 채택하고, 여러 서버 또는 클라우드 인프라에서 실행되며, 확장성과 가용성을 위해 설계됩니다.

영향 범위: 시스템이 영향을 미치는 범위도 고려해야 합니다. 대규모 시스템은 다른 시스템과 통합되거나 다수의 부서나 조직에 걸쳐 사용되는 경우가 많습니다.

이러한 요소들은 대규모 시스템의 판단 기준으로 사용될 수 있지만, 정확한 기준은 상황에 따라 다를 수 있습니다. 일반적으로 대규모 시스템은 많은 사용자와 데이터를 처리하며, 확장성과 가용성을 갖추고 있는 시스템으로 이해할 수 있습니다


그러한 관계로, 저는 명확한 정의를 내리려고 하기보다는 규모가 커지면서 어떤 부분들을 개선해나갈 수 있을까에 포인트를 두는 것이 중요하지 않을까 생각되네요 ㅎㅎ