Architecture

아키텍처(Architecture)

최지철 2023. 8. 13. 14:03
728x90
반응형

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가 대표적인 시스템 아키텍쳐이다

728x90
반응형