[{"data":1,"prerenderedAt":864},["ShallowReactive",2],{"navigation_docs_ko":3,"-ko-note-nuxt4-nuxt-content-v3":195,"-ko-note-nuxt4-nuxt-content-v3-surround":859},[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":57,"body":197,"date":844,"description":845,"extension":846,"links":847,"meta":848,"navigation":854,"path":58,"seo":855,"stem":59,"__hash__":858},"docs_ko\u002Fko\u002F1.note\u002F2.nuxt4\u002F3.nuxt-content-v3.md",{"type":198,"value":199,"toc":827},"minimark",[200,823],[201,202,204,209,213,228,231,235,238,250,255,262,266,289,322,324,328,339,467,471,535,537,541,551,561,564,664,673,679,786,788,792,799],"u-page-card",{":spotlight":203},"true",[205,206,208],"h2",{"id":207},"_1-nuxt-content-v3의-탄생-배경","1. Nuxt Content v3의 탄생 배경",[210,211,212],"p",{},"과거 Nuxt 3 시절의 Nuxt Content v2는 마크다운(.md) 파일을 실시간으로 읽고 메모리 내에서 인덱싱하는 가벼운 파서 역할을 수행했다. 하지만 프로젝트 규모가 커지고 문서의 양이 방대해질수록 빌드 속도 저하와 데이터 쿼리의 한계가 명확해졌다.",[210,214,215,219,220,223,224,227],{},[216,217,218],"strong",{},"Nuxt Content v3","는 ",[216,221,222],{},"Nuxt 4 아키텍처","에 맞춰 바닥부터 완전히 재설계되었다. 핵심 골자는 정적 파일들을 파싱한 뒤, 내부적으로 강력한 ",[216,225,226],{},"SQLite 데이터베이스 엔진","을 구축하여 데이터를 관계형 DB처럼 관리하는 구조적 대격변을 이뤄냈다는 점이다.",[229,230],"hr",{},[205,232,234],{"id":233},"_2-아키텍처-및-핵심-메커니즘","2. 아키텍처 및 핵심 메커니즘",[210,236,237],{},"Nuxt Content v3의 데이터 처리 파이프라인은 다음과 같은 3단계 레이어로 작동한다.",[239,240,247],"pre",{"className":241,"code":243,"filename":244,"language":245,"meta":246},[242],"language-text","[ 마크다운 파일 (.md) ] \n       │  (빌드 \u002F 개발 서버 구동 시점 파싱)\n       ▼\n[ Nitro SQLite 임베디드 DB (인덱싱 완료) ] ──▶ content.config.ts (스키마 제어)\n       │  (런타임 시점 높은 효율의 SQL 조회)\n       ▼\n[ queryCollection() API 호출 ]\n","Process","text","",[248,249,243],"code",{"__ignoreMap":246},[251,252,254],"h3",{"id":253},"로컬-파일의-데이터베이스화","① 로컬 파일의 데이터베이스화",[210,256,257,258,261],{},"프로젝트가 실행되면 Nitro 엔진은 ",[248,259,260],{},"content\u002F"," 디렉토리 내의 모든 마크다운 파일과 Front-matter 설정을 스캔한다. 이 정보들은 휘발성 텍스트가 아닌, 엄격하게 규격화된 **SQLite 데이터베이스 테이블의 로우(Row)**로 치환되어 메모리에 상주한다.",[251,263,265],{"id":264},"contentconfigts를-통한-스키마schema-제어","② content.config.ts를 통한 스키마(Schema) 제어",[210,267,268,269,272,273,276,277,280,281,284,285,288],{},"v3로 넘어오면서 가장 엄격해진 부분이다. 이전 버전처럼 프론트매터에 임의의 필드(예: ",[248,270,271],{},"date",", ",[248,274,275],{},"author",")를 넣는다고 해서 쿼리 엔진이 자동으로 인지하지 못한다.\n반드시 데이터베이스 테이블의 컬럼을 선언하듯, ",[248,278,279],{},"content.config.ts"," 파일에서 ",[248,282,283],{},"defineCollection","과 ",[248,286,287],{},"Zod"," 라이브러리를 활용해 스키마를 선언해주어야 정상적인 인덱싱 및 정렬 처리가 가능하다.",[290,291,292],"blockquote",{},[210,293,294,295,298,299,302,303,305,306,309,310,313,314,317,318,321],{},"🚨 ",[216,296,297],{},"실무 트러블슈팅 팁 (No Such Column Error)","\n만약 특정 다국어 폴더(",[248,300,301],{},"en\u002F",")에는 ",[248,304,271],{}," 필드가 누락되어 있고, 특정 폴더(",[248,307,308],{},"ko\u002F",")에만 존재할 때, 스키마에 이를 명시하지 않고 정렬(",[248,311,312],{},".order('date')",")을 시도하면 데이터베이스 단에서 ",[248,315,316],{},"no such column: \"date\""," 에러를 뿜으며 빌드가 터진다. 이를 방지하기 위해 반드시 ",[248,319,320],{},".optional()"," 구조로 컬럼의 존재를 DB 인프라에 사전 등록해 주어야 한다.",[229,323],{},[205,325,327],{"id":326},"_3-nuxt-4와-nuxt-content-v3의-명확한-역할-분담","3. Nuxt 4와 Nuxt Content v3의 명확한 역할 분담",[210,329,330,331,334,335,338],{},"코드를 작성할 때 가장 혼동하기 쉬운 두 컴포저블(",[248,332,333],{},"useAsyncData","와 ",[248,336,337],{},"queryCollection",")의 역할은 명확하게 분리되어 있다.",[239,340,345],{"className":341,"code":342,"filename":343,"language":344,"meta":246,"style":246},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const { data: posts } = await useAsyncData('posts_key', () => \n  queryCollection('docs_ko').order('date', 'DESC').all()\n)\n","Example","typescript",[248,346,347,409,461],{"__ignoreMap":246},[348,349,352,356,360,364,367,371,374,377,381,385,388,391,395,397,400,403,406],"span",{"class":350,"line":351},"line",1,[348,353,355],{"class":354},"spNyl","const",[348,357,359],{"class":358},"sMK4o"," {",[348,361,363],{"class":362},"swJcz"," data",[348,365,366],{"class":358},":",[348,368,370],{"class":369},"sTEyZ"," posts ",[348,372,373],{"class":358},"}",[348,375,376],{"class":358}," =",[348,378,380],{"class":379},"s7zQu"," await",[348,382,384],{"class":383},"s2Zo4"," useAsyncData",[348,386,387],{"class":369},"(",[348,389,390],{"class":358},"'",[348,392,394],{"class":393},"sfazB","posts_key",[348,396,390],{"class":358},[348,398,399],{"class":358},",",[348,401,402],{"class":358}," ()",[348,404,405],{"class":354}," =>",[348,407,408],{"class":369}," \n",[348,410,412,415,417,419,422,424,427,430,433,435,437,439,441,443,446,449,451,453,455,458],{"class":350,"line":411},2,[348,413,414],{"class":383},"  queryCollection",[348,416,387],{"class":369},[348,418,390],{"class":358},[348,420,421],{"class":393},"docs_ko",[348,423,390],{"class":358},[348,425,426],{"class":369},")",[348,428,429],{"class":358},".",[348,431,432],{"class":383},"order",[348,434,387],{"class":369},[348,436,390],{"class":358},[348,438,271],{"class":393},[348,440,390],{"class":358},[348,442,399],{"class":358},[348,444,445],{"class":358}," '",[348,447,448],{"class":393},"DESC",[348,450,390],{"class":358},[348,452,426],{"class":369},[348,454,429],{"class":358},[348,456,457],{"class":383},"all",[348,459,460],{"class":369},"()\n",[348,462,464],{"class":350,"line":463},3,[348,465,466],{"class":369},")\n",[251,468,470],{"id":469},"역할-분담-테이블","역할 분담 테이블",[472,473,474,491],"table",{},[475,476,477],"thead",{},[478,479,480,485,488],"tr",{},[481,482,484],"th",{"align":483},"left","기능 컴포저블",[481,486,487],{"align":483},"소속 생태계",[481,489,490],{"align":483},"핵심 역할 및 기능",[492,493,494,515],"tbody",{},[478,495,496,504,508],{},[497,498,499],"td",{"align":483},[216,500,501],{},[248,502,503],{},"queryCollection()",[497,505,506],{"align":483},[216,507,218],{},[497,509,510,511,514],{"align":483},"내장 SQLite DB에서 타겟 컬렉션 데이터를 정렬\u002F필터링하여 ",[216,512,513],{},"가져오는 행위"," 자체를 담당 (SQL의 SELECT 문 역할)",[478,516,517,524,529],{},[497,518,519],{"align":483},[216,520,521],{},[248,522,523],{},"useAsyncData()",[497,525,526],{"align":483},[216,527,528],{},"Nuxt 4 (Core)",[497,530,531,532],{"align":483},"데이터 패칭 흐름 제어. 서버(SSR)에서 긁어온 데이터를 캐싱하여, 브라우저가 하이드레이션될 때 ",[216,533,534],{},"중복 API 요청이 발생하지 않도록 방어",[229,536],{},[205,538,540],{"id":539},"_4-실무에서-주로-사용되는-신형-쿼리-문법","4. 실무에서 주로 사용되는 신형 쿼리 문법",[210,542,543,544,272,547,550],{},"v2의 ",[248,545,546],{},".sort()",[248,548,549],{},".where()"," 형태의 체이닝 문법은 v3에서 완벽한 데이터베이스 친화적(SQL-Like) 메서드로 대체되었다.",[251,552,554,555,272,558,426],{"id":553},"최신-날짜순-전체-조회-order-all","① 최신 날짜순 전체 조회 (",[248,556,557],{},".order()",[248,559,560],{},".all()",[210,562,563],{},"컬렉션 명칭을 인자로 받아 데이터를 정렬한 뒤 전체 데이터를 객체 배열로 반환한다.",[239,565,567],{"className":341,"code":566,"filename":343,"language":344,"meta":246,"style":246},"const { data: articles } = await useAsyncData('articles', () =>\n  queryCollection('docs_ko')\n    .order('date', 'DESC') \u002F\u002F 👈 첫 번째 인자는 컬럼명, 두 번째 인자는 방향(DESC\u002FASC)\n    .all()\n)\n",[248,568,569,606,620,650,659],{"__ignoreMap":246},[348,570,571,573,575,577,579,582,584,586,588,590,592,594,597,599,601,603],{"class":350,"line":351},[348,572,355],{"class":354},[348,574,359],{"class":358},[348,576,363],{"class":362},[348,578,366],{"class":358},[348,580,581],{"class":369}," articles ",[348,583,373],{"class":358},[348,585,376],{"class":358},[348,587,380],{"class":379},[348,589,384],{"class":383},[348,591,387],{"class":369},[348,593,390],{"class":358},[348,595,596],{"class":393},"articles",[348,598,390],{"class":358},[348,600,399],{"class":358},[348,602,402],{"class":358},[348,604,605],{"class":354}," =>\n",[348,607,608,610,612,614,616,618],{"class":350,"line":411},[348,609,414],{"class":383},[348,611,387],{"class":369},[348,613,390],{"class":358},[348,615,421],{"class":393},[348,617,390],{"class":358},[348,619,466],{"class":369},[348,621,622,625,627,629,631,633,635,637,639,641,643,646],{"class":350,"line":463},[348,623,624],{"class":358},"    .",[348,626,432],{"class":383},[348,628,387],{"class":369},[348,630,390],{"class":358},[348,632,271],{"class":393},[348,634,390],{"class":358},[348,636,399],{"class":358},[348,638,445],{"class":358},[348,640,448],{"class":393},[348,642,390],{"class":358},[348,644,645],{"class":369},") ",[348,647,649],{"class":648},"sHwdD","\u002F\u002F 👈 첫 번째 인자는 컬럼명, 두 번째 인자는 방향(DESC\u002FASC)\n",[348,651,653,655,657],{"class":350,"line":652},4,[348,654,624],{"class":358},[348,656,457],{"class":383},[348,658,460],{"class":369},[348,660,662],{"class":350,"line":661},5,[348,663,466],{"class":369},[251,665,667,668,272,670,426],{"id":666},"특정-조건-검색-where-first","② 특정 조건 검색 (",[248,669,549],{},[248,671,672],{},".first()",[210,674,675,676,678],{},"단 한 건의 고유 문서만 매핑하여 가져올 때는 끝에 ",[248,677,672],{},"를 결합한다.",[239,680,682],{"className":341,"code":681,"filename":343,"language":344,"meta":246,"style":246},"const { data: page } = await useAsyncData('current_page', () =>\n  queryCollection('docs_ko')\n    .where('path', '=', '\u002Fproject\u002Fbrolog') \u002F\u002F 👈 정확한 비교 연산자 주입 구조\n    .first()\n)\n",[248,683,684,720,734,773,782],{"__ignoreMap":246},[348,685,686,688,690,692,694,697,699,701,703,705,707,709,712,714,716,718],{"class":350,"line":351},[348,687,355],{"class":354},[348,689,359],{"class":358},[348,691,363],{"class":362},[348,693,366],{"class":358},[348,695,696],{"class":369}," page ",[348,698,373],{"class":358},[348,700,376],{"class":358},[348,702,380],{"class":379},[348,704,384],{"class":383},[348,706,387],{"class":369},[348,708,390],{"class":358},[348,710,711],{"class":393},"current_page",[348,713,390],{"class":358},[348,715,399],{"class":358},[348,717,402],{"class":358},[348,719,605],{"class":354},[348,721,722,724,726,728,730,732],{"class":350,"line":411},[348,723,414],{"class":383},[348,725,387],{"class":369},[348,727,390],{"class":358},[348,729,421],{"class":393},[348,731,390],{"class":358},[348,733,466],{"class":369},[348,735,736,738,741,743,745,748,750,752,754,757,759,761,763,766,768,770],{"class":350,"line":463},[348,737,624],{"class":358},[348,739,740],{"class":383},"where",[348,742,387],{"class":369},[348,744,390],{"class":358},[348,746,747],{"class":393},"path",[348,749,390],{"class":358},[348,751,399],{"class":358},[348,753,445],{"class":358},[348,755,756],{"class":393},"=",[348,758,390],{"class":358},[348,760,399],{"class":358},[348,762,445],{"class":358},[348,764,765],{"class":393},"\u002Fproject\u002Fbrolog",[348,767,390],{"class":358},[348,769,645],{"class":369},[348,771,772],{"class":648},"\u002F\u002F 👈 정확한 비교 연산자 주입 구조\n",[348,774,775,777,780],{"class":350,"line":652},[348,776,624],{"class":358},[348,778,779],{"class":383},"first",[348,781,460],{"class":369},[348,783,784],{"class":350,"line":661},[348,785,466],{"class":369},[229,787],{},[205,789,791],{"id":790},"_5-결론-및-실무-인사이트","5. 결론 및 실무 인사이트",[210,793,794,795,798],{},"Nuxt 4와 Nuxt Content v3의 결합은 단순한 버전 업그레이드가 아니다. 파일 기반 컨텐츠 관리 시스템을 ",[216,796,797],{},"엔터프라이즈급 DB 아키텍처"," 수준으로 격상시킨 진화다.",[800,801,802,809],"ul",{},[803,804,805,808],"li",{},[216,806,807],{},"엄격한 스키마 정의 필수:"," 마크다운을 작성할 때 프론트매터 규칙이 엄격해진 만큼, 공통 스키마 확장을 통해 데이터 무결성을 먼저 확보해야 정렬 및 필터링 과정에서 런타임 에러를 방지할 수 있다.",[803,810,811,814,815,818,819,822],{},[216,812,813],{},"구조적 이점:"," 내장 컴포넌트나 코드 블록 내부의 문자열을 파서가 기만적으로 추적하여 ",[248,816,817],{},"\u002Fundefined"," 404 링크 에러를 터트리는 독특한 파싱 메커니즘이 존재하므로, 본문 작성 시 태그(",[248,820,821],{},"\u003Cimg>"," 등) 표현이나 에셋 경로는 철저히 백틱 처리하거나 이스케이프하여 작성하는 숙련도가 필요하다.",[824,825,826],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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}",{"title":246,"searchDepth":411,"depth":411,"links":828},[829,830,834,837,843],{"id":207,"depth":411,"text":208},{"id":233,"depth":411,"text":234,"children":831},[832,833],{"id":253,"depth":463,"text":254},{"id":264,"depth":463,"text":265},{"id":326,"depth":411,"text":327,"children":835},[836],{"id":469,"depth":463,"text":470},{"id":539,"depth":411,"text":540,"children":838},[839,841],{"id":553,"depth":463,"text":840},"① 최신 날짜순 전체 조회 (.order(), .all())",{"id":666,"depth":463,"text":842},"② 특정 조건 검색 (.where(), .first())",{"id":790,"depth":411,"text":791},"2026-07-11","Nuxt Content v3의 SQLite 기반 데이터 구조, Collections 시스템, Schema 정의 방식과 콘텐츠 조회 메커니즘 정리","md",null,{"tags":849,"image":853},[43,850,851,852],"NuxtContent","Architecture","brolog-log","images\u002Fnuxt-thumbnail.png",{"icon":26},{"title":856,"description":857},"Nuxt Content v3 데이터 모델과 Collections 구조 분석","Nuxt Content v3에서 콘텐츠가 저장되고 조회되는 과정과 SQLite 기반 데이터 모델, Collections, Query API 구조를 설명합니다.","T5_vMjqgv3GOUjiRgTOwBf8cKUMlbashZnQ4Gca_V14",[860,862],{"title":53,"path":54,"stem":55,"description":861,"icon":26,"children":-1},"Nuxt의 useAsyncData가 SSR 환경에서 데이터 중복 요청을 방지하고 Hydration 성능을 개선하는 원리와 활용 방법 정리",{"title":61,"path":62,"stem":63,"description":863,"icon":26,"children":-1},"Nuxt의 Auto-imports 시스템이 정적 분석을 통해 Composable과 Component를 연결하는 방식과 빌드 타임 처리 과정을 분석",1785305903795]