[{"data":1,"prerenderedAt":868},["ShallowReactive",2],{"navigation_docs_ko":3,"-ko-trouble-shooting-brolog-nuxt-icon-restricted-network-troubleshooting":195,"-ko-trouble-shooting-brolog-nuxt-icon-restricted-network-troubleshooting-surround":865},[4,124,181],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":27},"Note (개발 지식)","emojione-v1:note-pad","\u002Fko\u002Fnote","ko\u002F1.note",[10,28,42,68,78,88,104,114],{"title":11,"icon":12,"path":13,"stem":14,"children":15,"page":27},"Spring","logos:spring-icon","\u002Fko\u002Fnote\u002Fspring","ko\u002F1.note\u002F0.spring",[16],{"title":17,"icon":18,"path":19,"stem":20,"children":21,"page":27},"Spring Ai","custom:ai","\u002Fko\u002Fnote\u002Fspring\u002Fspring-ai","ko\u002F1.note\u002F0.spring\u002F1.spring-ai",[22],{"title":23,"path":24,"stem":25,"icon":26},"Spring AI 핵심 개념과 LLM 애플리케이션 구조 이해","\u002Fko\u002Fnote\u002Fspring\u002Fspring-ai\u002Fspring-ai","ko\u002F1.note\u002F0.spring\u002F1.spring-ai\u002F1.spring-ai","lucide:file-text",false,{"title":29,"icon":30,"path":31,"stem":32,"children":33,"page":27},"Javascript","skill-icons:javascript","\u002Fko\u002Fnote\u002Fjavascript","ko\u002F1.note\u002F1.javascript",[34,38],{"title":35,"path":36,"stem":37,"icon":26},"Promise.all과 구조 분해 할당을 활용한 데이터 처리 패턴","\u002Fko\u002Fnote\u002Fjavascript\u002Fdestructuring","ko\u002F1.note\u002F1.javascript\u002F1.destructuring",{"title":39,"path":40,"stem":41,"icon":26},"JavaScript 배열 고차 함수와 데이터 처리 패턴 이해","\u002Fko\u002Fnote\u002Fjavascript\u002Ffilter","ko\u002F1.note\u002F1.javascript\u002F2.filter",{"title":43,"icon":44,"path":45,"stem":46,"children":47,"page":27},"Nuxt4","logos:nuxt-icon","\u002Fko\u002Fnote\u002Fnuxt4","ko\u002F1.note\u002F2.nuxt4",[48,52,56,60,64],{"title":49,"path":50,"stem":51,"icon":26},"Nuxt 4를 선택한 이유와 아키텍처 및 실무 가이드","\u002Fko\u002Fnote\u002Fnuxt4\u002Fnuxt-info","ko\u002F1.note\u002F2.nuxt4\u002F1.nuxt-info",{"title":53,"path":54,"stem":55,"icon":26},"Nuxt useAsyncData 동작 원리와 SSR 데이터 페칭 최적화","\u002Fko\u002Fnote\u002Fnuxt4\u002Fnuxt-use_async_data","ko\u002F1.note\u002F2.nuxt4\u002F2.nuxt-use_async_data",{"title":57,"path":58,"stem":59,"icon":26},"Nuxt Content v3 데이터 모델과 Query 시스템 이해","\u002Fko\u002Fnote\u002Fnuxt4\u002Fnuxt-content-v3","ko\u002F1.note\u002F2.nuxt4\u002F3.nuxt-content-v3",{"title":61,"path":62,"stem":63,"icon":26},"Nuxt Auto-imports 내부 동작과 컴파일 과정 분석","\u002Fko\u002Fnote\u002Fnuxt4\u002Fnuxt-auto-import","ko\u002F1.note\u002F2.nuxt4\u002F4.nuxt-auto-import",{"title":65,"path":66,"stem":67,"icon":26},"Nuxt 렌더링 방식 이해: SSR, SSG, ISR, CSR 구현 방법","\u002Fko\u002Fnote\u002Fnuxt4\u002Fnuxt-rendering-strategy","ko\u002F1.note\u002F2.nuxt4\u002F5.nuxt-rendering-strategy",{"title":69,"icon":70,"path":71,"stem":72,"children":73,"page":27},"Nitro","unjs:nitro","\u002Fko\u002Fnote\u002Fnitro","ko\u002F1.note\u002F3.nitro",[74],{"title":75,"path":76,"stem":77,"icon":26},"Nitro 아키텍처와 서버 엔진 구조","\u002Fko\u002Fnote\u002Fnitro\u002Fnitro","ko\u002F1.note\u002F3.nitro\u002Fnitro",{"title":79,"icon":80,"path":81,"stem":82,"children":83,"page":27},"Devops","vscode-icons:file-type-pipeline","\u002Fko\u002Fnote\u002Fdevops","ko\u002F1.note\u002F4.devops",[84],{"title":85,"path":86,"stem":87,"icon":26},"서버사이드 WebAssembly(Wasm)와 차세대 실행 환경","\u002Fko\u002Fnote\u002Fdevops\u002Fwebassembly","ko\u002F1.note\u002F4.devops\u002F1.webAssembly",{"title":89,"icon":90,"path":91,"stem":92,"children":93,"page":27},"Tooling","lucide:wrench","\u002Fko\u002Fnote\u002Ftooling","ko\u002F1.note\u002F4.tooling",[94],{"title":95,"icon":96,"path":97,"stem":98,"children":99,"page":27},"Package Manager","devicon:npm","\u002Fko\u002Fnote\u002Ftooling\u002Fpackage-manager","ko\u002F1.note\u002F4.tooling\u002F1.package-manager",[100],{"title":101,"path":102,"stem":103,"icon":26},"Package Lock 파일의 역할과 의존성 관리 원리","\u002Fko\u002Fnote\u002Ftooling\u002Fpackage-manager\u002Fpackage-lock","ko\u002F1.note\u002F4.tooling\u002F1.package-manager\u002F1.package-lock",{"title":105,"icon":106,"path":107,"stem":108,"children":109,"page":27},"Web","streamline-plump:web","\u002Fko\u002Fnote\u002Fweb","ko\u002F1.note\u002F4.web",[110],{"title":111,"path":112,"stem":113,"icon":26},"웹 애플리케이션 렌더링 아키텍처 이해","\u002Fko\u002Fnote\u002Fweb\u002Frendering-modes","ko\u002F1.note\u002F4.web\u002F2.rendering-modes",{"title":115,"icon":116,"path":117,"stem":118,"children":119,"page":27},"SEO","icon-park-solid:seo","\u002Fko\u002Fnote\u002Fseo","ko\u002F1.note\u002F6.seo",[120],{"title":121,"path":122,"stem":123,"icon":26},"[SEO] 개발 블로그 검색 노출을 위한 robots.txt와 SEO 설정 가이드","\u002Fko\u002Fnote\u002Fseo\u002Fseo","ko\u002F1.note\u002F6.seo\u002F1.seo",{"title":125,"icon":126,"path":127,"stem":128,"children":129,"page":27},"Project (개발일지)","icon-park-solid:branch-two","\u002Fko\u002Fproject","ko\u002F2.project",[130],{"title":131,"icon":132,"path":133,"stem":134,"children":135,"page":27},"Brolog","custom:symbol","\u002Fko\u002Fproject\u002Fbrolog","ko\u002F2.project\u002F1.brolog",[136,140,144,148,152,156,160,164,168,173,177],{"title":137,"path":138,"stem":139,"icon":26},"Brolog 프로젝트 개요","\u002Fko\u002Fproject\u002Fbrolog\u002Foutline","ko\u002F2.project\u002F1.brolog\u002F1.outline",{"title":141,"path":142,"stem":143,"icon":26},"[Brolog] Nuxt Multi Layer 프로젝트 Vercel 배포 (3) - Runtime 기능 문제 분석과 AI Assistant 전환","\u002Fko\u002Fproject\u002Fbrolog\u002Fvercel-deploy3-ai-integration","ko\u002F2.project\u002F1.brolog\u002F10.vercel-deploy3-ai-integration",{"title":145,"path":146,"stem":147,"icon":26},"[Brolog] AI Assistant 적용 과정 - Agent 구조와 API 사용량 관리 시 고려사항","\u002Fko\u002Fproject\u002Fbrolog\u002Fai-assistant-application-process","ko\u002F2.project\u002F1.brolog\u002F11.ai-assistant-application-process",{"title":149,"path":150,"stem":151,"icon":26},"[Brolog] 검색 엔진 노출을 위한 SEO 적용 과정","\u002Fko\u002Fproject\u002Fbrolog\u002Fbrolog-seo","ko\u002F2.project\u002F1.brolog\u002F12.brolog-seo",{"title":153,"path":154,"stem":155,"icon":26},"Brolog 프로젝트 구조","\u002Fko\u002Fproject\u002Fbrolog\u002Fstructure","ko\u002F2.project\u002F1.brolog\u002F2.structure",{"title":157,"path":158,"stem":159,"icon":26},"[Nuxt Content] 네비게이션 아이콘 커스텀 빌드","\u002Fko\u002Fproject\u002Fbrolog\u002Fcustom-icon","ko\u002F2.project\u002F1.brolog\u002F3.custom-icon",{"title":161,"path":162,"stem":163,"icon":26},"[Nuxt 4] Auto-imports 동작 원리와 자동 import 시스템 이해","\u002Fko\u002Fproject\u002Fbrolog\u002Fnuxt-auto-import","ko\u002F2.project\u002F1.brolog\u002F4.nuxt-auto-import",{"title":165,"path":166,"stem":167,"icon":26},"[Brolog] 개발 블로그 메인 페이지 구현","\u002Fko\u002Fproject\u002Fbrolog\u002Fdevelop-main","ko\u002F2.project\u002F1.brolog\u002F5.develop-main",{"title":169,"path":170,"stem":171,"icon":172},"[Brolog] 브랜드 아이덴티티 적용 - Custom 404 페이지와 Default No Image 구현","\u002Fko\u002Fproject\u002Fbrolog\u002Fcustom-error-and-default-thumbnail","ko\u002F2.project\u002F1.brolog\u002F6.custom-error-and-default-thumbnail","lucide:image",{"title":174,"path":175,"stem":176,"icon":26},"[Brolog] Nuxt Multi Layer 프로젝트 Vercel 배포 (1)","\u002Fko\u002Fproject\u002Fbrolog\u002Fvercel-deploy1","ko\u002F2.project\u002F1.brolog\u002F8.vercel-deploy1",{"title":178,"path":179,"stem":180,"icon":26},"[Brolog] Nuxt Multi Layer 프로젝트 Vercel 배포 (2) - Build Pipeline 오류 분석과 Nuxt 실행 구조 이해","\u002Fko\u002Fproject\u002Fbrolog\u002Fvercel-deploy2-error-analyze","ko\u002F2.project\u002F1.brolog\u002F9.vercel-deploy2-error-analyze",{"title":182,"icon":183,"path":184,"stem":185,"children":186,"page":27},"Error (트러블슈팅)","emojione:stop-sign","\u002Fko\u002Ftrouble-shooting","ko\u002F3.trouble-shooting",[187],{"title":131,"icon":132,"path":188,"stem":189,"children":190,"page":27},"\u002Fko\u002Ftrouble-shooting\u002Fbrolog","ko\u002F3.trouble-shooting\u002F1.brolog",[191],{"title":192,"path":193,"stem":194,"icon":26},"[Nuxt Content] Nuxt Icon 오류 해결과 Custom Collection 기반 오프라인 아이콘 구성","\u002Fko\u002Ftrouble-shooting\u002Fbrolog\u002Fnuxt-icon-restricted-network-troubleshooting","ko\u002F3.trouble-shooting\u002F1.brolog\u002F1.nuxt-icon-restricted-network-troubleshooting",{"id":196,"title":192,"body":197,"date":846,"description":847,"extension":848,"links":849,"meta":850,"navigation":860,"path":193,"seo":861,"stem":194,"__hash__":864},"docs_ko\u002Fko\u002F3.trouble-shooting\u002F1.brolog\u002F1.nuxt-icon-restricted-network-troubleshooting.md",{"type":198,"value":199,"toc":832},"minimark",[200,828],[201,202,204,209,218,223,262,266,276,297,300,304,323,327,337,384,393,401,408,625,632,635,746,748,752],"u-page-card",{":spotlight":203},"true",[205,206,208],"h2",{"id":207},"_1-현상-및-근본-원인-분석","🔍 1. 현상 및 근본 원인 분석",[210,211,212,213,217],"p",{},"네트워크 아웃바운드 통신이 제한되거나 **SSL 복호화 장비(자체 서명 인증서 주입)**가 개입하는 특수 네트워크 환경에서, Nuxt 개발 서버 구동 중 터미널 콘솔에 대량의 아이콘 페치 실패 경고(",[214,215,216],"code",{},"failed to load icon",")가 지속적으로 발생하는 현상이 나타난다.",[219,220,222],"h3",{"id":221},"에러-로그-형태","🚨 에러 로그 형태",[224,225,231],"pre",{"className":226,"code":227,"filename":228,"language":229,"meta":230,"style":230},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","WARN  [Icon] failed to load icon lucide:search\nWARN  [Icon] failed to load icon simple-icons:nuxt\nWARN  [Icon] failed to load icon fluent-emoji-flat:light-bulb\n","Terminal","bash","",[214,232,233,246,254],{"__ignoreMap":230},[234,235,238,242],"span",{"class":236,"line":237},"line",1,[234,239,241],{"class":240},"sBMFI","WARN",[234,243,245],{"class":244},"sTEyZ","  [Icon] failed to load icon lucide:search\n",[234,247,249,251],{"class":236,"line":248},2,[234,250,241],{"class":240},[234,252,253],{"class":244},"  [Icon] failed to load icon simple-icons:nuxt\n",[234,255,257,259],{"class":236,"line":256},3,[234,258,241],{"class":240},[234,260,261],{"class":244},"  [Icon] failed to load icon fluent-emoji-flat:light-bulb\n",[219,263,265],{"id":264},"발생-메커니즘","💡 발생 메커니즘",[210,267,268,271,272,275],{},[214,269,270],{},"@nuxt\u002Ficon"," 모듈은 기본적으로 온디맨드(On-Demand) 방식의 원격 조회를 시도한다. 화면 렌더링 시점에 외부 오픈소스 아이콘 API 서버(",[214,273,274],{},"https:\u002F\u002Fapi.iconify.design",")로 실시간 요청을 날리는데, 이때 런타임 환경에 따라 이중적인 결과가 발생한다.",[277,278,279,287],"ul",{},[280,281,282,286],"li",{},[283,284,285],"strong",{},"브라우저(Client) 단:"," 로컬 PC 브라우저 검증망을 통과하여 인터넷 릴레이 통신이 성공하므로 화면에는 아이콘이 정상 출력된다.",[280,288,289,292,293,296],{},[283,290,291],{},"Node.js 서버(SSR) 단:"," Nuxt 내부 서버 엔진(Nitro\u002FVite) 레이어에서는 보안 장비가 주입한 자체 서명 인증서 체인을 신뢰할 수 없거나 아웃바운드가 막혀 통신을 거부(",[214,294,295],{},"fetch failed",")한다. 결과적으로 화면에는 뜨지만 서버 터미널에는 에러 폭탄이 찍히는 괴리가 발생한다.",[298,299],"hr",{},[205,301,303],{"id":302},"️-2-아키텍처적-해결-방안-full-localizing-layer-merge","🛠️ 2. 아키텍처적 해결 방안 (Full Localizing & Layer Merge)",[210,305,306,307,310,311,314,315,322],{},"보안 정책을 우회하기 위해 프로젝트 구동 방식을 ",[283,308,309],{},"외부 의존성이 전무한 완전한 오프라인 로컬(Standalone) 모드","로 전환한다. 특히 ",[214,312,313],{},"brolog"," 프로젝트와 같이 ",[283,316,317,318,321],{},"Nuxt 멀티 레이어(",[214,319,320],{},"extends",") 아키텍처","를 사용하는 경우, 설정 파일 간의 병합(Merge) 특성을 고려하여 명확한 타겟팅 설정을 적용해야 한다.",[219,324,326],{"id":325},"_1단계-메인-프로젝트-루트에-오프라인-패키지-설치","① 1단계: 메인 프로젝트 루트에 오프라인 패키지 설치",[210,328,329,330,333,334,336],{},"원격 API 서버를 찌르지 않도록 현재 감지된 모든 아이콘 컬렉션을 개발 의존성(",[214,331,332],{},"devDependencies",")으로 로컬에 다운로드한다. 명령어는 반드시 ",[214,335,313],{}," 프로젝트의 메인 루트 디렉토리에서 실행해야 한다.",[224,338,340],{"className":226,"code":339,"filename":228,"language":229,"meta":230,"style":230},"npm i -D @iconify-json\u002Flucide @iconify-json\u002Fsimple-icons @iconify-json\u002Ffluent-emoji-flat @iconify-json\u002Flogos @iconify-json\u002Fmdi @iconify-json\u002Fskill-icons @iconify-json\u002Funjs @iconify-json\u002Fstreamline-plump @iconify-json\u002Ficon-park-solid @iconify-json\u002Femojione\n",[214,341,342],{"__ignoreMap":230},[234,343,344,347,351,354,357,360,363,366,369,372,375,378,381],{"class":236,"line":237},[234,345,346],{"class":240},"npm",[234,348,350],{"class":349},"sfazB"," i",[234,352,353],{"class":349}," -D",[234,355,356],{"class":349}," @iconify-json\u002Flucide",[234,358,359],{"class":349}," @iconify-json\u002Fsimple-icons",[234,361,362],{"class":349}," @iconify-json\u002Ffluent-emoji-flat",[234,364,365],{"class":349}," @iconify-json\u002Flogos",[234,367,368],{"class":349}," @iconify-json\u002Fmdi",[234,370,371],{"class":349}," @iconify-json\u002Fskill-icons",[234,373,374],{"class":349}," @iconify-json\u002Funjs",[234,376,377],{"class":349}," @iconify-json\u002Fstreamline-plump",[234,379,380],{"class":349}," @iconify-json\u002Ficon-park-solid",[234,382,383],{"class":349}," @iconify-json\u002Femojione\n",[385,386,387],"blockquote",{},[210,388,389,392],{},[283,390,391],{},"📦 리소스 오버헤드 검증:"," 아이콘 팩을 로컬에 받아도 실제 용량은 수 MB 수준으로 미비하다. 빌드 시점에는 **트리쉐이킹(Tree-shaking)**이 엄격하게 작동하여 코드 상에서 실제 호출한 아이콘(SVG 데이터)만 최종 프로덕션 번들에 인라인 주입되므로 전체 런타임 성능과 빌드 용량 최적화에 훨씬 유리하다.",[219,394,396,397,400],{"id":395},"_2단계-하위-레이어-설정-조정-layernuxtconfigts","② 2단계: 하위 레이어 설정 조정 (",[214,398,399],{},"layer\u002Fnuxt.config.ts",")",[210,402,403,404,407],{},"하위 레이어 설정 내부에 원격 조회를 강제하는 ",[214,405,406],{},"provider: 'iconify'"," 속성이 남아있으면 메인 설정과 충돌을 일으킨다. 이를 내부 엔진 우선 방식으로 변경하고 로컬 번들 가이드를 주입한다.",[224,409,413],{"className":410,"code":411,"filename":399,"language":412,"meta":230,"style":230},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F layer\u002Fnuxt.config.ts\nexport default defineNuxtConfig({\n  icon: {\n    customCollections: [\n      {\n        prefix: 'custom',\n        dir: resolve('.\u002Fapp\u002Fassets\u002Ficons'),\n      },\n    ],\n    clientBundle: {\n      scan: true,\n      includeCustomCollections: true,\n    },\n    \u002F\u002F ⚠️ 원격 API를 강제 조회하는 기존 'iconify'를 주석처리하여 로컬 우선 유도\n    \u002F\u002Fprovider: 'iconify', \n    serverBundle: 'local',\n    fallbackToApi: false\n  },\n})\n","typescript",[214,414,415,421,441,453,464,470,490,514,520,528,538,552,564,570,576,582,599,610,616],{"__ignoreMap":230},[234,416,417],{"class":236,"line":237},[234,418,420],{"class":419},"sHwdD","\u002F\u002F layer\u002Fnuxt.config.ts\n",[234,422,423,427,430,434,437],{"class":236,"line":248},[234,424,426],{"class":425},"s7zQu","export",[234,428,429],{"class":425}," default",[234,431,433],{"class":432},"s2Zo4"," defineNuxtConfig",[234,435,436],{"class":244},"(",[234,438,440],{"class":439},"sMK4o","{\n",[234,442,443,447,450],{"class":236,"line":256},[234,444,446],{"class":445},"swJcz","  icon",[234,448,449],{"class":439},":",[234,451,452],{"class":439}," {\n",[234,454,456,459,461],{"class":236,"line":455},4,[234,457,458],{"class":445},"    customCollections",[234,460,449],{"class":439},[234,462,463],{"class":244}," [\n",[234,465,467],{"class":236,"line":466},5,[234,468,469],{"class":439},"      {\n",[234,471,473,476,478,481,484,487],{"class":236,"line":472},6,[234,474,475],{"class":445},"        prefix",[234,477,449],{"class":439},[234,479,480],{"class":439}," '",[234,482,483],{"class":349},"custom",[234,485,486],{"class":439},"'",[234,488,489],{"class":439},",\n",[234,491,493,496,498,501,503,505,508,510,512],{"class":236,"line":492},7,[234,494,495],{"class":445},"        dir",[234,497,449],{"class":439},[234,499,500],{"class":432}," resolve",[234,502,436],{"class":244},[234,504,486],{"class":439},[234,506,507],{"class":349},".\u002Fapp\u002Fassets\u002Ficons",[234,509,486],{"class":439},[234,511,400],{"class":244},[234,513,489],{"class":439},[234,515,517],{"class":236,"line":516},8,[234,518,519],{"class":439},"      },\n",[234,521,523,526],{"class":236,"line":522},9,[234,524,525],{"class":244},"    ]",[234,527,489],{"class":439},[234,529,531,534,536],{"class":236,"line":530},10,[234,532,533],{"class":445},"    clientBundle",[234,535,449],{"class":439},[234,537,452],{"class":439},[234,539,541,544,546,550],{"class":236,"line":540},11,[234,542,543],{"class":445},"      scan",[234,545,449],{"class":439},[234,547,549],{"class":548},"sfNiH"," true",[234,551,489],{"class":439},[234,553,555,558,560,562],{"class":236,"line":554},12,[234,556,557],{"class":445},"      includeCustomCollections",[234,559,449],{"class":439},[234,561,549],{"class":548},[234,563,489],{"class":439},[234,565,567],{"class":236,"line":566},13,[234,568,569],{"class":439},"    },\n",[234,571,573],{"class":236,"line":572},14,[234,574,575],{"class":419},"    \u002F\u002F ⚠️ 원격 API를 강제 조회하는 기존 'iconify'를 주석처리하여 로컬 우선 유도\n",[234,577,579],{"class":236,"line":578},15,[234,580,581],{"class":419},"    \u002F\u002Fprovider: 'iconify', \n",[234,583,585,588,590,592,595,597],{"class":236,"line":584},16,[234,586,587],{"class":445},"    serverBundle",[234,589,449],{"class":439},[234,591,480],{"class":439},[234,593,594],{"class":349},"local",[234,596,486],{"class":439},[234,598,489],{"class":439},[234,600,602,605,607],{"class":236,"line":601},17,[234,603,604],{"class":445},"    fallbackToApi",[234,606,449],{"class":439},[234,608,609],{"class":548}," false\n",[234,611,613],{"class":236,"line":612},18,[234,614,615],{"class":439},"  },\n",[234,617,619,622],{"class":236,"line":618},19,[234,620,621],{"class":439},"}",[234,623,624],{"class":244},")\n",[219,626,628,629,400],{"id":627},"_3단계-메인-서비스-설정-덮어쓰기-docsnuxtconfigts","③ 3단계: 메인 서비스 설정 덮어쓰기 (",[214,630,631],{},"docs\u002Fnuxt.config.ts",[210,633,634],{},"상속받은 하위 레이어 설정을 메인 컨텍스트에서 최종 확정 지으며 외부 통신 폴백을 완벽히 차단한다.",[224,636,638],{"className":410,"code":637,"filename":631,"language":412,"meta":230,"style":230},"\u002F\u002F docs\u002Fnuxt.config.ts\nexport default defineNuxtConfig({\n  extends: [\n    '..\u002Flayer' \u002F\u002F 하위 레이어 상속 경로\n  ],\n\n  icon: {\n    \u002F\u002F 멀티 레이어 병합 시에도 외부 통신을 차단하도록 고정 쐐기 선언\n    serverBundle: 'local', \u002F\u002F 1단계에서 설치한 node_modules 리소스 강제 매핑\n    fallbackToApi: false   \u002F\u002F 어떠한 상황에서도 외부 원격 API 서버 조회를 금지\n  }\n})\n",[214,639,640,645,657,666,679,686,692,700,705,723,735,740],{"__ignoreMap":230},[234,641,642],{"class":236,"line":237},[234,643,644],{"class":419},"\u002F\u002F docs\u002Fnuxt.config.ts\n",[234,646,647,649,651,653,655],{"class":236,"line":248},[234,648,426],{"class":425},[234,650,429],{"class":425},[234,652,433],{"class":432},[234,654,436],{"class":244},[234,656,440],{"class":439},[234,658,659,662,664],{"class":236,"line":256},[234,660,661],{"class":445},"  extends",[234,663,449],{"class":439},[234,665,463],{"class":244},[234,667,668,671,674,676],{"class":236,"line":455},[234,669,670],{"class":439},"    '",[234,672,673],{"class":349},"..\u002Flayer",[234,675,486],{"class":439},[234,677,678],{"class":419}," \u002F\u002F 하위 레이어 상속 경로\n",[234,680,681,684],{"class":236,"line":466},[234,682,683],{"class":244},"  ]",[234,685,489],{"class":439},[234,687,688],{"class":236,"line":472},[234,689,691],{"emptyLinePlaceholder":690},true,"\n",[234,693,694,696,698],{"class":236,"line":492},[234,695,446],{"class":445},[234,697,449],{"class":439},[234,699,452],{"class":439},[234,701,702],{"class":236,"line":516},[234,703,704],{"class":419},"    \u002F\u002F 멀티 레이어 병합 시에도 외부 통신을 차단하도록 고정 쐐기 선언\n",[234,706,707,709,711,713,715,717,720],{"class":236,"line":522},[234,708,587],{"class":445},[234,710,449],{"class":439},[234,712,480],{"class":439},[234,714,594],{"class":349},[234,716,486],{"class":439},[234,718,719],{"class":439},",",[234,721,722],{"class":419}," \u002F\u002F 1단계에서 설치한 node_modules 리소스 강제 매핑\n",[234,724,725,727,729,732],{"class":236,"line":530},[234,726,604],{"class":445},[234,728,449],{"class":439},[234,730,731],{"class":548}," false",[234,733,734],{"class":419},"   \u002F\u002F 어떠한 상황에서도 외부 원격 API 서버 조회를 금지\n",[234,736,737],{"class":236,"line":540},[234,738,739],{"class":439},"  }\n",[234,741,742,744],{"class":236,"line":554},[234,743,621],{"class":439},[234,745,624],{"class":244},[298,747],{},[205,749,751],{"id":750},"_3-최적화-적용-결과-비교","📊 3. 최적화 적용 결과 비교",[753,754,755,772],"table",{},[756,757,758],"thead",{},[759,760,761,766,769],"tr",{},[762,763,765],"th",{"align":764},"left","비교 지표",[762,767,768],{"align":764},"적용 전 상태",[762,770,771],{"align":764},"최적화 후 상태 (Standalone)",[773,774,775,789,802,815],"tbody",{},[759,776,777,783,786],{},[778,779,780],"td",{"align":764},[283,781,782],{},"외부 네트워크 의존도",[778,784,785],{"align":764},"원격 CDN 및 API 가동 상태에 종속",[778,787,788],{"align":764},"100% 로컬 인프라 독립 가동",[759,790,791,796,799],{},[778,792,793],{"align":764},[283,794,795],{},"터미널 콘솔 가독성",[778,797,798],{"align":764},"무수한 네트워크 경고 및 에러 폭탄 발생",[778,800,801],{"align":764},"불필요한 로그 오버헤드 제로 (Clean)",[759,803,804,809,812],{},[778,805,806],{"align":764},[283,807,808],{},"멀티 레이어 호환성",[778,810,811],{"align":764},"상속 설정 꼬임으로 인한 지속적인 폴백 현상",[778,813,814],{"align":764},"계층형 프로바이더 통일로 깔끔한 병합 완성",[759,816,817,822,825],{},[778,818,819],{"align":764},[283,820,821],{},"아이콘 렌더링 속도",[778,823,824],{"align":764},"클라이언트 사이드 재요청으로 깜빡임 현상 유발",[778,826,827],{"align":764},"서버 단계 로컬 주입으로 실시간 매싱 완성",[829,830,831],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":230,"searchDepth":248,"depth":248,"links":833},[834,838,845],{"id":207,"depth":248,"text":208,"children":835},[836,837],{"id":221,"depth":256,"text":222},{"id":264,"depth":256,"text":265},{"id":302,"depth":248,"text":303,"children":839},[840,841,843],{"id":325,"depth":256,"text":326},{"id":395,"depth":256,"text":842},"② 2단계: 하위 레이어 설정 조정 (layer\u002Fnuxt.config.ts)",{"id":627,"depth":256,"text":844},"③ 3단계: 메인 서비스 설정 덮어쓰기 (docs\u002Fnuxt.config.ts)",{"id":750,"depth":248,"text":751},"2026-07-09","제한된 네트워크 환경에서 발생한 Nuxt Icon 모듈 오류 원인을 분석하고 Custom Collection을 활용해 로컬 아이콘 환경을 구성한 과정 정리","md",null,{"tags":851,"image":857,"imageDark":858,"imageClass":859},[852,853,854,855,856],"Nuxt","Nuxt UI","Nuxt Layer","Troubleshooting","Offline","\u002Flogo\u002Flogo.png","\u002Flogo\u002Flogo-dark.png","object-contain",{"icon":26},{"title":862,"description":863},"Nuxt Icon 오류 해결 방법 | Custom Collection과 로컬 아이콘 구성","외부 네트워크 제한 환경에서 발생하는 Nuxt Icon 오류 원인과 @nuxt\u002Ficon Custom Collection을 활용한 로컬 아이콘 구성 방법을 설명합니다.","xX-F1HsC76PIjIyf2trD9pgBVK5rhVoFUqvEh3uw6-Q",[866,849],{"title":178,"path":179,"stem":180,"description":867,"icon":26,"children":-1},"Nuxt Multi Layer 프로젝트에서 발생한 layer .nuxt 생성 오류를 기반으로 Nuxt 실행 구조, nuxi prepare 과정, build와 generate의 차이를 분석",1785305906256]