[소프트웨어 아키텍처 101] 4. 아키텍처 특성 정의
반응형
요약
아키텍처 특성 정의
- 아키텍트는 주로 소프트웨어로 처리할 일 중 도메인 기능과 직접적인 관련이 없는 모든 것들, 즉 아키텍처 특성(architectural characteristic)을 정의, 발견, 분석하는 일을 수행함
- 아키텍처 특성은 아래 세 가지 기준을 충족함
- 비도메인 설계 고려 사항을 명시 : 요구사항을 구현하는 방법, 어떤 선택을 하게 된 이유와 관련된 운영/설계 기준을 명시함
- 설계의 구조적 측면에 영향 : 예를 들어, 어떤 시스템이든 기본 보안을 준수해야 하지만, 뭔가 특별한 것을 설계해야 한다면 보안은 아키텍처 특성 수준으로 격상됨
- 어플리케이션 성공에 절대적으로 중요
- 아키텍처 특성을 적게 선정하는 것도 중요한 책무
- 암묵적 아키텍처 특성은 요구사항 정의서에는 없지만 프로젝트 성공에 꼭 필요한 특성 (ex: 가용성, 신뢰성, 보안 등)
- 명시적 아키텍처 특성은 요구사항 정의서나 다른 지침에 기재됨
- 분석 단계에서 문제 영역에 대해 습득한 지식을 최대한 활용하여 아키텍처 특성을 밝혀내야함
4.1 아키텍처 특성 (일부) 목록
- 과거에도 아키텍처 특성을 체계화하려는 시도는 있었지만 아직도 보편적인 표준은 따로 없음
- 어떻게 나열해도 불완전한 목록이 될 수밖에 없고, 정의가 중복되는 것들도 많음
- 용어의 대부분이 의미가 미묘하거나, 객관적으로 정의하기 어렵거나, 다소 부정확하고 모호한 부분도 있음
- 운영 아키텍처 특성
- ==[[가용성(availability)]]== : 시스템이 얼마나 오랫동안 사용 가능해야 하나? (24/7이면 장애 발생 시 시스템을 신속하게 재가동시키는 절차가 준비되어야 함)
- 연속성(continuity) : 재해 복구 능력
- 성능(performance) : 스트레스 테스트, 피크 분석, 기능의 사용 빈도 분석, 필요 용량, 응답 시간. 이 정도 성능이면 됐다 싶으려면 직접 돌려봐야 하는데 그 기간만 대략 수 개월 소요된다.
- 복구성(recoverability) : 비즈니스 연속성 요구사항(ex: 장애 상황 시 얼마나 신속하게 재가동시켜야하나?), 백업 전략과 핟웨어 다중화 요건에 영향을 미친다.
- 신뢰성/안정(reliability/safety) : 시스템에 페일 세이프(fail-safe)가 필요한가? 즉, 페일 세이프가 시스템 가동에 필수인가? 시스템 실패 시 회사에 거액의 손실이 발생하는가?
- 견고성(robustness) : 프로그램 실행 중 인터넷 접속 끊김, 정전, 하드웨어 실패 등 에러 및 경계 조건을 감당하는 능력
- ==[[확장성(scalability)]]== : 유저 수, 요청 수가 늘어나도 시스템이 그에 맞는 성능을 발휘하는 능력
- 구조 아키텍처 특성
- 설정성 : 최종 유저가 쓰기 편한 인터페이스를 통해 소프트웨어 설정을 쉽게 바꿀 수 있는가?
- ==[[신장성(extensibility)]]== : 새로운 기능을 삽입하는 일의 중요성
- 설치성 : 필요한 모든 플랫폼에 시스템을 얼마나 손쉽게 설치할 수 있나?
- 활용성/재사용 : 공통 컴포넌트를 여러 제품에서 활용할 수 있나?
- 지역성 : 다국어 지원, 화폐 단위 등의 요구사항
- 유지보수성 : 시스템을 얼마나 쉽게 변경/개선할 수 있나?
- 이식성 : 하나 이상의 플랫폼에서 시스템을 실행할 수 있나?
- 지원성 : 어플리케이션은 어느 정도의 기술 지원을 필요로 하나? 시스템에서 발생한 에러를 디버깅하려면 로깅 및 기타 기능이 어느 수준으로 뒷받침되어야 하나?
- 업그레이드성 : 이 어플리케이션/솔루션의 구 버전을 새 버전으로 쉽고 빠르게 업그레이드할 수 있는가?
- 아키텍처 공통 특성
- 접근성(accessibility) : 색맹, 청각 장애인 등 모든 유저가 접근하는 데 불편함이 없나?
- 보관성 : 데이터를 따로 아카이빙해야 하나, 아니면 일정 시간 경과 후 삭제해야 하나?
- 인증(authentication) : 유저가 본인이 맞다는 것을 증명하기 위해 필요한 보안 요구사항
- 인가(authorization) : 유저가 어플리케이션에서 정해진 기능만 사용할 수 있도록 강제하는 보안 요구사항
- 합법성 : 시스템 운영상 법적 제약조건이 있는가?
- 프라이버시 : 회사 내부 님직원의 트랜잭션을 외부에 드러내지 않는 기능
- 보안 : 데이터를 암호화한 후 데이터베이스에 보관해야하나? 내부 시스템 간 네트워크 통신도 암호화해야 하나? 원격 유저 액세스는 어떤 종류의 인증이 필요한가?
- 사용성/성취성 : 유저가 어플리케이션/솔루션을 이용하여 원하는 목적을 달성하기 위해 필요한 교육/훈련 수준. 사용성 요구사항 역시 다른 아키텍처 이슈 못지않게 진지하게 다루어야 한다.
4.2 트레이드오프 및 나쁜 것 중에서 제일 나은 아키텍처
- 최고의 아키텍처를 고집하지 말고 나쁜 것 중에서 제일 나은 아키텍처를 선택하세요
- 아키텍트가 설계하기로 결정한 아키텍처 특성 하나하나가 전체 설계를 복잡하게 만들 가능성을 품고 있다. 아키텍처 특성은 시스템 구조적으로 지원되야하는 경우가 많다
- 아키텍처 특성끼리는 서로 영향을 미치는 경우가 많음
- 모든 아키텍처 특성을 반영한 설계는 불가능에 가깝다. 아키텍트가 내린 결정은 상충되는 여러 문제들이 뒤얽힌 트레이드오프로 귀결되는 경우가 많다.
- 가능한 한 아키텍처 설계를 꾸준히 조금씩 반복해보는 게 좋다. 반복의 가치는 애자일 소프트웨어 개발에서도 가장 중요한 교훈 중 하나로, 아키텍처뿐만 아니라 모든 레벨의 소프트웨어 개발에도 적용된다.
반응형
'엔지니어링 > 설계' 카테고리의 다른 글
[소프트웨어 아키텍처 101] 6. 아키텍처 특성의 측정 및 거버넌스 (0) | 2024.06.25 |
---|---|
[소프트웨어 아키텍처 101] 5. 아키텍처 특성 식별 (0) | 2024.06.18 |
[소프트웨어 아키텍처 101] 3. 모듈성 (0) | 2024.05.12 |
[소프트웨어 아키텍처 101] 2. 아키텍처 사고 (0) | 2024.05.07 |
[소프트웨어 아키텍처 101] 1. 서론 (0) | 2024.05.06 |
댓글
이 글 공유하기
다른 글
-
[소프트웨어 아키텍처 101] 6. 아키텍처 특성의 측정 및 거버넌스
[소프트웨어 아키텍처 101] 6. 아키텍처 특성의 측정 및 거버넌스
2024.06.25인상깊은 부분엔지니어는 아무 수치나 대충 목표로 삼는 게 아니라, 시간에 따라 어떤 추이를 보이는지 측정하고 통계 모델을 수립한다.예를 들어, 특정 API의 평균 응답 시간(p116~p117)의 단축을 목표로 한다면, max와 p99, p90의 평균 응답 시간을 얻고 각 구간별 목표 응답속도를 목표한다는 뜻인 것 같다.그리고 목표한 수치를 벗어나는 경우 알림을 받아서, 모델 자체가 부정확했거나(팀이 알고 싶어 하는 것), 뭔가 잘못되었거나(역시 팀이 알고 싶어 하는 것) 두 가지 중 하나일 것이다.모델 자체가 부정확했다는 뜻은, 구간별 평균 응답에 대한 측정이 잘못되어서 목표수치 설정을 잘못했다는 뜻이려나?아키텍처 특성 정의 시의 문제점은, 아키텍처 특성을 객관적으로 정의하면 모두 해결된다.정말 그럴까?… -
[소프트웨어 아키텍처 101] 5. 아키텍처 특성 식별
[소프트웨어 아키텍처 101] 5. 아키텍처 특성 식별
2024.06.18인상깊은 부분도메인 관심사에서 도출한 아키텍처 특성비즈니스 이해도를 바탕으로 도메인 이해관계자들과 대화를 통해 시스템의 숨겨진 기술적인 요구사항을 찾아내야한다는 점을 이야기로 풀어주어서 좋았음유저 대비 성능 기준선특정 유저 수 기준으로 어느 정도의 성능이 나와야 하는 지 생각해보는 것예를 들어 UI 페이지에 API를 새로 추가해야할 때, 일평균 UI 페이지를 방문자 수와 어느 시간대에 주로 접근하는지 알면 API가 지원해야하는 성능(즉, 1초에 몇 개의 요청을 처리해야하는 지)를 알 수 있음아키텍처에서는 틀린 답은 없고 값비싼 답만 있습니다!띵언이네…기술 발전과 클라우드의 등장으로 인프라 비용이 많이 저렴해지고 관리하기도 쉬워졌지만, 보통 확장성과 가용성을 지원하려면 서버 비용이 더 든다. 그리고 이를… -
[소프트웨어 아키텍처 101] 3. 모듈성
[소프트웨어 아키텍처 101] 3. 모듈성
2024.05.12인상깊은 부분응집에 대한 정의이 책에서는 응집을 아래와 같이 정의하였다. 언뜻 직관적으로 표현하였지만, 해석의 여지가 많아보인다. 코드 레벨의 설계에 대한 공부를 하려면 다른 책을 읽는 게 좋겠다.응집은 한 모듈의 파트가 동일한 모듈 안에 얼마나 포함되어 있는지를 나타냅니다. 다시 말해, 모듈을 구성하는 파트가 서로 얼마나 연관되어 있는가, 하는 것입니다. 이상적으로 응집된 모듈이라면 모든 파트가 함께 패키징되어 있겠죠.오브젝트 책에서는 응집도와 결합도에 대해 아래와 같은 질문을 던졌다.오브젝트 책에서 말한 응집도, 결합도에 대한 정의와 질문에 대한 답은 별도 포스팅할 예정이다.모듈 내의 요소가 얼마나 강하게 연관돼 있어야 응집도가 높다고 말할 수 있는가? 모듈 사이에 어느 정도의 의존성만 남겨야 결합도… -
[소프트웨어 아키텍처 101] 2. 아키텍처 사고
[소프트웨어 아키텍처 101] 2. 아키텍처 사고
2024.05.07인상깊은 부분기술 폭2장에서도 1장과 마찬가지로 기술폭에 대한 언급이 나와서 좀 더 생각해봄문제를 해결할 수 있는 특정 기술보다는, 그 문제를 해결할 수 있는 여러 기술을 알라는 조언으로 생각하는 게 좋겠음내가 알던 좋은 아키텍트 겸 리더는 훌륭한 개발자로 깊이를 만든 후 폭을 넓힌 것 같음. 혹은 둘 다 동시에 진행한 것으로 보여짐.개인적인 경험으로 미루어 볼 때 깊이가 없으면 폭을 넓히기도 쉽지 않음.기본적으로 어떤 문제를 해결하기 위해 다양한 솔루션을 확인하고, 특정 기술 한 두 가지 정도는 뾰족하게 가져가야 좋을 것 같음.경매 시스템의 트레이드 오프개인적으로 마음에 드는 예제 p60 ~ p63요약아키텍처 사고 방식은 크게 4 가지로 구성아키텍처와 설계의 차이 이해 및 개발팀과 어떻게 협력해야할 지…
댓글을 사용할 수 없습니다.