백엔드 개발 · 심화
Node.js의 require() 캐싱 메커니즘과 ES6 모듈 시스템의 차이점, 그리고 순환 참조 해결 방법을 설명해주세요.
힌트 · require는 런타임 동적 로딩과 캐싱을, ES6 모듈은 정적 분석과 호이스팅을 지원하며 순환 참조 처리 방식이 다릅니다.
require 캐싱ES6 모듈순환 참조exports 객체import/export
모범답안
Node.js의 require()와 ES6 모듈은 모듈 시스템이라는 공통점이 있지만, 작동 방식에 차이가 있습니다. require()는 런타임에 동적으로 모듈을 로딩하고, 한 번 로딩된 모듈은 캐싱됩니다. 즉, 같은 모듈을 여러 번 require()해도 처음 로딩된 모듈의 exports 객체를 재사용합니다.
반면 ES6 모듈은 import/export 구문을 사용하며, 정적 분석을 통해 의존성을 파악합니다. 따라서 런타임 이전에 모듈 관계를 알 수 있고, 호이스팅도 지원합니다.
순환 참조 문제 해결 방식도 다릅니다. require()는 순환 참조가 발생하면 exports 객체가 완전히 초기화되지 않은 상태로 전달될 수 있습니다. 이 경우, exports 객체를 사용하는 시점에 주의해야 합니다. ES6 모듈은 순환 참조를 더 엄격하게 처리하며, 런타임 에러를 발생시킬 수 있습니다. 순환 참조를 해결하려면, 모듈 간의 의존성 구조를 재설계하거나, 필요한 경우에만 모듈을 로딩하는 방식으로 코드를 수정해야 합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.