# 요구사항의 정의 및 종류
요구사항은 구분 기준에 따라 다르게 정의될 수 있다.
이 중에서도 소프트웨어 아키텍처는 비기능적 요구사항에 주요 관련된다고 할 수 있다.
요구사항의 종류는 아래와 같이 분류할 수 있다.
구분 기준 | 종류 | 정의 |
참여자 관점 | 사용자 요구사항 | 사용자의 관점에서 소프트웨어에 대해 원하는 사항들 |
시스템 요구사항 | 관리자나 설계자의 관점에서 하드웨어와 소프트웨어가 갖춰야 하는 것들 |
|
소프트웨어 요구사항 | 소프트웨어 개발자의 관점에서 소프트웨어가 갖춰야 하는 사항들 |
|
요구사항 종류 |
기능적 요구사항 | 소프트웨어를 구성하는 기능들이 무엇인지를 정의한 것 |
비기능적 요구사항 * | 소프트웨어의 기능들에 대한 조건과 제약 사항들이 무엇인지 정의한 것 |
|
요구사항 생성 주체 | 비즈니스 요구사항 | 개발을 의뢰하는 단체가 작성한 요구사항 |
* 비기능적 요구사항의 종류
비기능 요구사항은 시스템 전반에 걸친 기본 구조에 영향을 미친다.
비기능적 요구사항은 다음과 같이 분류할 수 있으며,
주어진 상황에서 최적의 선택을 하는 것이 아키텍처 설계의 핵심 Task 로 볼 수 있다.
- 제품 : 사용성(Usability), 가용성(Availability), 효율성(Efficiency) - 성능/자원, 유연성(Flexibility),
통합성(Integrity), 호환성(Interoperability), 유지보수성(Maintainability), 신뢰성(Reliability),
이식성(Portability), 재사용성(Reusablility), 견고성(Robustness), 테스트 가능성(Testability)
- 조직 : 배포, 구현, 표준
- 외부 : 상호운용성, 윤리, 법무 - 사생활/안전성
# Cloud Natvie Architecture 설계
요구사항이 결정되면 이에 따라 각 영역별 구성요소를 식별 및 설계 방향을 수립하여야 한다.
Kubernetes 기반으로 마이크로서비스 형태로 설계한다고 가정하였을 때 필요 영역은 다음과 같으며,
각 영역별 아키텍처의 정의 및 개발 표준화가 필요하다.
(CNCF - Cloud Native Computing Foundation 권고사항)
구분 | 구성 요소 | 정의 |
Inner 아키텍처 |
Microservice 설계 | MSA 기반 Application 분석/설계 |
MSA 기반 Data 설계 | 마이크로서비스로 분할되면서 서비스별로 데이터베이스를 분할 또는 적정 DB 솔루션 설계 | |
Cloud Native Application 개발 | 15 Fator 를 준수한 Application 개발 | |
Outer 아키텍처 |
API Gateway(인증 라우팅) | 대내외 API 연동 (BEAST, KONG 등 EAI) |
Service Mesh | ISTIO/ENVOI 등 | |
Backing Serive (DB, 비동기 메시지) |
관계형 DB/MOM (KAFKA 등) | |
컨테이너 관리 | 쿠버네티스 관리, EKS, AKS 기반 관리 | |
Telemetry (로깅, 모니터링, 추적) |
ELK (elasticsearch) | |
CI/CD(빌드. 배포) | Cloud 기반 DevOps (Jenkins 등) | |
Agile 프로세스 거버넌스 | Agile 기반 프로젝트 방법론 Leading (Scrum) |
# MSA 아키텍처 도입
- 마이크로서비스 아키텍처(Microservice architecture)는 사실상 현대의 응용 프로그램 개발 기술이다.
- MSA 아키텍처는 장점이 많지만 절대 쉽지 않은 단점과 부딪쳐야 할 많은 문제들이 있다.
- MSA 아키텍처 도입으로 인해 발생할 수 있는 문제들의 패턴들을 학습하고, 재사용 가능한 솔루션으로 만들 필요성, 즉, 마이크로서비스를 위한 디자인 패턴의 이해가 필요하다.
# MSA 아키텍처 도입시 적용할 원칙들
- Scalability (확장성)
- Availability (가용성)
- Resiliency (탄력성)
- Independent (독립성), autonomous (자율성)
- Decentralized governance (분산된 관리)
- Failure isolation (장애 격리)
- Auto-Provisioning (자동 프로비저닝)
- Continuous delivery through DevOps (DevOps를 통한 지속적 배포)
'IT 세상' 카테고리의 다른 글
Strangler 패턴 (0) | 2024.08.07 |
---|---|
CQRS(Command Query Responsibility Segregation) (0) | 2024.08.07 |
Apache Kafka 개념 및 주요 기능, 사례 (0) | 2024.08.05 |
Redis(REmote DIctionary Server) 주요 개념 및 특징, 사례 (0) | 2024.08.05 |
그라파나(Grafana) 로 데이터 시각화 하기 (0) | 2024.08.05 |