February 11, 2021
요즘 프로젝트들의 리팩토링을 고민하면서 자연스럽게 디렉토리의 구조도 생각해보게 되었다. 어찌보면, 비즈니스로직들과 뷰를 구분할 때, 디렉토리를 기반으로 짜면 좋지 않을까라는 생각도 들었다.
프로젝트를 구성할 때, 정한 디자인패턴에 준하여 구조를 잡는다면 외부의 사람들이 해당 프로젝트를 이해하는 데에도 좋고 이후 기술변경등으로 인한 수정사항이 있을 때, 스파게티코드러처럼 여러곳을 수정할 필요없이 필요한 부분만 수정할 수 있다는 큰 장점이 있다.
정말 유명하고 많은 프로젝트들에 사용되고있는 디자인패턴이다.
UI
Model
과 View
를 이어주는 다리라고 한다. UI
에서 발생하는 각종 이벤트처리나, 그로 인한 Model
의 변경을 관리한다. 즉 각종 로직들을 관리하는 파트Controller
에 들어옴.Controller
는 View
에게서 사용자의 요청을 확인하고, 필요하다면 Model
을 업데이트함.Model
이 변경된다면 View
에서 해당 데이터를 사용하는 부분이 업데이트 됨. 필요에 따라, 데이터를 즉시 사용하는것이 아닌, 어떠한 로직이 필요한 경우 Controller
를 거치기도 함.💢 이후 프로젝트의 규모가 커지게 되면서 문제가 발생하게 된다. MVC
패턴은 Model
과 View
의 의존성이 높기 때문에 하나의 Model
이 다수의 View
에게 영향을 줄 수도 있고, 반대로 다수의 View
가 하나의 Model
에 영향을 받을 수 있다. 즉 여러개의 파트들이 서로에게 의존성을 갖게되어, 둘을 이어주는 Controller
에 복잡하게 연결되어있는 상황이 생길 수 있다.
Angular와 같은 양방향 바인딩
페이스북에서 개발한 디자인 패턴으로, 무조건 한방향으로만 이뤄지는 디자인 패턴이다.
View
에서 사용자의 요청Action
이 발생Dispatcher
호출Dispatcher
에 따른 Store
상태값 변경Store
상태값 변경에 따른 View
재구성사실상 Redux
는 이러한 Flux
디자인패턴을 잘 활용한 중앙상태관리툴이라고 볼 수 있는데, 단 하나의 Store
만을 관리하며 해당 Store
에 View
는 직접적으로 영향을 줄 수 없으며 오로지 특정 Action
에 따른 Dispatcher
로만 접근할 수 있는점이다.
하지만 요즘 드는 생각이, 디렉토리의 구조를 짤 때, Redux
를 MVC
패턴의 모양? 을 기반으로 하여 짤 수 도 있지 않나 생각이 든다.
크기가 커지면서 여러개의 Model
이 생성되는것을 하나의 store
로 친다면..
View
는 뭐.. 당연히 Component
들이겠고Model
은 reducer
+ store
부분이려나..? 초기 상태인 initialState
를 사실상 reducer
에서 생성해서 이렇게 생각했다.Controller
는 Action
이 될 것 같다.좀 더 생각을 해봐야겠다.