Nuxt 설정 runtimeConfig vs app.config 완전 정복

Nuxt3에서 전역 설정을 어떻게 관리하고, 어떤 기준으로 나누어야 할까? 다크모드 예시부터 실무 기준 설정 전략까지 총정리

Nuxt 설정 runtimeConfig vs app.config 완전 정복

Nuxt 3는 유연한 설정 구조를 가지고 있습니다. 프로젝트 전역 설정을 정의할 때 가장 많이 쓰이는 두 가지는 다음과 같습니다:

  • ✅ runtimeConfig: 런타임 동적 설정
  • ✅ app.config: 빌드 타임 정적 설정

이 두 설정은 비슷해 보이지만 목적, 생명 주기, 적용 대상이 분명히 다릅니다.
이번 글에서는 이 둘의 차이를 개념부터 실전까지 정리하고, 현업에서의 활용 예시와 실수를 방지하는 팁까지 총망라합니다.


1. runtimeConfig란?

runtimeConfig는 Nuxt에서 환경 변수 및 비밀값을 런타임에 안전하게 처리할 수 있는 방법입니다. 서버 전용 또는 클라이언트 공유 값으로 구분할 수 있으며, .env 파일과 연동해 환경별 설정을 유연하게 처리할 수 있습니다.

🔧 기본 설정 예시

// nuxt.config.ts
export default defineNuxtConfig({
  runtimeConfig: {
    public: {
      apiBase: '/api',
      darkMode: false // 클라이언트에서도 접근 가능
    },
    secretKey: '123abc', // 서버에서만 접근 가능
  }
})

📌 접근 방식

const config = useRuntimeConfig()

console.log(config.public.apiBase) // ✅ 클라이언트 접근 가능
console.log(config.secretKey)      // ✅ 서버에서만 접근 가능

✅ 활용 예시 (실무 기준)

설정값위치비고
API Base URLruntimeConfig.public.apiBase환경별 달라질 수 있음
인증 시크릿 키runtimeConfig.secretKey서버 전용, 클라이언트 접근 불가
외부 서비스 키public.recaptchaKey 등클라이언트 사용 시 반드시 public 하위로

⚠️ 주의사항

  • runtimeConfig는 서버 재시작 없이 변경할 수 없습니다 (즉, 재배포 필요).
  • process.env가 아닌 **useRuntimeConfig()**를 꼭 사용해야 합니다.
  • 클라이언트에서 접근할 값은 반드시 public 하위로 지정해야 합니다.

2. app.config.ts란?

app.config.ts는 Nuxt 3에서 정적인 앱 전역 설정을 정의하기 위한 공식 방법입니다. 이 설정은 빌드 시점에 결정되며, 타입 추론이 가능하고 Nuxt 전체에서 공유됩니다.

🔧 설정 예시

// app.config.ts
export default defineAppConfig({
  darkMode: true,
  siteName: 'My Nuxt Blog',
  layoutMode: 'boxed',
  theme: {
    primaryColor: '#1e40af'
  }
})

📌 접근 방식

const config = useAppConfig()

console.log(config.darkMode) // true

✅ 활용 예시

설정값위치비고
다크모드 여부appConfig.darkMode전역 테마 설정
사이트 이름appConfig.siteNameSEO, Meta 설정 등에서 활용
기본 테마 색상appConfig.theme스타일 시스템 전역 공유

⚠️ 주의사항

  • 설정값 변경 시 빌드 다시 해야 반영됩니다 (정적 설정이기 때문).
  • .env 값을 가져와 app.config.ts에 쓸 수는 없습니다.
  • 컴포넌트나 훅 안에서 useAppConfig()로 접근해야 합니다.

3. 비교 요약: 언제 무엇을 써야 할까?

구분runtimeConfigapp.config
적용 시점런타임빌드 타임
변경 후 적용서버 재시작 필요빌드 다시 해야 함
클라이언트 접근 가능public 하위만 가능전체 접근 가능
타입 지원제한적 (useRuntimeConfig)자동 타입 추론 (useAppConfig)
주 용도보안 키, API 주소, 모드 분기테마, 레이아웃, 전역 옵션

4. 다크모드 전역 설정 적용 예시

다크모드를 전역 설정으로 넣고, 이를 전 컴포넌트에서 반영하려면 app.config.ts가 적합합니다.

📄 app.config.ts

export default defineAppConfig({
  darkMode: true,
  theme: {
    primary: '#1e293b',
    darkBackground: '#0f172a',
  }
})

🎨 TailwindCSS와 연동 예시 (다크 모드 적용)

<script setup>
const config = useAppConfig()
</script>

<template>
  <div :class="{ 'dark': config.darkMode }" class="bg-white dark:bg-gray-900 text-black dark:text-white">
    <h1>Hello Dark Mode</h1>
  </div>
</template>

✅ 추가 실전 팁

  • Tailwind에서는 darkMode: 'class'로 설정해야 위 예시가 정상 작동합니다.
  • app.config.ts를 활용하면 레이아웃, 색상 시스템, 버튼 스타일 등을 한 곳에서 컨트롤할 수 있어 디자인 시스템과 궁합이 좋습니다.

5. 실무 기준으로 구성된 설정 예시

// nuxt.config.ts
export default defineNuxtConfig({
  runtimeConfig: {
    public: {
      apiBase: process.env.NUXT_PUBLIC_API_BASE || '/api',
      version: process.env.NUXT_PUBLIC_APP_VERSION || '1.0.0',
    },
    secretKey: process.env.NUXT_SECRET_KEY
  }
})
// app.config.ts
export default defineAppConfig({
  darkMode: true,
  language: 'ko',
  ui: {
    layout: 'sidebar',
    theme: {
      color: '#06b6d4',
      fontFamily: 'Inter, sans-serif'
    }
  }
})

6. 고급 활용: app.config 타입 확장하기

Nuxt는 app.config에 자동으로 타입을 추론하지만, 직접 타입 선언을 확장할 수 있습니다.

// types/app.config.d.ts
declare module 'nuxt/schema' {
  interface AppConfigInput {
    ui?: {
      layout?: 'full' | 'sidebar'
      theme?: {
        color?: string
        fontFamily?: string
      }
    }
  }
}
// nuxt.config.ts
import { defineNuxtConfig } from 'nuxt/config'

export default defineNuxtConfig({
  // config...
})

이렇게 하면 VS Code에서 app.config.ts의 값도 완전하게 타입 추론됩니다.


✅ 마무리 정리

  • runtimeConfig: 외부 API 주소, 보안 키, 환경 구분 설정 등에 사용
  • app.config: UI 테마, 전역 설정, 디자인 시스템 구성 등 고정된 설정값에 사용
  • 유동적인 값은 runtimeConfig, 고정 전역 값은 app.config

💡 실무에서의 설정 전략 팁

  1. 다크모드, 언어, 테마, 레이아웃 등은 app.config에 넣어야 유지보수가 편함
  2. 외부와 연결되는 값은 무조건 runtimeConfig에 정의하고 .env에서 관리
  3. app.config.ts는 전역 설정만. 로컬 페이지/컴포넌트 전용 값은 피함
  4. 모든 설정은 타입 기반으로 관리 → DX, 자동 완성, 오류 방지에 큰 도움

🔚 참고 문서