아키텍처 디자인 패턴 정리

JACKJACK·2023년 9월 5일
2
post-thumbnail

아키텍처 디자인 패턴이란?

아키텍처 디자인 패턴은 소프트웨어 시스템의 큰 구조와 조직을 설계하고 관리하기 위한 일련의 원칙과 모범 사례를 포함하는 디자인 패턴이다. 이러한 패턴은 소프트웨어 아키텍처를 개발하는 데 유용하며, 시스템의 다양한 구성 요소와 그들 간의 상호 작용을 조직화하고 최적화하는 방법을 제시한다.


아키텍처 디자인 패턴의 목표

  • 구조화된 설계: 소프트웨어 시스템을 논리적으로 구조화하여 각 부분의 역할과 책임을 명확히 한다.
  • 모듈화와 재사용: 모듈화된 컴포넌트를 활용하여 코드의 재사용성을 높이고, 독립적으로 작업할 수 있도록 한다.
  • 느슨한 결합과 강한 응집성: 컴포넌트 간의 의존성을 최소화하고 관련된 기능을 묶어내어 응집성을 높인다.
  • 유지 보수성: 시스템을 더 쉽게 유지 보수하고 확장할 수 있도록 한다.
  • 성능 최적화: 시스템의 성능을 향상시키고 확장 가능한 아키텍처를 구축한다.

많은 목표들을 나열했지만 결국 유지보수성과 성능을 최적화하기 위함이다. 그렇다면 아키텍처 디자인 패턴의 종류에 대해 알아보자.


아키텍처 디자인 패턴의 종류

아키텍처 디자인 패턴의 종류는 수 없이 많고 그 중 많이 쓰이는 것으로는 다음과 같다. MVC, MVP, MVVM, FLUX, Layered Architecture, Microservices Architecture, Event-Driven Architecture, Service-Oriented Architecture, Hexagonal Architecture, CQRS 각각의 특징을 가볍게 살펴보자.

  • MVC(Model-View-Controller): Model에서 데이터와 비즈니스 로직을 관리하고, View에서 사용자 인터페이스를 표시하고 사용자 입력을 받는다. Controller에서 사용자 입력을 처리하고 Model과 View간의 중재자 역할을 한다. 각각의 결합을 줄여 개발할 수 있다는것이 장점이다.

  • MVP(Model-View-Presenter): MVC와 유사하지만, Presenter는 View와 Model의 인스턴스를 가지고 있어 View와 Model간의 의존성이 없앤것이 특징이다.(Presenter를 통해서만 데이터 전달)

  • MVVM(Model-View-ViewModel): MVC 모델의 확장 버전으로 View와 View Model 사이에 데이터 흐름을 데이터 바인딩으로 처리해 View와 View Model 사이의 의존성을 없앤것이 특징이다.

  • FLUX: 단방향 데이터 흐름 아키텍처로, 데이터의 단일 소스(Store)에서 변경되며, 뷰는 이 데이터를 표시한다. 사용자 입력은 액션(Action)으로 전달되어 데이터 흐름을 제어하며 주로 Vuex, Redux같은 상태관련 라이브러리에 쓰인다.

  • Layered Architecture (계층화 아키텍처): 응용 프로그램을 여러 계층으로 나누어 각 계층별로 관심사를 분리해 특정 역할을 수행하도록 하는 패턴입니다. 대표적으로는 4계층 아키텍처가 있다. (Presentation Layer-요청받기, Business Logic Layer-요청받은 로직을 수행, Persistence Layer-데이터베이스 접근및 상호작용 수행, Data Access Layer- 데이터베이스 그 자체)

  • Microservices Architecture(MSA, 마이크로서비스 아키텍처): 응용 프로그램을 작은 독립적인 서비스로 분해하고, 각 서비스가 자체 데이터베이스 및 비즈니스 로직을 가지는 아키텍처 패턴.

  • Event-Driven Architecture (이벤트 주도 아키텍처): 이벤트와 메시지를 사용하여 서비스 간 상호 작용을 구현하는 패턴으로, 비동기적인 통신과 느슨한 결합을 강조한다. 이벤트가 감지되면 이벤트 처리 플랫폼(Apache Kafka 등...)이 이벤트를 비동기적으로 처리해 이벤트 소비자에게 전송한다. 주로 MSA같은 분산 아키텍처에 쓰인다.

  • Service-Oriented Architecture (SOA, 서비스 지향 아키텍처): 응용 프로그램의 기능을 독립적인 서비스로 분할하고, 이러한 서비스들을 재사용 가능한 구성 요소로 구축하는 아키텍처 패턴이다. MSA와 비슷하지만 다른점은 상대적으로 서비스를 중심으로 분할하기 때문에 배포와 확장이 MSA에 비해 조금더 느릴 수 있으며 데이터 베이스도 중앙화로 관리하는 경우가 많다고 한다.

  • Hexagonal Architecture (헥사고날 아키텍처): 응용 프로그램을 내부 도메인 로직과 외부 시스템 간의 인터페이스를 분리하여 설계하는 패턴이다. (내부 도메인 로직 -> 어댑터로 외부와 통신 -> 외부에 대한 지식X, 외부 시스템 -> 외부시스템 혹은 내부 시스템과 통신을 어댑터 인터페이스로 요청)

  • CQRS (Command and Query Responsibility Segregation): 읽기와 쓰기 모델을 분리하여 데이터를 쓰는 명령과 데이터를 읽는 쿼리를 처리하는 패턴이다. 간단히 얘기하면 CRUD에서 CUD와 R을 구분하는 패턴이다. non-CQRS에 비해 Read에서 데이터 일관성이 떨어질 수 있으나 데이터 처리를 최적화할 수 있다.



Reference

profile
러닝커브를 빠르게 높이자🎢

0개의 댓글