프론트엔드 개발 · 중급
`<script>` 태그에 `async`와 `defer` 속성을 사용하는 것이 웹 페이지 성능에 어떤 영향을 미치는지 설명하고, 각각 어떤 상황에서 사용해야 하는지 구체적인 예시와 함께 비교 설명해 주세요.
힌트 · HTML 파싱과의 관계, 스크립트 실행 시점, DOMContentLoaded 이벤트에 미치는 영향을 중심으로 설명하세요.
파싱렌더링HTML 파서DOMContentLoaded실행 순서
모범답안
async와 defer는 <script> 태그에 사용되어 웹 페이지 로딩 성능을 향상시키는 속성입니다. 둘 다 HTML 파싱을 멈추지 않고 스크립트를 다운로드하지만, 실행 시점에 차이가 있습니다.
async 속성은 스크립트가 다운로드되는 즉시 HTML 파싱을 중단하고 실행합니다. 따라서 스크립트 실행 순서가 보장되지 않으며, DOMContentLoaded 이벤트 발생 시점을 늦출 수 있습니다. 주로 페이지 렌더링에 필수적이지 않은 독립적인 스크립트, 예를 들어 광고 스크립트나 분석 스크립트에 사용합니다.
defer 속성은 HTML 파싱이 완료된 후 DOMContentLoaded 이벤트 직전에 스크립트를 실행합니다. 스크립트 순서가 HTML에 나타난 순서대로 보장되며, DOMContentLoaded 이벤트 발생을 지연시키지 않습니다. DOM 조작이나 다른 스크립트에 의존적인 스크립트, 예를 들어 jQuery와 같은 라이브러리에 적합합니다.
간단히 말해, async는 "되는대로 빨리", defer는 "HTML 파싱 끝나면 순서대로" 실행한다고 생각하면 됩니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 웹 성능 최적화 면접 질문
- CSS와 JavaScript 파일을 압축(Minification)하고 번들링(Bundling)하는 것이 웹 성능에 어떤 이점을 주나요?
- 지연 로딩(Lazy Loading)이란 무엇이며, 어떤 종류의 콘텐츠에 주로 적용되며 웹 성능에 어떤 영향을 미치나요?
- 웹 페이지 렌더링 성능 최적화를 위해 Critical Rendering Path (CRP)를 이해하고 개선하는 것이 중요합니다. CRP의 주요 단계들을 설명하고, 이 경로를 단축하거나 최적화하기 위한 구체적인 방법들을 제시해 보세요.
- 웹 페이지에 많은 이미지가 사용될 때 발생할 수 있는 성능 문제를 해결하기 위한 이미지 최적화 전략들을 3가지 이상 설명하고, 각 전략이 어떤 원리로 성능을 개선하는지 설명해 주세요.
- 웹 성능 최적화에서 HTTP 캐싱이 중요한 이유를 설명하고, `Cache-Control` 헤더의 주요 지시어(예: `max-age`, `no-cache`, `must-revalidate`)들이 각각 어떤 역할을 하는지 구체적인 시나리오와 함께 설명해 주세요.
- Service Worker를 활용한 캐싱 전략이 HTTP 캐싱과 어떻게 다른지 설명하고, Service Worker를 사용하여 웹 애플리케이션의 오프라인 지원 및 성능 향상을 어떻게 구현할 수 있는지 구체적인 캐싱 전략(예: Cache-First, Network-First)을 들어 설명해 주세요.