본문으로 건너뛰기
yceffort
PostsSeriesTagsAbout🧪 Research
EN

Tweaks

theme
accent palette
film grain
minimal mode
BACK TO INDEX
◆ ESSAY
--min
--year
KOoriginal

mailMail icongithubtwitter
yceffort
•
© 2026
•
https://yceffort.kr
BACK TO INDEX
◆ ESSAY

ESModule을 동적으로 import 하기

avatar
yceffort
2021-06-19 · 2분
2min
2021year
KOoriginal
javascriptasync

ECMAScript (ES2015, ES) 모듈이란 자바스크립트에서 각 코드를 하나의 청크로 구성할 수 있게 해주는 방법을 제공한다. 먼저, 자바스크립트의 값을 외부로 노출을 시킨다.

export const sum = (a, b) => a + b

그리고 이 값(함수)을 필요로 하는 곳에서 아래와 같이 사용한다.

import {sum} from './test'

sum(1, 2)

대부분의 경우에는 위의 예제 처럼 상단에 필요한 모듈들을 static하게 import하는 것이 일반적이지만, 때때로 이를 필요에 따라 조건부로 불러올 수도 있다. dynamic import라고 불리며, 이는 ES2020(ES11)에 포함된 기능이다.

const sum = await import('./test')

await import는 프로미스를 리턴하고 이 때부터 동적으로 모듈을 불러오기 시작한다. 그리고 모듈을 성공적으로 불러오면, promise는 모듈을 resolve하거나 실패할 경우 reject 하게 된다.

그리고 import내의 구문은 모듈의 위치를 가리키는 string이면 되기 때문에, 함수 외부에서 인수로 받거나 계산된 string을 받는 것들도 가능하다.

export const sum = (a, b) => a + b
async function calc(a, b) {
  const {sum} = await import('./test')
  sum(a, b)
}

calc(1, 2) // 3

이제 default 의 경우를 살펴보자.

const sum = (a, b) = > a + b
export default sum

이 경우에는 default 키워드를 사용하면 된다.

async function calc() {
  const {default: sum} = await import('./test')
  sum(1, 2)
}

한가지 유의 할 것은,

const sum = await import('./test')

이렇게는 안된다는 것이다.

default와 그 외의 것들이 섞여있는 경우라면 아래와 같이 처리하면 된다.

const sum = (a, b) => a + b
export const sum1 = (a, b) => a + b
export const sum2 = (a, b) => a + b

export default sum
const {default: sum, sum1, sum2} = await import('./test')

관련 글

  • #javascript#async

    Javascript - Promise

    ## Promise ```javascript new Promise(executor) ``` `executor`는 `resolve`및 `reject` 인수를 전달할 실행함수를 의미한다. 실행함수는 `resolve`와 `reject`를 받아 즉시 실행된다. 실행함수는 보통 비동기 작업을 시작한 후, 모든 작업을 끝내면 `resolve`를 호출해서 `Prom...

    2019-05-21·2분
  • #javascript#async#error-handling

    promise.then(f, f) vs promise.then(f).catch(f) 는 무엇이 다를까?

    덥다 더워

    2021-07-30·3분
  • #javascript#async

    자바스크립트의 이벤트루프, 태스크, 그리고 마이크로 태스크

    ## 자바스크립트는 단일 스레드 기반의 언어 자바스크립트는 '단일 스레드' 기반의 언어다. 즉, 스레드가 하나이기 때문에 동시에 하나의 작업만 처리할 수 있다. 그러나 자바스크립트가 사용되는 웹을 곰곰히 생각해보면 동시에 여러개의 작업을 처리하는 모습을 볼 수 있다. 스레드가 하나인 자바스크립트는 동시성을 어떻게 처리할까? 먼저 브라우저 구동환경을 살펴보...

    2019-12-27·5분
  • #javascript#async#error-handling

    no return, await, return, await return 의 차이

    try catch 블록에서는 동작이 다르네

    2021-02-03·3분

새 글을 놓치고 싶지 않으시다면 RSS로 구독해 주세요.

RSS 구독 →

yceffort — 프론트엔드 엔지니어입니다.

← Back to the blogIssue on GitHub →