
import "./foo.json" with { type: "json" }에서 type: "json"처럼 type을 명시하는 건, 단순히 JSON이라는 정보를 붙이는 것이 아니라 해당 모듈이 어떤 포맷인지 명확히 선언하여 런타임이 "이건 코드가 아니라 데이터야"라는 식으로 해석하게 만드는 중요한 의미를 지님.
with { type: "json" }이 가지는 의미.js, .mjs 등 코드 실행 가능한 파일만 import할 수 있었음..json 요청에 Content-Type: application/javascript로 응답해버리면 악성 코드가 실행될 수도 있음.type: "json"을 명시하면 "이건 코드로 실행될 수 없는 정적 데이터임"이라고 선언하게 되고, JavaScript 엔진은 이를 엄격하게 검사함.import data from "./config.json" with { type: "json" };
→ type: "json"이 없으면 JSON이 아닌 다른 형식이 응답되더라도 브라우저가 실행해버릴 수 있음 → 보안 취약점
.json이라고 해서 반드시 JSON 형식이라는 보장은 없음.Content-Type)이 중요하지만, 종종 서버에서 잘못 설정되기도 함.type으로 의도한 형식을 선언해야 신뢰성이 높아짐.type은 모듈 캐시의 키에 포함됨. 즉, 동일한 URL이라도 type이 다르면 서로 다른 모듈로 취급됨.import config1 from './config.json' with { type: 'json' };
import config2 from './config.json' with { type: 'javascript' }; // 완전히 다른 모듈로 인식
type: "css", type: "html" 등으로 명시하는 방식이 사용될 것.import styles from './style.css' with { type: 'css' };
import doc from './template.html' with { type: 'html' };
→ 모듈 시스템이 이 파일들을 "코드"가 아닌 "특정 포맷 데이터"로 처리할 수 있게 함