매일 공부/Frontend CS

[매일메일] script 태그에서 async와 defer의 차이점에 대해서 설명

개발하는 동그리 2025. 3. 27. 17:05
728x90
반응형

먼저, 두 속성 모두 스크립트를 비동기적으로 로드한다는 공톰점이 있습니다. 하지만 실행 시점에서 중요한 차이가 있습니다.

async
- 스크립트를 비동기적으로 다운로드 합니다.
- 다운로드가 완료되면 즉시 실행됩니다.
- HTML 파싱과 병렬로 진행되지만, 스크립트 실행 시 HTML 파싱이 잠시 중단됩니다.
- 여러 async 스크립트가 있을 경우, 다운로드가 완료되는 순서대로 실행됩니다.
defer
- 스크립트를 비동기적으로 다운로드 합니다.
- HTML 문서 파싱이 완전히 끝난 후에 실행됩니다.
- DOMContentLoaded 이벤트 발생 직전에 실행됩니다.
- 여러 defer 스크립트가 있을 경우, HTML 에 작성된 순서대로 실행됩니다.

따라서, 실행 순서가 중요한 스크립트나 메인 어플리케이션의 로직을 담고 있는 스크립트의 경우 defer 을 사용하고, 독립적으로 실행되는 스크립트 (Google Analytics)의 경우 async를 사용하는 것이 좋습니다.


정리!

일반 <script> HTML 읽다가 만나면 다운로드 다운로드 끝나면 바로 실행 작성된 순서대로 실행 (하지만 HTML 파싱 멈춤)
async HTML 파싱과 동시에 다운로드 다운로드 끝나면 바로 실행 순서 보장 ❌ (랜덤)
defer HTML 파싱과 동시에 다운로드 HTML 파싱 끝난 후 실행 순서 보장 ✅

 

일반 <script> (동기 실행)

  • HTML 파싱을 블록(멈춤) 하기 때문에 사용 지양
  • 정말 중요한 코드라면 <head>에 넣고 사용 가능 (ex. document.write())

 

async (비동기 실행)

  • 실행 순서가 중요하지 않은 광고, 분석 스크립트(Google Analytics)

 

defer (HTML 파싱 후 실행)

  • 메인 로직이 포함된 스크립트 (Vue, React 등)
  • 여러 스크립트가 실행 순서를 지켜야 할 때

 

https://www.maeil-mail.kr/question/37

 

매일메일 - 기술 면접 질문 구독 서비스

기술 면접 질문을 매일매일 메일로 보내드릴게요!

www.maeil-mail.kr

 

728x90
반응형