[Architecture] 2. 아키텍처 패턴과 디자인 패턴

KSK·2025년 3월 23일

Architecture

목록 보기
2/4

개요

  • 아키텍처 패턴과 디자인 패턴은 다른 것인가?
  • 아키텍처 패턴과 소프트웨어 아키텍처

사실 이전 글을 쓰면서 굉장히 헷갈리던 개념들이 몇가지 있어 이 글에서 먼저 짚고 넘어가려한다.

아키텍처 패턴과 디자인 패턴

이게 헷갈리게 된건 여러 IT 블로그 글에서 두 개념을 혼용하고 있는 것을 많이 보았고
솔직히 나도 뭐가 다른지 잘 모르겠다.

특히 MVC, MVVM 등 안드로이드 개발에서 흔히 사용되는 패턴에 대해 어디서는 아키텍처 패턴이라고,
또 어디서는 디자인 패턴이라고 칭하니 헷갈리지 않을래야 않을 수가 없다.

패턴

두 단어 모두에서 사용되는 패턴 이라함은,

소프트웨어 설계와 개발에서 반복되는 문제와 주제에 적용할 수 있는 재사용 가능한 템플릿 이라고 할 수 있다.

아무튼 둘 모두 특정한 문제 해결에 최적화된 널리 사용되는 정형화된 템플릿 이라는 것인데,
두 단어가 어떤 문제 해결을 위한 템플릿이냐가 중요할 것이다.

일단 두 단어의 정의를 찾아보았다.

아키텍처 패턴

  • 소프트웨어의 구조를 패턴화 한 것
  • 소프트웨어 아키텍처에서 일반적으로 발생하는 문제에 대한 일반적이고 재사용 가능한 솔루션

디자인 패턴

  • 애플리케이션 또는 시스템 디자인 시 일반적인 문제를 해결하기 위해 사용할 수 있는 형식화된 모범사례
  • 소프트웨어 디자인의 주어진 컨텍스트 안에서 일반적으로 발생하는 문제에 대한 일반적이고 재사용 가능한 솔루션


?????
??????

뭐가 다른지 모르겠다.

다만 이 글에 따르면,

While software architecture is responsible for the skeleton and the high-level infrastructure of a software, the software design is responsible for the code level design such as, what each module is doing, the classes scope, and the functions purposes, etc.

소프트웨어 아키텍처는 고수준의 기반의 뼈대가 되는 반면,
소프트웨어 디자인은 모듈의 역할, 클래스 범위, 함수의 목적 등 코드 레벨 수준(저수준)의 해결책을 의미한다는 것인데,

여기서는 다음과 같이 정리되어 있다.

  1. 아키텍처 패턴은 설계(design) 단계에서 제공되고 디자인 패턴은 구축(building) 단계에서 제공된다
  2. 아키텍처 패턴은 청사진과 같고 디자인 패턴은 실제 구현이다
  3. 아키텍처 패턴은 다른 모든 것들이 준수하는 기본이며, 디자인 패턴은 일반적인 문제를 해결하기 위해 클래스를 구성하는 방법이다.
  4. 모든 아키텍처 패턴은 디자인 패턴이지만, 모든 디자인 패턴이 아키텍처 패턴은 아님.

이제 이 모든것을 토대로 내가 이해한 바를 정리하자면,

  • 아키텍처 패턴은 프로젝트 전체에 대한 큰 구조
  • 디자인 패턴은 프로그래밍 레벨에서 일부분에 대한 솔루션

이라고 이해하는게 좋을 것 같다.


따라서 앱 개발 시,

전체 프로젝트에 대한 구조와 컴포넌트간 관계는 아키텍처 패턴을 참고하여 정하고,
구현 레벨에서 각 문제에 대한 솔루션은 디자인 패턴을 활용하게 될 것이다.

ex) Repository 패턴을 통한 data 레이어에서 데이터 액세스 방법 정의


MVC, MVVM은 무슨 패턴?

그러면 MVC, MVVM 등은 아키텍처 패턴일까 디자인 패턴일까?

물론 이 파트를 작성하기 전에 MVC, MVVM 등 각 패턴에 대한 학습이 선행되어야 하는게 맞겠다. (이는 나중에 시리즈에 이어서 정리할 예정)

