Q8-1
AngularJS → Vue 전면 마이그레이션을 어떻게 진행하셨나요? (#08)
핵심 포인트
- 빅뱅이 아닌 점진 전환 + 공용 컴포넌트 추출
- "3회 이상 반복되는 UI"를 공용 컴포넌트화 룰
- 페이지 단위 전환: 로그인 → 대시보드 → 페이지 CRUD → 리포트 순으로
- 회고: 점진 전환은 안전하지만 초기 설계 비용이 있고, 커스터마이즈가 누적되면 재설계가 필요할 수도
모범 답안먼저 답해보고 펼치기
포그리트에서 AngularJS 기반 뷰저블 툴을 Vue로 전면 리팩토링했습니다. 원칙은 두 가지였어요. 첫째, 빅뱅 전환은 안 한다 — 라이브 서비스라 일정 단위로 멈출 수 없어서 페이지 단위로 자연스럽게 전환하는 점진 전략을 택했습니다. 로그인 → 대시보드 → 페이지 CRUD → 리포트 순으로 한 페이지씩 Vue로 옮겼고, 한 시점엔 두 프레임워크가 라우트 단위로 공존했어요.
둘째, 3회 이상 반복되는 UI는 공용 컴포넌트로 추출한다는 룰을 정해 두고 진행했습니다. Input, Button, Modal, Select, Loading 같은 컴포넌트가 그렇게 만들어졌어요. 처음엔 단순한 prop 인터페이스로 시작해 화면 요구가 들어올 때마다 점진적으로 확장하는 방향이었습니다.
회고하자면, 점진 전환이 안전하지만 공용 컴포넌트 초기 설계가 너무 단순하면 나중에 변형 요구가 누적되며 다시 깨질 수 있다는 걸 배웠어요. 이 학습이 이후 CLO에서 디자인 시스템 v1 → v2 (Compound Component) 전환의 사고로 이어졌습니다.
이 답변, 어땠나요?
꼬리 질문
- Q-a. 두 프레임워크 공존 시 라우팅·상태 공유는 어떻게 했나요?
라우팅은 페이지 단위로 자르니 자연스러웠고, 전역 상태는 사용자 인증·언어 설정처럼 양쪽이 다 알아야 하는 정도였어요. 그건 sessionStorage 또는 단순 객체 싱글턴으로 공유했습니다.
- Q-b. AngularJS의 양방향 바인딩 사고에 익숙한 동료들의 학습 곡선은요?
단방향 데이터 흐름이 처음엔 어색해 하시지만, props down · events up이라는 단순한 룰로 익숙해지셨어요. 페어 리뷰를 좀 더 적극적으로 했습니다.
CS · 이론
- Strangler Fig 패턴 (재등장): AngularJS → Vue도 같은 사고. 새 시스템을 키우며 옛 시스템을 잠식
- Single-page application 라우팅: 페이지 단위 전환의 단위는 라우트
- 양방향 바인딩 vs 단방향 데이터 흐름: AngularJS·Vue의 v-model vs React의 controlled component