next.config.js 커스터마이징

2025. 1. 8. 10:02·TypeScript
반응형

소개

Next.js 애플리케이션의 동작을 세부적으로 제어하고 싶으신가요? next.config.js 파일을 통해 애플리케이션을 원하는 대로 커스터마이징하는 방법을 알아보겠습니다.

next.config.js 기본 구조

// next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
  // 기본 설정
  reactStrictMode: true,
  // 여기에 추가 설정
}

module.exports = nextConfig

런타임 구성 설정하기

런타임 구성에는 두 가지 유형이 있습니다:

서버 런타임 구성

const nextConfig = {
  serverRuntimeConfig: {
    userEndpoint: 'https://api.example.com/users',
    secretKey: process.env.SECRET_KEY,
  }
}

공개 런타임 구성

const nextConfig = {
  publicRuntimeConfig: {
    apiUrl: 'https://api.example.com',
    appName: 'My Next.js App',
  }
}

런타임 구성 사용하기

import getConfig from 'next/config'

function MyComponent() {
  const { serverRuntimeConfig, publicRuntimeConfig } = getConfig()

  // publicRuntimeConfig는 클라이언트와 서버 모두에서 접근 가능
  console.log(publicRuntimeConfig.apiUrl)

  // serverRuntimeConfig는 서버에서만 접근 가능
  if (typeof window === 'undefined') {
    console.log(serverRuntimeConfig.secretKey)
  }

  return <div>설정 테스트</div>
}

리다이렉트 설정하기

module.exports = {
  async redirects() {
    return [
      {
        source: '/old-page',
        destination: '/new-page',
        permanent: true, // 308 상태 코드
      },
      {
        source: '/blog/:slug',
        destination: '/articles/:slug', // 동적 경로도 지원
        permanent: false, // 307 상태 코드
      },
      {
        // 와일드카드 패턴 사용
        source: '/docs/:path*',
        destination: '/documentation/:path*',
        permanent: false,
      }
    ]
  }
}

커스텀 헤더 추가하기

module.exports = {
  async headers() {
    return [
      {
        source: '/:path*', // 모든 경로에 적용
        headers: [
          {
            key: 'X-Frame-Options',
            value: 'DENY'
          },
          {
            key: 'X-Content-Type-Options',
            value: 'nosniff'
          }
        ]
      },
      {
        source: '/api/:path*',
        headers: [
          {
            key: 'Access-Control-Allow-Origin',
            value: '*'
          }
        ]
      }
    ]
  }
}

환경별 설정 관리하기

module.exports = (phase, { defaultConfig }) => {
  // 개발 환경과 프로덕션 환경 구분
  const isDev = phase === PHASE_DEVELOPMENT_SERVER
  const isProd = phase === PHASE_PRODUCTION_BUILD

  return {
    // 환경별 설정
    env: {
      API_URL: isDev 
        ? 'http://localhost:3000/api' 
        : 'https://api.production.com',
    },
    // 이미지 도메인 설정
    images: {
      domains: isDev 
        ? ['localhost'] 
        : ['production-cdn.com'],
    },
    // 기타 환경별 설정...
  }
}

주의사항

설정 유형 주의사항
런타임 구성 정적 최적화가 비활성화됨
리다이렉트 설정 변경 시 서버 재시작 필요
커스텀 헤더 보안 관련 헤더 신중히 설정
환경 변수 클라이언트에 노출되지 않도록 주의

실전 활용 예시

API 프록시 설정

module.exports = {
  async rewrites() {
    return [
      {
        source: '/api/:path*',
        destination: `${process.env.API_URL}/:path*`
      }
    ]
  }
}

웹팩 설정 커스터마이징

module.exports = {
  webpack: (config, { buildId, dev, isServer, defaultLoaders, webpack }) => {
    // 웹팩 설정 수정
    config.module.rules.push({
      test: /\.svg$/,
      use: ['@svgr/webpack']
    })

    return config
  }
}

마치며

next.config.js는 Next.js 애플리케이션의 동작을 세밀하게 제어할 수 있는 강력한 도구입니다. 하지만 설정이 복잡해질수록 유지보수가 어려워질 수 있으므로, 필요한 설정만 신중하게 추가하는 것이 좋습니다.

저작자표시 비영리 변경금지 (새창열림)

'TypeScript' 카테고리의 다른 글

[Next.js] HTTP 요청 구현하기 : fetch vs axios  (0) 2025.01.24
[Chrome Extension] Manifest V3 가이드  (2) 2025.01.21
[React] React.lazy와 Suspense  (2) 2024.12.26
[React] memo를 사용한 컴포넌트 최적화  (0) 2024.12.25
[React Query] useMutation과 useQuery  (0) 2024.12.24
'TypeScript' 카테고리의 다른 글
  • [Next.js] HTTP 요청 구현하기 : fetch vs axios
  • [Chrome Extension] Manifest V3 가이드
  • [React] React.lazy와 Suspense
  • [React] memo를 사용한 컴포넌트 최적화
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (730)
      • 스마트팜 (1)
      • 상품 추천 (223)
      • DataBase (0)
        • MongoDB (4)
        • PostgreSQL (0)
      • 하드웨어 (19)
      • 일기장 (4)
      • 파이썬 (131)
        • Basic (42)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • Linux (5)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (51)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    cv2
    카페24리뷰
    믈레코비타멸균우유
    programming101
    라떼우유
    learntocode
    unity
    Python
    codingcommunity
    쇼핑몰리뷰
    스크립트 실행 순서
    appdevelopment
    programmerlife
    list
    셀레니움
    파이썬
    리뷰관리
    유니티
    카페24리뷰이관
    codingtips
    리스트
    rtsp
    스마트스토어리뷰
    긴유통기한우유
    상품 리뷰 크롤링
    ipcamera
    devlife
    스크립트 실행
    C#
    리뷰이관
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
next.config.js 커스터마이징
상단으로

티스토리툴바