본문 바로가기

CLI

패키지와 패키지 매니저

패키지와 패키지 매니저

→ 패키지란 : 패키지는 여러 파일이 담겨있는 하나의 상자입니다.

→ 여러 파일을 담고 있는 하나의 파일을 '압축 파일'이라고 합니다. (ex)알집, 반디집)

→ 리눅스의 패키지는 여러 파일을 모아 하나의 파일로 저장하고 있는 압축파일입니다.

→ 패키지 안에 들어 있는 파일의 구성

1) 프로그램 파일  2) 프로그램 설치 파일

3) 프로그램 설치 설명서 4) 프로그램에 대한 정보를 담은 파일

→ 패키지 안에는 하나의 프로그램이 정상적으로 설치되고 동작하기 위한 모든 파일이 압축

→ 프로그램에 대한 정보를 담은 파일에 담긴 정보 : 프로그램 A를 설치하기 위해 프로그램 B가 필요하다는 정보

/  패키지를 이용해 프로그램을 설치하면, 패키지에 포함된 정보를 이용해 프로그램 B를 먼저 설치하고 나서 프로그램 A를 설치합니다.

→ 패키지 매니저를 사용하지 않고, 프로그램을 독립적으로 설치시 단점

:  여러 프로그램을 개별로 설치하기 위해서는, 각각의 프로그램이 저장된 위치를 모두 알아야 합니다

: 원하는 프로그램을 찾기 위해서는 해당 프로그램을 저장하고 있는 저장소의 위치를 알아야 합니다

: 해당 프로그램의 업데이트 여부를 확인하기 위해서도 주기적으로 저장소를 방문해서 확인해야 합니다. 

-> 만약 컴퓨터에 설치된 프로그램이 점점 늘어난다면, 모든 프로그램을 업데이트하는 일이 불가능에 가까워집니다.

→ 패키지 매니저는 패키지의 설치, 변경, 삭제 등 관리를 편리하게 해주는 도구

→ 리눅스 운영체제의 사용자도 패키지 매니저를 이용해 필요한 패키지를 설치할 수 있습니다

→ 패키지 매니저는 모든 패키지의 저장소 위치를 저장하고 있습니다

→ 사용자가 패키지 매니저에게 특정 프로그램의 설치를 요청하면, 패키지 매니저는 패키지가 저장된 위치에서 패키지를 다운로드 받아 설치 프로그램을 실행합니다

→ 패키지 매니저는 설치된 모든 프로그램의 업데이트를 확인하거나, 필요없는 프로그램을 제거하는 데에도 사용할 수 있습니다

----------------------------------------------------------------------------------------------------------------

MacOS 운영체제에서 터미널을 통해 Homebrew 패키지 매니저를 설치하고 패키지를 관리하는 명령어를 사용할 수 있다.

  • brew update: 패키지의 업데이트 여부 확인
  • brew outdated: 업데이트 필요한 파일 조회
  • brew upgrade: 프로그램 업그레이드
  • brew info: 프로그램의 정보 확인
  • brew install: 프로그램 설치
  • brew list: 설치된 프로그램 목록 보기
  • brew uninstall: 프로그램 삭제

- 런타임

런타임이란, 프로그래밍 언어가 실행되는 환경, 그리고 node.js는 JavaScript 런타임

→ 런타임 이란 어떤 프로그램이 동작할 때, 프로그램이 동작하는 곳

ex) 크롬, 사파리 같은 웹 브라우저가 바로 JavaScript 런타임입니다.

→ JavaScript를 이용해서 코드를 적었으면 코드가 실행되는데 이 때, 실행되는 곳이 바로 런타임입니다.

→ 웹 브라우저가 대표적인 JavaScript 런타임  /  node.js JavaScript 런타임(중요)

----------------------------------------------------------------------------------------------------------------

  • nvm, Nodejs, npm을 설치하고, 버전을 확인할 수 있다.
  • 명령어 node를 이용해 JavaScript 파일을 실행할 수 있다.
  • 스프린트 시작 전 package.json 파일을 확인하고, npm install을 사용할 수 있다.

----------------------------------------------------------------------------------------------------------------

→ m1칩 mac북인 경우 node.js를 15버전 이상을 설치할 것

→ nvm은 node.js간의 버전차이로 인한 코드호환을 맞춰준다.

 

- pakege.json

→ 검증된 코드 = 모듈

모듈을 node.js 에서는 npm 모듈이라는 이름으로 부르며, 이에 대한 정보를 담아둔 곳이 바로 package.json이라고 한다.

→ node.js 환경에서 외부 라이브러리를 다운로드 받기 위한 대표적인 것은 바로 npm입니다. npm은 Node Package Manager로 일종의 앱스토어입니다.

→ node.js 생태계의 패키지 매니저는 npm로 필요한 모듈은 대부분 npm에서 다운로드해서 사용하면 됩니다.

→ package.json에는 이 프로그램을 실행시키기 위해 필요한 모듈들이 무엇인지, 프로그램을 실행시키는 방법, 프로그램을 테스트하는 방법 등이 명시되어 있습니다.

