써드파티 컴포넌트는 다른곳에서 가져온 컴포넌트 수정 불가능, C1 ~ C4는 직접 만든 컴포넌트들
써드파티 컴포넌트들 다른 컴포넌트로 교체하려한다.
이때, 왼쪽 SA는 C1 ~ C4를 모두 수정해야함 / 오른쪽은 래퍼라는 중간 미들웨어를 두어서 래퍼만 수정하면 됨
아키텍처가 비기능적 요구사항(유지보수 관점)에 미치는 영향
📌아키텍처 설계 방향
성능 향상 관점 : 성능에 큰 영향을 미치는 기능(DB 등)을 하나로 모은다, 모듈간의 communication을 최소화
보안 관점 : 계층 아키텍처를 사용하고 중요한 정보를 inner layers에 위치하게한다
안전성(자동차 소프트웨어 등) 관점 : 안전성에 영향을 미치는 기능들을 하나로 모아서 테스트 및 검증의 코스트를 줄인다
availability(안정적이며 지속적으로 동작하는 능력) : redundant components(중복 구성요소)"를 구현하여 "fault tolerance mechanisms(장애 허용 메커니즘)"을 구현
redundant components : 발생하는 장애를 대비하기 위해 여러 개의 독립적인 구성요소를 추가로 구현하는 것, 이러한 구성요소는 서로 대체 가능하며, 하나의 구성요소에 문제가 발생하더라도 다른 구성요소가 문제를 대신 처리할 수 있도록
fault tolerance mechanisms : 시스템이 예상치 못한 장애 상황에서도 동작을 지속할 수 있도록 하는 방법
유지보수성 : 작게 나눠라(모듈화)
📖아키텍처 개선 예시
초기(이미지를 업로드하고 다운로드하는 소프트웨어)
업로드 모듈과 다운로드 모듈을 분리
redundant components 구현
지역 별로 다른 업로드/다운로드 모듈을 사용(어느 한 모듈 고장나도 대체 가능, 물리적으로 가까운 곳에 서버를 두어 빠른 반응)
지역별로 DB 또는 백업 DB 하나더 사용(위의 이유와 동일)
요청의 종류마다 다른 서버, DB를 사용(유료 고객은 빠르고 원활한 서버, 무료 고객은 최소한의 서버 제공 등)