이 블로그에서 설명해주셨지만, 공부할 겸 이해한 바를 옮겨보자.

(결론부터 말하자면 그냥 각자 적용하는 범위에 따라 다르다고 보인다. 어느 분야에서나 마찬가지지만 정답은 없다. 해석하기 나름일뿐...)


안드로이드, MVVM 패턴 기준으로 설명하자면

  • 전체 프로젝트를 Model - View - ViewModel로 계층화하고, Model에 해당하는 Data 레이어에 위에 서술한 Repository 패턴를 적용하거나 UI 업데이트 방식에 Observer패턴을 적용한다면, 이때 사용된 MVVM은 아키텍처 패턴이 될 수 있다.

  • Presentation 레이어에서 UI(View)와 ViewModel을 분리하는데 집중, 즉 MVVM을 뷰와 로직을 분리하기 위해 사용한다면 데이터 접근 및 처리는 Domain와 Data를 거쳐서 하든 뭘 어떻게 하든 큰 상관이 없기 때문에, 이때는 Presentation 단에서 일부 문제 해결을 위한 솔루션으로 사용되었으므로 디자인 패턴이라 볼 수 있음.


결국 사용하는 입장에서 어떤 목적으로 사용하는지에 달린 해석의 문제일 뿐,
MVVM이 아키텍처 패턴이냐 디자인 패턴이냐에 대한 명확한 구분은 그리 중요한 문제가 아니라는 생각이 든다.



소프트웨어 아키텍처와 아키텍처 패턴

또 헷갈리는 것이 두 개념의 차이인데,
이전 글에서 소프트웨어 아키텍처의 종류로 레이어드, 모놀리식 등을 정리하면서
여기에 MVC, MVVM 과 같은 패턴들을 넣어야해? 라는 생각이 들었기 때문이다.

이 역시 웹에 "소프트웨어 아키텍처 종류" 를 검색하면 레이어드, 모놀리식 등등이 정리된 글과
MVC, 클라이언트-서버, 파이프-필터 등등이 나오는 글이 나오는 경우가 있어서
나에게 큰 혼동을 가져왔다.

두 개념의 비교

소프트웨어 아키텍처아키텍처 패턴
시스템 전체를 설계하는 큰 개념특정 문제를 해결하기 위한 구조적 템플릿
애플리케이션의 구조와 설계 원칙 정의소프트웨어 아키텍처를 구성하는 데 사용되는 반복 가능한 패턴
예시: 모놀리식 아키텍처, 마이크로서비스 아키텍처, 클린 아키텍처예시: MVC, MVVM, 레이어드 아키텍처, 이벤트 주도 아키텍처
시스템의 구조와 상호작용을 정의특정 유형의 아키텍처를 구현하는 방법 제공
비유: 건물 전체의 설계도 (아파트, 빌딩, 주택의 형태)비유: 특정한 건축 스타일 (전원주택 스타일, 모듈러 디자인)


...
....

내가 이해한 바로 다시 정리하자면

  • 소프트웨어 아키텍처는 시스템 전체 구조도
  • 아키텍처 패턴은 이런 구조도 중 특정 상황에 최적화된 구조 템플릿

예를 들어 MVVM은 소프트웨어 아키텍처 중 뷰와 로직의 분리를 위한 하나의 패턴이다, 뭐 이정도로 이해하면 되지 않을까 싶은데 아직도 애매모호하다.

사실 두 개념을 구분할 필요가 있는지도 잘 모르겠는데, 일단 언어의 차이가 있으니 정리해본다.

이건 더 공부하면서 이해가 된다면 수정을 해보겠다.



참고

https://no-dev-nk.tistory.com/119

https://codeburst.io/software-architecture-the-difference-between-architecture-and-design-7936abdd5830

https://onlyfor-me-blog.tistory.com/766

https://stackoverflow.com/questions/4243187/whats-the-difference-between-design-patterns-and-architectural-patterns

https://singhdivesh.medium.com/according-to-wikipedia-b1afa6de08c

profile
그런게어딨어그냥하는거지

0개의 댓글