소프트웨어 아키텍처
소프트웨어 아키텍처(Software Architecture)는 시스템의 기본 조직 체계다. 시스템을 이루는 구성 요소, 구성 요소 간 관계, 주변 환경과의 관계, 그리고 시스템의 설계와 진화를 지배하는 원칙의 집합으로 정의된다 (IEEE 1471).
왜 중요한가
- 구조 결정: 초기 결정이 수명 전체를 좌우
- 변경 비용: 아키텍처 수준의 결함은 고치기 가장 비쌈
- 품질 속성 실현: 성능·확장성·보안 같은 속성은 구현 이전에 아키텍처가 결정
- 공통 언어: 팀·이해관계자 사이의 합의 수단
아키텍처 스타일
| 스타일 | 특징 |
|---|---|
| 계층(Layered) | 상위 계층이 하위만 의존 (Presentation/Business/Data) |
| 클라이언트-서버 | 요청-응답 모델 |
| 모놀리식 | 하나의 배포 단위로 통합 |
| 마이크로서비스 | 독립 배포 가능한 작은 서비스 집합 |
| 이벤트 기반 | 비동기 메시지·이벤트 중심 |
| 파이프-필터 | 데이터가 연쇄 처리 |
| 피어 투 피어 | 대등한 노드가 서로 통신 |
아키텍처가 담는 결정
- 구성 요소 분할: 무엇을 어디에 둘 것인가
- 통신 방식: 동기/비동기, REST/gRPC/이벤트
- 데이터 저장: RDB, NoSQL, 캐시 계층
- 배포 단위: 단일 앱 vs 여러 서비스
- 기술 스택: 언어·프레임워크·플랫폼
- 품질 속성 보장: 성능·가용성·보안·유지보수성
품질 속성 (Quality Attributes)
아키텍처의 성패는 비기능 요구를 얼마나 잘 만족시키느냐로 결정된다.
아키텍트의 역할
- 요구사항 분석: 기능·비기능 요구를 아키텍처 제약으로 번역
- 결정과 근거 기록: ADR(Architecture Decision Record)
- 위험 식별: 병목·장애 지점 사전 감지
- 기술 선택과 PoC: 주요 기술을 검증
- 가이드라인 수립: 개발팀이 일관된 구조를 유지하게