pile·
프론트엔드·쏘카쏘카·

쏘카 프론트엔드 모노레포 - Part1. Code Generator로 프로젝트 세팅 자동화하기

29명의 프론트엔드 개발자가 66개 리포지터리를 유지하면서 코드 중복, 공통 라이브러리 업데이트 공수, 일관성 없는 개발 환경 문제가 누적됐다. 쏘카 웹 그룹이 Turborepo 기반 모노레포로 전환하면서 가장 먼저 해결한 과제는 '프로젝트 세팅 자동화' — 기존 GitHub Repository Template을 대체할 Code Generator 구현기다.

핵심 포인트
  • 멀티레포 문제: 66개 레포 간 중복 코드 파편화, 공통 라이브러리 업데이트 시 전 레포 일괄 적용 불가
  • 모노레포 도입: Turborepo 선택 — 빠른 빌드·병렬 실행·원격 캐싱, 최소 설정
  • Code Generator: turbo/gen + Plop 기반으로 Next.js App, socar-design-system, utils/hooks 패키지 자동 생성
  • ESLint auto-fix 통합: 커스텀 Plop 액션으로 생성 파일에 린트 자동 적용
  • 결과: 프로젝트 세팅 시간 기존 대비 80% 이상 감소, 코드 일관성·온보딩 비용 대폭 개선
상세 정리
  • 문제 1: 여러 단일 레포에 중복 코드 산재 → 동일 로직이 여러 곳에 분산, 전체 코드베이스 일관성 유지 불가
  • 문제 2: NPM Registry 경유 공통 라이브러리(SDS, frontend-libraries) 업데이트 시 각 레포마다 별도 PR·배포·적용 과정 필요
  • 문제 3: 서로 다른 개발 환경 → 신규 프로젝트마다 러닝커브 증가, 유지보수 부담
  • Turborepo 선택 이유: lerna·nx 대비 설정 최소화, 병렬 실행·원격 캐싱 성능 이점
  • GitHub Repository Template 대체 필요: 모노레포 단일 레포 구조에서 기존 스캐폴딩 방식 사용 불가
  • Code Generator 구성: turbo/gen이 내부적으로 Plop 활용, 각 패키지 유형별 plopConfig 파일로 분리 관리
  • 자동 생성 패키지 유형: Next.js App(AWS Amplify CI/CD·Terraform·테스트 환경 포함), socar-design-system 컴포넌트, utils/hooks
  • Plop 액션: add(파일 생성), modify(배럴 파일 업데이트), 커스텀 async 액션(ESLint fix 적용)
  • 예시: socar-design-system 컴포넌트 CLI 입력 → 컴포넌트 파일·스타일·인덱스 배럴 자동 생성 + 린트 자동 적용
  • 효과: 반복 보일러플레이트 제거, 인적 오류 감소, 컨벤션 강제 적용, 새 팀원 온보딩 단축
  • 후속: Part2에서 코어 라이브러리 버전 관리 다룰 예정
왜 읽나멀티레포 → 모노레포 전환에서 프로젝트 세팅 자동화가 어떻게 개발자 생산성에 실질적 임팩트를 주는지 Turborepo + Plop 실제 코드와 함께 확인할 수 있다.
쏘카
쏘카 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 프론트엔드·LINE EngineeringLINE Engineering·

    AI로 웹 엔지니어 없이 LINE 앱 안에서 그룹 영상 통화 서비스 만들기

    LINE Planet 팀의 PM과 Android 엔지니어 두 명이 웹 전문 엔지니어 없이 LINE 앱 내에서 그룹 영상 통화 서비스를 개발한 과정을 다룬다. LIFF(LINE Front-end Framework)와 LINE Planet SDK를 활용해 React/Vite 기반 웹 앱을 구성했고, Firebase Cloud Functions로 별도 서버 인프라 없이 구현을 완료했다.

    #react#webrtc#firebase+2