React 16.3 새로운 Context API 도입기

문제 상황

사내 대시보드 프로젝트에서 사용자 인증 정보를 5~6단계 depth로 전달하는 prop drilling이 발생했다. Redux는 과하다는 팀 의견이 있었고, 기존 Context API는 실험적 기능이라 프로덕션 사용이 꺼려졌다.

React 16.3이 릴리즈되면서 공식 Context API가 stable로 변경되어 도입을 결정했다.

적용 방법

// AuthContext.js
import React from 'react';

const AuthContext = React.createContext({
  user: null,
  login: () => {},
  logout: () => {}
});

export default AuthContext;
// App.js
class App extends React.Component {
  state = {
    user: null
  };

  login = (userData) => {
    this.setState({ user: userData });
  };

  logout = () => {
    this.setState({ user: null });
  };

  render() {
    return (
      <AuthContext.Provider value={{
        user: this.state.user,
        login: this.login,
        logout: this.logout
      }}>
        <Dashboard />
      </AuthContext.Provider>
    );
  }
}
// UserProfile.js
const UserProfile = () => (
  <AuthContext.Consumer>
    {({ user, logout }) => (
      <div>
        <span>{user.name}</span>
        <button onClick={logout}>로그아웃</button>
      </div>
    )}
  </AuthContext.Consumer>
);

결과

중간 컴포넌트 7개에서 불필요한 props를 제거했다. Consumer 패턴이 render props 형태라 다소 번거롭지만, 코드 가독성은 확실히 개선됐다.

TypeScript 도입도 고려 중인데, Context와의 타입 호환성을 먼저 검증해봐야 할 것 같다.