npm으로 알아보는

패키지 매니저의 요건


              안오균
패키지 매니저란?

• 패키지 매니저 = 패키지 매니지먼트 시스템

• 설치/업데이트/설정/삭제를 자동화해주는 툴

• 소프트웨어의 의존성이나 버전 정보를 관리
패키지란?

• 소프트웨어나 애플리케이션, 데이터의 '배포판'

• 소프트웨어의 메타데이터도 포함

 (이름, 설명, 버전, 벤더, 체크섬, 의존성 목록 등)
패키지 매니저의 예

• App store, Google play, Chrome web store, ...

• Cygwin, MacPorts, Homebrew, ...

• Maven, EasyInstall, RubyGems, npm, ...
패키지 매니저의 요건

• 패키지의 설치

• 패키지의 의존성 관리

• 의존하는 패키지의 버전 관리

• 패키지의 검색

• 패키지의 배포
패키지의 설치

• 패키지를 설치/삭제할 수 있는 방법 제시

• 패키지 구조에 대한 컨벤션을 명확히 정의

• 엔드 유저는 패키지 매니저의 사용법만 익히면 되도록
패키지의 의존성 관리

• 패키지 간 의존성 관리를 할 수 있어야 함

• foo라는 패키지가 bar/baz에 의존적이면,

  패키지 매니저가 이를 알고 함께 설치해야 함

• 대부분 특정 버전에 의존적이므로,

  호환 가능한 버전의 패키지가 설치되어야 함
의존하는 패키지의 버전 관리

• 의존하고 있는 패키지의 버전 관리가 용이해야 함

• 어떤 사용자는 현재 사용하고 있는 안정화 버전을,

  다른 사용자는 항상 최신 버전을 유지하려 함

• 사용자가 원하는 방법을 사용할 수 있어야 함
패키지의 검색

• 새로운 패키지 검색이 용이해야 함

• 다른 패키지가 이미 해결한 문제라 생각된다면,

  패키지 매니저에서 해당 목록을 검색할 수 있어야 함
패키지의 배포

• 패키지 제작자가 패키지를 배포할 수 있는 도구 제시

• 사용자가 쉽게 찾아낼 수 있는 곳에 배포되어야 함
npm의 예: 설치

$ npm install foo

• 모듈은 node_modules/foo 디렉토리에 설치

• 사용자는 고민없이 npm install <module>을 실행
npm의 예: 의존성 관리

• package.json 의 dependencies 항목에 의존성 관리

• 의존 모듈을 자동으로 설치

• 의존하는 패키지의 버전을 명시할 수 있음
npm의 예: 검색

$ npm search <keyword>

• 키워드로 모듈 목록 검색 가능

• package.json 의 keywords 항목에서

   검색용 키워드를 등록할 수 있음

$ npm info <module>

• 모듈의 상세 정보 조회 가능
npm의 예: 배포

$ npm publish <module>

• publish 명령어로 npm registry 에 배포 가능

• 배포한 모듈은 npm install <module> 로 설치 가능

• npm search <keyword> 로 검색 대상이 됨
참고

• Package Management System

• List of Software Package Management System

• The State of JavaScript Package Management

패키지 매니저의 요건

  • 1.
  • 2.
    패키지 매니저란? • 패키지매니저 = 패키지 매니지먼트 시스템 • 설치/업데이트/설정/삭제를 자동화해주는 툴 • 소프트웨어의 의존성이나 버전 정보를 관리
  • 3.
    패키지란? • 소프트웨어나 애플리케이션,데이터의 '배포판' • 소프트웨어의 메타데이터도 포함 (이름, 설명, 버전, 벤더, 체크섬, 의존성 목록 등)
  • 4.
    패키지 매니저의 예 •App store, Google play, Chrome web store, ... • Cygwin, MacPorts, Homebrew, ... • Maven, EasyInstall, RubyGems, npm, ...
  • 5.
    패키지 매니저의 요건 •패키지의 설치 • 패키지의 의존성 관리 • 의존하는 패키지의 버전 관리 • 패키지의 검색 • 패키지의 배포
  • 6.
    패키지의 설치 • 패키지를설치/삭제할 수 있는 방법 제시 • 패키지 구조에 대한 컨벤션을 명확히 정의 • 엔드 유저는 패키지 매니저의 사용법만 익히면 되도록
  • 7.
    패키지의 의존성 관리 •패키지 간 의존성 관리를 할 수 있어야 함 • foo라는 패키지가 bar/baz에 의존적이면, 패키지 매니저가 이를 알고 함께 설치해야 함 • 대부분 특정 버전에 의존적이므로, 호환 가능한 버전의 패키지가 설치되어야 함
  • 8.
    의존하는 패키지의 버전관리 • 의존하고 있는 패키지의 버전 관리가 용이해야 함 • 어떤 사용자는 현재 사용하고 있는 안정화 버전을, 다른 사용자는 항상 최신 버전을 유지하려 함 • 사용자가 원하는 방법을 사용할 수 있어야 함
  • 9.
    패키지의 검색 • 새로운패키지 검색이 용이해야 함 • 다른 패키지가 이미 해결한 문제라 생각된다면, 패키지 매니저에서 해당 목록을 검색할 수 있어야 함
  • 10.
    패키지의 배포 • 패키지제작자가 패키지를 배포할 수 있는 도구 제시 • 사용자가 쉽게 찾아낼 수 있는 곳에 배포되어야 함
  • 11.
    npm의 예: 설치 $npm install foo • 모듈은 node_modules/foo 디렉토리에 설치 • 사용자는 고민없이 npm install <module>을 실행
  • 12.
    npm의 예: 의존성관리 • package.json 의 dependencies 항목에 의존성 관리 • 의존 모듈을 자동으로 설치 • 의존하는 패키지의 버전을 명시할 수 있음
  • 13.
    npm의 예: 검색 $npm search <keyword> • 키워드로 모듈 목록 검색 가능 • package.json 의 keywords 항목에서 검색용 키워드를 등록할 수 있음 $ npm info <module> • 모듈의 상세 정보 조회 가능
  • 14.
    npm의 예: 배포 $npm publish <module> • publish 명령어로 npm registry 에 배포 가능 • 배포한 모듈은 npm install <module> 로 설치 가능 • npm search <keyword> 로 검색 대상이 됨
  • 15.
    참고 • Package ManagementSystem • List of Software Package Management System • The State of JavaScript Package Management