토픽 206 / 214·비교표
소프트웨어 설계와 아키텍처
아키텍처 vs 설계
| 항목 | 아키텍처 | 설계 |
|---|---|---|
| 수준 | High-level(What) | Detail(How) |
| 대상 | 시스템 구조/컴포넌트 | 모듈/클래스/인터페이스 |
| 변경 비용 | 매우 높음 | 상대적 낮음 |
| 산출물 | 아키텍처 문서/뷰 | 클래스/시퀀스 다이어그램 |
계층형 vs 마이크로서비스 vs 헥사고날 아키텍처
| 항목 | 계층형(Layered) | 마이크로서비스 | 헥사고날 |
|---|---|---|---|
| 분리 방식 | 수평(계층) | 수직(서비스) | 포트-어댑터 |
| 의존성 | 상위→하위 단방향 | 서비스간 느슨결합 | 외부→내부 방향 |
| 배포 | 단일 배포 | 독립 배포 | 단일/독립 |
| 복잡도 | 낮음 | 높음(분산) | 중간 |
EDA vs 요청-응답 vs 메시지큐
| 항목 | EDA(이벤트기반) | 요청-응답 | 메시지큐 |
|---|---|---|---|
| 통신 | 이벤트/비동기 | 동기/직접 | 비동기/1:1 |
| 결합도 | 느슨 | 강함 | 느슨 |
| 확장성 | 높음 | 제한적 | 높음 |
| 일관성 | 최종 일관성 | 즉시 일관성 | 최종 일관성 |
UML vs SysML vs BPMN vs ArchiMate
| 항목 | UML | SysML | BPMN | ArchiMate |
|---|---|---|---|---|
| 대상 | 소프트웨어 | 시스템 공학 | 비즈니스 프로세스 | 엔터프라이즈 아키텍처 |
| 다이어그램 | 14종 | 9종(UML 확장) | 프로세스 모델 | EA 계층 모델 |
| 표준 | OMG | OMG | OMG | The Open Group |
| 강점 | 범용/상세 | HW+SW 통합 | 업무 흐름 | 전략~기술 연결 |
클래스 다이어그램(정적) vs 시퀀스 다이어그램(동적)
| 항목 | 클래스 다이어그램 | 시퀀스 다이어그램 |
|---|---|---|
| 유형 | 정적 구조 | 동적 행위 |
| 표현 | 클래스/속성/관계 | 객체 간 메시지 순서 |
| 시간 | 시간 개념 없음 | 시간 순서 표현 |
| 용도 | 설계 구조 정의 | 유스케이스 실현/API 흐름 |
활동 다이어그램 vs 시퀀스 다이어그램 vs 상태 다이어그램
| 항목 | 활동 다이어그램 | 시퀀스 다이어그램 | 상태 다이어그램 |
|---|---|---|---|
| 초점 | 프로세스 흐름/병렬 | 객체 간 메시지/시간순 | 객체 상태 변화 |
| 표현 | 활동/분기/합류 | 생명선/메시지 | 상태/전이/이벤트 |
| 적합 | 업무 프로세스 | API/인터페이스 | 프로토콜/FSM |
GoF 패턴: 생성 vs 구조 vs 행위
| 항목 | 생성 패턴(5종) | 구조 패턴(7종) | 행위 패턴(11종) |
|---|---|---|---|
| 목적 | 객체 생성 캡슐화 | 인터페이스 적응/확장 | 알고리즘/행위 캡슐화 |
| 대표 | Singleton, Factory, Builder | Adapter, Decorator, Proxy | Strategy, Observer, Command |
| 문제 | 객체 생성 방식 유연화 | 구조 조합/변환 | 행위 분리/교체 |
GoF 패턴 vs 아키텍처 패턴 vs 이디엄
| 항목 | GoF 디자인 패턴 | 아키텍처 패턴 | 이디엄 |
|---|---|---|---|
| 수준 | 객체지향/클래스 | 시스템 구조 | 언어 종속/구현 |
| 범위 | 23종 정형화 | MVC, 계층형, MSA | 언어별 관용 표현 |
| 적용 | 설계 단계 | 아키텍처 단계 | 코딩 단계 |
SOLID vs GRASP vs DRY/KISS/YAGNI
| 항목 | SOLID | GRASP | DRY/KISS/YAGNI |
|---|---|---|---|
| 성격 | OOP 설계 원칙(5개) | 책임 할당 원칙 | 일반 프로그래밍 원칙 |
| 초점 | 클래스 설계 | 객체 책임 배분 | 코드 단순성/중복 제거 |
| 제안자 | Robert C. Martin | Craig Larman | 다양 |
MVC vs MVP vs MVVM
| 항목 | MVC | MVP | MVVM |
|---|---|---|---|
| View-Model 관계 | 직접 참조 | 완전 분리 | 데이터 바인딩 |
| 테스트 용이성 | 보통 | 높음 | 높음 |
| 데이터 흐름 | 양방향 | Presenter 매개 | 바인딩 |
| 복잡도 | 낮음 | 중간 | 높음 |
| 적용 | Spring MVC, Rails | Android(초기) | WPF, Vue.js |
DI 주입 방식: 생성자 vs 세터 vs 필드
| 항목 | 생성자 주입 | 세터 주입 | 필드 주입 |
|---|---|---|---|
| 불변성 | 보장(final 가능) | 변경 가능 | 변경 가능 |
| 필수/선택 | 필수 의존성 | 선택적 의존성 | - |
| 테스트 | 용이 | 용이 | 어려움 |
| 권장도 | Spring 권장 | 선택적 | 비권장 |
응집도 vs 결합도
| 항목 | 응집도(Cohesion) | 결합도(Coupling) |
|---|---|---|
| 정의 | 모듈 내부 관련성 | 모듈 간 의존성 |
| 방향 | 높을수록 좋음 | 낮을수록 좋음 |
| 최상 | 기능적 응집도 | 자료 결합도 |
| 최하 | 우연적 응집도 | 내용 결합도 |
아키텍처 평가: ATAM vs SAAM vs CBAM vs ARID
| 항목 | ATAM | SAAM | CBAM | ARID |
|---|---|---|---|---|
| 초점 | 트레이드오프/시나리오 | 수정 용이성 | 비용-편익 | 중간 설계 리뷰 |
| 방법 | 유틸리티 트리+시나리오 | 변경 시나리오 | 경제적 가치 | 조기 피드백 |
| 포괄성 | 포괄적/다속성 | 간단/단일 | ATAM 확장 | 경량 |
| 산출물 | 민감점/트레이드오프 | 직접/간접 시나리오 | ROI 분석 | 피드백 |
Clean vs Hexagonal vs Onion vs Layered 아키텍처
| 항목 | Clean | Hexagonal | Onion | Layered |
|---|---|---|---|---|
| 구조 | 동심원(4계층) | 포트-어댑터 | 양파(동심원) | 수평 계층 |
| 핵심 원칙 | 의존성 역전 | 포트/어댑터 분리 | 도메인 중심 | 관심사 분리 |
| 유연성 | 높음 | 높음 | 높음 | 보통 |
| 복잡도 | 높음 | 중간 | 중간 | 낮음 |
| 프레임워크 독립 | 완전 독립 | 독립 | 독립 | 의존적 |