소프트웨어 아키텍처

소프트웨어 아키텍처(Software Architecture)는 시스템의 기본 조직 체계다. 시스템을 이루는 구성 요소, 구성 요소 간 관계, 주변 환경과의 관계, 그리고 시스템의 설계와 진화를 지배하는 원칙의 집합으로 정의된다 (IEEE 1471).

왜 중요한가

  • 구조 결정: 초기 결정이 수명 전체를 좌우
  • 변경 비용: 아키텍처 수준의 결함은 고치기 가장 비쌈
  • 품질 속성 실현: 성능·확장성·보안 같은 속성은 구현 이전에 아키텍처가 결정
  • 공통 언어: 팀·이해관계자 사이의 합의 수단

아키텍처 스타일

스타일특징
계층(Layered)상위 계층이 하위만 의존 (Presentation/Business/Data)
클라이언트-서버요청-응답 모델
모놀리식하나의 배포 단위로 통합
마이크로서비스독립 배포 가능한 작은 서비스 집합
이벤트 기반비동기 메시지·이벤트 중심
파이프-필터데이터가 연쇄 처리
피어 투 피어대등한 노드가 서로 통신

아키텍처가 담는 결정

  • 구성 요소 분할: 무엇을 어디에 둘 것인가
  • 통신 방식: 동기/비동기, REST/gRPC/이벤트
  • 데이터 저장: RDB, NoSQL, 캐시 계층
  • 배포 단위: 단일 앱 vs 여러 서비스
  • 기술 스택: 언어·프레임워크·플랫폼
  • 품질 속성 보장: 성능·가용성·보안·유지보수성

품질 속성 (Quality Attributes)

아키텍처의 성패는 비기능 요구를 얼마나 잘 만족시키느냐로 결정된다.

아키텍트의 역할

  • 요구사항 분석: 기능·비기능 요구를 아키텍처 제약으로 번역
  • 결정과 근거 기록: ADR(Architecture Decision Record)
  • 위험 식별: 병목·장애 지점 사전 감지
  • 기술 선택과 PoC: 주요 기술을 검증
  • 가이드라인 수립: 개발팀이 일관된 구조를 유지하게

관련 노트