Architecture의 뜻은 여러가지로 사용된다.
가장 일반적인 뜻은 "건축학"을 뜻하기도 하며 현재에는 "구성", "구조", "설계 방식" 등을 포괄하는 의미로 사용되어진다.
Software Architecture는 단어 그대로 "소프트웨어 구조"이다.
- 소프트웨어의 계략적인 계층 분리 방법이다.
- 개발 환경, 팀 규모, 비즈니스 로직의 크기, 테스트 코드 작성 여부 등에 따라 적합한 아키텍처가 달라질 수 있다.
▸ 입력과 출력을 어떻게 처리하는가? , 데이터 바인딩 엔진이 있는가? (개발환경)
▸ 개발팀의 규모가 어떻게 되는가? (팀 규모)
▸백엔드가 아닌 클라이온트 사이드에 비지니스 로직이 많은가? (비지니스 로직의 크기)
▸ TDD, 유닛 테스트 등 테스트 코드를 작성할 계획이 있는가? (테스트 코드 작성 여부)
▸ 그 외에도 팀원들의 지식, 선호하는 동기화 방법 등 다양한 요인들에 의해 달라 질 수 있다.
관심사의 분리
- 애플리케이션은 렌더링, 데이터 가공, 네트워크 통신 ,상태 관리 등 성격이 다른 여러 문제들로 구성된 복잡한 프로그램이다
- 복잡한 문제를 더 작은 문제들로 나누고 한 번에 한 가지 문제에 집중하여 해결
- 작게 나누어 해결한 문제들을 재조잡하여 시스템을 작동시키는 것
- 모든 설계의 일반적인 원칙 : "분리" 와 "조합"
아키텍처, 패턴, 아키텍처 패턴
아키텍처 패턴 (Architecture pattern)
- 계략적인 계층 분리 방법인 아키텍처도 완전히 새로운 것은 거의 없다
▸ MVX( MVC, MVP, MVVM, Flue, etc..)
- 계층 분리 방법도 세부 내용들을 패턴화 하여 반복적으로 사용 할 수 있다.
▸ 뷰를 구축하는 공간
▸ 프레젠테이션 로직을 작성하는 공간
▸ 비지니스 로직을 작성하는 공간
▸ 여러 개체들 사이에서 중개자 역활을 하는 공간
▸ 화면을 이동하는 로직을 작성하는 공간
▸ 상태를 동기화 하는 방법
두 종류의 아키텍처 패턴
GUI 아키텍처
- GUI(Graphic User Interface) Application
- GUI 아키텍처
▸ GUI Application의 계층 분리 방법
▸ MVC, MVP, MVVM, Flux등
- 대부분의 GUI 아키텍처는 M(Model)과 V(View)를 포함하고 있다
▸ 모델과 뷰가 그만큼 중요한 계층이라는 생각을 기저에 깔고 있음을 알 수 있다.
▸ 구체적으로 모델과 뷰가 무엇이기에 중요한 계층으로 생각하는 걸까?
-> 아키텍처 패턴의 사상이 깔려있다.
GUI 아키텍처 패턴의 사상 - PDS
Martin Fowler(2003), PresentationDomainSeparation
- 프레젠테이션(Presentation)
▸ 뷰(View)
▸ UI의 배치, 상태, 이벤트 처리 로직을 다루는 계층
▸ 입력( 키보드, 마우스, 터치스크린 등에서 오는 신호를 처리)과 출력(렌더링)
- 도메인(Domain)
▸ 모델(Model)
▸ 시스템 본래의 관심 사항
- 시스템 본래의 관심사항(도메인)을 UI(프레젠테이션)으로 부터 분리 시킨다.
PDS의 장점
- 프레젠테이션 코드는 도메인 코드와 서로 다른 종류의 스킬을 요구하기 때문에 나뉘어져 있을 때 더 이해하기 쉽다
- 프레젠테이션 코드를 매번 복사/붙여넣기 하지 않고 재사용할 수 있다
- UI는 테스트가 어렵기 때문에 UI와 모델을 분리시켜 놓으면 보다 테스트가 쉬워진다
PSD 개념의 구현체이자 GUI 아키텍처의 시조가 MVC( Model - View - Controller) 이다.
시스템 아키텍처
- GUI 아키텍처의 모델(도메인)
▸ PDS에 따라 관심사를 분리한 것은 어디까지나 프레젠테이션을 기준으로 한 것
▸ 시스템 본래의 관심사항이라 하지만, 실제로는 UI와 무관한 모든 처리에 해당
▸ 애플리케이션에는 UI에도 시스템 본래의 관심사항에도 해당되지 않는 작업들이 존재
- 네트워크 통신으로 데이터 취득(URL Session)
- 로컬에 데이터를 저장(Core Data)
- 이런 작업들을 비즈니스 로직의 일종인 '애플리케이션 로직'이라고도 한다
- UI와 무관한 시스템들의 구조를 정형화한 아키텍처를 '시스템 아키텍쳐'라고 한다.
- iOS에서는 VIPER, RIBs가 대표적인 시스템 아키텍쳐이다
'Architecture' 카테고리의 다른 글
iOS(UIKit)에서의 Coordinator Pattern (0) | 2023.09.18 |
---|---|
iOS(UIKit)에서의 CleanArchitecture+MVVM 예시 뜯어보기 (0) | 2023.09.15 |
MVVM in iOS (0) | 2023.09.04 |
MVP (Model - View - Present) (0) | 2023.08.28 |
MVC(Model - View - Controller) (0) | 2023.08.16 |