{
    "componentChunkName": "component---node-modules-gatsby-theme-primer-wiki-src-templates-post-query-js",
    "path": "/posts/관찰/2026-09-30-tsconfig-exclude는-병합이-아니라-교체/",
    "result": {"data":{"mdx":{"id":"ed2f6561-c889-5ae9-8d98-54a9b5bb5961","tableOfContents":{},"fields":{"title":"tsconfig exclude는 extends 시 병합이 아니라 교체다","slug":"/posts/관찰/2026-09-30-tsconfig-exclude는-병합이-아니라-교체/","url":"https://r0k.wiki/posts/관찰/2026-09-30-tsconfig-exclude는-병합이-아니라-교체/","editUrl":"https://github.com/padawanR0k/wiki/blob/master/content/posts/관찰/2026-09-30-tsconfig-exclude는-병합이-아니라-교체.md","lastUpdatedAt":"2026-10-04T07:54:32.000Z","lastUpdated":"10/4/2026","gitCreatedAt":"2026-10-04T07:54:32.000Z","shouldShowTitle":true},"frontmatter":{"title":"tsconfig exclude는 extends 시 병합이 아니라 교체다","description":null,"imageAlt":null,"tags":["관찰","설정무시"],"date":"2026-09-30T00:00:00.000Z","dateModified":null,"language":null,"seoTitle":null,"image":null},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"tsconfig exclude는 extends 시 병합이 아니라 교체다\",\n  \"date\": \"2026-09-30T00:00:00.000Z\",\n  \"updated\": \"2026-09-30T00:00:00.000Z\",\n  \"tags\": [\"관찰\", \"설정무시\"],\n  \"target\": \"tsconfig\",\n  \"version\": \"TypeScript 전 버전\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"tsconfig.build.json\"), \"\\uC774 \\uC790\\uCCB4 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"exclude\"), \" \\uBC30\\uC5F4\\uC744 \\uC815\\uC758\\uD558\\uBA74 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"extends\"), \"\\uD55C \\uBD80\\uBAA8\\uC758 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"exclude\"), \"\\uB97C \\uD1B5\\uC9F8\\uB85C \\uB36E\\uC5B4\\uC4F4\\uB2E4. \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"files\"), \"\\xB7\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"include\"), \"\\xB7\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"exclude\"), \"\\uB294 \\uBC30\\uC5F4 \\uBCD1\\uD569 \\uC5C6\\uC774 \\uC790\\uC2DD \\uAC12\\uC774 \\uC774\\uAE30\\uB294 \\uD544\\uB4DC\\uC774\\uACE0, \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"compilerOptions\"), \"\\uB9CC \\uD0A4 \\uB2E8\\uC704\\uB85C \\uBCD1\\uD569\\uB41C\\uB2E4. \\uBD80\\uBAA8\\uC5D0 \\uB123\\uC740 exclude\\uAC00 \\uD55C \\uBC88\\uB3C4 \\uC801\\uC6A9\\uB41C \\uC801 \\uC5C6\\uC5B4\\uB3C4 \\uC544\\uBB34 \\uACBD\\uACE0\\uAC00 \\uC5C6\\uB2E4.\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\uB9E5\\uB77D\"), \": pre-commit tsc\\uAC00 30\\uCD08 \\uAC78\\uB9AC\\uB294 \\uC6D0\\uC778\\uC744 \\uD30C\\uB2E4\\uAC00, 2024-11\\uC5D0 \\uB123\\uC740 \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"i18next.d.ts\"), \" exclude\\uAC00 \\uD55C \\uBC88\\uB3C4 \\uC801\\uC6A9\\uB41C \\uC801 \\uC5C6\\uC5C8\\uB2E4\\uB294 \\uAC78 \\uBC1C\\uACAC\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\uCC98\\uC74C\\uC5D4\"), \": i18n \\uD0C0\\uC785\\uC774 \\uBB34\\uAC70\\uC6B4 \\uAC8C \\uBB38\\uC81C\\uB77C\\uACE0 \\uBD24\\uB2E4. \\uC2E4\\uC81C\\uB85C\\uB294 \\uADF8\\uAC78 \\uBE7C\\uB824\\uB358 \\uC124\\uC815\\uC774 \\uC8FD\\uC5B4 \\uC788\\uC5C8\\uB358 \\uAC83\")));\n}\n;\nMDXContent.isMDXComponent = true;","rawBody":"---\ntitle: tsconfig exclude는 extends 시 병합이 아니라 교체다\ndate: 2026-09-30\nupdated: 2026-09-30\ntags:\n  - 관찰\n  - 설정무시\ntarget: tsconfig\nversion: TypeScript 전 버전\n---\n\n`tsconfig.build.json`이 자체 `exclude` 배열을 정의하면 `extends`한 부모의 `exclude`를 통째로 덮어쓴다. `files`·`include`·`exclude`는 배열 병합 없이 자식 값이 이기는 필드이고, `compilerOptions`만 키 단위로 병합된다. 부모에 넣은 exclude가 한 번도 적용된 적 없어도 아무 경고가 없다.\n\n- **맥락**: pre-commit tsc가 30초 걸리는 원인을 파다가, 2024-11에 넣은 `i18next.d.ts` exclude가 한 번도 적용된 적 없었다는 걸 발견\n- **처음엔**: i18n 타입이 무거운 게 문제라고 봤다. 실제로는 그걸 빼려던 설정이 죽어 있었던 것\n","excerpt":"tsconfig.build.json 이 자체  exclude  배열을 정의하면  extends 한 부모의  exclude 를 통째로 덮어쓴다.  files · include · exclude 는 배열 병합 없이 자식 값이 이기는 필드이고,  comp…","outboundReferences":[],"inboundReferences":[]},"tagsOutbound":{"nodes":[{"frontmatter":{"title":"pnpm 11은 package.json의 pnpm 필드를 경고 없이 무시한다","tags":["관찰","설정무시"]},"fields":{"slug":"/posts/관찰/2026-09-30-pnpm11-package-json-pnpm-필드-무시/","title":"pnpm 11은 package.json의 pnpm 필드를 경고 없이 무시한다","lastUpdated":"10/4/2026","lastUpdatedAt":"2026-10-04T07:54:32.000Z","gitCreatedAt":"2026-10-04T07:54:32.000Z"}},{"frontmatter":{"title":"tsconfig exclude는 extends 시 병합이 아니라 교체다","tags":["관찰","설정무시"]},"fields":{"slug":"/posts/관찰/2026-09-30-tsconfig-exclude는-병합이-아니라-교체/","title":"tsconfig exclude는 extends 시 병합이 아니라 교체다","lastUpdated":"10/4/2026","lastUpdatedAt":"2026-10-04T07:54:32.000Z","gitCreatedAt":"2026-10-04T07:54:32.000Z"}}]}},"pageContext":{"tags":["관찰","설정무시"],"slug":"/posts/관찰/2026-09-30-tsconfig-exclude는-병합이-아니라-교체/","sidebarItems":[{"title":"","items":[{"title":"Recently Updated","url":"/latest/","collapse":true,"indent":false,"items":[{"title":"10-04: pnpm 11은 package.json의 pnpm 필드를 경고 없이 무시한다","url":"/posts/관찰/2026-09-30-pnpm11-package-json-pnpm-필드-무시/"},{"title":"10-04: tsconfig exclude는 extends 시 병합이 아니라 교체다","url":"/posts/관찰/2026-09-30-tsconfig-exclude는-병합이-아니라-교체/"},{"title":"10-04: cloudflare 인프라 간단 정리","url":"/posts/cloud/cloudflare/cloudflare infra/"},{"title":"09-06: 일본어 폰트·타이포그래피 - 한국인 웹 개발자가 자주 놓치는 것들","url":"/posts/frontend/일본어 폰트-타이포그래피 가이드/"},{"title":"08-23: 에이전트 프롬프트를 잘 작성한다는게 뭘까?","url":"/posts/ai/agent-prompting/"},{"title":"07-27: 자바스크립트 데드 코드 제거","url":"/posts/javascript/자바스크립트 데드 코드 제거/"},{"title":"07-05: 관찰 가능성 - 카디널리티와 디멘셔널리티","url":"/posts/monitoring/cardinality-and-dimensionality/"},{"title":"06-30: 다국어 페이지 작업시 주의해야할 것 - hreflang / canonical","url":"/posts/seo/hreflang-canonical/"},{"title":"05-24: dynamic-range-limit - HDR 이미지/비디오 밝기 제한 CSS 속성","url":"/posts/web/dynamic-range-limit/"},{"title":"04-18: SEO 클로킹과 콘텐츠 게이팅","url":"/posts/seo/seo-cloaking-and-content-gating/"}]}]},{"title":"Tags","items":[{"title":"Readme","type":"tag","url":"/tags/readme/","items":[{"title":"📝 r0k Wiki","url":"/"}]},{"title":"SEO","type":"tag","url":"/tags/seo/","items":[{"title":"다국어 페이지 작업시 주의해야할 것 - hreflang / canonical","url":"/posts/seo/hreflang-canonical/"},{"title":"SEO 클로킹과 콘텐츠 게이팅","url":"/posts/seo/seo-cloaking-and-content-gating/"}]},{"title":"Sentry","type":"tag","url":"/tags/sentry/","items":[{"title":"Sentry","url":"/posts/monitoring/sentry/"}]},{"title":"Web API","type":"tag","url":"/tags/web-api/","items":[{"title":"Blob","url":"/Web_API/Blob/"},{"title":"DOMMatrixReadOnly","url":"/Web_API/DOMMatrixReadOnly/"}]},{"title":"ai","type":"tag","url":"/tags/ai/","items":[{"title":"에이전트 프롬프트를 잘 작성한다는게 뭘까?","url":"/posts/ai/agent-prompting/"}]},{"title":"cloudflare","type":"tag","url":"/tags/cloudflare/","items":[{"title":"cloudflare 인프라 간단 정리","url":"/posts/cloud/cloudflare/cloudflare infra/"},{"title":"github 블로그에 도메인 연결하기 by cloudflare","url":"/posts/cloud/cloudflare/my-dns/"}]},{"title":"css","type":"tag","url":"/tags/css/","items":[{"title":"일본어 폰트·타이포그래피 - 한국인 웹 개발자가 자주 놓치는 것들","url":"/posts/frontend/일본어 폰트-타이포그래피 가이드/"},{"title":"dynamic-range-limit - HDR 이미지/비디오 밝기 제한 CSS 속성","url":"/posts/web/dynamic-range-limit/"}]},{"title":"git","type":"tag","url":"/tags/git/","items":[{"title":"git 딥다이브 - git branch, tag, HEAD","url":"/posts/study/codesoom-git/git-deep-dive-01/"},{"title":"git 딥다이브 - git merge, rebase","url":"/posts/study/codesoom-git/git-deep-dive-02/"},{"title":"git 딥다이브 - history","url":"/posts/study/codesoom-git/git-deep-dive-03/"}]},{"title":"i18n","type":"tag","url":"/tags/i-18-n/","items":[{"title":"일본어 폰트·타이포그래피 - 한국인 웹 개발자가 자주 놓치는 것들","url":"/posts/frontend/일본어 폰트-타이포그래피 가이드/"},{"title":"다국어 페이지 작업시 주의해야할 것 - hreflang / canonical","url":"/posts/seo/hreflang-canonical/"}]},{"title":"javascript","type":"tag","url":"/tags/javascript/","items":[{"title":"프론트엔드 성능 최적화 팁 기록","url":"/posts/frontend/performance-tip/"},{"title":"callback부터 async await까지 - Javascript 비동기","url":"/posts/javascript/asynchronous/"},{"title":"웹팩을 쓰는 이유와 사용법 정리","url":"/posts/javascript/webpack/"},{"title":"일본어 폰트·타이포그래피 - 한국인 웹 개발자가 자주 놓치는 것들","url":"/posts/frontend/일본어 폰트-타이포그래피 가이드/"},{"title":"자바스크립트 데드 코드 제거","url":"/posts/javascript/자바스크립트 데드 코드 제거/"},{"title":"웹에서\b영상 재생을 하기 위한 주변 지식","url":"/posts/web/video player/"},{"title":"useTransition과 Suspense의 내부 상호작용","url":"/posts/frontend/use-transition-suspense/"}]},{"title":"my-setting","type":"tag","url":"/tags/my-setting/","items":[{"title":"개발 생산성을 위한 내 개발 환경 세팅 기록","url":"/posts/my-setting/"}]},{"title":"react","type":"tag","url":"/tags/react/","items":[{"title":"useTransition과 Suspense의 내부 상호작용","url":"/posts/frontend/use-transition-suspense/"}]},{"title":"react-query","type":"tag","url":"/tags/react-query/","items":[{"title":"react-query 동작 안하는 이슈 해결","url":"/posts/library/react-query/fail-request/"}]},{"title":"tip","type":"tag","url":"/tags/tip/","items":[{"title":"git 관련 팁 정리","url":"/posts/tip/git/"},{"title":"내가 써먹으려고 정리한 단축키 & 명령어 모음","url":"/posts/tip/shortcut/"},{"title":"webstorm 사용 팁","url":"/posts/tip/webstorm/"},{"title":"나만의 업무 습관 정리","url":"/posts/tip/나만의 업무 습관 정리/"},{"title":"키보드 안쓰기","url":"/posts/tip/키보드 안쓰기/"}]},{"title":"webstorm","type":"tag","url":"/tags/webstorm/","items":[{"title":"git 관련 팁 정리","url":"/posts/tip/git/"},{"title":"webstorm 사용 팁","url":"/posts/tip/webstorm/"}]},{"title":"개선","type":"tag","url":"/tags/개선/","items":[{"title":"eslint에서 biome로","url":"/posts/library/biome/"},{"title":"자바스크립트 데드 코드 제거","url":"/posts/javascript/자바스크립트 데드 코드 제거/"},{"title":"레거시를 더 나은 환경으로 만들기","url":"/posts/tip/레거시를 더 나은 환경으로 만들기/"}]},{"title":"관찰","type":"tag","url":"/tags/관찰/","items":[{"title":"pnpm 11은 package.json의 pnpm 필드를 경고 없이 무시한다","url":"/posts/관찰/2026-09-30-pnpm11-package-json-pnpm-필드-무시/"},{"title":"tsconfig exclude는 extends 시 병합이 아니라 교체다","url":"/posts/관찰/2026-09-30-tsconfig-exclude는-병합이-아니라-교체/"}]},{"title":"단축키","type":"tag","url":"/tags/단축키/","items":[{"title":"내가 써먹으려고 정리한 단축키 & 명령어 모음","url":"/posts/tip/shortcut/"}]},{"title":"디깅","type":"tag","url":"/tags/디깅/","items":[{"title":"모노레포에서 서로 다른 React 버전 사용시 에러","url":"/posts/error/모노레포에서 서로 다른 react 버전 사용시 에러/"}]},{"title":"모니터링","type":"tag","url":"/tags/모니터링/","items":[{"title":"관찰 가능성 - 카디널리티와 디멘셔널리티","url":"/posts/monitoring/cardinality-and-dimensionality/"},{"title":"프론트엔드 모니터링 - datadog RUM 알아보기","url":"/posts/monitoring/datadog RUM/"}]},{"title":"설정무시","type":"tag","url":"/tags/설정무시/","items":[{"title":"pnpm 11은 package.json의 pnpm 필드를 경고 없이 무시한다","url":"/posts/관찰/2026-09-30-pnpm11-package-json-pnpm-필드-무시/"},{"title":"tsconfig exclude는 extends 시 병합이 아니라 교체다","url":"/posts/관찰/2026-09-30-tsconfig-exclude는-병합이-아니라-교체/"}]},{"title":"성능최적화","type":"tag","url":"/tags/성능최적화/","items":[{"title":"프론트엔드 성능 최적화 팁 기록","url":"/posts/frontend/performance-tip/"}]},{"title":"오브젝트","type":"tag","url":"/tags/오브젝트/","items":[{"title":"오트젝트 01 객체, 설계","url":"/posts/books/object/오브젝트-01/"},{"title":"오트젝트 03 역할, 책임, 협력","url":"/posts/books/object/오브젝트-03/"},{"title":"오트젝트 02 객체지향 프로그래밍","url":"/posts/books/object/오브젝트-02/"},{"title":"오트젝트 04 설계 품질과 트레이드 오프","url":"/posts/books/object/오브젝트-04/"},{"title":"오트젝트 05 책임 할당하기","url":"/posts/books/object/오브젝트-05/"},{"title":"오트젝트 06 메시지와 인터페이스","url":"/posts/books/object/오브젝트-06/"}]},{"title":"정규언어","type":"tag","url":"/tags/정규언어/","items":[{"title":"정규언어","url":"/posts/regex/regular-language/"}]},{"title":"정규표현식","type":"tag","url":"/tags/정규표현식/","items":[{"title":"정규표현식 - 03. 프로그래머를 위한 고급 정규표현식","url":"/posts/regex/regex_03/"},{"title":"정규표현식 - 01. 입문 정규표현식","url":"/posts/regex/regex_01/"},{"title":"정규표현식 - 02. 정규표현식의 역사","url":"/posts/regex/regex_02/"}]},{"title":"프롬프팅","type":"tag","url":"/tags/프롬프팅/","items":[{"title":"에이전트 프롬프트를 잘 작성한다는게 뭘까?","url":"/posts/ai/agent-prompting/"}]},{"title":"플레이어","type":"tag","url":"/tags/플레이어/","items":[{"title":"웹에서\b영상 재생을 하기 위한 주변 지식","url":"/posts/web/video player/"}]}]}],"tagsGroups":[{"title":"Readme","type":"tag","url":"/tags/readme/","items":[{"title":"📝 r0k Wiki","url":"/"}]},{"title":"SEO","type":"tag","url":"/tags/seo/","items":[{"title":"다국어 페이지 작업시 주의해야할 것 - hreflang / canonical","url":"/posts/seo/hreflang-canonical/"},{"title":"SEO 클로킹과 콘텐츠 게이팅","url":"/posts/seo/seo-cloaking-and-content-gating/"}]},{"title":"Sentry","type":"tag","url":"/tags/sentry/","items":[{"title":"Sentry","url":"/posts/monitoring/sentry/"}]},{"title":"Web API","type":"tag","url":"/tags/web-api/","items":[{"title":"Blob","url":"/Web_API/Blob/"},{"title":"DOMMatrixReadOnly","url":"/Web_API/DOMMatrixReadOnly/"}]},{"title":"ai","type":"tag","url":"/tags/ai/","items":[{"title":"에이전트 프롬프트를 잘 작성한다는게 뭘까?","url":"/posts/ai/agent-prompting/"}]},{"title":"cloudflare","type":"tag","url":"/tags/cloudflare/","items":[{"title":"cloudflare 인프라 간단 정리","url":"/posts/cloud/cloudflare/cloudflare infra/"},{"title":"github 블로그에 도메인 연결하기 by cloudflare","url":"/posts/cloud/cloudflare/my-dns/"}]},{"title":"css","type":"tag","url":"/tags/css/","items":[{"title":"일본어 폰트·타이포그래피 - 한국인 웹 개발자가 자주 놓치는 것들","url":"/posts/frontend/일본어 폰트-타이포그래피 가이드/"},{"title":"dynamic-range-limit - HDR 이미지/비디오 밝기 제한 CSS 속성","url":"/posts/web/dynamic-range-limit/"}]},{"title":"git","type":"tag","url":"/tags/git/","items":[{"title":"git 딥다이브 - git branch, tag, HEAD","url":"/posts/study/codesoom-git/git-deep-dive-01/"},{"title":"git 딥다이브 - git merge, rebase","url":"/posts/study/codesoom-git/git-deep-dive-02/"},{"title":"git 딥다이브 - history","url":"/posts/study/codesoom-git/git-deep-dive-03/"}]},{"title":"i18n","type":"tag","url":"/tags/i-18-n/","items":[{"title":"일본어 폰트·타이포그래피 - 한국인 웹 개발자가 자주 놓치는 것들","url":"/posts/frontend/일본어 폰트-타이포그래피 가이드/"},{"title":"다국어 페이지 작업시 주의해야할 것 - hreflang / canonical","url":"/posts/seo/hreflang-canonical/"}]},{"title":"javascript","type":"tag","url":"/tags/javascript/","items":[{"title":"프론트엔드 성능 최적화 팁 기록","url":"/posts/frontend/performance-tip/"},{"title":"callback부터 async await까지 - Javascript 비동기","url":"/posts/javascript/asynchronous/"},{"title":"웹팩을 쓰는 이유와 사용법 정리","url":"/posts/javascript/webpack/"},{"title":"일본어 폰트·타이포그래피 - 한국인 웹 개발자가 자주 놓치는 것들","url":"/posts/frontend/일본어 폰트-타이포그래피 가이드/"},{"title":"자바스크립트 데드 코드 제거","url":"/posts/javascript/자바스크립트 데드 코드 제거/"},{"title":"웹에서\b영상 재생을 하기 위한 주변 지식","url":"/posts/web/video player/"},{"title":"useTransition과 Suspense의 내부 상호작용","url":"/posts/frontend/use-transition-suspense/"}]},{"title":"my-setting","type":"tag","url":"/tags/my-setting/","items":[{"title":"개발 생산성을 위한 내 개발 환경 세팅 기록","url":"/posts/my-setting/"}]},{"title":"react","type":"tag","url":"/tags/react/","items":[{"title":"useTransition과 Suspense의 내부 상호작용","url":"/posts/frontend/use-transition-suspense/"}]},{"title":"react-query","type":"tag","url":"/tags/react-query/","items":[{"title":"react-query 동작 안하는 이슈 해결","url":"/posts/library/react-query/fail-request/"}]},{"title":"tip","type":"tag","url":"/tags/tip/","items":[{"title":"git 관련 팁 정리","url":"/posts/tip/git/"},{"title":"내가 써먹으려고 정리한 단축키 & 명령어 모음","url":"/posts/tip/shortcut/"},{"title":"webstorm 사용 팁","url":"/posts/tip/webstorm/"},{"title":"나만의 업무 습관 정리","url":"/posts/tip/나만의 업무 습관 정리/"},{"title":"키보드 안쓰기","url":"/posts/tip/키보드 안쓰기/"}]},{"title":"webstorm","type":"tag","url":"/tags/webstorm/","items":[{"title":"git 관련 팁 정리","url":"/posts/tip/git/"},{"title":"webstorm 사용 팁","url":"/posts/tip/webstorm/"}]},{"title":"개선","type":"tag","url":"/tags/개선/","items":[{"title":"eslint에서 biome로","url":"/posts/library/biome/"},{"title":"자바스크립트 데드 코드 제거","url":"/posts/javascript/자바스크립트 데드 코드 제거/"},{"title":"레거시를 더 나은 환경으로 만들기","url":"/posts/tip/레거시를 더 나은 환경으로 만들기/"}]},{"title":"관찰","type":"tag","url":"/tags/관찰/","items":[{"title":"pnpm 11은 package.json의 pnpm 필드를 경고 없이 무시한다","url":"/posts/관찰/2026-09-30-pnpm11-package-json-pnpm-필드-무시/"},{"title":"tsconfig exclude는 extends 시 병합이 아니라 교체다","url":"/posts/관찰/2026-09-30-tsconfig-exclude는-병합이-아니라-교체/"}]},{"title":"단축키","type":"tag","url":"/tags/단축키/","items":[{"title":"내가 써먹으려고 정리한 단축키 & 명령어 모음","url":"/posts/tip/shortcut/"}]},{"title":"디깅","type":"tag","url":"/tags/디깅/","items":[{"title":"모노레포에서 서로 다른 React 버전 사용시 에러","url":"/posts/error/모노레포에서 서로 다른 react 버전 사용시 에러/"}]},{"title":"모니터링","type":"tag","url":"/tags/모니터링/","items":[{"title":"관찰 가능성 - 카디널리티와 디멘셔널리티","url":"/posts/monitoring/cardinality-and-dimensionality/"},{"title":"프론트엔드 모니터링 - datadog RUM 알아보기","url":"/posts/monitoring/datadog RUM/"}]},{"title":"설정무시","type":"tag","url":"/tags/설정무시/","items":[{"title":"pnpm 11은 package.json의 pnpm 필드를 경고 없이 무시한다","url":"/posts/관찰/2026-09-30-pnpm11-package-json-pnpm-필드-무시/"},{"title":"tsconfig exclude는 extends 시 병합이 아니라 교체다","url":"/posts/관찰/2026-09-30-tsconfig-exclude는-병합이-아니라-교체/"}]},{"title":"성능최적화","type":"tag","url":"/tags/성능최적화/","items":[{"title":"프론트엔드 성능 최적화 팁 기록","url":"/posts/frontend/performance-tip/"}]},{"title":"오브젝트","type":"tag","url":"/tags/오브젝트/","items":[{"title":"오트젝트 01 객체, 설계","url":"/posts/books/object/오브젝트-01/"},{"title":"오트젝트 03 역할, 책임, 협력","url":"/posts/books/object/오브젝트-03/"},{"title":"오트젝트 02 객체지향 프로그래밍","url":"/posts/books/object/오브젝트-02/"},{"title":"오트젝트 04 설계 품질과 트레이드 오프","url":"/posts/books/object/오브젝트-04/"},{"title":"오트젝트 05 책임 할당하기","url":"/posts/books/object/오브젝트-05/"},{"title":"오트젝트 06 메시지와 인터페이스","url":"/posts/books/object/오브젝트-06/"}]},{"title":"정규언어","type":"tag","url":"/tags/정규언어/","items":[{"title":"정규언어","url":"/posts/regex/regular-language/"}]},{"title":"정규표현식","type":"tag","url":"/tags/정규표현식/","items":[{"title":"정규표현식 - 03. 프로그래머를 위한 고급 정규표현식","url":"/posts/regex/regex_03/"},{"title":"정규표현식 - 01. 입문 정규표현식","url":"/posts/regex/regex_01/"},{"title":"정규표현식 - 02. 정규표현식의 역사","url":"/posts/regex/regex_02/"}]},{"title":"프롬프팅","type":"tag","url":"/tags/프롬프팅/","items":[{"title":"에이전트 프롬프트를 잘 작성한다는게 뭘까?","url":"/posts/ai/agent-prompting/"}]},{"title":"플레이어","type":"tag","url":"/tags/플레이어/","items":[{"title":"웹에서\b영상 재생을 하기 위한 주변 지식","url":"/posts/web/video player/"}]}],"latestPosts":[{"fields":{"slug":"/posts/관찰/2026-09-30-pnpm11-package-json-pnpm-필드-무시/","title":"pnpm 11은 package.json의 pnpm 필드를 경고 없이 무시한다","lastUpdatedAt":"2026-10-04T07:54:32.000Z","lastUpdated":"10/4/2026"},"frontmatter":{"draft":false,"tags":["관찰","설정무시"]}},{"fields":{"slug":"/posts/관찰/2026-09-30-tsconfig-exclude는-병합이-아니라-교체/","title":"tsconfig exclude는 extends 시 병합이 아니라 교체다","lastUpdatedAt":"2026-10-04T07:54:32.000Z","lastUpdated":"10/4/2026"},"frontmatter":{"draft":false,"tags":["관찰","설정무시"]}},{"fields":{"slug":"/posts/cloud/cloudflare/cloudflare infra/","title":"cloudflare 인프라 간단 정리","lastUpdatedAt":"2026-10-04T07:54:32.000Z","lastUpdated":"10/4/2026"},"frontmatter":{"draft":false,"tags":["cloudflare"]}},{"fields":{"slug":"/posts/frontend/일본어 폰트-타이포그래피 가이드/","title":"일본어 폰트·타이포그래피 - 한국인 웹 개발자가 자주 놓치는 것들","lastUpdatedAt":"2026-09-06T06:00:56.000Z","lastUpdated":"9/6/2026"},"frontmatter":{"draft":false,"tags":["i18n","css","javascript"]}},{"fields":{"slug":"/posts/ai/agent-prompting/","title":"에이전트 프롬프트를 잘 작성한다는게 뭘까?","lastUpdatedAt":"2026-08-23T05:57:19.000Z","lastUpdated":"8/23/2026"},"frontmatter":{"draft":false,"tags":["ai","프롬프팅"]}},{"fields":{"slug":"/posts/javascript/자바스크립트 데드 코드 제거/","title":"자바스크립트 데드 코드 제거","lastUpdatedAt":"2026-07-27T01:49:45.000Z","lastUpdated":"7/27/2026"},"frontmatter":{"draft":false,"tags":["javascript","개선"]}},{"fields":{"slug":"/posts/monitoring/cardinality-and-dimensionality/","title":"관찰 가능성 - 카디널리티와 디멘셔널리티","lastUpdatedAt":"2026-07-05T07:49:54.000Z","lastUpdated":"7/5/2026"},"frontmatter":{"draft":false,"tags":["모니터링"]}},{"fields":{"slug":"/posts/seo/hreflang-canonical/","title":"다국어 페이지 작업시 주의해야할 것 - hreflang / canonical","lastUpdatedAt":"2026-06-30T12:28:37.000Z","lastUpdated":"6/30/2026"},"frontmatter":{"draft":false,"tags":["SEO","i18n"]}},{"fields":{"slug":"/posts/web/dynamic-range-limit/","title":"dynamic-range-limit - HDR 이미지/비디오 밝기 제한 CSS 속성","lastUpdatedAt":"2026-05-24T04:36:13.000Z","lastUpdated":"5/24/2026"},"frontmatter":{"draft":false,"tags":["css"]}},{"fields":{"slug":"/posts/seo/seo-cloaking-and-content-gating/","title":"SEO 클로킹과 콘텐츠 게이팅","lastUpdatedAt":"2026-04-18T07:10:38.000Z","lastUpdated":"4/18/2026"},"frontmatter":{"draft":false,"tags":["SEO"]}}]}},
    "staticQueryHashes": ["2320115945","2650345336","3495835395","451533639"]}