[javascript] Storybook과 자바스크립트 딥러닝 라이브러리의 통합

디자인 시스템을 관리하고 컴포넌트를 개발하며, 때로는 실제 데이터를 사용해 UI 컴포넌트를 테스트해야 할 때가 있습니다. 이러한 요구사항을 충족시키기 위해, Storybook과 자바스크립트 딥러닝 라이브러리를 통합하여 사용할 수 있습니다.

Storybook은 컴포넌트를 독립적으로 개발하고 테스트할 수 있는 환경을 제공해주는 툴입니다. 컴포넌트를 개발할 때 실제 데이터를 사용해 테스트하기 위해서는 데이터를 모의(mock)하는 방법이 필요합니다. 이를 위해 여러 딥러닝 라이브러리를 활용할 수 있는데, 여기서는 자바스크립트로 구현된 딥러닝 라이브러리인 TensorFlow.js를 예로 들어볼 것입니다.

1. Storybook 설치

먼저, Storybook을 설치해야 합니다. 아래 명령어를 터미널에 입력하여 설치할 수 있습니다.

npx -p @storybook/cli sb init

2. TensorFlow.js 설치

TensorFlow.js를 사용하기 위해 다음과 같이 npm을 이용하여 설치합니다.

npm install @tensorflow/tfjs @tensorflow-models/coco-ssd

3. TensorFlow.js를 활용한 컴포넌트 테스트

이제 딥러닝 라이브러리인 TensorFlow.js를 활용하여 Storybook에서 컴포넌트를 테스트해보겠습니다.

import React from 'react';
import { useModel } from '@tensorflow-models/coco-ssd';
import { render } from '@testing-library/react';

const ImageComponent = () => {
  const [model, setModel] = React.useState(null);
  
  // 모델 로딩
  React.useEffect(() => {
    const loadModel = async () => {
      const loadedModel = await useModel();
      setModel(loadedModel);
    };
    
    loadModel();
  }, []);
  
  // 이미지 분류
  const classifyImage = async () => {
    const image = document.getElementById('my-image');
    if (image && model) {
      const predictions = await model.detect(image);
      console.log(predictions);
    }
  };
  
  return (
    <div>
      <img id="my-image" src="https://example.com/my-image.jpg" alt="My Image" />
      <button onClick={classifyImage}>Classify Image</button>
    </div>
  );
};

// Storybook에서 ImageComponent를 테스트하기 위한 스토리 작성
export const ImageComponentStory = () => <ImageComponent />;

위 코드는 TensorFlow.js를 사용하여 이미지를 분류하는 ImageComponent를 포함한 컴포넌트를 작성한 것입니다. 이제 Storybook에서 이 컴포넌트를 테스트할 수 있습니다.

4. Storybook에 컴포넌트 추가하기

테스트를 위해 작성한 컴포넌트를 Storybook에 추가해보겠습니다. .storybook/config.js 파일을 열고 해당 파일 안에 아래와 같은 코드를 추가합니다.

import { configure } from '@storybook/react';

// ImageComponent를 포함한 스토리 추가
configure(require.context('../src', true, /\.stories\.js$/), module);

이제 Storybook을 실행하면 ImageComponent를 포함한 스토리가 추가되어 테스트할 수 있게 됩니다.

마무리

위에서는 Storybook과 JavaScript 딥러닝 라이브러리인 TensorFlow.js의 통합을 소개했습니다. Storybook을 통해 컴포넌트를 테스트하고, TensorFlow.js를 이용해 실제 데이터를 사용하여 분류 작업을 수행할 수 있습니다. 이러한 방식을 통해 UI 컴포넌트의 효율적인 개발과 테스트가 가능해집니다.

참고자료: