생성
구조
행동
패턴으로 분류된 개념을 떠올리곤 한다.아니 이건 객체에 대한 설명같은데, 프론트 보다는 백엔드 쪽에 가깝지 않나?!
라는 생각이 들어 FE에서의 디자인 패턴을 조금 더 살펴보기로 했다.웹 디자인 패턴
과 동일하게 풀이된다.읽기전용
웹이 전부였고, 단순한 패턴이 웹 디자인패턴의 시작이었다.View > Controller -> Model -> View
방식으로 흘러간다.Model과 View이 끈끈
하다는 것이다.MVC의 같은 경우, View의 수정이 필요할 때마다, Model의 변경또한 불가피해진다.
★ 초기에는 FE의 역할이 없어, Model을 통한 View를 그리는 매우 단순한 방식을 택했다.
⚠️ 매우 단순하지만, MVC간의 결합도가 높아
1. 코드 복잡성이 높고
2. 유지보수/테스트가 어려우며
3. 비즈니스 로직의 (관심사)분리가 애매한 상황이 존재할 수 있다.
Model-View-Presenter
이다.View > Presenter > Model > Presenter > View
와 같이 Presenter가 완벽한 중개자가 된다.★ MVC패턴에서의 뷰-모델간의 결합도를 낮춘다.
⚠️ Presenter의 역할이 중요해지면서, 결합도 또한 증가되었다.
Model-View-ViewModel
로, 이전의 MVP패턴과 달리 데이터바인딩
이라는 개념으로 결합도를 조금 더 낮추게 한다.✅ 데이터바인딩이란
View의 속성과 ViewModel의 속성을 연결하여, 유기적인 관계로 만드는 것이다.
ex. 뷰모델의userName
속성과 뷰의Input의 value
속성을 바인딩하면, userName이 변경될 때마다 TextInput의 값도 자동으로 변경되는 것이다.
★ MVVM은
데이터바인딩
을 통해 UI와 비즈니스로직을 분리하여, 재사용성과 유지보수성을 높인다.
또한, 이러한 패턴은 현재의 FE 3대장인 React, Vue, Angular에서 초기개념으로 사용되었다.
⚠️ ViewModel의 설계가 어렵고, 학습곡선이 높다.
Component패턴
이 등장하게 되었다.★ 재사용성, 모듈화, 독립성 등 컴포넌트를 기반으로 한 개발방식 (지금의 FE에 가깝다)
비즈니스 로직이 컴포넌트에 포함되면, 재사용성이 떨어지기에 UI와 비즈니스 로직을 분리하는Container-Presenter
방식을 초기에는 활용하곤 했다.
⚠️ 컴포넌트 단위로 쪼개다 보니, 컴포넌트간의 유기적인 데이터관리가 어렵게 되었다.
Props Drilling
Flux패턴
이 탄생하게 되었다.Action
객체를 Dispatcher함수를 통해 Store에 반영하면, Store를 구독하는 View에 반영되는 흐름이다.★ Props Drilling해소
전역상태관리 시대의 시작
⚠️ 높은 러닝커브
상태관리만을 위한 코드 (보일러 플레이트, Redux)
불편한 것을 해결하거나, 더욱 나은 개선을 위해
진화해왔다는 점이다.