[javascript] MobX와 GraphQL API 통신

이 포스트에서는 MobX와 GraphQL API를 통해 데이터를 효과적으로 관리하고 통신하는 방법을 알아보겠습니다. MobX는 상태 관리 라이브러리로, 애플리케이션의 상태를 자동으로 추적하고 업데이트하는 기능을 제공합니다. GraphQL은 쿼리 언어로, 클라이언트가 필요한 데이터만 선택적으로 요청할 수 있는 기능을 제공하여 효율적인 통신을 가능하게 합니다.

MobX 설치 및 설정

먼저, MobX를 설치하고 설정해야 합니다. npm을 사용하여 다음 명령어로 MobX를 설치할 수 있습니다:

npm install mobx

그리고, MobX를 사용하기 위해 mobx-react-lite 패키지도 설치해야 합니다:

npm install mobx-react-lite

프로젝트에서 MobX를 초기화하기 위해 다음과 같이 코드를 작성할 수 있습니다:

import { configure } from "mobx";

configure({
  enforceActions: "always",
});

이렇게 설정하면 MobX가 애플리케이션 내의 모든 상태 변화를 추적하여 엄격한 액션 사용을 강제화합니다.

GraphQL API 통신

MobX와 함께 GraphQL API를 통신하기 위해서는 graphql-request 패키지를 설치해야 합니다:

npm install graphql-request

GraphQL API에 요청을 보내기 위해 다음과 같이 코드를 작성할 수 있습니다:

import { request } from "graphql-request";

const endpoint = "https://api.example.com/graphql"; // API 엔드포인트 URL

const query = ` // GraphQL 쿼리
  query {
    posts {
      id
      title
      content
    }
  }
`;

request(endpoint, query).then((data) => {
  // 데이터 처리
});

위의 예시는 posts라는 필드의 id, title, content를 가져오는 GraphQL 쿼리를 보내는 방법을 보여줍니다. request 함수는 비동기적으로 데이터를 가져옵니다. 데이터를 받은 후에는 적절하게 처리하면 됩니다.

MobX 상태 관리

MobX를 사용하여 API로부터 가져온 데이터를 효과적으로 관리할 수 있습니다. 이를 위해 MobX의 observableaction 데코레이터를 사용하여 필요한 상태와 액션을 정의합니다. 예를 들어:

import { observable, action } from "mobx";

class PostStore {
  @observable posts = [];

  @action
  fetchPosts() {
    const endpoint = "https://api.example.com/graphql";
    const query = `query { posts { id, title, content } }`;

    request(endpoint, query).then((data) => {
      this.posts = data.posts;
    });
  }
}

export default new PostStore();

위의 예시에서는 PostStore 클래스의 posts 상태를 정의하고, fetchPosts 액션을 실행하여 API로부터 데이터를 가져와 posts 상태를 업데이트하고 있습니다.

이제 애플리케이션에서 PostStore를 import하여 상태와 액션을 사용할 수 있습니다. MobX는 상태 변화를 자동으로 감지하여 필요한 부분만 업데이트하게 되므로, 애플리케이션의 퍼포먼스와 사용성을 향상시킬 수 있습니다.

결론

이렇게 MobX와 GraphQL API를 통해 데이터를 효과적으로 관리하고 통신하는 방법을 알아보았습니다. MobX는 복잡한 상태 관리를 단순화하고, GraphQL은 효율적인 데이터 통신을 가능하게 해줍니다. MobX와 GraphQL은 함께 사용하면 애플리케이션의 개발과 유지보수를 더욱 편리하게 할 수 있습니다.

GraphQL Official Documentation MobX Official Documentation