반응형
개요
서비스를 운영하다 보면, 로그를 쌓을 일이 많이 생길 텐데요.
페이지별 로그도 쌓아야 하는 경우가 생깁니다.
Next.js에서는 Custom App 페이지를 (_app.jsx
또는 _app.tsx
) 제공하고 있는데요.
Custom App 페이지에서 페이지에 공통적으로 사용할 로직을 적용할 수 있습니다.
Next.js에서 제공하는 router를 통해 URL pathname을 파악할 수 있는데요.
페이지 path를 파일로 관리하여 router pathname과 비교하면, 어떤 페이지인지 알아낼 수 있습니다.
프로젝트 구조 예시
페이지 & 페이지 pathname
- 메인 :
/main
- 메인 상세 :
/main/[idx]
- About :
/about
페이지 파일 생성 (pages.ts)
// @/constants/pages.ts
export const pages = {
Main: "/main",
MainDetail: "/main/[idx]",
About: "/about",
} as const;
Custom App 페이지 (_app.tsx)
import AppContainer from "@/containers/AppContainer";
import "@/public/normalize.css";
import type { AppProps } from "next/app";
export default function App({ Component, pageProps }: AppProps) {
return (
<AppContainer>
<Component {...pageProps} />
</AppContainer>
);
}
_app.tsx
의 Component
컴포넌트는 페이지 컴포넌트를 의미합니다.
AppContainer 로직
import { pages } from "@/constants/pages";
import { useRouter } from "next/router";
import { PropsWithChildren, useEffect } from "react";
export default function AppContainer(props: PropsWithChildren) {
const router = useRouter();
const keys = Object.keys(pages);
const getPage = (pathname: string) => {
return keys.find((key) => pages[key] === pathname);
};
const handlePageLog = () => {
const page = getPage(router.pathname);
// Logging...
// 여기에 3rd-party 로그 라이브러리를 사용해도 됩니다..
console.log(page);
};
useEffect(() => {
handlePageLog();
}, []);
return <>{props.children}</>;
}
AppContainer
로 페이지 컴포넌트 감싸주고, 페이지에 공통적으로 적용할 로직을 적용할 수 있는데요.
위와 같이 페이지 로그를 기록하는 로직을 작성하였습니다.
결과
반응형
'Next.js' 카테고리의 다른 글
[Next.js] 페이지 성능 개선하기 2 - 번들 사이즈 개선, Tree Shaking (0) | 2023.08.21 |
---|---|
[Next.js] 페이지 성능 개선하기 1 - Next/image, CSS 프리로드 (0) | 2023.08.17 |
[Next.js] Dynamic Import와 Suspense를 같이 쓰지 말기 (0) | 2023.03.09 |
[Next.js] Recoil, Expectation Violation: Duplicate atom key 이슈 (0) | 2022.11.13 |
[Next.js] Next.js 프로젝트 폴더 구조 잡기 (0) | 2022.11.06 |