[javascript] Webpack으로 상태 관리 라이브러리 사용하기

이번 포스트에서는 Webpack을 사용하여 JavaScript 프로젝트에서 상태 관리 라이브러리를 사용하는 방법에 대해 알아보겠습니다.

1. Webpack 설정

Webpack은 JavaScript 모듈 번들러로, 여러 개의 JavaScript 파일을 하나의 번들 파일로 묶어주는 역할을 합니다. 먼저 Webpack을 설치해야 합니다.

npm install webpack webpack-cli --save-dev

그리고 프로젝트 폴더에 webpack.config.js 파일을 생성하고 다음과 같이 설정해주세요.

const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  }
};

위 설정에서 ./src/index.js는 프로젝트의 진입점이 되는 JavaScript 파일의 경로입니다. bundle.js는 Webpack으로 묶인 번들 파일의 이름입니다. dist 폴더에 번들 파일이 생성됩니다.

2. 상태 관리 라이브러리 설치

상태 관리 라이브러리로는 Redux를 예시로 설명하겠습니다. Redux를 설치해주세요.

npm install redux react-redux --save

3. 상태 관리 로직 작성

Redux를 사용하여 상태 관리 로직을 작성해봅시다. src/store.js 파일을 생성하고 다음과 같이 작성해주세요.

import { createStore } from 'redux';

// 초기 상태와 액션 처리 로직을 가지는 리듀서 함수입니다.
function counter(state = 0, action) {
  switch (action.type) {
    case 'INCREMENT':
      return state + 1;
    case 'DECREMENT':
      return state - 1;
    default:
      return state;
  }
}

// 스토어를 생성합니다.
const store = createStore(counter);

export default store;

위 코드에서 createStore 함수는 Redux 스토어를 생성하는 함수이며, counter 함수는 초기 상태와 액션 처리 로직을 가지는 리듀서 함수입니다.

4. React 컴포넌트에서 상태 사용

이제 Redux로 관리된 상태를 React 컴포넌트에서 사용해봅시다. 예를 들어 src/App.js 파일에 다음과 같은 컴포넌트를 작성해봅시다.

import React from 'react';
import { connect } from 'react-redux';

class App extends React.Component {
  render() {
    return (
      <div>
        <h1>Counter: {this.props.counter}</h1>
        <button onClick={this.props.increment}>Increment</button>
        <button onClick={this.props.decrement}>Decrement</button>
      </div>
    );
  }
}

// 스토어의 상태를 컴포넌트의 props로 매핑합니다.
const mapStateToProps = (state) => {
  return {
    counter: state
  };
};

// 액션을 디스패치하는 함수를 컴포넌트의 props로 매핑합니다.
const mapDispatchToProps = (dispatch) => {
  return {
    increment: () => dispatch({ type: 'INCREMENT' }),
    decrement: () => dispatch({ type: 'DECREMENT' })
  };
};

export default connect(mapStateToProps, mapDispatchToProps)(App);

위 코드에서 connect 함수는 Redux 상태와 액션을 컴포넌트의 props로 연결하는 역할을 합니다. mapStateToProps 함수는 스토어의 상태를 컴포넌트의 props로 매핑하는 함수이며, mapDispatchToProps 함수는 액션을 디스패치하는 함수를 컴포넌트의 props로 매핑하는 함수입니다.

5. 애플리케이션 실행

이제 src/index.js 파일에서 애플리케이션을 실행해봅시다.

import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import store from './store';
import App from './App';

ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root')
);

위 코드에서 Provider 컴포넌트는 Redux 스토어를 React 애플리케이션에 제공합니다. ReactDOM.render 함수로 애플리케이션을 렌더링합니다.

이제 npm start 명령어로 애플리케이션을 실행하면, Redux를 사용한 상태 관리가 적용된 애플리케이션이 동작할 것입니다.

결론

Webpack을 사용하여 JavaScript 프로젝트에서 상태 관리 라이브러리를 사용하는 방법을 알아보았습니다. 이를 통해 코드의 유지보수성과 개발 생산성을 향상시킬 수 있습니다. Webpack과 Redux를 조합하여 강력한 웹 애플리케이션을 개발해보세요.

참고 자료