[소프트웨어 아키텍처 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 -
[소프트웨어 아키텍처 101] 5. 아키텍처 특성 식별
[소프트웨어 아키텍처 101] 5. 아키텍처 특성 식별
2024.06.18 -
[소프트웨어 아키텍처 101] 3. 모듈성
[소프트웨어 아키텍처 101] 3. 모듈성
2024.05.12 -
[소프트웨어 아키텍처 101] 2. 아키텍처 사고
[소프트웨어 아키텍처 101] 2. 아키텍처 사고
2024.05.07