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를 사용한 컴포넌트 최적화
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (725)
      • 스마트팜 (0)
      • 상품 추천 (223)
      • MongoDB (4)
      • 하드웨어 (17)
      • 일기장 (4)
      • 파이썬 (130)
        • Basic (41)
        • 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 (4)
      • 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)
  • 인기 글

  • 태그

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

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

티스토리툴바