JS/Javascript

[javascript] 자바스크립트 로드 방식

ui-o 2026. 1. 7. 14:59
반응형

자바스크립트 로드 방식

  • 성능과 안정성을 동시에 잡으려면 defer가 기본 선택
  • 실행 순서가 중요하면 async는 피함
  • 모듈 기반 프로젝트는 type="module"이 사실상 표준

기본 로드 방식

<script src="app.js"></script>

동작 방식

  1. HTML 파싱 중 <script> 태그를 만나면
  2. HTML 파싱 중단
  3. JS 파일 다운로드
  4. JS 실행
  5. HTML 파싱 재개

특징

  • HTML 파싱과 JS 다운로드/실행이 동기적
  • 렌더링 차단 발생
  • DOM 접근은 보장됨 (위치에 따라)

단점

  • 초기 렌더링 지연 (JS가 크면 화면이 아예 안 뜬 채로 대기)
  • 대형 스크립트일수록 성능 저하

언제 DOM 접근이 가능할까?

  • <script>가 DOM 아래에 있으면 가능
  • 위에 있으면 document.querySelector가 실패할 수 있음

사용 시점

  • 거의 사용하지 않음
  • 반드시 즉시 실행되어야 하는 스크립트일 때만 제한적으로 사용

<script defer> (지연 실행)

  • “HTML 먼저 끝까지 읽고, JS는 나중에 순서대로 실행”
 
<script src="app.js" defer></script>

동작 방식

  1. HTML 파싱과 함께 JS를 병렬로 다운로드
  2. HTML 파싱 완료 후
  3. DOMContentLoaded 이전에 실행
  4. 여러 개일 경우 작성 순서대로 실행

특징

  • HTML 파싱을 차단하지 않음
  • DOM이 완전히 생성된 후 실행됨
  • 여러 개 있어도 실행순서 보장

장점

  • 렌더링 성능 우수
  • DOM 조작 코드에 안전

실무 권장 패턴

    • 가장 권장되는 방식 (일반 UI/서비스 로직)

<script async> (비동기 실행)

  • 다른 코드와 전혀 관계없는 JS에 적합
<script src="app.js" async></script>

동작 방식

  1. HTML 파싱과 함께 JS를 병렬로 다운로드
  2. 다운로드 완료 즉시 실행
  3. 실행 시점에 HTML 파싱 일시 중단
  4. 실행 순서 보장되지 않음

특징

  • 실행 시점이 HTML 진행 상황에 따라 달라짐
  • DOM이 완성되었는지 보장 안 됨
  • 여러 개면 순서 랜덤

사용 적합 사례

  • 독립적인 스크립트
    • 광고
    • 트래킹 코드
    • analytics

✓ “JS 준비되면 바로 실행, 타이밍은 랜덤”


<script> 위치를 </body> 직전에 두는 방식

  • HTML 다 읽고 나서 JS 실행
<body>
... 
<script src="app.js"></script> 
</body>

동작 방식

  • HTML이 거의 다 파싱 된 후 스크립트 실행

특징

  • DOM 접근 가능
  • 별도 속성 없이도 렌더링 차단 최소화

한계

  • 스크립트 다운로드는 여전히 늦음
  • defer보다 성능 제어력이 떨어짐 (defer 사용 권장)

type="module" 방식

  • 모던 자바스크립트 전용 defer
<script type="module" src="app.js"></script>

특징

  • 기본적으로 defer처럼 동작
  • strict mode 자동 적용
  • 모듈 스코프 사용 (파일 간 변수 충돌 없음)
  • import / export 가능

주의사항

  • 구형 브라우저 호환성 고려 필요
  • 모듈은 CORS 규칙 적용

실무 권장 패턴

  • 모던 프론트엔드

방식별 비교 요약

방식 HTML 파싱  차단실행  시점실행 순서 보장 DOM 접근
기본 script O 즉시 O 위치 의존
defer X 파싱 후 O O
async X 다운로드 즉시 X X
body 하단 거의 X 파싱 후 O O
module X 파싱 후 O O

 

 

[javascript] DOM, 파싱, 노드

DOM(Document Object Model) 웹 페이지의 HTML을 트리 구조로 표현한 자바스크립트 객체 웹 페이지의 구조(HTML)를 자바스크립트에서 객체(트리 구조) 형태로 표현한 모델HTML, CSS로 웹사이트를 만들 때 자

u-pub.tistory.com

 

반응형