본문 바로가기

FRONTEND

[NextJS] config 파일 및 폴더

src 폴더

- 해당 폴더를 꼭 사용할 필요는 없습니다. 대신, 루트에 pages 폴더 생성하면 src/pages 폴더는 무시 됩니다.

- next.config.js, tsconfig.json, environment variables 등과 같은 config 파일은 루트 디렉토리에 반드시 위치해야합니다. src 폴더로 이동하면 작동하지 않습니다. 

- 공식문서 

 

 

Custom App & Custom Document

_app

- 서버로 요청시 해당 컴포넌트가 가장 먼저 실행되는 컴포넌트 입니다.

- 모든 페이지(컴포넌트)가 해당 컴포넌트를 통해 실행되므로 공통 레이아웃을 적용할 수 있습니다.

- 글로벌 css 적용할 수 있습니다.

- 페이지 전환시 특정 레이아웃을 상태값을 유지할 수 있습니다.

- getStaticProps, getServerSideProps 데이터 페칭 메서드는 해당 컴포넌트에서는 사용할 수 없습니다.

export default function MyApp({ Component, pageProps }) {
  return <Component {...pageProps} />
}

// Component prop은 현재 활성화된 페이지 입니다. 
// 페이지를 라우팅할 때마다 Component prop은 새로운 페이지로 변경됩니다.

// pageProps 초기 props를 포함한 객체입니다.

- 공식문서

 

 

_document

- _app.tsx 컴포넌트 다음에 실행되는 컴포넌트 입니다.

- NextJS에서 제공하는 document(html, body 태그)를 커스터마이징 할 수 있습니다.

- 서버에서만 실행되는 파일이기 때문에 브라우저 API, 이벤트 핸들러 등이 포함된 코드는 실행되지 않습니다.

- _document 의 Head 컴포넌트는 next/head 모듈 내의 Head 컴포넌트와 다릅니다. next/document 모듈에서 가져오기 하여 사용합니다. _document 에서 사용되는 <Head /> 컴포넌트는 모든 페이지에 공통으로 적용해야할 정보들을 포함합니다. 반면, <title /> 과 같이 페이지 별로 다르게 작성되어야 하는 부분은 next/head 모듈에서 가져오기 하여 page 내에서 사용합니다.

import { Html, Head, Main, NextScript } from 'next/document'

export default function Document() {
  return (
    <Html>
      <Head />
      <body>
        <Main />
        <NextScript />
      </body>
    </Html>
  )
}

- 공식문서

 

pages 폴더

- pages 폴더 내에 있는 파일은 파일 이름을 기반으로 라우팅을 설정할 수 있습니다.

- 예를 들어 pages/about.js 파일을 만든다면 /about 에서 해당 컴포넌트에 접근할 수 있습니다.

- 공식문서

 

public 폴더

- 정적파일(이미지 등)을 사용하는 폴더 입니다.

- `base URL/파일이름`의 형태의 경로를 통해 public 폴더에 있는 파일을 참조할 수 있습니다.

- robots.txt, favicon.ico, GSV 등의 정적 파일을 사용하는데 유용합니다.

- 폴더 내 파일 이름을 동일하게 설정하지 않도록 유의합니다.

- 빌드타임에 public 폴더에 포함된 파일만 사용가능하고 런타임에 추가되는 파일은 사용 불가합니다.

- 공식문서 

 

next.config.js

-  커스텀 설정을 위해 루트 디렉토리에 해당 파일을 생성합니다.

- JSON 파일이 아닌 Node.js 모듈 입니다.

- 빌드시에만 NextJS 서버에 의해 사용됩니다.

// next.config.js

module.exports = {
  reactStrictMode: true,
  swcMinify: true,
  compiler: {
    styledComponents: true,
    removeConsole: false,
  },
  env: {
    customKey: 'my-value',
  },
}


/** 
swcMinify
Terse와 비슷한 역할을 하는 빌드 툴입니다. 불필요한 공백과 주석을 삭제하여 공백을 줄이고
스크립트를 해석할 수 없도록 암호화 하는 역할을 합니다.
빌드타임을 획기적으로 줄여줍니다.

참고: https://fe-developers.kakaoent.com/2022/220217-learn-babel-terser-swc/
*/

/** 
compiler 

styledComponent
NextJS와 styled-components 함께 사용시babel-plugin-styled-components 설치 후
ssr 설정을 해주어야 하는데 이와같이 간단하게 한줄로 설정해 줄 수 있습니다.

removeConsole
소스코드에서 console.* 를 제거합니다.

참고: https://nextjs.org/docs/advanced-features/compiler

*/

/**
env
클라이언트에서 환경변수를 사용하기 위해 NEXT_PUBLIC를 붙여 사용해야하지만 
next.config.js 파일에 설정하면 process.env.customKey 와 같은 형태로 접근 가능합니다.

*/

- 공식문서