{"componentChunkName":"component---src-templates-blog-post-js","path":"/javascript/JavaScript-성능-측정-도구와-최적화-체크리스트/","result":{"data":{"site":{"siteMetadata":{"title":"Bottlehs Tech Blog","description":"웹·앱·AI 개발자 전병훈(bottlehs)의 기술 블로그. AI·LLM, JavaScript·Vue, Spring Boot, 알고리즘, 블록체인 실무 가이드를 다룹니다","siteUrl":"https://www.bottlehs.dev","author":{"name":"Jeon Byung Hun","summary":"개발을 즐기는 bottlehs - Engineer, MS, AI, FE, BE, OS, IOT, Blockchain, 설계, 테스트"},"social":{"github":"bottlehs","codepen":"bottlehs"}}},"markdownRemark":{"id":"849a4b9d-dd2c-5456-b8fe-90bdcc0f81a5","excerpt":"JavaScript 성능 측정 도구와 최적화 체크리스트 JavaScript 애플리케이션의 성능은 사용자 경험과 비즈니스 성과에 직접적인 영향을 미친다. 느린 로딩 시간은 이탈률을 높이고, 전환율을 낮춘다. 이 글은 JavaScript…","html":"<p><img src=\"/assets/javascript.png\" alt=\"JavaScript 성능 측정 도구와 최적화 체크리스트\" title=\"JavaScript 성능 측정 도구와 최적화 체크리스트\"></p>\n<p>JavaScript 애플리케이션의 성능은 사용자 경험과 비즈니스 성과에 직접적인 영향을 미친다. 느린 로딩 시간은 이탈률을 높이고, 전환율을 낮춘다. 이 글은 JavaScript 성능을 측정하고 최적화하는 실무 가이드를 제공한다.</p>\n<h2 id=\"1-성능-측정-도구\" style=\"position:relative;\"><a href=\"#1-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC\" aria-label=\"1 성능 측정 도구 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. 성능 측정 도구</h2>\n<h3 id=\"lighthouse\" style=\"position:relative;\"><a href=\"#lighthouse\" aria-label=\"lighthouse permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Lighthouse</h3>\n<p><strong>URL</strong>: <a href=\"https://developers.google.com/web/tools/lighthouse\">https://developers.google.com/web/tools/lighthouse</a></p>\n<p><strong>주요 기능</strong></p>\n<ul>\n<li>성능 점수 (0-100)</li>\n<li>접근성, SEO, 모범 사례 점수</li>\n<li>상세한 개선 제안</li>\n</ul>\n<p><strong>사용 방법</strong></p>\n<ol>\n<li>Chrome DevTools 열기 (F12)</li>\n<li>Lighthouse 탭 선택</li>\n<li>측정할 카테고리 선택</li>\n<li>“Analyze page load” 클릭</li>\n</ol>\n<p><strong>측정 항목</strong></p>\n<ul>\n<li>First Contentful Paint (FCP)</li>\n<li>Largest Contentful Paint (LCP)</li>\n<li>Total Blocking Time (TBT)</li>\n<li>Cumulative Layout Shift (CLS)</li>\n</ul>\n<h3 id=\"webpagetest\" style=\"position:relative;\"><a href=\"#webpagetest\" aria-label=\"webpagetest permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>WebPageTest</h3>\n<p><strong>URL</strong>: <a href=\"https://www.webpagetest.org/\">https://www.webpagetest.org/</a></p>\n<p><strong>주요 기능</strong></p>\n<ul>\n<li>실제 브라우저에서 테스트</li>\n<li>영상 녹화</li>\n<li>상세한 워터폴 차트</li>\n</ul>\n<p><strong>활용</strong></p>\n<ul>\n<li>다양한 위치에서 테스트</li>\n<li>모바일/데스크톱 비교</li>\n<li>반복 테스트로 일관성 확인</li>\n</ul>\n<h3 id=\"chrome-devtools-performance\" style=\"position:relative;\"><a href=\"#chrome-devtools-performance\" aria-label=\"chrome devtools performance permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Chrome DevTools Performance</h3>\n<p><strong>주요 기능</strong></p>\n<ul>\n<li>CPU 프로파일링</li>\n<li>메모리 사용량 분석</li>\n<li>렌더링 성능 측정</li>\n</ul>\n<p><strong>사용 방법</strong></p>\n<ol>\n<li>Performance 탭 열기</li>\n<li>Record 버튼 클릭</li>\n<li>페이지 상호작용 수행</li>\n<li>Stop 클릭 후 분석</li>\n</ol>\n<h2 id=\"2-핵심-성능-지표-core-web-vitals\" style=\"position:relative;\"><a href=\"#2-%ED%95%B5%EC%8B%AC-%EC%84%B1%EB%8A%A5-%EC%A7%80%ED%91%9C-core-web-vitals\" aria-label=\"2 핵심 성능 지표 core web vitals permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. 핵심 성능 지표 (Core Web Vitals)</h2>\n<h3 id=\"largest-contentful-paint-lcp\" style=\"position:relative;\"><a href=\"#largest-contentful-paint-lcp\" aria-label=\"largest contentful paint lcp permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Largest Contentful Paint (LCP)</h3>\n<p><strong>목표</strong>: 2.5초 이하</p>\n<p><strong>측정 방법</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">new</span> <span class=\"token class-name\">PerformanceObserver</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">entryList</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> entries <span class=\"token operator\">=</span> entryList<span class=\"token punctuation\">.</span><span class=\"token function\">getEntries</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">const</span> lastEntry <span class=\"token operator\">=</span> entries<span class=\"token punctuation\">[</span>entries<span class=\"token punctuation\">.</span>length <span class=\"token operator\">-</span> <span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n  console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'LCP:'</span><span class=\"token punctuation\">,</span> lastEntry<span class=\"token punctuation\">.</span>renderTime <span class=\"token operator\">||</span> lastEntry<span class=\"token punctuation\">.</span>loadTime<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">observe</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span><span class=\"token literal-property property\">entryTypes</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'largest-contentful-paint'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>최적화 방법</strong></p>\n<ul>\n<li>이미지 최적화 (WebP, lazy loading)</li>\n<li>서버 응답 시간 개선</li>\n<li>CDN 활용</li>\n<li>중요 리소스 우선 로딩</li>\n</ul>\n<h3 id=\"first-input-delay-fid\" style=\"position:relative;\"><a href=\"#first-input-delay-fid\" aria-label=\"first input delay fid permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>First Input Delay (FID)</h3>\n<p><strong>목표</strong>: 100ms 이하</p>\n<p><strong>측정 방법</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">new</span> <span class=\"token class-name\">PerformanceObserver</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">entryList</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">const</span> entry <span class=\"token keyword\">of</span> entryList<span class=\"token punctuation\">.</span><span class=\"token function\">getEntries</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'FID:'</span><span class=\"token punctuation\">,</span> entry<span class=\"token punctuation\">.</span>processingStart <span class=\"token operator\">-</span> entry<span class=\"token punctuation\">.</span>startTime<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">observe</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span><span class=\"token literal-property property\">entryTypes</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'first-input'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>최적화 방법</strong></p>\n<ul>\n<li>JavaScript 번들 크기 감소</li>\n<li>코드 스플리팅</li>\n<li>긴 작업 분할</li>\n<li>Web Workers 활용</li>\n</ul>\n<h3 id=\"cumulative-layout-shift-cls\" style=\"position:relative;\"><a href=\"#cumulative-layout-shift-cls\" aria-label=\"cumulative layout shift cls permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Cumulative Layout Shift (CLS)</h3>\n<p><strong>목표</strong>: 0.1 이하</p>\n<p><strong>측정 방법</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">let</span> clsValue <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">new</span> <span class=\"token class-name\">PerformanceObserver</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">entryList</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">const</span> entry <span class=\"token keyword\">of</span> entryList<span class=\"token punctuation\">.</span><span class=\"token function\">getEntries</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>entry<span class=\"token punctuation\">.</span>hadRecentInput<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      clsValue <span class=\"token operator\">+=</span> entry<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n  console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'CLS:'</span><span class=\"token punctuation\">,</span> clsValue<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">observe</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span><span class=\"token literal-property property\">entryTypes</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'layout-shift'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>최적화 방법</strong></p>\n<ul>\n<li>이미지/비디오 크기 지정</li>\n<li>폰트 로딩 최적화</li>\n<li>동적 콘텐츠에 공간 예약</li>\n<li>애니메이션 최적화</li>\n</ul>\n<h2 id=\"3-javascript-최적화-체크리스트\" style=\"position:relative;\"><a href=\"#3-javascript-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8\" aria-label=\"3 javascript 최적화 체크리스트 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. JavaScript 최적화 체크리스트</h2>\n<h3 id=\"번들-크기-최적화\" style=\"position:relative;\"><a href=\"#%EB%B2%88%EB%93%A4-%ED%81%AC%EA%B8%B0-%EC%B5%9C%EC%A0%81%ED%99%94\" aria-label=\"번들 크기 최적화 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>번들 크기 최적화</h3>\n<p><strong>체크리스트</strong></p>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 불필요한 라이브러리 제거</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> Tree shaking 활성화</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 코드 스플리팅 적용</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 동적 import 사용</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 번들 분석 도구 사용</li>\n</ul>\n<p><strong>번들 분석 도구</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token comment\"># webpack-bundle-analyzer</span>\n<span class=\"token function\">npm</span> <span class=\"token function\">install</span> --save-dev webpack-bundle-analyzer\n\n<span class=\"token comment\"># 사용</span>\nnpx webpack-bundle-analyzer dist/stats.json</code></pre></div>\n<h3 id=\"코드-최적화\" style=\"position:relative;\"><a href=\"#%EC%BD%94%EB%93%9C-%EC%B5%9C%EC%A0%81%ED%99%94\" aria-label=\"코드 최적화 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>코드 최적화</h3>\n<p><strong>체크리스트</strong></p>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 불필요한 재렌더링 방지 (React.memo, useMemo)</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 이벤트 리스너 정리</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 메모리 누수 확인</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 무거운 연산 최적화</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 디바운싱/스로틀링 적용</li>\n</ul>\n<p><strong>예시: 디바운싱</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">function</span> <span class=\"token function\">debounce</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">func<span class=\"token punctuation\">,</span> wait</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">let</span> timeout<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">return</span> <span class=\"token keyword\">function</span> <span class=\"token function\">executedFunction</span><span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token operator\">...</span>args</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> <span class=\"token function-variable function\">later</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n      <span class=\"token function\">clearTimeout</span><span class=\"token punctuation\">(</span>timeout<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token function\">func</span><span class=\"token punctuation\">(</span><span class=\"token operator\">...</span>args<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">clearTimeout</span><span class=\"token punctuation\">(</span>timeout<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    timeout <span class=\"token operator\">=</span> <span class=\"token function\">setTimeout</span><span class=\"token punctuation\">(</span>later<span class=\"token punctuation\">,</span> wait<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">// 사용</span>\n<span class=\"token keyword\">const</span> handleSearch <span class=\"token operator\">=</span> <span class=\"token function\">debounce</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">query</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// 검색 로직</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token number\">300</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"리소스-로딩-최적화\" style=\"position:relative;\"><a href=\"#%EB%A6%AC%EC%86%8C%EC%8A%A4-%EB%A1%9C%EB%94%A9-%EC%B5%9C%EC%A0%81%ED%99%94\" aria-label=\"리소스 로딩 최적화 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>리소스 로딩 최적화</h3>\n<p><strong>체크리스트</strong></p>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 중요 리소스 우선 로딩 (preload)</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 비중요 리소스 지연 로딩 (defer, async)</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 이미지 lazy loading</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 폰트 최적화 (font-display: swap)</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 서비스 워커 활용</li>\n</ul>\n<p><strong>리소스 힌트 예시</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"language-html\"><code class=\"language-html\"><span class=\"token comment\">&lt;!-- 중요 리소스 --></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>link</span> <span class=\"token attr-name\">rel</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>preload<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>critical.css<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">as</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>style<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>link</span> <span class=\"token attr-name\">rel</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>preload<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>main.js<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">as</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>script<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token comment\">&lt;!-- 폰트 최적화 --></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>link</span> <span class=\"token attr-name\">rel</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>preload<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>font.woff2<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">as</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>font<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>font/woff2<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">crossorigin</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<h2 id=\"4-실무-최적화-가이드\" style=\"position:relative;\"><a href=\"#4-%EC%8B%A4%EB%AC%B4-%EC%B5%9C%EC%A0%81%ED%99%94-%EA%B0%80%EC%9D%B4%EB%93%9C\" aria-label=\"4 실무 최적화 가이드 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. 실무 최적화 가이드</h2>\n<h3 id=\"단계별-최적화-프로세스\" style=\"position:relative;\"><a href=\"#%EB%8B%A8%EA%B3%84%EB%B3%84-%EC%B5%9C%EC%A0%81%ED%99%94-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4\" aria-label=\"단계별 최적화 프로세스 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>단계별 최적화 프로세스</h3>\n<p><strong>1단계: 측정</strong></p>\n<ul>\n<li>Lighthouse로 현재 성능 점수 확인</li>\n<li>WebPageTest로 상세 분석</li>\n<li>Chrome DevTools로 병목 지점 파악</li>\n</ul>\n<p><strong>2단계: 우선순위 설정</strong></p>\n<ul>\n<li>Core Web Vitals 개선 우선</li>\n<li>사용자 경험에 큰 영향 주는 항목부터</li>\n<li>ROI가 높은 최적화부터</li>\n</ul>\n<p><strong>3단계: 최적화 적용</strong></p>\n<ul>\n<li>번들 크기 감소</li>\n<li>코드 최적화</li>\n<li>리소스 로딩 개선</li>\n</ul>\n<p><strong>4단계: 재측정 및 검증</strong></p>\n<ul>\n<li>개선 효과 확인</li>\n<li>회귀 테스트</li>\n<li>지속적 모니터링</li>\n</ul>\n<h3 id=\"성능-예산-설정\" style=\"position:relative;\"><a href=\"#%EC%84%B1%EB%8A%A5-%EC%98%88%EC%82%B0-%EC%84%A4%EC%A0%95\" aria-label=\"성능 예산 설정 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>성능 예산 설정</h3>\n<p><strong>권장 성능 예산</strong></p>\n<table>\n<thead>\n<tr>\n<th>지표</th>\n<th>목표</th>\n<th>경고</th>\n<th>위험</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>LCP</strong></td>\n<td>&#x3C; 2.5s</td>\n<td>2.5-4s</td>\n<td>> 4s</td>\n</tr>\n<tr>\n<td><strong>FID</strong></td>\n<td>&#x3C; 100ms</td>\n<td>100-300ms</td>\n<td>> 300ms</td>\n</tr>\n<tr>\n<td><strong>CLS</strong></td>\n<td>&#x3C; 0.1</td>\n<td>0.1-0.25</td>\n<td>> 0.25</td>\n</tr>\n<tr>\n<td><strong>번들 크기</strong></td>\n<td>&#x3C; 200KB</td>\n<td>200-500KB</td>\n<td>> 500KB</td>\n</tr>\n</tbody>\n</table>\n<p><strong>성능 예산 적용</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// package.json</span>\n<span class=\"token punctuation\">{</span>\n  <span class=\"token string-property property\">\"bundlesize\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n    <span class=\"token punctuation\">{</span>\n      <span class=\"token string-property property\">\"path\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"./dist/main.js\"</span><span class=\"token punctuation\">,</span>\n      <span class=\"token string-property property\">\"maxSize\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"200 KB\"</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"5-도구별-활용-팁\" style=\"position:relative;\"><a href=\"#5-%EB%8F%84%EA%B5%AC%EB%B3%84-%ED%99%9C%EC%9A%A9-%ED%8C%81\" aria-label=\"5 도구별 활용 팁 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5. 도구별 활용 팁</h2>\n<h3 id=\"lighthouse-활용\" style=\"position:relative;\"><a href=\"#lighthouse-%ED%99%9C%EC%9A%A9\" aria-label=\"lighthouse 활용 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Lighthouse 활용</h3>\n<p><strong>CI/CD 통합</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token comment\"># GitHub Actions 예시</span>\n<span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Run Lighthouse CI\n  <span class=\"token key atrule\">run</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">|</span><span class=\"token scalar string\">\n    npm install -g @lhci/cli\n    lhci autorun</span></code></pre></div>\n<p><strong>정기 모니터링</strong></p>\n<ul>\n<li>주간 성능 리포트 생성</li>\n<li>성능 회귀 감지</li>\n<li>팀 공유</li>\n</ul>\n<h3 id=\"chrome-devtools-활용\" style=\"position:relative;\"><a href=\"#chrome-devtools-%ED%99%9C%EC%9A%A9\" aria-label=\"chrome devtools 활용 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Chrome DevTools 활용</h3>\n<p><strong>메모리 프로파일링</strong></p>\n<ol>\n<li>Memory 탭 열기</li>\n<li>Heap snapshot 생성</li>\n<li>메모리 누수 확인</li>\n<li>비교 분석</li>\n</ol>\n<p><strong>네트워크 분석</strong></p>\n<ul>\n<li>느린 요청 식별</li>\n<li>중복 요청 확인</li>\n<li>캐싱 전략 검증</li>\n</ul>\n<h2 id=\"6-프레임워크별-최적화\" style=\"position:relative;\"><a href=\"#6-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC%EB%B3%84-%EC%B5%9C%EC%A0%81%ED%99%94\" aria-label=\"6 프레임워크별 최적화 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6. 프레임워크별 최적화</h2>\n<h3 id=\"react-최적화\" style=\"position:relative;\"><a href=\"#react-%EC%B5%9C%EC%A0%81%ED%99%94\" aria-label=\"react 최적화 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>React 최적화</h3>\n<p><strong>체크리스트</strong></p>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> React.memo로 불필요한 리렌더링 방지</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> useMemo, useCallback 활용</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 코드 스플리팅 (React.lazy)</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 가상화 (react-window) 적용</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 프로덕션 빌드 사용</li>\n</ul>\n<p><strong>예시: React.lazy</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> LazyComponent <span class=\"token operator\">=</span> React<span class=\"token punctuation\">.</span><span class=\"token function\">lazy</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token keyword\">import</span><span class=\"token punctuation\">(</span><span class=\"token string\">'./LazyComponent'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">App</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token operator\">&lt;</span>Suspense fallback<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span><span class=\"token operator\">&lt;</span>div<span class=\"token operator\">></span>Loading<span class=\"token operator\">...</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">></span><span class=\"token punctuation\">}</span><span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span>LazyComponent <span class=\"token operator\">/</span><span class=\"token operator\">></span>\n    <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>Suspense<span class=\"token operator\">></span>\n  <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"vue-최적화\" style=\"position:relative;\"><a href=\"#vue-%EC%B5%9C%EC%A0%81%ED%99%94\" aria-label=\"vue 최적화 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Vue 최적화</h3>\n<p><strong>체크리스트</strong></p>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> v-once, v-memo 사용</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> computed 속성 활용</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 비동기 컴포넌트</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 가상 스크롤</li>\n</ul>\n<h3 id=\"vanilla-javascript-최적화\" style=\"position:relative;\"><a href=\"#vanilla-javascript-%EC%B5%9C%EC%A0%81%ED%99%94\" aria-label=\"vanilla javascript 최적화 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Vanilla JavaScript 최적화</h3>\n<p><strong>체크리스트</strong></p>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 이벤트 위임 사용</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> DOM 조작 최소화</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> requestAnimationFrame 활용</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> Web Workers 활용</li>\n</ul>\n<h2 id=\"7-모니터링-및-지속적-개선\" style=\"position:relative;\"><a href=\"#7-%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81-%EB%B0%8F-%EC%A7%80%EC%86%8D%EC%A0%81-%EA%B0%9C%EC%84%A0\" aria-label=\"7 모니터링 및 지속적 개선 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7. 모니터링 및 지속적 개선</h2>\n<h3 id=\"실시간-모니터링\" style=\"position:relative;\"><a href=\"#%EC%8B%A4%EC%8B%9C%EA%B0%84-%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81\" aria-label=\"실시간 모니터링 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>실시간 모니터링</h3>\n<p><strong>도구</strong></p>\n<ul>\n<li>Google Analytics (Core Web Vitals)</li>\n<li>New Relic</li>\n<li>Datadog</li>\n<li>Sentry</li>\n</ul>\n<p><strong>설정</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// Core Web Vitals 추적</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span>getCLS<span class=\"token punctuation\">,</span> getFID<span class=\"token punctuation\">,</span> getLCP<span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'web-vitals'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token function\">getCLS</span><span class=\"token punctuation\">(</span>console<span class=\"token punctuation\">.</span>log<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token function\">getFID</span><span class=\"token punctuation\">(</span>console<span class=\"token punctuation\">.</span>log<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token function\">getLCP</span><span class=\"token punctuation\">(</span>console<span class=\"token punctuation\">.</span>log<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"성능-대시보드\" style=\"position:relative;\"><a href=\"#%EC%84%B1%EB%8A%A5-%EB%8C%80%EC%8B%9C%EB%B3%B4%EB%93%9C\" aria-label=\"성능 대시보드 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>성능 대시보드</h3>\n<p><strong>구성 요소</strong></p>\n<ul>\n<li>Core Web Vitals 추이</li>\n<li>페이지별 성능 비교</li>\n<li>사용자 기기별 성능</li>\n<li>에러율 및 성능 상관관계</li>\n</ul>\n<h2 id=\"faq\" style=\"position:relative;\"><a href=\"#faq\" aria-label=\"faq permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>FAQ</h2>\n<p><strong>Q: 성능 최적화를 어디서부터 시작해야 하나요?</strong><br>\nA: Lighthouse로 현재 상태를 측정하고, Core Web Vitals 점수가 낮은 항목부터 개선하는 것을 추천한다.</p>\n<p><strong>Q: 번들 크기를 얼마나 줄여야 하나요?</strong><br>\nA: 초기 로딩 번들은 200KB 이하를 목표로 하되, 프로젝트 특성에 따라 조정한다.</p>\n<p><strong>Q: 모든 최적화를 한 번에 적용해야 하나요?</strong><br>\nA: 단계적으로 적용하고 각 단계마다 측정하여 효과를 확인하는 것이 좋다.</p>\n<p><strong>Q: 모바일 성능은 어떻게 측정하나요?</strong><br>\nA: Chrome DevTools의 Device Toolbar를 사용하거나 WebPageTest에서 모바일 기기를 선택한다.</p>\n<p><strong>Q: 성능 최적화 후에도 점수가 낮은 이유는?</strong><br>\nA: 서버 응답 시간, 네트워크 속도, 서드파티 스크립트 등 다양한 요인이 영향을 준다. 전체적인 분석이 필요하다.</p>\n<p><strong>Q: 성능 예산을 어떻게 설정하나요?</strong><br>\nA: 현재 성능을 기준으로 10-20% 개선을 목표로 설정하고, 점진적으로 목표를 높여간다.</p>\n<h2 id=\"성능-최적화-후-프로젝트-기회\" style=\"position:relative;\"><a href=\"#%EC%84%B1%EB%8A%A5-%EC%B5%9C%EC%A0%81%ED%99%94-%ED%9B%84-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B8%B0%ED%9A%8C\" aria-label=\"성능 최적화 후 프로젝트 기회 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>성능 최적화 후 프로젝트 기회</h2>\n<p>JavaScript 성능 최적화 기술을 습득했다면, 실제 프로젝트에서 이를 적용해볼 수 있다. <a href=\"https://bluebutton.kr/\">블루버튼</a> 같은 플랫폼에서 성능 최적화가 필요한 웹 애플리케이션 프로젝트를 찾아 실전 경험을 쌓을 수 있다. 특히 느린 로딩 속도로 고민하는 프로젝트, Core Web Vitals 개선이 필요한 프로젝트, 대규모 프론트엔드 애플리케이션 최적화 프로젝트에서 이 글에서 배운 지식을 바로 활용할 수 있다.</p>","tableOfContents":"<ul>\n<li>\n<p><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#1-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC\">1. 성능 측정 도구</a></p>\n<ul>\n<li><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#lighthouse\">Lighthouse</a></li>\n<li><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#webpagetest\">WebPageTest</a></li>\n<li><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#chrome-devtools-performance\">Chrome DevTools Performance</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#2-%ED%95%B5%EC%8B%AC-%EC%84%B1%EB%8A%A5-%EC%A7%80%ED%91%9C-core-web-vitals\">2. 핵심 성능 지표 (Core Web Vitals)</a></p>\n<ul>\n<li><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#largest-contentful-paint-lcp\">Largest Contentful Paint (LCP)</a></li>\n<li><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#first-input-delay-fid\">First Input Delay (FID)</a></li>\n<li><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#cumulative-layout-shift-cls\">Cumulative Layout Shift (CLS)</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#3-javascript-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8\">3. JavaScript 최적화 체크리스트</a></p>\n<ul>\n<li><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EB%B2%88%EB%93%A4-%ED%81%AC%EA%B8%B0-%EC%B5%9C%EC%A0%81%ED%99%94\">번들 크기 최적화</a></li>\n<li><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EC%BD%94%EB%93%9C-%EC%B5%9C%EC%A0%81%ED%99%94\">코드 최적화</a></li>\n<li><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EB%A6%AC%EC%86%8C%EC%8A%A4-%EB%A1%9C%EB%94%A9-%EC%B5%9C%EC%A0%81%ED%99%94\">리소스 로딩 최적화</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#4-%EC%8B%A4%EB%AC%B4-%EC%B5%9C%EC%A0%81%ED%99%94-%EA%B0%80%EC%9D%B4%EB%93%9C\">4. 실무 최적화 가이드</a></p>\n<ul>\n<li><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EB%8B%A8%EA%B3%84%EB%B3%84-%EC%B5%9C%EC%A0%81%ED%99%94-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4\">단계별 최적화 프로세스</a></li>\n<li><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EC%84%B1%EB%8A%A5-%EC%98%88%EC%82%B0-%EC%84%A4%EC%A0%95\">성능 예산 설정</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#5-%EB%8F%84%EA%B5%AC%EB%B3%84-%ED%99%9C%EC%9A%A9-%ED%8C%81\">5. 도구별 활용 팁</a></p>\n<ul>\n<li><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#lighthouse-%ED%99%9C%EC%9A%A9\">Lighthouse 활용</a></li>\n<li><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#chrome-devtools-%ED%99%9C%EC%9A%A9\">Chrome DevTools 활용</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#6-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC%EB%B3%84-%EC%B5%9C%EC%A0%81%ED%99%94\">6. 프레임워크별 최적화</a></p>\n<ul>\n<li><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#react-%EC%B5%9C%EC%A0%81%ED%99%94\">React 최적화</a></li>\n<li><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#vue-%EC%B5%9C%EC%A0%81%ED%99%94\">Vue 최적화</a></li>\n<li><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#vanilla-javascript-%EC%B5%9C%EC%A0%81%ED%99%94\">Vanilla JavaScript 최적화</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#7-%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81-%EB%B0%8F-%EC%A7%80%EC%86%8D%EC%A0%81-%EA%B0%9C%EC%84%A0\">7. 모니터링 및 지속적 개선</a></p>\n<ul>\n<li><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EC%8B%A4%EC%8B%9C%EA%B0%84-%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81\">실시간 모니터링</a></li>\n<li><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EC%84%B1%EB%8A%A5-%EB%8C%80%EC%8B%9C%EB%B3%B4%EB%93%9C\">성능 대시보드</a></li>\n</ul>\n</li>\n<li><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#faq\">FAQ</a></li>\n<li><a href=\"/javascript/JavaScript-%EC%84%B1%EB%8A%A5-%EC%B8%A1%EC%A0%95-%EB%8F%84%EA%B5%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EC%84%B1%EB%8A%A5-%EC%B5%9C%EC%A0%81%ED%99%94-%ED%9B%84-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B8%B0%ED%9A%8C\">성능 최적화 후 프로젝트 기회</a></li>\n</ul>","wordCount":{"words":682},"fields":{"slug":"/javascript/JavaScript-성능-측정-도구와-최적화-체크리스트/","image":null,"faq":[{"question":"성능 최적화를 어디서부터 시작해야 하나요?","answer":"Lighthouse로 현재 상태를 측정하고, Core Web Vitals 점수가 낮은 항목부터 개선하는 것을 추천한다."},{"question":"번들 크기를 얼마나 줄여야 하나요?","answer":"초기 로딩 번들은 200KB 이하를 목표로 하되, 프로젝트 특성에 따라 조정한다."},{"question":"모든 최적화를 한 번에 적용해야 하나요?","answer":"단계적으로 적용하고 각 단계마다 측정하여 효과를 확인하는 것이 좋다."},{"question":"모바일 성능은 어떻게 측정하나요?","answer":"Chrome DevTools의 Device Toolbar를 사용하거나 WebPageTest에서 모바일 기기를 선택한다."},{"question":"성능 최적화 후에도 점수가 낮은 이유는?","answer":"서버 응답 시간, 네트워크 속도, 서드파티 스크립트 등 다양한 요인이 영향을 준다. 전체적인 분석이 필요하다."},{"question":"성능 예산을 어떻게 설정하나요?","answer":"현재 성능을 기준으로 10-20% 개선을 목표로 설정하고, 점진적으로 목표를 높여간다."}]},"frontmatter":{"title":"JavaScript 성능 측정 도구와 최적화 체크리스트 - 실무에서 바로 쓰는 성능 개선 가이드","date":"2025년 12월 23일","dateISO":"2025-12-23T06:15:00.000Z","updatedISO":null,"category":"javascript","description":"JavaScript 애플리케이션의 성능을 측정하고 최적화하는 완전한 가이드다. Lighthouse, WebPageTest, Chrome DevTools 등 주요 도구 사용법과 실무 체크리스트를 제공한다.","tags":["JavaScript","성능 최적화","Lighthouse","WebPageTest","성능 측정","프론트엔드 최적화","웹 성능"]}}},"pageContext":{"slug":"/javascript/JavaScript-성능-측정-도구와-최적화-체크리스트/","previous":{"fields":{"slug":"/ai/AI-코딩-어시스턴트-비교-가이드/"},"frontmatter":{"title":"AI 코딩 어시스턴트 비교 가이드 - GitHub Copilot vs Cursor vs Codeium 실전 분석","tags":["AI 코딩","GitHub Copilot","Cursor","Codeium","AI 어시스턴트","코딩 생산성","개발 도구"]}},"next":{"fields":{"slug":"/etc/REST-API-테스트-도구-완전-가이드/"},"frontmatter":{"title":"REST API 테스트 도구 완전 가이드 - Postman vs Insomnia vs Thunder Client 실전 비교","tags":["REST API","API 테스트","Postman","Insomnia","Thunder Client","API 개발","백엔드 개발"]}}}},"staticQueryHashes":["213619243","3262363727"]}