Class Component에서 Hooks로 마이그레이션 준비
배경
작년 10월 React Conf에서 발표된 Hooks가 드디어 16.8 정식 버전에 포함되었다. 팀 내에서 도입 여부를 논의하면서, 기존 Class Component 기반 코드베이스를 어떻게 가져갈지 방향을 정리했다.
현재 상황
프로젝트는 약 200여 개의 컴포넌트로 구성되어 있고, 대부분 Class Component다. HOC(Higher-Order Component)와 Render Props 패턴을 혼용하고 있어 로직 재사용이 복잡한 편이다.
class UserProfile extends React.Component {
state = {
loading: true,
user: null
};
componentDidMount() {
this.fetchUser();
}
fetchUser = async () => {
const user = await api.getUser(this.props.userId);
this.setState({ user, loading: false });
};
render() {
// ...
}
}
Hooks 도입 계획
전면 리팩토링은 리스크가 크다고 판단했다. 다음과 같이 단계적으로 진행하기로 했다.
- 신규 컴포넌트는 Hooks 우선 - 작은 UI 컴포넌트부터 시작
- 기존 코드는 유지 - 동작하는 코드를 굳이 바꾸지 않음
- Custom Hook 패턴 연구 - 공통 로직 분리에 활용
// 새로 작성하는 컴포넌트 예시
function UserProfile({ userId }) {
const [loading, setLoading] = useState(true);
const [user, setUser] = useState(null);
useEffect(() => {
api.getUser(userId).then(data => {
setUser(data);
setLoading(false);
});
}, [userId]);
// ...
}
우려사항
팀원들이 아직 Hooks에 익숙하지 않다. 특히 useEffect의 의존성 배열 개념이 헷갈린다는 피드백이 많았다. 당분간은 코드 리뷰를 강화하고, 간단한 컴포넌트로 경험을 쌓는 게 우선이다.
정리
Hooks는 분명 매력적이지만, 서두를 필요는 없다. 기존 Class Component도 여전히 지원되고, 점진적 도입이 공식 권장사항이다. 올해 상반기는 학습 기간으로 잡고, 하반기부터 본격적으로 적용해볼 계획이다.