최근 수정 시각 : 2025-09-01 22:47:20

소프트웨어 아키텍처 패턴



[[이론 컴퓨터 과학|'''이론 컴퓨터 과학
{{{#!wiki style="display: inline-block; font-family:Times New Roman, serif;font-style:italic"
]]
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px)"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
<colbgcolor=#a36,#a36> 이론
기본 대상 수학기초론{수리논리학(논리 연산) · 계산 가능성 이론 · 범주론 · 집합론} · 이산수학(그래프 이론) · 수치해석학 · 확률론통계학 · 선형대수학
다루는 대상과 주요 토픽
계산 가능성 이론 재귀함수 · 튜링 머신 · 람다대수 · 처치-튜링 명제 · 바쁜 비버 · 디지털 물리학
오토마타 이론 FSM · 푸시다운 · 튜링 머신(폰노이만 구조) · 정규 표현식 · 콘웨이의 생명 게임 · 형식언어
계산 복잡도 이론 점근 표기법 · 튜링 기계^고전, 양자, 비결정론적, 병렬 임의접근 기계^ · 알고리즘 · 자료구조 · 알고리즘 패러다임(그리디 알고리즘, 동적 계획법)
정보이론 정보 엔트로피 · 데이터 압축(무손실 압축 포맷 · 손실 압축 포맷) · 채널 코딩(채널 용량) · 알고리즘 정보 이론(AIT) · 양자정보과학
프로그래밍 언어론 프로그래밍 언어(함수형 언어 · 객체 지향 프로그래밍 · 증명보조기) · 메타프로그래밍 · 람다 대수 · 유형 이론 · 프로그래밍 언어 의미론 · 어휘 분석 · 파싱 · 구문 트리(완전 구문 트리 · 추상 구문 트리) · 컴파일러 이론
주요 알고리즘 및 자료구조
기초 정렬 알고리즘 · 순서도 · 탐색 알고리즘
추상적 자료형 및 구현 배열^벡터^ · 리스트^연결 리스트^ · 셋(set) · 트리^레드-블랙 트리, B-트리, , 피보나치 힙^ · · 스택
수학적 최적화 <keepall> 조합 최적화 외판원 순회 문제 · 담금질 기법 · 유전 알고리즘 · 기계학습
<keepall> 볼록 최적화 내부점 방법 · 경사하강법
<keepall> 선형계획법 심플렉스법
계산 수론 및 암호학 밀러-라빈 소수판별법 · Pollard-rho 알고리즘 · 쇼어 알고리즘 · LLL 알고리즘 · 해시(MD5 · 암호화폐 · 사전 공격(레인보우 테이블) · SHA) · 양자 암호 · 난수생성
<keepall> 대칭키 암호화 방식 블록 암호 알고리즘(파이스텔 네트워크 · DES · AES · ARIA · LEA · Camellia) · 스트림 암호 알고리즘(RC4)
<keepall> 공개키 암호화 방식 공개키 암호 알고리즘(타원 곡선 암호 · RSA) · 신원 기반 암호 알고리즘(SM9)
계산기하학 볼록 껍질 · 들로네 삼각분할 및 보로노이 도형^Fortune의 line-sweeping 알고리즘^ · 범위 탐색^vp-tree, R-tree^ · k-NN
그래프 이론 탐색^BFS, DFS, 다익스트라 알고리즘, A* 알고리즘^ · 에드몬드-카프 · 크루스칼 알고리즘 · 위상 정렬 · 네트워크 이론
정리
정지 문제대각선 논법 · 암달의 법칙 · P-NP 문제미해결 · 콜라츠 추측미해결
틀:이산수학 · 틀:수학기초론 · 틀:컴퓨터공학 }}}}}}}}}

[[컴퓨터공학|'''컴퓨터 과학 및 공학
{{{#!wiki style="font-family: Times New Roman, serif; display: inline;"
]]
{{{#!wiki style="margin: 0 -10px -5px; min-height:calc(1.5em + 5px)"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
<bgcolor=#1282d7,#1282d7> 기반 학문 수학(해석학 · 이산수학 · 수리논리학 · 선형대수학 · 미적분학 · 미분방정식 · 대수학(환론 · 범주론) · 정수론) · 이론 컴퓨터 과학 · 암호학 · 전자공학 · 언어학(음운론 · 형태론 · 통사론 · 의미론 · 화용론) · 인지과학
하드웨어 SoC · CPU · GPU(그래픽 카드 · GPGPU) · ROM · RAM · SSD · HDD · 참조: 틀:컴퓨터 부품
기술 기계어 · 어셈블리어 · 바이오스 · 절차적 프로그래밍 · 객체 지향 프로그래밍 · 함수형 프로그래밍 · 해킹 · ROT13 · 일회용 비밀번호 · 사물인터넷 · 와이파이 · GPS · 임베디드 · 인공신경망 · OpenGL · EXIF · 마이크로아키텍처 · ACPI · UEFI · LinuxBoot · gRPC · 리버스 엔지니어링 · HCI · UI · UX · 대역폭 · DBMS · NoSQL · 해시(SHA · 브루트 포스 · 레인보우 테이블 · salt · 암호화폐) · RSA 암호화 · 하드웨어 가속
연구 및 기타 논리 회로(보수기 · 가산기 · 논리 연산 · 불 대수 · 플립플롭) · 정보이론 · 임베디드 시스템 · 운영체제(멀티태스킹 · 프로세스 스케줄링 · 데드락 · 식사하는 철학자 문제 · 뮤텍스 · 세마포어 · 인터럽트) · 데이터베이스 · 컴퓨터 언어 · 프로그래밍 언어{컴파일러(어셈블러 · JIT) · 인터프리터 · 유형 이론 · 어휘 분석 · 파싱 · 링커 · 난해한 프로그래밍 언어} · 마크업 언어 · 메타데이터 · 기계학습 · 빅데이터 · 폰노이만 구조 · 양자컴퓨터 · 행위자 모델 · 인코딩(유니코드 · MBCS) · 네트워크(네트워크 포트) · 컴퓨터 보안 · OCR · 슈퍼컴퓨터 · 튜링 머신 · FPGA · 딥러닝 · 컴퓨터 구조론 · 컴퓨터 비전 · 컴퓨터 그래픽스 · 인공지능 · 시간 복잡도(최적화) · 소프트웨어 개발 방법론 · 디자인 패턴 · 정보처리이론 · 재귀 이론 · 자연어 처리(기계 번역 · 음성인식) · 버전 (버전 관리 시스템) · 난수생성 · 놀람 최소화 원칙 · 프레임워크 · 라이브러리 · 모듈 · API · ABI · 이진 탐색
}}}}}}}}} ||

