프론트엔드 개발 측면에서 핵심적인 패턴들을 위주로 디자인 패턴을 공부하고 정리해 보려고 한다. 공부 후에는 디자인 패턴들에 대해 잘 설명할 수 있게 되기를 기대해 본다.
Software design pattern은 애플리케이션이나 시스템을 디자인하면서 보편적으로 발생하는 문제들을 해결할 때 프로그래머가 사용할 수 있는 공식화된 Best Practice(모범 사례) 혹은 방법론이다. 코드로 바로 바뀔 수 있다기보다는 문제 해결 방법에 대한 설명이나 템플릿에 더 가깝다.
디자인 패턴들은 생성 패턴, 구조 패턴, 행동 패턴, 동시성 패턴, 설계 패턴 등 여러 분류로 나뉘기도 한다.
프로젝트를 구성할 때, Model, View, Controller 이렇게 3가지 구성요소로 역할을 구분하여 구성하는 패턴이다.
MVC 패턴을 사용하면 UI, 데이터 처리, 제어 부분이 분리되어 각각 맡은 역할에 집중할 수 있게 된다. 유지 보수성(코드 수정, 추가 용이), 애플리케이션 확장성에 좋다.
복잡한 화면과 데이터로 구성되어 있다면 컨트롤러 구현 부가 커지고 복잡해지는 상황이 생길 수 있다.
MVC 패턴의 양뱡향 데이터 바인딩 방식은 모델과 뷰 사이의 발생하는 이벤트들이 복잡하게 얽혀 동작을 예측하기 어렵게 만드는 문제가 있었다. Facebook은 이 문제를 해결하고자 단방향 데이터 흐름을 가진 Flux 패턴을 만들었다.
기존 MVC 패턴의 문제점을 보완하기 위해 Facebook은 Flux 패턴을 만들었다. 여러 Model들과 View들이 복잡하게 얽혀있는 큰 규모의 애플리케이션에서 이벤트들이 모델들로부터 무차별적으로 발생하며 번져나갈 때 어떤 변화가 일어날지 예측할 수 없다는 것이 MVC 패턴의 문제점이었다.
Flux 패턴의 특징은 단방향 데이터 흐름을 가진다는 것이다. 위의 그림과 같이 발생한 Action을 Dispatcher가 감지하고 Model로 전달한다. Model은 전달받은 Action에 따라 상태를 변경하여 View로 변경된 데이터를 전달한다. 이 일련의 과정들이 한 방향으로 이루어지기 때문에 일어나게 될 동작을 예측하기가 편하다.
Flux 패턴을 반영한 구현체 중 Redux가 널리 사용되고 있다.
MVC 패턴의 문제점을 보완하였고 일어날 일에 대한 예측이 쉽다.
Flux 패턴을 구현하기 위해 Redux를 사용할 때 boilerplate code를 많이 준비해야 한다는 번거로움이 있다. 액션 타입, 액션 생성 함수, 리듀서 등을 각각 코드로 구현해야 한다.
MVVM 패턴은 Model, View, View Model 이렇게 세가지의 구성요소로 프로젝트를 개발하는 방법이다. 기존 MVC 패턴에서 Controller 부분이 사라지고 View Model이 추가된 형태이다. MVVM 패턴 또한 비즈니스 로직과 프레젠테이션 로직을 UI로 부터 분리하기 위해 만들어졌다. UI로 부터 로직을 분리하면 유지보수성, 재사용성, 테스트 용이성 향상을 기대 할 수 있다.
MVVM 패턴의 단점은 View Model 구현, 설계가 쉽지 않다는 점이다.
MVVM 패턴의 구현에는 Command 패턴과 Data Binding이 사용된다.
이후 계속...
https://www.linkedin.com/pulse/does-react-app-really-need-software-architectural-pattern-kumar/
https://pinelover.tistory.com/124
MVVM 패턴, MVC MVVM 차이, MVP 패턴, Ducks 패턴, Immutability 디자인 패턴, Compound 패턴, 빌더 패턴, 싱글턴 패턴
이후 계속...