첫 일지에서 사이트 6개를 한꺼번에 손본 이야기를 썼습니다. 그게 가능했던 이유는 사이트들이 같은 저장소(모노레포)에서 공통 패키지 하나를 나눠 쓰기 때문입니다. 이번 글은 그 구조를 지도로 그려 본 기록입니다. 위 그림에서 사이트 노드를 탭하면 그 사이트가 쓰는 묶음이 펼쳐지고, 「목록으로 보기」로 같은 내용을 글자로도 볼 수 있습니다.
무엇으로 이루어져 있나
저장소에는 공통 패키지 @site30cut/ads 하나와 사이트 6개가 있습니다. 직접 운영하는 사이트는 계산모아, 글자수, 휴일모아, site30cut(이 사이트)이고, 나머지 둘은 카페 고객 사이트와 출장 광택 고객 사이트입니다. 6개 사이트가 workspace 로 의존하는 패키지는 이 하나뿐입니다. 다른 사이트의 코드를 가져다 쓰는 일도 없습니다.
패키지는 export 33개를 내보내고, 이를 성격별로 6개 묶음으로 나눴습니다.
- 메뉴 7개: 상단 메뉴, 펼침 메뉴, 아이콘
- 광고 4개: 광고 영역, 애드센스 메타, 쿠팡 링크
- 검색·공유 4개: OG 이미지, RSS, 분석 코드, 공유 버튼
- PWA·연출 2개: 설치 매니페스트 연결, 계절 효과
- 폼·계산 9개: 입력 검사, 계산 상태, 비교, 차트
- 공통 화면 7개: 문의, 개인정보, 404, 언어 전환, 설정
왜 하나로 묶었나
이유는 단순합니다. 메뉴, 광고 자리, PWA 설정을 사이트마다 따로 만들면 고칠 때마다 여섯 번 같은 일을 해야 하고, 한두 곳은 꼭 빠뜨립니다. 공통 패키지에 한 번 고치면 6곳이 같이 바뀌니 하룻저녁에 6개 사이트를 손볼 수 있었습니다. 대신 한 군데의 실수가 6곳에 번지는 위험도 같이 생깁니다. 그래서 공통 패키지를 바꿀 때는 사이트 6개를 모두 빌드해 보는 것을 기본으로 합니다.
결과 — 2026-10-19 빌드 기준
scripts/arch-tree.mjs 가 패키지의 export 와 각 사이트의 import 를 읽어 만든 값입니다. 그림과 아래 숫자는 같은 데이터에서 나옵니다.
- 공통 패키지 export: 33개
- 6개 사이트가 모두 쓰는 export: 12개
- 사이트가 직접 쓰지 않고 패키지 안에서만 쓰는 export: 7개
- 사이트별 사용 수: 계산모아 22개, 글자수 18개, 휴일모아 19개, site30cut 16개, 카페 고객 사이트 15개, 출장 광택 고객 사이트 16개
- 폼·계산 키트를 쓰는 곳: 계산모아·글자수·휴일모아, 도구형 3곳뿐
공통 패키지(packages/site-ads)를 건드린 커밋은 git log --oneline -- packages/site-ads 로 세어 보니 2026-10-19 기준 29개였습니다.
다음 할 일
한계가 하나 있습니다. 이 그림은 site30cut 을 빌드할 때 만들어지는데, 다른 사이트의 import 만 바뀌면 site30cut 이 다시 배포되지 않습니다. 그림은 다음 site30cut 배포 때 갱신되고, 그래서 「빌드 기준일」을 같이 적어 둡니다. 다른 사이트 커밋마다 재배포를 걸면 비용이 더 크다고 판단했습니다.
또 하나는 공통 패키지의 버전 관리입니다. 지금은 모든 사이트가 항상 최신 패키지를 보지만, 사이트가 늘면 한 사이트만 옛 버전에 머물러야 할 때가 올 수 있습니다. 그때 어떤 방식이 맞는지는 실제로 필요해지면 다시 쓰겠습니다. 이런 구조로 사이트를 만드는 과정은 제작 과정에서도 볼 수 있습니다.