반응형

인상깊은 부분

도메인 관심사에서 도출한 아키텍처 특성

비즈니스 이해도를 바탕으로 도메인 이해관계자들과 대화를 통해 시스템의 숨겨진 기술적인 요구사항을 찾아내야한다는 점을 이야기로 풀어주어서 좋았음

유저 대비 성능 기준선

특정 유저 수 기준으로 어느 정도의 성능이 나와야 하는 지 생각해보는 것
예를 들어 UI 페이지에 API를 새로 추가해야할 때, 일평균 UI 페이지를 방문자 수와 어느 시간대에 주로 접근하는지 알면 API가 지원해야하는 성능(즉, 1초에 몇 개의 요청을 처리해야하는 지)를 알 수 있음

아키텍처에서는 틀린 답은 없고 값비싼 답만 있습니다!

띵언이네..
기술 발전과 클라우드의 등장으로 인프라 비용이 많이 저렴해지고 관리하기도 쉬워졌지만, 보통 확장성과 가용성을 지원하려면 서버 비용이 더 든다. 그리고 이를 유지보수하기도 복잡해진다. 작은 회사에서 고가용성이 보장되고 서버가 죽을 정도의 트래픽이 몰릴 것을 기대하는 것 보다는, 고객 반응을 확인하기 위해 빠른 MVP 개발과 쉬운 유지보수가 가능한 아키텍처가 더 선호되는 것도 이런 이유라고 생각한다. 그리고 사람들이 많이 입/퇴사를 할테니 누가 와도 쉽게 적응할 수 있는 구조여야 할 것 같다.
우리의 일도 그런 것 같다. 예를 들어 어떤 기능을 개발할 때, 그 목적이 단순 고객 반응 확인을 위한 POC 라면, 기획자와 개발자를 투입해 기능화하지 않고 그 해답을 얻을 수 있는 빠르고 저렴한 방법을 고민해보는 게 좋겠다.
달성하고자 하는 목표가 명확해야 비용 최적화된 해결방안을 얻을 수 있다.


요약

5.1 도메인 관심사에서 아키텍처 특성 도출

  • 도메인 관심사를 올바르게 해석하여 정확한 아키텍처 특성을 식별해야함
  • 가장 흔한 안티패턴 중 하나는, 모든 아키텍처 특성을 지원하는 제네릭 아키텍처를 설계하려는 것임. 당초 의도했던 문제 영역의 해결을 시도하기도 전에 아키텍처가 너무 복잡해져버림
  • 대부분의 아키텍처 특성은 핵심 도메인 이해관계자들의 의견을 듣고 도메인 관점에서 무엇이 중요한지 의견을 교환하면서 정리된지만, ==아키텍트와 도메인 이해관계자들이 서로 다른 언어로 말을 한다는 게 어려운 점==
  • 도메인 이해관계자는 인수 병합, 고객 만족, 출시 시점, 경쟁 우위를 논하는데, 아키텍트는 이를 위한 아키텍처를 어떻게 구축해야할 지 모르고, 도메인 담당자는 가용성, 상호운용성, 내고장성 등을 왜 고민해야하는 지 답답할 것임
  • 일반적인 도메인 관심사와 이를 뒷받침하는 아키텍처 특성을 정리한 표5.2 요구사항 아키텍처 특성 도출
  • '예상 유저 수와 그에 따른 확장' 문제는 보통 요구사항 정의서에 명시되는 경우가 많음
  • 도메인 지식을 알고 있기 때문에 도출할 수 있는 아키텍처 특성
    • ex) 수강신청 시스템을 만들 때, 수강 신청 기간동안 학생들이 분산되어 신청할 것이라고 가정해야할까? 오픈 시점에 동시에 모든 학생이 수강신청을 하려고 달려든다고 가정해야할까?5.3 사례 연구 : 실리콘 샌드위치
  • 아키텍트의 임무는 설계, 특히 구조와 관련이 있거나 영향을 미치는 것들을 찾아내는 것. 우선, 아키텍처 특성이 될 만한 것들을 명시적인 것과 암묵적인 것으로 분류함
  • 명시적 특성 (ex: 유저 수)
    • 확장성 : 유의미한 성능 저하 없이 다수의 동시 유저를 처리하는 능력
    • 탄력성 : 순간적으로 폭증한 유저 요청을 처리
    • 확장성과 탄력성의 차이 : 호텔 예약 시스템은 특별 할인 행사가 없어도 투숙객 수가 일정함. 하지만 콘서트 예약 시스템은 오픈 시점에 트래픽이 왕창 높아짐. 물론 탄력적인 시스템도 트래픽 폭증과 엄청난 동시 유저 접속을 처리할 수 있는 확장성은 필요함
    • 확장성 수(scalability number)와 성능 수(performance number)
      • 확장성 수와 성능 수도 함께 정의하는 것이 좋음. 성능의 기준선을 정하고 특정 수의 유저가 접속할 때 성능은 어느 정도가 나와야 수용 가능한지 정해야함
      • 거의 대부분의 아키텍처 특성은 서로 영향을 미치므로 아키텍트는 서로 다른 아키텍처 특성을 상대적으로 정의해야함
  • 암묵적 특성
    • [[가용성(availability)]]은 시스템에서 마땅히 지원되어야 할 암묵적인 아키텍처 특성
    • 신뢰성 : 시스템 접속하여 문제없이 사용
    • 보안 : 모든 시스템에 공통적인 암묵적 특성
반응형