4 Things We’ve Learned While Migrating a Project Inside a Monorepo
Nx 및 Turborepo와 같은 빌드 시스템 도구가 더 많은 인정을 받으면서 프로젝트 구조를 모노레포로 전환하는 회사가 늘어나고 있습니다. Jotform에서 이러한 접근 방식을 채택한 주요 목표는 프로젝트 간의 직접적인 관계를 관리하고 종속성 버전을 표준화하는 것이었습니다.
이 짧은 포스팅에서는 프로젝트 레포지토리를 모노레포 안으로 옮긴 경험에 대한 인사이트를 알려드리겠습니다. (모노레포에 대해 자세히 알아보려면 프론트엔드 모노레포로의 여정을 확인하세요.)
프로젝트 레포지토리를 모노레포 내로 옮기면서 가장 중점을 둔 과제 중 하나는 커밋 히스토리를 보존하는 것이었습니다. 이를 수행하는 가장 쉬운 방법은 널리 사용되는 또 다른 빌드 시스템 도구인 Lerna의 import 명령을 사용하는 것입니다.
실제로 Lerna로 import 프로세스를 시작하기 전에 마이그레이션된 프로젝트가 모노레포 시스템에서 제대로 작동하는지 확인하고 싶었습니다. 마이그레이션 과정에서 기존 개발이 보류되어 시간을 낭비하거나 프로젝트를 진행 중인 개발자에게 방해가 되고 싶지 않았기 때문입니다.
테스트를 위해 브랜치를 생성하고 프로젝트 폴더를 자체 레포지토리에서 모노레포에 하드카피한 후 종속성 버전 등 발생하는 문제를 수동으로 수정했습니다.
모든 것이 제대로 작동하는지 확인한 후, Lerna로 마이그레이션할 때가 되었다고 결정했습니다. 먼저 다른 브랜치를 생성하고 마스터 브랜치와 최신 버전인지 확인했습니다.
pnpx lerna import {rootPath} -flatten -preserve-commit -dest={destinationPath}
그 후 위의 Lerna import 명령을 실행하고 프로젝트를 모노레포에 옮겼습니다. 여전히 해결해야 할 몇 가지 문제가 있었습니다. 이러한 문제를 극복하기 위해 Git의 체리픽 명령을 사용하여 하드카피한 브랜치에서 마이그레이션 커밋을 이동했는데, 바로 여기서 문제가 시작되었습니다.
Lerna import 프로세스를 위한 새 브랜치를 생성한 후 최신 상태인지 확인했지만 하드카피한 브랜치에 대해서는 아무 조치도 취하지 않았습니다. 체리픽을 사용한 후, 해당 브랜치가 20커밋 뒤처져 있었기 때문에 20커밋이 손실되었습니다. (20개밖에 없어서 다행이었죠!)
이 커밋을 수동으로 이전해야 했습니다. 이 마이그레이션 과정에서 모든 세부 사항을 다시 한 번 확인해야 했기 때문에 특히 오후 5시가 넘은 시간에는 더욱 주의를 기울여야 했습니다.
피와 땀과 눈물을 흘려야 했고, 20개의 커밋의 작성자로부터 냉대를 받기도 했습니다.