Angular 프로젝트에서 React로 마이그레이션 결정한 이유

배경

2년간 유지보수해온 Angular 1.x 프로젝트가 한계에 도달했다. 기술 부채가 쌓이고 신규 개발자 온보딩도 어려워졌다. Angular 2+로 갈지, React로 갈지 2주간 검토한 결과 React를 선택했다.

Angular 2+를 선택하지 않은 이유

  1. 마이그레이션 경로의 복잡성 - Angular 1.x에서 2+로의 마이그레이션은 사실상 재작성에 가깝다. TypeScript 강제, 완전히 다른 아키텍처 때문에 학습 곡선이 가파르다.

  2. 프레임워크 무게감 - 우리 프로젝트는 SPA지만 상대적으로 가벼운 대시보드 성격이다. Angular의 DI 시스템, RxJS 등은 과한 측면이 있었다.

  3. 생태계 트렌드 - 최근 채용 시장과 오픈소스 생태계를 보면 React 비중이 계속 높아지고 있다.

React 선택 이유

  • 점진적 마이그레이션 가능 - 기존 Angular 1.x 앱 일부에 React 컴포넌트를 삽입하는 방식으로 단계적 전환이 가능하다.
  • 학습 곡선 - JSX와 컴포넌트 개념만 익히면 시작할 수 있다.
  • 생태계 - Redux, React Router 등 검증된 라이브러리가 많다.

마이그레이션 전략

// Angular 컨트롤러 내에서 React 컴포넌트 마운트
angular.module('app').directive('reactComponent', function() {
  return {
    restrict: 'E',
    link: function(scope, element) {
      ReactDOM.render(
        React.createElement(MyReactComponent, scope.props),
        element[0]
      );
      
      scope.$on('$destroy', function() {
        ReactDOM.unmountComponentAtNode(element[0]);
      });
    }
  };
});

새로 개발하는 기능부터 React로 작성하고, 레거시는 유지보수만 하는 방향으로 진행한다. 6개월 내 주요 화면 전환을 목표로 잡았다.

우려사항

React 16이 나온 지 얼마 안 됐고, 상태 관리 방법론이 아직 정립되지 않은 느낌이다. Redux는 사용할 예정이지만 보일러플레이트가 많다는 단점이 있다. 하지만 Angular로 계속 가는 것보다는 나은 선택이라 판단했다.