윈도우, macOS, 안드로이드와 달리 우분투를 비롯한 리눅스에서는 소프트웨어가 하나의 단일 패키지로 배포되지 않습니다. 대신 애플리케이션을 설치하면 시스템의 패키지 관리자가 메인 앱 패키지뿐만 아니라 해당 앱이 정상적으로 작동하기 위해 필요한 여러 종속성(dependency) 패키지까지 함께 다운로드합니다. 다만 이는 APT 같은 패키지 관리자를 이용한 전통적인 설치 방식에 해당하는 내용입니다.
설치 과정에서 어떤 추가 패키지가 함께 내려오는지 미리 파악할 수 있다면 초보자에게는 시스템 구조를 이해하는 데 큰 도움이 되고, 숙련된 사용자에게는 시스템에 설치되는 패키지를 완벽하게 통제할 수 있는 수단이 됩니다.
이 글에서는 우분투에서 특정 패키지의 종속성을 확인하는 다양한 방법을 소개합니다.
패키지 종속성이란 무엇인가?
종속성이란 리눅스에서 애플리케이션이 올바르게 동작하기 위해 필요한 보조 패키지를 의미합니다. 예를 들어 우분투에서 VLC 미디어 플레이어를 설치하려고 하면, APT는 기본 패키지인 vlc 외에 libc6, gcc 같은 추가 패키지들도 함께 설치합니다. 흥미로운 점은 하나의 종속성 역시 또 다른 패키지들을 자신의 종속성으로 가질 수 있어, 전체적으로 계층 구조(hierarchical structure)를 형성한다는 것입니다.
리눅스 패키지들은 서로 얽혀 있기 때문에 사실상 거의 모든 소프트웨어가 추가 패키지 설치를 요구합니다.
다행히 APT 같은 패키지 관리자가 이런 종속성의 관리와 설치를 자동으로 처리해 주지만, 소스 코드에서 직접 패키지를 빌드할 때는 종속성 누락으로 인한 오류가 발생하기도 합니다. 이 경우 apt install 명령으로 필요한 종속성만 설치해 주면 간단히 해결할 수 있습니다.
리눅스에서 패키지 종속성 확인하는 방법
운 좋게도 우분투에는 특정 패키지의 종속성 목록을 확인할 수 있는 방법이 여러 가지 있습니다. 우분투와 데비안 계열 배포판의 기본 패키지 관리자인 APT는 종속성 정보를 조회할 수 있는 다양한 명령어를 제공합니다.
APT 패키지 관리자 활용하기
APT를 사용하면 패키지와 연관된 종속성 목록을 손쉽게 확인할 수 있습니다. 기본 명령 형식은 다음과 같습니다.
sudo apt depends packagename예를 들어 rhythmbox 패키지의 종속성을 확인하려면 아래처럼 입력합니다.
sudo apt depends rhythmbox출력 결과에는 종속성 목록 외에도 rhythmbox와 함께 설치하면 좋은 추천(recommends) 및 제안(suggests) 패키지들이 함께 표시됩니다.

같은 결과를 얻는 또 다른 방법으로 apt-cache 명령어를 사용할 수도 있습니다.
sudo apt-cache depends rhythmbox특정 패키지에 대해 더 자세한 정보를 보고 싶다면 depends 대신 show 옵션을 사용하세요.
sudo apt show rhythmbox
sudo apt-cache show rhythmbox출력 예시:

dpkg로 종속성 목록 확인하기
DEB 패키지 파일을 직접 다운로드한 뒤, 이 패키지와 함께 어떤 종속성이 설치될지 알고 싶다면 -I(대문자 i이며, 소문자 L과 혼동하지 않도록 주의) 또는 --info 옵션을 사용하면 됩니다.
sudo dpkg -I /path/to/package.deb
sudo dpkg --info /path/to/package.deb여기서 /path/to/package.deb는 DEB 파일의 절대 경로 또는 상대 경로입니다.
출력 결과에는 패키지 크기, 출처 등 유용한 정보와 함께 종속성 목록이 함께 표시됩니다.

반면 이미 시스템에 설치된 패키지의 종속성을 확인하려면 dpkg에 -s 옵션을 붙여 실행합니다. 예시는 다음과 같습니다.
sudo dpkg -s firefox출력 예시:

apt-rdepends 활용하기
더 상세한 출력을 원한다면 apt-rdepends 유틸리티를 사용해 보세요. 이 도구는 대부분의 리눅스 배포판에 기본 탑재되어 있지 않으므로, APT로 직접 설치해야 합니다.
sudo apt install apt-rdepends패키지의 종속성 트리를 확인하려면 아래 명령 형식을 사용합니다.
apt-rdepends packagename예를 들어 vlc 패키지를 조회하면 다음과 같습니다.
apt-rdepends vlc출력 예시:

출력 결과가 일반적으로 매우 긴 이유는, apt-rdepends가 종속성의 완전한 계층 트리를 보여주기 때문입니다. 즉, 종속성의 종속성까지 모두 나열해 줍니다.
반대로 특정 패키지를 종속성으로 필요로 하는 패키지들의 목록도 조회할 수 있습니다. 예를 들어 libc를 종속성으로 요구하는 패키지들을 확인하려면 다음 명령을 사용합니다.
apt-rdepends -r libc출력 예시:

reverse-depends 유틸리티 활용하기
apt-rdepends의 역방향 종속성 기능(-r 옵션)이 생각보다 잘 작동하지만, 패키지의 역방향 종속성을 추출하는 데 쓸 수 있는 또 다른 유틸리티가 있습니다. reverse-depends 명령은 ubuntu-dev-tools 패키지에 포함되어 있으며, 아래 명령으로 설치할 수 있습니다.
sudo apt install ubuntu-dev-tools명령의 기본 형식은 다음과 같습니다.
reverse-depends options packagename여기서 options는 명령과 함께 사용할 수 있는 플래그이고, packagename은 역방향 종속성을 확인하고 싶은 패키지 이름입니다.
위 명령에 다양한 플래그를 추가하면 출력 형식을 조절할 수 있습니다. 가장 유용한 옵션들은 다음과 같습니다.
- -R: 직접적인 종속성만 나열 (추천·제안 패키지 제외)
- -s: 제안(suggested) 패키지 포함
- -l: 스크립트에서 활용하기 좋은 깔끔한 형식으로 출력
도구 사용법을 알기 어렵거나 명령줄 도움말이 필요하다면 --help 또는 -h 플래그를 사용하세요.
reverse-depends -h
reverse-depends --help시뮬레이션 설치/제거로 종속성 목록 얻기
현재 시스템에 설치되어 있지 않은 종속성만 간략하게 목록으로 보고 싶은 사용자라면, 특정 패키지의 시뮬레이션 설치(또는 제거)를 실행해 볼 수 있습니다.
예를 들어 PHP 패키지에 필요한 종속성을 확인하려면 다음 명령을 실행합니다.
sudo apt install -s php출력 결과에는 "다음 추가 패키지가 설치됩니다(The following additional packages will be installed)"라는 섹션이 포함됩니다. 이 섹션 아래에 나열된 패키지 이름들이 바로 시스템에 없던 종속성들입니다.

반대로 이미 우분투에 설치된 패키지의 종속성을 확인하려면, 시뮬레이션 제거를 실행하여 해당 패키지를 삭제할 때 함께 제거되는 추가 패키지들을 살펴보면 됩니다.
sudo apt remove -s packagename예시:
sudo apt remove -s rhythmbox출력 예시:

리눅스 패키지는 서로 의존한다
이 가이드를 통해 짐작할 수 있듯이, 사실상 거의 모든 리눅스 패키지는 다른 패키지에 의존합니다. 이 개념의 핵심 원칙은 리눅스 기반 운영체제에서 각 패키지는 '단 하나의 일'을 하되 그것을 잘 해내야 한다는 것입니다.
예를 들어 오디오 서비스를 관리하도록 개발된 패키지가 있다면, 다른 프로그램들은 자신의 종속성 목록에 해당 패키지를 명시하고 이를 통해 오디오 관련 기능을 충족합니다.
또한 여러 애플리케이션이 동일한 패키지를 필요로 하는 경우에도 시스템에는 한 번만 설치되므로 데이터 중복을 막고 디스크 저장 공간까지 절약할 수 있습니다. 참고로 APT를 사용하면 현재 시스템에 설치된 모든 패키지의 목록도 조회할 수 있습니다.