→ 이 프로그램을 실행시키기 위해 필요한 실제 모듈은 따로 node_modules이라는 폴더에 저장 (package.json에는 어떤 모듈인지만 적혀 있습니다)

→ package.json이 주는 또 하나의 이점은 프로젝트 코드를 전달할 때, 포함하고 있는 모든 모듈을 다 전달하지 않아도 된다는 점 입니다

/  사용하는 사람이 직접 다운받으라고 하면 되며 우리는 무엇이 필요한지만 알려주면 됩니다.
→ 스프린트를 진행할 때, 해당 스프린트의 레파지토리를 열어보시면 node_modules 는 없고, package.json 만 있을겁니다. 그럼 여러분은 package.json에서 필요하다고 하는 모듈을 npm을 이용해 다운받으시면 됩니다.
→ npm install 명령어를 입력하시면, package.json에서 필요하다고 하는 모듈을 다운받습니다. 

→ npm install이 완료되면 node_modules 디렉토리가 생긴 걸 확인하실 수 있습니다.

→ node_modules에 여러가지 npm들이 설치됨

----------------------------------------------------------------------------------------------------

package.json 에 적혀있는 내용

1) devDependencies 

{

  "devDependencies": {

    "@mochajs/json-file-reporter": "^1.2.1",

    "chai": "^4.2.0",

    "mocha": "^8.2.0",

    "sinon": "^9.0.3"

  }

}

→ 개발이나 실행에 해당 모듈을 "의존"한다고 해서, "의존성(dependency)"이라고 부릅니다.(모듈)

→ JSON 형식에서, 키에 적힌 것은 모듈 이름입니다. 값은 버전입니다. 

→ devDependencies에는 이 프로젝트를 개발하는 환경에서 필요한 모듈들이 무엇인지가 적혀 있습니다.

→ 코드 모양을 잡아주는 lint나 테스팅 모듈처럼, 실제 프로젝트 동작에 직접적으로 영향을 주지 않는 모듈들을 명시

----------------------------------------------------------------------------------------------------

$ npm install mocha --save-dev

→   --save-dev 옵션과 함께 install 실행시 자동으로 devDependencies에 추가됨

* 참고로 mocha라는 모듈은 테스트를 위해 필요합니다

npm install을 이용하면, npm에 있는 모듈을 설치할 수 있는데, 이 때 --save-dev 옵션과 함께 설치하면, 자동으로 devDependencies에 추가됩니다.

 

----------------------------------------------------------------------------------------------------

{

  "dependencies": {

    "react": "^16.7.0",

    "react-dom": "^16.7.0"

  }

}

직접 실행과 관련 있는 dependency

: 이 프로젝트에서는 React라는 라이브러리를 사용하고 있음

→ dependencies는 devDependencies와는 다르게, 이 프로젝트가 돌아가기 위해 반드시 필요한 모듈들이 무엇인지가 적혀 있습니다. 

ex) underscore라던지, 이후 배울 React 같은것이 좋은 예가 됩니다.

----------------------------------------------------------------------------------------------------

$ npm install react  또는 $ npm install --save react

--save 옵션과 함께 (생략 가능) install 실행시 자동으로 dependencies에 추가됨

--save 옵션과 함께 설치하면, 자동으로 dependencies에 추가됩니다. --save 옵션은 생략해도 좋습니다.

----------------------------------------------------------------------------------------------------

- 우리가 흔히 하는 npm install은 package.json에 있는 dependency (의존성 모듈)를 바탕으로 설치

아무것도 모르는 사람이 내가 만든 프로젝트를 실행시킬 때 어떻게 해야 프로그램을 실행시킬 수 있는지, 이걸 실행시키려면 어떤 모듈이 있는지를 알 수 없습니다

→ 다른 사람에게 이 프로젝트에 대해 알려주어야 하는데 그 역할을 하는 것이 바로 package.json 입니다.

----------------------------------------------------------------------------------------------------

- 만일 dependency 정보를 적지 않았다고 가정해봅시다.

코드에서는 해당 모듈을 쓰고 있지만 npm install로는 설치되지 않는다!

무엇을 설치해야 이 프로그램이 작동되는지, 무엇을 설치해야 이 프로그램을 개발할 수 있을 지 도통 알 수가 없을것입니다.  /  협업에 문제가 발생한다.

----------------------------------------------------------------------------------------------------

→ scripts 항목은 CLI에서 사용가능한 명령을 기술

→ 우리는 이를 npm script라고 부릅니다.

→ CLI에서 실행할 때에는 "npm run <스크립트 이름>" 으로 실행합니다.

----------------------------------------------------------------------------------------------------

→ 주로 실행, 테스트, 코드 검사(lint) 등을 기술합니다.

→ 테스트 케이스 통과만이 목적인 경우에는, start 스크립트조차 없을 수 있습니다.

→ 코드스테이츠에서는 과제 제출 역시 npm script로 제공됨(npm run submit을 통해 과제 제출 가능)

 

'CLI' 카테고리의 다른 글

CLI의 전반적인 개념  (0) 2021.05.07