Study/Node.js

[노드JS] 노드에서 모듈 사용하기

AC 2019. 3. 8. 18:24


하나의 함수 안에 모든 기능을 넣는 것보다 기능별로 여러 개의 함수로 나눈 후 필요한 함수만 가져다 사용하면 다른 곳에서도 이 함수를 재사용할 수 있기 때문에 훨씬 효율적으로 프로그램을 만들 수 있다. 또한 각각의 기능을 나누어 프로그램 관리가 더 쉬워진다.


코드를 하나의 파일이 아니라 여러 개의 파일로 나누어 만들 때에도 이런 장점을 그대로 살릴 수 있다. 다음은 파일의 내용을 확인하기 위해 만든 프로그램에서 각각의 기능을 별도의 파일로 분리한 모양을 그림으로 표현한 것이다.



▲ 파일 내용 확인 프로그램의 코드를 각각의 파일에 나누어 넣은 그림



메인 파일의 코드 중에서 독립적인 기능은 별도 파일로 분리할 수 있으며, 메인 파일에서는 전체적인 실행 순서나 흐름만을 제어한다.

이렇게 분리된 파일을 노드에서는 모듈이라고 부른다. 모듈이란 별도의 파일로 분리된 독립 기능의 모음이라서 모듈을 만들어 놓으면

다른 파일의 모듈을 불러와 사용할 수도 있다.


각각의 기능을 분리시킬 때는 단순히 별도의 파일에 코드를 나누어 놓는다고 끝나는 것은 아니다.

분리되어 있는 모듈 파일을 불러와서 사용할 수 있는 방법도 함께 만들어주어야 한다. 노드는 CommonJS의 표준 스펙을 따라 모듈을 사용할 수 있게 한다. 이 과정에서 exports 전역 객체를 사용한다.


▲노드제이에스에서 모듈을 사용하는 대표적인 방식



모듈을 만들 때는 module1.js처럼 별도의 자바스크립트 파일을 만든 후 그 코드에서 exports 객체를 사용한다. exports 객체의 속성으로 변수나 함수를 지정하면 그 속성을 main.js와 같은 메인 자바스크립트 파일에서 불러와 사용할 수 있다.


모듈을 불러올 때는 require() 메소드를 사용하며, 모듈로 만들어 둔 파일의 이름을 이 메소드의 파라미터로 전달한다.

require() 메소드를 호출하면 모듈 객체가 반환되는데, 모듈에서 exports 객체에 설정한 속성들은 이 모듈 객체를 통해 접근할 수 있다.



그런데 여기서 주의할 점은 exports 외에 module.exports를 사용할 수도 있다는 것이다. exports에는 속성을 추가할 수 있어 여러 개의 변수나 함수를 각각의 속성으로 추가할 수 있다. 이에 반해 module.exports에는 하나의 변수나 함수 또는 객체를 직접 할당한다.


일반적으로는 객체를 그대로 할당하며, 이렇게 할당한 객체 안에 넣어 둔 변수나 함수를 메인 파일에서도 사용할 수 있다.



▲ 모듈 파일을 만들 때 exports와 module.exports를 사용하는 경우


※ exports를 사용할 지 module.exports를 사용할지 혼동할 까?

아직 자바스크립트에는 익숙하지 않으넫, 잘 모르는 exports 객체가 나오니 혼동이 될 수도 있다. 걱정할 것 없다.

추후에 포스팅에서 자바스크립트 기초 중에서 노드를 사용할 때 알아야 할 중요한 내용을 정리하여 설명하겠다.

그때 지금까지 알고 있던 내용을 정리해 보거나 몰랐던 내용을 알아가면 된다. 


여기에서는 'exports와 module.exports라는 것을 사용할 수 있다'는 내용, 그리고 '어떤 것을 사용하는가에 따라 메인 파일에서 모듈을 불러와 사용하는 방식이 약간 다를 수 있다'는 정도만 알자.



LIST