-> 기능별로 만들어 놓은 함수
:: 프로그램을 만들때는 최대한 기능 단위를 쪼개서 각 기능을 하나씩 해결하는 방식을 많이 사용하며 파일형태로 저장해서 필요할때마다 가져와서 사용.
export하는 파일에서 비동기 처리로 값이 바뀐다면, CommonsJS에서는 반영이 되지 않지만 ESM은 반영 될 수 있다(비동기로 다시 호출한다면).
순환 참조의 경우 CommonJS는 빈 객체를, ESM은 RefernceError를 발생시킨다.

위 그림처럼 인사를 하는 프로그램이 있다고 하자,
모듈을 만들려면 가장 작은 기능으로 쪼개야 하기 때문에 이름 선언부와, 이름이 불려지는 함수부분을 나눠 모듈로 만들어보도록 하겠다.
모듈은 파일형태로 저장하기 때문에 생성하는 방법은 상당히 쉽다.

user.js 파일을 하나 만들어 상수 user를 선언해 이름을 할당해주고,

hello.js파일 도 하나 만들어서 인사하는 함수를 할당해준다.
그럼 모듈 생성 끝!
모듈 내보내는 방법은 간단하다,


생성한 모듈 파일안 마지막에 내보낸다는 module.exports문을 사용해준다
※ 함수를 정의할때 exports를 붙여 함수를 직접 내보낼 수도 있다.

모듈은 가져오는 것도 간단하다.

위 그림처럼 require()함수를 사용해서 가져온다.
여기에서 주의해야 할 점은, 가져올 파일과 생성한 모듈은 같은 파일에 존재해야하고, 파일경로는 상대 경로로 지정해야 한다는 점.
:: 여러개의 값을 내보낼 때는 { }로 묶어서 객체형태로 내보냄

:: 받아올때도 객체 형태로 가져올 수 있음
