SlideShare a Scribd company logo
1 of 15
Download to read offline
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

More Related Content

Similar to 패키지 매니저의 요건

[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기Chanwoong Kim
 
Android Security Internals (Lesson 3)
Android Security Internals (Lesson 3)Android Security Internals (Lesson 3)
Android Security Internals (Lesson 3)Joon Young Park
 
메이븐파헤치기(김우용)
메이븐파헤치기(김우용)메이븐파헤치기(김우용)
메이븐파헤치기(김우용)우용 김
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기KwangSeob Jeong
 
제2회 난공불락 오픈소스 인프라 세미나 zinst 관리툴 소개
제2회 난공불락 오픈소스 인프라 세미나 zinst 관리툴 소개제2회 난공불락 오픈소스 인프라 세미나 zinst 관리툴 소개
제2회 난공불락 오픈소스 인프라 세미나 zinst 관리툴 소개Tommy Lee
 
유지보수를 고려한 SW 개발
유지보수를 고려한 SW 개발유지보수를 고려한 SW 개발
유지보수를 고려한 SW 개발도형 임
 
(130608) #fitalk pfp (portable forensic plaform)
(130608) #fitalk   pfp (portable forensic plaform)(130608) #fitalk   pfp (portable forensic plaform)
(130608) #fitalk pfp (portable forensic plaform)INSIGHT FORENSIC
 
Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화Juwon Kim
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱NAVER D2
 
18 2 파이썬표준라이브러리
18 2 파이썬표준라이브러리18 2 파이썬표준라이브러리
18 2 파이썬표준라이브러리Changwon National University
 
Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415
Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415
Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415sprdd
 
리눅스 시작하기
리눅스 시작하기리눅스 시작하기
리눅스 시작하기Pete Lee
 
[넥슨] kubernetes 소개 (2018)
[넥슨] kubernetes 소개 (2018)[넥슨] kubernetes 소개 (2018)
[넥슨] kubernetes 소개 (2018)용호 최
 
[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rd[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rdPark Jonggun
 

Similar to 패키지 매니저의 요건 (15)

JetsonTX2 Python
 JetsonTX2 Python  JetsonTX2 Python
JetsonTX2 Python
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
 
Android Security Internals (Lesson 3)
Android Security Internals (Lesson 3)Android Security Internals (Lesson 3)
Android Security Internals (Lesson 3)
 
메이븐파헤치기(김우용)
메이븐파헤치기(김우용)메이븐파헤치기(김우용)
메이븐파헤치기(김우용)
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기
 
제2회 난공불락 오픈소스 인프라 세미나 zinst 관리툴 소개
제2회 난공불락 오픈소스 인프라 세미나 zinst 관리툴 소개제2회 난공불락 오픈소스 인프라 세미나 zinst 관리툴 소개
제2회 난공불락 오픈소스 인프라 세미나 zinst 관리툴 소개
 
유지보수를 고려한 SW 개발
유지보수를 고려한 SW 개발유지보수를 고려한 SW 개발
유지보수를 고려한 SW 개발
 
(130608) #fitalk pfp (portable forensic plaform)
(130608) #fitalk   pfp (portable forensic plaform)(130608) #fitalk   pfp (portable forensic plaform)
(130608) #fitalk pfp (portable forensic plaform)
 
Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱
 
18 2 파이썬표준라이브러리
18 2 파이썬표준라이브러리18 2 파이썬표준라이브러리
18 2 파이썬표준라이브러리
 
Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415
Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415
Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415
 
리눅스 시작하기
리눅스 시작하기리눅스 시작하기
리눅스 시작하기
 
[넥슨] kubernetes 소개 (2018)
[넥슨] kubernetes 소개 (2018)[넥슨] kubernetes 소개 (2018)
[넥슨] kubernetes 소개 (2018)
 
[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rd[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rd
 

More from Ohgyun Ahn

호갱노노 이렇게 만듭니다
호갱노노 이렇게 만듭니다호갱노노 이렇게 만듭니다
호갱노노 이렇게 만듭니다Ohgyun Ahn
 
카카오스토리 웹팀의 코드리뷰 경험
카카오스토리 웹팀의 코드리뷰 경험카카오스토리 웹팀의 코드리뷰 경험
카카오스토리 웹팀의 코드리뷰 경험Ohgyun Ahn
 
ES6: RegExp.prototype.unicode 이해하기
ES6: RegExp.prototype.unicode 이해하기ES6: RegExp.prototype.unicode 이해하기
ES6: RegExp.prototype.unicode 이해하기Ohgyun Ahn
 
Node.js 시작하기
Node.js 시작하기Node.js 시작하기
Node.js 시작하기Ohgyun Ahn
 
JavaScript Memory Profiling
JavaScript Memory ProfilingJavaScript Memory Profiling
JavaScript Memory ProfilingOhgyun Ahn
 
JavaScript Minification
JavaScript MinificationJavaScript Minification
JavaScript MinificationOhgyun Ahn
 
JavaSript Template Engine
JavaSript Template EngineJavaSript Template Engine
JavaSript Template EngineOhgyun Ahn
 
Github Usage Scenarios
Github Usage ScenariosGithub Usage Scenarios
Github Usage ScenariosOhgyun Ahn
 
Javascript hoisting
Javascript hoistingJavascript hoisting
Javascript hoistingOhgyun Ahn
 
diff output formats
diff output formatsdiff output formats
diff output formatsOhgyun Ahn
 
BASH Guide Summary
BASH Guide SummaryBASH Guide Summary
BASH Guide SummaryOhgyun Ahn
 
Python Usage (5-minute-summary)
Python Usage (5-minute-summary)Python Usage (5-minute-summary)
Python Usage (5-minute-summary)Ohgyun Ahn
 
UX 심포지엄 20120 키노트 정리
UX 심포지엄 20120 키노트 정리UX 심포지엄 20120 키노트 정리
UX 심포지엄 20120 키노트 정리Ohgyun Ahn
 
크롬익스텐션 맛보기
크롬익스텐션 맛보기크롬익스텐션 맛보기
크롬익스텐션 맛보기Ohgyun Ahn
 
재미있는 생산성 향상 도구
재미있는 생산성 향상 도구재미있는 생산성 향상 도구
재미있는 생산성 향상 도구Ohgyun Ahn
 
Raphael.js로 SVG 차트 만들기
Raphael.js로 SVG 차트 만들기Raphael.js로 SVG 차트 만들기
Raphael.js로 SVG 차트 만들기Ohgyun Ahn
 
깃헙으로 코드리뷰 하기
깃헙으로 코드리뷰 하기깃헙으로 코드리뷰 하기
깃헙으로 코드리뷰 하기Ohgyun Ahn
 
Recurrence relation
Recurrence relationRecurrence relation
Recurrence relationOhgyun Ahn
 

More from Ohgyun Ahn (18)

호갱노노 이렇게 만듭니다
호갱노노 이렇게 만듭니다호갱노노 이렇게 만듭니다
호갱노노 이렇게 만듭니다
 
카카오스토리 웹팀의 코드리뷰 경험
카카오스토리 웹팀의 코드리뷰 경험카카오스토리 웹팀의 코드리뷰 경험
카카오스토리 웹팀의 코드리뷰 경험
 
ES6: RegExp.prototype.unicode 이해하기
ES6: RegExp.prototype.unicode 이해하기ES6: RegExp.prototype.unicode 이해하기
ES6: RegExp.prototype.unicode 이해하기
 
Node.js 시작하기
Node.js 시작하기Node.js 시작하기
Node.js 시작하기
 
JavaScript Memory Profiling
JavaScript Memory ProfilingJavaScript Memory Profiling
JavaScript Memory Profiling
 
JavaScript Minification
JavaScript MinificationJavaScript Minification
JavaScript Minification
 
JavaSript Template Engine
JavaSript Template EngineJavaSript Template Engine
JavaSript Template Engine
 
Github Usage Scenarios
Github Usage ScenariosGithub Usage Scenarios
Github Usage Scenarios
 
Javascript hoisting
Javascript hoistingJavascript hoisting
Javascript hoisting
 
diff output formats
diff output formatsdiff output formats
diff output formats
 
BASH Guide Summary
BASH Guide SummaryBASH Guide Summary
BASH Guide Summary
 
Python Usage (5-minute-summary)
Python Usage (5-minute-summary)Python Usage (5-minute-summary)
Python Usage (5-minute-summary)
 
UX 심포지엄 20120 키노트 정리
UX 심포지엄 20120 키노트 정리UX 심포지엄 20120 키노트 정리
UX 심포지엄 20120 키노트 정리
 
크롬익스텐션 맛보기
크롬익스텐션 맛보기크롬익스텐션 맛보기
크롬익스텐션 맛보기
 
재미있는 생산성 향상 도구
재미있는 생산성 향상 도구재미있는 생산성 향상 도구
재미있는 생산성 향상 도구
 
Raphael.js로 SVG 차트 만들기
Raphael.js로 SVG 차트 만들기Raphael.js로 SVG 차트 만들기
Raphael.js로 SVG 차트 만들기
 
깃헙으로 코드리뷰 하기
깃헙으로 코드리뷰 하기깃헙으로 코드리뷰 하기
깃헙으로 코드리뷰 하기
 
Recurrence relation
Recurrence relationRecurrence relation
Recurrence relation
 

패키지 매니저의 요건

  • 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 Management System • List of Software Package Management System • The State of JavaScript Package Management