1. 개요2. 소프트웨어 아키텍처 패턴과 소프트웨어 아키텍처 스타일의 차이점3. 목록
3.1. MVC 패턴3.2. MVVM 패턴3.3. MVP 패턴3.4. MVI 패턴3.5. Layered 패턴


1. 개요

소프트웨어 아키텍처를 패턴화한 것이다.

건물을 세울 때 기초와 토대가 중요하듯, 소프트웨어 역시 아키텍처를 잘 만들어 두고 시작하는 것이 중요하다. 기초 공사가 제대로 되지 않은 소프트웨어에서 지엽적인 기능 추가나 버그 수정이 반복되다 보면 스파게티 코드가 되기 십상이며, 이는 소스 코드의 가독성과 유지보수성을 낮추는 주요 원인이 된다.

소프트웨어 아키텍처 패턴은 소프트웨어의 구성 요소를 연결하는 방법이나 구성 요소 간의 관계 등을 어느 특정한 형태로 구조화함으로써 소프트웨어 설계에서 윤곽을 제시한다. 소프트웨어 아키텍처 패턴별로 주요 지향점은 다르지만, 공통적으로 소프트웨어 아키텍처 패턴을 적용해 개발된 소프트웨어는 그렇지 않은 경우에 비해 퀄리티 면에서 이점을 갖는다.

2. 소프트웨어 아키텍처 패턴과 소프트웨어 아키텍처 스타일의 차이점

소프트웨어 아키텍처 스타일과 혼용하는 탓에 혼동하는 사람들이 많다. 엄밀하게 따지면 서로 밀접한 관계가 있는 개념인 것은 맞지만, 동의어는 아니고 관점이 서로 다른 개념이라고 보는 것이 적절하다. '패턴'은 반복된 문제 해결 방법론에 가까운 관점이고, '스타일'은 구조적인 특징이나 제약 조건들을 따지는 관점이기 때문.

