패키지 매니저(Pakage Manager) 는 패키지를 관리하는 작업을 자동화, 안전처리 하기 위해 사용되는 도구
패키지 관리란? 패키지를 설치, 업데이트, 수정, 삭제 하는 작업
패키지란? 코드의 배포를 위해서 사용되는 코드의 묶음
패키지는 라이브러리와 비슷한 개념이다. 라이브러리는 코드 작성을 위해 필요한 코드모음이며, 패키지는 코드의 배포를 위해 사용되는 코드모음
패키지는 일반적으로 다음을 포함한다 < 라이브러리, 실행파일, 컴파일한 binary, 환경설정(configuration) 정보, 의존성(dependency) 정보 >
패키지 매니저의 공통적인 수행내용은 다음과 같다 < dependency 관리, 패키지 보안관리(신뢰,손상 관련 보장), 기능에 따른 분류, 압축해제, Software repository 로부터 패키기 찾기, 다운로드, 설치, 업데이트 >
의존성이란? 어떤 패키지를 동작하기 위해서 필수적으로 필요한 다른 패키지를 의존성(dependency) 라고 한다
의존성을 수동으로 관리하기는 불가능하다. 수 많은 의존성이 존재하기 때문인데, 그래서 각각 패키지가 자신의 의존성 정보를 가지게 하여 패키지 매니저가 자동으로 설치하도록 한다
Software repository 는 패키지를 저장하고 관리하는 저장소
Software repository 는 성능문제와 위기상황 대처를 위해서 여러개로 분리되어 있으며, 각각의 저장소가 동일한 기능을 수행한다
Software repository에 대한 위치 정보를 관리하는 환경 설정 파일이 존재하므로, 그 경로를 참고하여 접근하는 방식을 사용한다
대표적으로 Ubuntu 운영체제의 apt(Advanced Package Tool) 가 대표적인 운영체제 패키지 매니저이다. 콘솔을 통해 sudo apt install 명령을 사용하면 패키지를 설치할 수 있다
Python과 PHP, Node.js 등 많은 프로그래밍 언어들은 각각 자신만의 패키지 매니저와 software repository를 가지고 있다
각 언어, 패키지 매니저, software repository 는 다음과 같다
1. Python-> pip -> PyPI
2. PHP-> Composer -> Packagist
3. Node.js -> NPM,Yarn -> NPM,Yarn
4. Java -> Maven,Gradle -> Maven
5. Ruby -> RubyGems,Bundler -> RubyGems,Bundler