두 콘텐츠 유형, 왜 문제가 될까?
자바스크립트 파일을 웹 서버에서 전송할 때는 HTTP 헤더에 MIME 타입(콘텐츠 유형)을 지정해야 합니다. 오랫동안 혼용되어 온 text/javascript와 application/x-javascript는 비슷해 보이지만, 탄생 배경과 표준화 여부에서 뚜렷한 차이가 있습니다.
text/javascript: 초창기 웹의 유산
text/javascript는 HTML에 스크립트가 처음 도입된 1990년대부터 관례적으로 사용되어 온 콘텐츠 유형입니다. 당시에는 공식 표준으로 등록되지 않은 상태에서 널리 쓰였으며, 이후 2006년의 RFC 4329에서 '더 이상 권장되지 않는(obsolete)' 유형으로 분류되면서 application/javascript로의 전환이 권고되었습니다.
application/x-javascript: 실험적 타입의 흔적
MIME 타입에서 접두사 x-는 '실험적(experimental)', 즉 공식 표준이 아님을 나타내는 관례적 표시입니다. application/x-javascript는 표준 등록 이전에 임시로 사용되던 실험적인 유형으로, 지금 새로운 애플리케이션에서 사용하는 것은 적절하지 않습니다.
그렇다면 어떤 것을 사용해야 할까?
RFC 4329의 권고에 따르면, 브라우저가 응답 내용을 자바스크립트 코드로 올바르게 인식하도록 하려면 application/javascript를 사용하는 것이 정석이었습니다. 실제로 오랫동안 Apache, Nginx 같은 주요 웹 서버의 기본 설정도 이를 따라왔습니다.
최신 표준의 변화: RFC 9239 (2022)
흥미롭게도 2022년 발표된 RFC 9239는 흐름을 다시 바꿨습니다. 이 문서는 text/javascript를 공식 MIME 타입으로 재등록하고, application/javascript는 폐기(deprecated) 대상으로 지정했습니다. 따라서 최신 사양 기준으로는 text/javascript를 사용하는 것이 표준적인 방식입니다.
실무 팁
- HTML5 이후에는
<script>태그에서type속성을 생략해도 되며, 생략 시 기본값이text/javascript로 처리됩니다. - ES 모듈(
<script type="module">)은 서버가 정확한 자바스크립트 MIME 타입을 반환해야만 실행되므로, 서버 설정을 반드시 확인하세요. - 레거시 시스템과의 호환성이 필요하다면 두 타입을 모두 인식하도록 서버를 구성하는 것도 좋은 방법입니다.
정리
text/javascript는 초창기 HTML 시절부터 사용되어 온 유형이고, application/x-javascript는 실험적 성격의 임시 타입입니다. 오랫동안 application/javascript가 권장되어 왔지만, 2022년 RFC 9239 이후에는 text/javascript가 다시 표준의 자리를 되찾았습니다. 핵심은 x-가 붙은 실험적 타입은 피하고, 표준으로 등록된 유형을 사용하는 것입니다.