2010년대 이후 넷플릭스를 필두로 널리 확산된 MSA(마이크로서비스 아키텍처)는 소프트웨어 아키텍처 패턴보다는 소프트웨어 아키텍처 스타일에 더 적절한 개념으로 취급되는 편이다.

3. 목록

3.1. MVC 패턴

Model-View-Controller (모델-뷰-컨트롤러).

애플리케이션을 데이터를 처리하는 모델(Model), 사용자에게 보여지는 사용자 인터페이스(UI)를 담당하는 뷰(View), 모델과 뷰 사이에서 흐름을 제어하는 인터페이스를 담당하는 컨트롤러(Controller)로 분리하는 설계 방식이다. 노르웨이의 컴퓨터과학자 트리베 린스카우그(Trygve Reenskaug)가 최초로 정의하여, PC부터 웹 애플리케이션까지 광범위하게 사용되는 디자인 패턴이다.

모델은 컨트롤러에서 호출이 이루어지면, 연동된 데이터베이스에 저장된 데이터를 저장, 수정, 삭제, 가져오기 등 데이터 비즈니스 로직을 처리한다. 그런 다음 는 컨트롤러를 통해 반환된 모델 반환값을 가지고 화면에 출력하여 사용자 인터페이스(UI)를 구성한다. 이때 모델 반환값은 뷰가 저장하지 않는다. 컨트롤러는 모델, 뷰에 관여하며 이들 사이에서 상호 작용하는 인터페이스를 담당한다. 컨트롤러는 모델에게 데이터 비즈니스 로직을 처리하는 명령을 호출하고 그 반환값을 뷰에 전달하여 출력을 하게 한다.

모델과 뷰는 독립적으로 수행되도록 설계되어 있다. 즉, 서로에 대한 디테일을 몰라도 되고, 이는 모델(데이터베이스) 담당과 뷰(사용자 인터페이스(UI)) 담당이 분업을 할 수 있도록 해줌으로써 코드의 가독성, 체계성, 유지 보수성, 재사용성 측면에서 유리하다. 하지만, 컨트롤러를 통해 모델과 뷰를 간접적으로 이어주어 간접적으로 상호 작용하므로, 컨트롤러의 비중이 지나치게 커져서 그만큼 코드의 라인 수가 많아지는 등의 비효율적인 문제점이 존재한다. 그래서 MVP, MVVM과 같은 디자인 패턴이 나온 이유가 바로 MVC의 문제점을 절충하고 보완하기 위해서이다. #

3.2. MVVM 패턴

파일:상세 내용 아이콘.svg   자세한 내용은 MVVM 문서
#!if (문단 == null) == (앵커 == null)
를
#!if 문단 != null & 앵커 == null
의 [[MVVM#s-|]]번 문단을
#!if 문단 == null & 앵커 != null
의 [[MVVM#|]] 부분을
참고하십시오.

3.3. MVP 패턴

MVP(Model-View-Presenter)패턴은 Presenter가 Model과 View 사이의 모든 의존성을 끊어 주는 구조다. View는 사용자 입력을 받아 Presenter에 전달하고, Presenter는 Model과 비즈니스 로직을 호출한 뒤 결과를 다시 View에 전달해 갱신한다.
안드로이드·웹 SPA에서 광범위하게 사용된다.

3.4. MVI 패턴

MVI(Model-View-Intent) 패턴은 단방향 데이터 흐름을 강조한다. 사용자의 Intent(행동)를 받아 이를 Reducer에서 상태 변환(State)을 수행하고, 오직 한 방향으로 View를 다시 그리는 구조다.
Java/Kotlin 기반 모바일 앱이나 Jetpack Compose·ReactNative에서 주로 채택된다.

3.5. Layered 패턴

Layered(계층형) 아키텍처는 프레젠테이션 → 애플리케이션 서비스 → 도메인 → 인프라(데이터 액세스·외부 시스템)처럼 수평 레이어를 두고, 상위 계층이 하위 계층 인터페이스에만 의존하도록 제한한다. 구조가 단순해 엔터프라이즈 Java/.NET 프로젝트의 기본값으로 널리 쓰이며, 책임이 명확해 트랜잭션·보안 등 횡단 관심사를 AOP·필터로 끼워넣기 쉽다. 반면 레이어가 깊어질수록 호출 스택이 길어 성능 병목이 발생한다.