많은 프로그램들은 각 운영체체에서 자신의 프로그램들이 돌아가기 위해 필요한 프로그램의 묶음을 정의하고 한번에 이를 설치할 수 있도록 하며 이를 **패키지(Package)**라 한다.

패키지는 소프트웨어를 실행하기 위한 모든 파일들의 집합이며, 여기엔 실행파일 뿐만 아니라 설정파일과 라이브러리 등도 포함된다.

동일하게 관리해야 할 패키지가 많아지는 경우 사용자가 일일이 파악하기 어렵기 때문에 주로 **패키지 매니저(Package Manager)**를 사용한다. 리눅스는 대표적인 패키지 매니저인 **APT (Advanced Package Tool)**이 있다.


패키지란?

패키지란?

**리눅스 패키지(Linux Package)**란 리눅스에서 프로그램을 실행하기 위해 필요한 파일들의 집합을 포함하는 설치 파일이다.

패키지는 크게 **소스 패키지(Source Package)**와 **바이너리 패키지(Binary Package)**로 구분된다.

소스 패키지는 사용자가 직접 해당 패키지를 컴파일해야 하므로 설치 시간도 오래 걸리고 컴파일 과정 중 오류가 발생할 확률이 존재한다는 단점이 있다. 하지만 사용자가 소스코드를 자유로이 변경하여 원하는 형태로 프로그램을 개조할 수 있다는 장점도 있다.

바이너리 패키지는 이미 컴파일 된 바이너리를 제공하기 때문에 설치 시간도 적게 걸리고 오류가 발생할 확률도 적다. 다만 컴파일 된 바이너리가 필요로 하는 의존성 파일들을 제대로 제공하지 않는 경우 오류가 발생하는데, 예를 들어 프로세스들을 모니터링할 때 사용하는 htop은 ncurse 관련 패키지가 설치되어 있지 않으면 동작할 수 없고 이를 **패키지 의존성(Package Dependency)**이 있다고 한다.

사용자가 설치 시 모든 패키지 의존성을 고려하기 어렵기 때문에 리눅스는 **패키지 관리자(Package Manager)**를 사용한다. 패키지 관리자를 사용하는 경우 대부분의 바이너리 패키지가 문제 없이 설치되고 동작할 수 있으므로 대부분의 리눅스 패키지는 바이너리 패키지 방식을 채택한다.

패키지 관리자는 크게 **저수준 패키지 관리 도구(Low Level Package Tool)**과 **고수준 패키지 관리 도구(High Level Package Tool)**로 나누어진다.

저수준 패키지 관리 도구dpkg(Debian 계열)와 rpm(Red Hat 계열)가 있다. 저수준 패키지 관리 도구는 단순히 자신의 패키지를 설치, 제거할 목적으로 사용되며 패키지 간 의존성을 고려하지 않는다.

고수준 패키지 관리 도구apt, apt-get(Debian 계열)와 yum, dnf(Red Hat 계열)가 있다. 고수준 패키지는 패키지간 의존성을 관리 도구가 스스로 파악하고 설치한다.

일반적인 상황에서 사용자는 고수준 패키지 관리 도구를 사용한다.


apt & apt-get