서드파티 모듈

맛없는콩두유·2023년 2월 13일
0
  • main.js
const cowsay = require('cowsay');

console.log(cowsay.say({
  text : "I love JavaScript",
}));

이전 영상에서는 cowsay라는 서드파티 모듈을 설치해서 사용해봤습니다.
그런데 이 서드파티 모듈은 도대체 어디에 설치되는 걸까요?

cowsay 서드파티 모듈을 설치한 직후의, nodeStudy 디렉토리의 내부를 살펴보겠습니다.

확인해보면,

(1) node_modules라는 디렉토리
(2) package-lock.json이라는 파일

이 새로 생긴 것을 알 수 있는데요. 이것들이 뭔지 설명해드릴게요. 일단 package-lock.json 파일부터 설명할게요.

1. package-lock.json 파일

package-lock.json 파일에는, nodeStudy 디렉토리 안에 설치된 모든 서드파티 모듈들에 관한 정보가 기록되어 있습니다.
파일 내용을 간단히 살펴볼까요?

package-lock.json 파일의 내용 중 dependencies(별표 표시)라는 필드에는, 현재 nodeStudy 디렉토리에 설치된 서드파티 모듈들의 정보가 담겨있습니다. dependencies는 우리말로 '의존하고 있는 것들'이라는 뜻인데요. 제 프로젝트가 이 서드파티 모듈들에 의존하고 있기 때문에 이 필드 안에 그 정보들이 담긴 것입니다. dependencies 필드를 자세히 보면, 이전 영상에서 설치했던 cowsay 서드파티 모듈의 이름이 빨간색 박스 안에 보이네요.

그런데 뭔가 이상합니다. 저는 cowsay라는 서드파티 모듈만 설치했는데, 왜 지금 파란 박스들에 보이는 것처럼 다른 서드파티 모듈들의 이름이 보이는 걸까요? 그건 바로 cowsay가 이 서드파티 모듈들에 또다시 의존하고 있기 때문입니다.

잠깐 cowsay 모듈에 관한 정보 중 requires라고 써있는 필드(주황색 표시)를 자세히 보세요. requires 필드에는 cowsay 모듈이 필요로 하는(의존하는) 다른 서드파티 모듈들의 이름이 적혀있는데요. 이 중에서 get-stdin이라는 서드파티 모듈의 이름이 보이죠? 이렇게 cowsay 모듈이 필요로 하는 모듈이기 때문에 get-stdin 모듈도 함께 설치된 겁니다. 즉, 하나의 서드파티 모듈이 설치될 때는 그것이 의존하는 다른 서드파티 모듈들도 함께 설치됩니다. 중요한 사실이니까 잘 기억해두세요.

그럼 가장 위의 ansi-regex 모듈은 왜 설치됐을까요? 지금 cowsay 모듈 정보의 requires 필드에서 이름이 보이지 않는데 말이죠. ansi-regex 모듈은 cowsay 모듈이 간접적으로 의존하는 모듈입니다. 아래 이미지를 볼까요?

지금 보면,

cowsay 모듈 → string-width 모듈 → strip-ansi 모듈 → ansi-regex 모듈, 이렇게 여러 단계에 걸쳐 cowsay 모듈은 결국 ansi-regex라는 모듈에 의존하고 있습니다. 그래서 cowsay 모듈의 requires 필드에서 당장 ansi-regex 모듈이 보이지 않았지만, 함께 설치가 되었던 겁니다. 모듈 간의 이런 '다단계 의존 관계'를 이해하는 것이 Node.js 세계에서는 아주 중요합니다. 하나의 서드파티 모듈을 설치할 때, 그것이 의존하는 다른 서드파티 모듈들도 계단식으로 모두 함께 설치된다는 사실, 어찌 보면 자연스럽죠? package-lock.json 파일은 챕터 4에서도 등장하니까 잘 기억해두세요.

2. node_modules 디렉토리

이제 node_modules 디렉토리에 대해서 알아보겠습니다. 방금 봤던 package-lock.json 파일이 어떤 서드파티 모듈들이 설치되었는지에 관한 정보를 담고 있다면, node_modules 디렉토리는 서드파티 모듈들이 실제로 설치되는 공간입니다. node_modules 디렉토리의 내부를 한번 살펴보겠습니다.

cowsay 서드파티 모듈의 이름이 잘 보이고, cowsay가 의존하는 다른 서드파티 모듈들의 이름들도 잘 보입니다. 그런데 여기서 신기한 사실이 하나 있습니다. 왼쪽의 노락색 강조 표시를 보면, 지금 모든 서드파티 모듈들은 각각 하나의 디렉토리입니다. 이게 어떻게 된 걸까요? 이때까지 우리는 모듈을 그냥 '하나의 자바스크립트 파일'이라고 배웠는데 말이죠. 하지만 사실 모듈은 하나의 파일일 수도 있고, 하나의 디렉토리일 수도 있습니다.

이게 무슨 말인지는 챕터 4에서 설명할 건데요. 일단은 여기서 멈춥시다. 나중에 챕터 4의 내용을 잘 이해하려면 이 노트의 내용을 꼭 기억해두세요!

출처: 코드잇

profile
하루하루 기록하기!

0개의 댓글