Posts [Mobx] mobx란?
Post
Cancel

[Mobx] mobx란?

Mobx란?

Mobx는 프론트엔드를 위한 애플리케이션 상태 관리 라이브러리이다. 애플리케이션 전반에서 사용하는 상태(state, 자주 변경되어 관리되는 데이터)를 손쉽게 관리하여 변경에 대한 반응을 처리해줄 수 있는 라이브러리이다. 그래서 전역 상태 라이브러리 라고 표현하기도 한다.

상태 관리는 왜 필요할까? mobx를 왜 사용해야 할까?

간단하게 두 가지를 볼 수 있다.

  • 1)유지보수가 쉬워지도록 상태 로직을 분리하여 모듈화 할 수 있다.
  • 2)상태관리의 단계를 간결하게 해준다.

Note: Mobx는 간단하고(Simple) 확장 가능한(Scalable) 상태 관리 라이브러리를 철학으로 하고 있다.

Mobx의 특징

Mobx는 다음과 같은 특징을 가지고 있다.

  • 1)React에 종속적인 라이브러리가 아님
  • 2)아키텍처나 상태 컨테이너가 아닌 라이브러리
  • 3)redux와 다르게 store에 제한이 없음
  • 4)또한 redux에서 해줘야했던 action 선언, connect, mapStateToProps, mapDispatchToProps등 번거로운 작업들은 데코레이터로 간단하게 대체
  • 5)observable을 기본적으로 사용하고 있음
  • 6)Mobx는 절대적으로 필요한 경우에만 state 변경
  • 7)Typescript를 기반으로 만들어짐

Mobx의 주요 요소

State(Observable State): 관찰 받고 있는 상태

  • 모델을 채우는 객체, 비객체, 원시, 참조의 그래프
  • 특정 부분이 바뀌면, Mobx에서는 정확히 어떤 부분이 바뀌었는지 알 수 있음
  • 이 state의 변화는 reaction과 computations를 일으킴
  • mobx6의 observable에 해당한다.

Derivation(Computed values) - 파생 값(연산된 값)

  • Observable State의 변화에 따라 연산되어 나오는 값
  • 특정값을 연산할 때에만 처리됨
  • observable로부터 도출할 수 있으며, 값이 변경되면 자동으로 업데이트
  • 성능최적화를 위해 사용한다.
  • 메모리에 연산된 값을 캐슁하여, 만약 state가 변경되지 않을 경우 다시 연산하지 않고 캐슁되어 있는 값을 그대로 사용한다.
  • mobx6의 computed 에 해당한다.

Reactions - 반응

  • Observable State의 변화에 따른 부가적인 변화
  • 값이 바뀜에 따라 해야 할 일을 정하는 것을 의미
  • 파생 값과 비슷하지만 값을 생성하지 않는 함수
  • 대체로 I/O 와 관련된 작업
  • 적당할 때 자동으로 DOM이 업데이트 되거나 네트워크 요청을 하도록 만듬
  • when, autorun, reaction
  • 리액트 컴포넌트에 observer 함수로 감싸면 mobx에 내부적으로 컴포넌트 렌더링 메소드를 autorun으로 감싸서 상태 변화에 재렌더링을 하게 한다.

Actions : 액션, 상태를 변화시키는 것

  • Observable State가 사용자가 지정한 것을 포함한 모든 변경사항
  • 상태를 변경시키는 모든 것
  • MobX는 모든 사용자의 액션으로 발생하는 상태 변화들이 전부 자동으로 파생값(Derivation)리액션(Reactions)으로 처리되도록 한다.
  • mobx6의 action 에 해당한다.

Note: 실제로 상태를 변경하는 함수에 action을 변경하지 않아도 자동적으로 reaction이 일어난다. 그렇다면 왜 action이 존재할까? 바로 action이 상태 변경을 트랜잭션 처리하기 때문이다. 예를 들어, foo() 라는 함수에서 observable 변수 a = 1, b = 2 로 변경하였다. 만약 action으로 지정된 함수라면 이를 하나의 변경으로 처리하여 한 번에 반영시키고, action이 지정되지 않은 함수라면 각각 하나씩 변경을 감지하여 두 번을 렌더링시키게 된다. 이는 성능적인 측면에서 action을 붙여주는게 좋다.

mobx의 플로우

mobx-flow 출처: https://hyunseob.github.io/2017/10/07/hello-mobx/

위의 이미지는 mobx api 의 생명 주기를 요약해서 나타내고 있다. Action으로 인한 상태(State) 변경은 곧, 계산 결과(computed)를 업데이트한다. 계산 결과가 업데이트되면 곧 이를 구독하는 반응(Reaction)을 야기한다.

Note: mobx 는 버전 별로 사용 방식이 달라지고 있으니, 각 버전별 사용 방법에 대해선 잘 정리되어 있는 포스팅을 참고바란다.

mobx4 기준 개념 설명 및 리액트 적용 예시

아래 두 포스팅 글이 mobx4 기준으로 개념 설명 및 리액트 적용 예시를 이해하기 쉽게 설명하고 있으니 참고하면 된다.

mobx6 기준 개념 설명 및 리액트 적용 예시

아래 포스팅 글을 통해 mobx6의 사용 방법을 참고하자.

mobx 공식 홈페이지

더 자세한 내용은 mobx 공식 홈페이지를 참고하자.

출처

This post is licensed under CC BY 4.0 by the author.

[React] React Typescript 프로젝트에 eslint prettier 설정

[Webpack] Source Map