소프트웨어 아키텍처
쉽게 말하면
소프트웨어 아키텍처는 프로그램 전체의 큰 뼈대예요. 어떤 부분으로 나누고, 그 부분들이 어떻게 이어질지 정해요. 자주 쓰는 뼈대에는 이름이 붙어 있어요. 층층이 쌓는 계층형, 요청하는 쪽과 응답하는 쪽을 나눈 클라이언트-서버, 화면·데이터·조정 역할을 나눈 MVC, 데이터가 관을 타고 차례로 가공되는 파이프-필터 같은 것들이에요.
시험용 정의
소프트웨어 아키텍처는 시스템을 이루는 구성 요소, 그 요소들의 관계, 설계 원칙을 정한 기본 구조다. 설계 원리는 분할과 정복, 추상화(과정·데이터·제어 추상화), 단계적 분해(하향식으로 점점 자세히), 정보 은닉이다. 반복해서 쓰이는 구조를 아키텍처 패턴이라 하며 계층, 클라이언트-서버, 파이프-필터, MVC, 마스터-슬레이브, 브로커, 피어 투 피어, 이벤트 버스, 블랙보드 패턴 등이 있다. 품질 속성으로 성능, 보안, 가용성, 변경 용이성, 사용성 등을 따진다.
비유로 이해하기
식당 운영 방식이다. 계층형은 홀-주방-창고 층 구분, 클라이언트-서버는 손님(요청)과 주방(응답), MVC는 메뉴판(뷰)·주방(모델)·홀 매니저(컨트롤러), 파이프-필터는 씻기 → 썰기 → 굽기로 이어지는 조리 라인이다.
자세히
먼저 알아 둘 말
| 말 | 뜻 |
|---|---|
| 구성 요소 | 아키텍처를 이루는 부품 (모듈, 서버, 데이터베이스) |
| 추상화 | 핵심만 남기고 자세한 것은 감춰 단순하게 보는 것 |
| 단계적 분해 | 큰 기능을 하위 기능으로 차례로 나누는 하향식 설계 (워스가 제안) |
| 정보 은닉 | 모듈 안의 자세한 내용을 감추고 정해진 창구로만 쓰게 하는 것 |
| 품질 속성 | 아키텍처가 만족해야 할 비기능 조건 (성능, 보안, 가용성 등) |
아키텍처 패턴
| 패턴 | 구조 | 예 |
|---|---|---|
| 계층 (Layered) | 위 계층이 바로 아래 계층의 서비스만 쓴다 | OSI 7계층, 표현-비즈니스-데이터 계층 |
| 클라이언트-서버 | 여러 클라이언트가 하나의 서버에 요청 | 웹, 이메일 |
| 파이프-필터 | 데이터가 필터(처리)를 차례로 지나며 가공. 필터 재사용 쉬움, 데이터 변환 부담 | UNIX 셸 파이프 |, 컴파일러 |
| MVC | 모델·뷰·컨트롤러 분리. 하나의 모델을 여러 뷰로 | 웹 프레임워크 |
| 마스터-슬레이브 | 마스터가 일을 나눠 슬레이브에 주고 결과를 모은다 | DB 복제, 병렬 계산 |
| 브로커 | 브로커가 클라이언트 요청을 알맞은 서버로 중개 | 분산 메시지 시스템 |
| 피어 투 피어 | 모든 노드가 클라이언트이자 서버 | 파일 공유, 블록체인 |
| 이벤트 버스 | 이벤트를 채널로 발행·구독 | 알림 시스템 |
| 블랙보드 | 공유 데이터(칠판)에 여러 모듈이 답을 쌓아 해결 | 음성 인식 |
추상화 3가지
- 과정(기능) 추상화: 자세한 수행 과정은 감추고 '무엇을 하는지'만 정의
- 데이터(자료) 추상화: 데이터와 그 데이터에 적용할 연산을 함께 정의
- 제어 추상화: 제어의 정확한 메커니즘은 감추고 원하는 효과만 정의
기출에서 더 나온 것
| 말 | 뜻 |
|---|---|
| 하향식 설계 | 최상위 기능에서 시작해 하위 기능으로 나눠 가며 설계한다. 통합 시 인터페이스가 이미 정의돼 있어 통합이 쉽다 |
| 상향식 설계 | 아래 모듈부터 만들어 위로 합친다. 인터페이스가 정해져 있어야 기능 추가가 쉽다 |
| 협약에 의한 설계 | 컴포넌트를 쓰기 전 조건(선행 조건), 끝난 뒤 조건(결과 조건), 항상 지켜야 할 조건(불변 조건)을 약속해 두는 설계 |
| MVC의 모델 | 데이터와 처리 로직을 맡는다. 뷰와 컨트롤러 사이 전달자는 아니다 |
시험에 이렇게 나와요
- 입력을 받아 처리하고 결과를 다음 단계로 넘기는 일을 반복 → 파이프 필터 (데이터는 한 방향으로 흐른다)
- 모델·뷰·컨트롤러로 나눔 → MVC, 마스터가 일을 나누고 슬레이브가 처리 → 마스터-슬레이브
- 아키텍처 품질 속성 → 가용성·변경 용이성·성능·보안성·사용성 (독립성은 아님)
- 추상화 기법 → 과정·자료·제어 추상화 (강도 추상화는 없음)
- 상위 설계 → 아키텍처·인터페이스 정의·사용자 인터페이스 설계 / 하위 설계 → 모듈 설계
확인 문제
Q1. 화면(View), 데이터(Model), 둘을 이어 주는 조정자(Controller)로 나누는 아키텍처 패턴은?
- 브로커
- 마스터-슬레이브
- MVC
- 파이프-필터
정답 보기
3번 MVC
MVC는 모델(데이터와 처리), 뷰(화면 표시), 컨트롤러(입력을 받아 모델과 뷰를 제어)로 나눠, 같은 데이터를 여러 화면으로 보여 주기 쉽다.
Q2. 데이터 스트림을 연속된 처리 단계로 넘기며 가공하는 패턴으로, UNIX 셸의 | 가 대표적인 것은?
- 계층 패턴
- MVC 패턴
- 파이프-필터 패턴
- 브로커 패턴
정답 보기
3번 파이프-필터 패턴
각 필터가 입력을 받아 처리한 뒤 다음 필터로 넘긴다.
Q3. 한 구성 요소가 작업을 나눠 다른 구성 요소들에 맡기고 결과를 모으는 패턴은?
- 이벤트 버스
- 마스터-슬레이브
- 피어 투 피어
- 클라이언트-서버
정답 보기
2번 마스터-슬레이브
마스터가 분배·수집, 슬레이브가 수행.
Q4. 소프트웨어 아키텍처 설계 원리가 아닌 것은?
- 분할과 정복
- 단계적 분해
- 결합도 최대화
- 추상화
정답 보기
3번 결합도 최대화
결합도 최대화는 원리가 아니다. 모듈 사이 결합도는 낮추고 응집도는 높여야 한다. 분할과 정복, 추상화, 단계적 분해는 설계 원리다.
Q5. 소프트웨어 아키텍처의 품질 속성이 아닌 것은?
- 보안성
- 독립성
- 가용성
- 성능
정답 보기
2번 독립성
품질 속성은 가용성·변경 용이성·성능·보안성·사용성 등이다.
Q6. 협약에 의한 설계(Design by Contract)에서 약속하는 조건이 아닌 것은?
- 불변 조건
- 반복 조건
- 선행 조건
- 결과 조건
정답 보기
2번 반복 조건
쓰기 전 조건(선행), 끝난 뒤 조건(결과), 항상 지킬 조건(불변) 세 가지다.
헷갈리기 쉬운 O·X
계층 패턴에서 각 계층은 아무 계층의 서비스나 자유롭게 호출한다.
정답 보기
X 보통 바로 아래 계층의 서비스만 쓴다.
피어 투 피어 패턴에서 각 노드는 클라이언트와 서버 역할을 모두 할 수 있다.
정답 보기
O
MVC에서 뷰(View)는 데이터를 저장하고 처리하는 역할이다.
정답 보기
X 그건 모델. 뷰는 화면 표시.