그림 그리는 개발자
  • Next.js 가 실행될 때 한번만 특정 로직을 실행하는 방법
    2023년 10월 17일 21시 02분 11초에 업로드 된 글입니다.
    작성자: 루루개발자

    Next.js 를 실행할 때 마다 최초 한번 특정 로직을 실행해야 하는 경우가 있었습니다. 구동할 때 마다 최초 한번이라는 말은 즉, 코드가 수정되어 git merge 된 이유를 포함한 여러가지 이유로 인해 애플리케이션을 재기동 할 때를 말합니다. 해당 부분을 Next.js 에서 처리하는게 가능할까? 라는 생각과 함께 Next.js 문서를 읽어보던 도중에 Next.js 에서 제공하는 기능 중 하나인 Instrumentation 을 발견하였습니다.

     

    Instrumentation 이 무엇인가?

    Next.js 레포지토리의 루트 경로 또는 src 폴더 사용시에는 src 경로에 instrumentation.ts 라는 파일을 생성 후 이 파일 안에서 register 라는 함수를 export 해놓으면 Next.js 가 실행(부트)될 때 마다 해당 register 함수를 한번 호출하는 기능이라고 볼 수 있습니다. 하지만 현재 2023-10-17 기준으로 instrumentation 기능은 아직 실험적 기능이며, 아래 링크와 같이 Next.js 를 standalone 모드로 구동하면 register 함수가 호출 되지 않는 이슈가 있습니다. (최초 한번 요청이 들어와야 register 함수가 한번 호출 됩니다.)

    https://github.com/vercel/next.js/issues/49897

     

    Instrumentation hook is not called in `standalone` output · Issue #49897 · vercel/next.js

    Verify canary release I verified that the issue exists in the latest Next.js canary release Provide environment information Operating System: Platform: darwin Arch: x64 Version: Darwin Kernel Versi...

    github.com

    해당 이슈가 해결 되면 본 게시글도 내용 업데이트 할 예정입니다.

     

    Instrumentation 사용 방법

    1) Next.js 레포지토리의 루트 경로 또는 src 폴더 사용시에는 src 경로 instrumentation.ts 라는 파일을 생성

    • src 디렉토리 이용할 경우 : 프로젝트 경로/src/instrumentation.ts
    • src 디렉토리 이용하지 않을 경우 : 프로젝트 경로/instrumentation.ts

    2) instrumentation.ts 파일 내용을 아래와 같이 작성

    export function register() {
      // 부트 될 때 마다 최초 한번 실행되어야 할 로직을 작성하세요.
    }

    그럼 이제 Next.js 가 실행(부트)될 때마다 register 함수가 한 번 호출될 것입니다. (원래라면 이렇지만 위에서 언급했듯이 2023-10-17 기준으로 현재는 최초 한번 요청이 들어와야 register 함수가 호출됩니다.)

     

     

    이상입니다.

    감사합니다. :)

     

    댓글