직접 만든 라이브러리로 Next.js 페이지 메타 정보 관리하기
2023년 12월 6일 한국신용데이터 기업 기술블로그에 게재한 내용입니다. 원본 확인하러 가기
안녕하세요, 한국신용데이터 프론트엔드 개발자 이원국(Lee)입니다.
Next.js 애플리케이션의 페이지 메타 정보를 하나의 JSON 파일에서 일률적으로 관리하기 위해 next-pathmap이라는 cli 라이브러리를 재미삼아 만들어 보았습니다. 어떤 필요에 의해 만들게 되었고 어떻게 만들었는지 소개해드립니다.

요약
- Next.js의 모든 페이지마다 메타 정보를 일률적으로 관리하기 위한 라이브러리를 만들었습니다.
- page directory 또는 page extension 패턴에 맞추어 프로젝트 폴더를 파싱하고 JSON으로 path별 메 타 정보를 담는 객체를 만들어줍니다.
- 사내 자원 명명 컨벤션에 맞춘 PV 이벤트 트래킹용 페이지 명칭, PV 추적 여부, 서비스 카테고리 등을 하나의 파일에서 누락 없이 관리하기 위해 만들었습니다.
feat-1. Next.js의 파일 시스템 기반 라우팅(src/pages/*)을 활용
파일 시스템 상 pages 하위 디렉토리 구조와 확장명에 따라 페이지가 구성되는 next.js의 특징을 활용하여, 페이지 컴포넌트 파일을 파싱합니다.
.
├─ insurance
│ ├─ index.page.tsx
│ ├─ join
│ │ ├─ index.page.tsx # 설정/관리자/화면_1
│ │ ├─ product-A.page.tsx # 설정/관리자/화면_1
│ │ ├─ product-B.page.tsx # 설정/관리자/화면_2
│ │ └─ ...
│ │
│ ├─ submit
│ │ ├─ index.page.tsx
│ │ ...
│ └─ ...
...
feat-2. 프롬프트 입력 또는 config 파일을 통한 라이브러리 세팅
프롬프트 입력 또는 config 파일을 통해 페이지 루트의 위치, 만들어진 pathmap의 저장 위치 및 파일명, 파싱 포함 또는 제외 스코프, 맵핑할 페이지의 메타 데이터 구조, 상위 위계(카테고리) 라우트의 별칭을 설정할 수 있습니다.
const PathmapConfig = {
pathToPages: "src/pages",
pathToSave: "src/pathmap/pathmap.json",
includes: ["insurance/**/*.page.{ts,tsx}"],
excludes: ["!**/_*", "!**/!api"],
schema: {
alias: "",
trackPageView: true,
useCategories: true,
passQueryParams: true,
},
categories: [
{
insurance: "금융/보험",
},
],
};
module.exports = PathmapConfig;
feat-3. JSON으로 출력되는 pathmap 파일
(2)의 설정에 따라 지정된 위치에 JSON으로 라우트 파싱 데이터에 입력된 스킴을 맵핑한 output을 저장합니다.
여기서 한번 지정된 설정 값은 파싱을 다시 실행해도 덮어쓰지 않고 새로운 라우트에 대해서만 구조를 갱신합니다.
{
"/insurance": {
"alias": "보험",
"trackPageView": true,
"categories": ["금융/보험"],
"query": []
},
"/insurance/join": {
"alias": "보험/가입",
"trackPageView": true,
"categories": ["금융/보험"],
"query": []
},
"/insurance/join/[:product]": {
"alias": "보험/가입/{{product}}", // 동적 할당 값
"trackPageView": true,
"categories": ["금융/보험"],
"query": ["product"]
},
위 산출물을 통해 PV 한글 이벤트명을 자동으로 참조하거나, 페이지마다 지정해야 하는 특정한 공통 설정 등을 관리할 수 있습니다. (특정 이벤트 추적 여부, 동적 쿼리, 특정 기능 사용 여부 등)
feat-4. git hook, Ci 등 자동화에 연계시켜 사용할 목적
next-pathmap 라이브러리가 수행하는 기능은 너무 간단합니다. 파일 시스템을 특정 규칙에 따라 파싱하고, JSON 포맷의 데이터로 만들어주는 것입니다.
해당 라이브러리의 제작 목적은 페이지와 관련된 이벤트 명명 규칙과 메타 태그를 사용한 페이지 명세 등을 일관된 규칙으로 관리하는것에 의의가 있습니다.
PV 이벤트 누락, 이벤트명 컨벤션이 틀어지는 문제, 더 이상 사용하지 않지만 제거되지 않은 페이지 등 관리의 필요성을 느끼게 되었고, 자동으로 pathmap을 생성해서 single source에서 라우트를 관리할 수 있는 사내 표준을 만들고 싶었습니다.