리눅스 패키지 관리 이해하기: APT vs. YUM vs. DNF

APT, YUM, DNF를 실용적으로 비교하여 리눅스 패키지 설치, 업데이트, 제거 및 문제 해결 방법을 알아봅니다.

리눅스 패키지 관리 이해하기: APT vs. YUM vs. DNF

Ubuntu, Debian, Fedora, Rocky Linux, AlmaLinux 또는 RHEL 사이를 이동할 때, 패키지 관리는 근육 기억이 깨지는 첫 번째 장소 중 하나입니다. 작업은 모든 곳에서 동일합니다: 소프트웨어 설치, 보안 업데이트 적용, 더 이상 필요하지 않은 항목 제거, 종속성 일관성 유지. 명령어와 파일 위치가 충분히 달라서 잘못된 실행 가이드를 복사하면 시간을 낭비하거나 호스트를 손상시킬 수 있습니다.

APT, YUM 및 DNF는 일반적으로 한 머신에서 선택하는 경쟁 도구가 아닙니다. 이들은 서로 다른 배포판 계열에 속합니다. APT는 Debian 기반 시스템의 일반적인 고급 도구입니다. YUM은 오래된 Red Hat 기반 시스템의 오랜 고급 도구였습니다. DNF는 현재 Fedora, RHEL 8 이상, CentOS Stream, Rocky Linux 및 AlmaLinux의 현대적인 대체 도구입니다.

패키지 관리자란?

핵심적으로 패키지 관리자는 운영 체제에서 소프트웨어 패키지를 설치, 업그레이드, 구성 및 제거하는 프로세스를 자동화하는 소프트웨어 도구 모음입니다. 소스 코드에서 소프트웨어를 컴파일하거나 수동으로 종속성을 관리하는 대신, 패키지 관리자는 소프트웨어 저장소와 상호 작용하여 사전 컴파일된 바이너리를 가져오고 필요한 모든 전제 조건을 자동으로 처리합니다.

패키지 관리자의 주요 기능은 다음과 같습니다:

  • 종속성 해결: 특정 응용 프로그램이 작동하는 데 필요한 모든 라이브러리 및 기타 소프트웨어 패키지를 자동으로 식별하고 설치합니다.
  • 소프트웨어 저장소: 패키지가 저장된 원격 서버(저장소)에 대한 연결을 관리하여 다양한 소프트웨어에 대한 액세스를 보장합니다.
  • 시스템 업그레이드: 개별 패키지 또는 전체 운영 체제의 업데이트를 용이하게 하여 보안 패치 및 새로운 기능이 적용되도록 합니다.
  • 패키지 무결성: 디지털 서명을 사용하여 패키지의 신뢰성과 무결성을 확인하여 변조를 방지합니다.
  • 깔끔한 제거: 소프트웨어가 제거될 때 모든 관련 파일과 종속성이 깔끔하게 제거되어 시스템 복잡성을 피할 수 있도록 합니다.

리눅스 배포판은 일반적으로 두 가지 주요 패키지 형식 중 하나를 사용합니다: Debian 기반 시스템의 경우 .deb, Red Hat 기반 시스템의 경우 .rpm. APT는 .deb 패키지를 관리하고, YUM과 DNF는 .rpm 패키지를 관리합니다.

APT (고급 패키지 도구)

APT는 주로 Debian 및 그 파생 제품(Ubuntu, Linux Mint, Pop!_OS 등)에서 발견되는 .deb 패키지를 관리하기 위한 명령줄 유틸리티입니다. 강력한 종속성 해결과 방대한 소프트웨어 생태계로 유명합니다.

핵심 개념

  • dpkg: apt는 고급 도구인 반면, dpkg는 실제로 개별 .deb 패키지를 설치, 제거 및 관리하는 기본 저수준 도구입니다. APT는 저장소와 종속성을 처리하는 dpkg의 프론트엔드 역할을 합니다.
  • sources.list: /etc/apt/sources.list 파일(및 /etc/apt/sources.list.d/의 파일)은 APT가 패키지를 찾는 데 사용하는 소프트웨어 저장소의 위치를 정의합니다. 이는 공식 저장소, 타사 PPA(개인 패키지 아카이브) 또는 로컬 소스일 수 있습니다.
  • 패키지 구조: 패키지는 .deb 파일로 배포되며, 이는 기본적으로 컴파일된 소프트웨어, 구성 파일 및 메타데이터가 포함된 아카이브입니다.

일반적인 APT 명령어

역사적으로 apt-get이 기본 명령어였지만, apt 명령어(Debian 8 / Ubuntu 16.04 주변에서 도입됨)는 apt-getapt-cache의 가장 일반적인 기능을 결합하여 더 사용자 친화적인 인터페이스를 제공합니다.

작업 apt 명령어 설명
패키지 목록 업데이트 sudo apt update 저장소에서 사용 가능한 패키지 및 해당 버전 목록을 새로 고칩니다.
설치된 패키지 업그레이드 sudo apt upgrade 모든 설치된 패키지를 최신 버전으로 업그레이드합니다. 패키지를 제거하지 않습니다.
전체 시스템 업그레이드 sudo apt full-upgrade 모든 설치된 패키지를 업그레이드하고, 종속성을 해결하기 위해 필요한 경우 이전 패키지를 제거합니다.
패키지 설치 sudo apt install <패키지_이름> 지정된 패키지와 해당 종속성을 설치합니다.
패키지 제거 sudo apt remove <패키지_이름> 패키지를 제거하지만 구성 파일은 유지합니다.
패키지 완전 제거 sudo apt purge <패키지_이름> 패키지와 해당 구성 파일을 제거합니다.
패키지 검색 apt search <키워드> 키워드와 일치하는 패키지를 검색합니다.
패키지 세부 정보 표시 apt show <패키지_이름> 패키지에 대한 자세한 정보를 표시합니다.
오래된 패키지 정리 sudo apt autoremove 더 이상 필요하지 않은 자동으로 설치된 종속성 패키지를 제거합니다.

예제

# 패키지 목록 업데이트
sudo apt update

# 'nginx' 웹 서버 설치
sudo apt install nginx

# 모든 설치된 패키지 업그레이드
sudo apt upgrade

# 'nginx' 및 해당 구성 파일 제거
sudo apt purge nginx

APT의 장점

  • 신뢰할 수 있는 종속성 처리: APT는 시스템을 변경하기 전에 설치, 업그레이드, 유지 또는 제거할 내용을 설명하는 데 능숙합니다.
  • 방대한 저장소 생태계: Debian 및 Ubuntu 저장소는 광범위한 서버 및 데스크탑 소프트웨어를 다룹니다.
  • 예측 가능한 서버 동작: 안정적인 Debian 및 Ubuntu LTS 릴리스는 일반적으로 최신 업스트림 릴리스보다 테스트된 패키지 버전을 우선시합니다.

APT의 단점

  • 최신 소프트웨어 버전: 안정성과 철저한 테스트에 중점을 두기 때문에 공식 저장소의 패키지가 절대 최신 버전이 아닐 수 있습니다.

YUM (Yellowdog 업데이터, 수정됨)

YUM은 Red Hat Enterprise Linux (RHEL) 및 CentOS, Fedora(최근까지), Scientific Linux와 같은 파생 제품의 기본 패키지 관리자였습니다. .rpm (Red Hat 패키지 관리자) 패키지에서 작동합니다.

핵심 개념

  • rpm: dpkg와 유사하게 rpm.rpm 파일을 위한 저수준 패키지 관리 도구입니다. YUM은 고급 프론트엔드 역할을 합니다.
  • .repo 파일: 저장소 구성은 일반적으로 /etc/yum.repos.d/에 있는 .repo 파일에 정의됩니다. 이 파일은 각 저장소의 기본 URL, GPG 키 및 기타 메타데이터를 지정합니다.
  • 패키지 구조: 소프트웨어는 바이너리, 라이브러리 및 메타데이터가 포함된 .rpm 파일로 배포됩니다.

일반적인 YUM 명령어

작업 yum 명령어 설명
업데이트 확인 sudo yum check-update 설치하지 않고 사용 가능한 업데이트를 확인합니다.
모든 패키지 업데이트 sudo yum update 모든 설치된 패키지를 업데이트합니다.
패키지 설치 sudo yum install <패키지_이름> 지정된 패키지와 해당 종속성을 설치합니다.
패키지 제거 sudo yum remove <패키지_이름> 패키지를 제거합니다.
패키지 검색 yum search <키워드> 키워드와 일치하는 패키지를 검색합니다.
패키지 세부 정보 표시 yum info <패키지_이름> 패키지에 대한 자세한 정보를 표시합니다.
캐시된 파일 정리 sudo yum clean all 캐시된 저장소 메타데이터와 패키지를 정리합니다.

예제

# 사용 가능한 업데이트 확인
sudo yum check-update

# 'httpd' (Apache) 웹 서버 설치
sudo yum install httpd

# 모든 설치된 패키지 업데이트
sudo yum update

# 'httpd' 제거
sudo yum remove httpd

YUM의 장점

  • 성숙한 엔터프라이즈 동작: YUM은 여전히 오래된 RHEL 및 CentOS 시스템에서 일반적이므로 레거시 실행 가이드에서 볼 수 있습니다.
  • 트랜잭션 기록: yum history는 이전 설치, 업데이트 및 제거를 표시할 수 있습니다. 경우에 따라 트랜잭션을 취소하거나 롤백할 수 있지만, 구성 파일, 서비스 상태 및 외부 데이터가 마법처럼 복원되지 않으므로 신중하게 테스트해야 합니다.

YUM의 단점

  • 성능: 특히 대규모 저장소나 복잡한 종속성 트리의 경우 최신 패키지 관리자(DNF)에 비해 느릴 수 있습니다.
  • 대체 중: 최신 RHEL 기반 시스템(RHEL 8+)에서는 DNF가 기본 패키지 관리자로 YUM을 대체했지만, yum은 여전히 dnf의 별칭으로 작동하는 경우가 많습니다.

DNF (Dandified YUM)

DNF는 Red Hat 기반 배포판을 위한 차세대 패키지 관리자로, YUM의 후속 제품입니다. Fedora(버전 18부터), RHEL 8+, CentOS Stream, AlmaLinux 및 Rocky Linux에서 기본값입니다. DNF는 YUM의 많은 단점을 해결하여 향상된 성능과 종속성 해결을 제공합니다.

핵심 개념

  • libsolv: DNF는 종속성 해결을 위해 libsolv를 사용하며, 이는 고도로 최적화되어 YUM의 이전 솔버보다 훨씬 더 나은 성능을 제공합니다.
  • 모듈성: RHEL 8+ 및 Fedora의 주요 기능으로, 모듈성을 통해 소프트웨어 패키지의 다른 버전 또는 스트림(예: Python 3.6 대 Python 3.8)을 동시에 사용할 수 있으며, 사용자는 설치할 항목을 선택할 수 있습니다.
  • 호환성: DNF는 YUM과 대체로 호환되는 명령줄 인터페이스를 유지하여 사용자의 전환을 더 쉽게 만듭니다.

일반적인 DNF 명령어

많은 DNF 명령어는 YUM 명령어와 동일하거나 매우 유사합니다.

작업 dnf 명령어 설명
업데이트 확인 sudo dnf check-update 설치하지 않고 사용 가능한 업데이트를 확인합니다.
모든 패키지 업데이트 sudo dnf update 모든 설치된 패키지를 업데이트합니다.
패키지 설치 sudo dnf install <패키지_이름> 지정된 패키지와 해당 종속성을 설치합니다.
패키지 제거 sudo dnf remove <패키지_이름> 패키지를 제거합니다.
패키지 검색 dnf search <키워드> 키워드와 일치하는 패키지를 검색합니다.
패키지 세부 정보 표시 dnf info <패키지_이름> 패키지에 대한 자세한 정보를 표시합니다.
캐시된 파일 정리 sudo dnf clean all 캐시된 저장소 메타데이터와 패키지를 정리합니다.
사용 가능한 모듈 나열 dnf module list 사용 가능한 소프트웨어 모듈 스트림을 나열합니다.
모듈 활성화 sudo dnf module enable <모듈> 특정 모듈 스트림을 활성화합니다.

예제

# 사용 가능한 업데이트 확인
sudo dnf check-update

# 'mariadb-server' 데이터베이스 설치
sudo dnf install mariadb-server

# 모든 설치된 패키지 업데이트
sudo dnf update

# 사용 가능한 Node.js 모듈 스트림 나열
dnf module list nodejs

# Node.js 16 모듈 스트림 활성화(사용 가능한 경우)
sudo dnf module enable nodejs:16

# 'mariadb-server' 제거
sudo dnf remove mariadb-server

DNF의 장점

  • 향상된 종속성 해결: DNF는 libsolv를 사용하여 일반적으로 이전 YUM 동작보다 복잡한 종속성 선택을 더 빠르고 명확하게 처리합니다.
  • 더 깔끔한 출력 및 API: DNF는 많은 관리 워크플로에서 이전 YUM보다 스크립팅하기 쉽습니다.
  • 모듈성: 동일한 시스템 내에서 다른 버전의 소프트웨어를 설치할 수 있는 유연성을 제공합니다.
  • 현대적인 디자인: 확장을 위한 명확한 API와 더 깔끔한 코드로 구축되었습니다.

DNF의 단점

  • 최신 기술: 안정적이지만, 특히 모듈성과 관련된 일부 기능은 새로운 사용자에게 약간 더 가파른 학습 곡선이 필요할 수 있습니다.

주요 차이점 및 사용 사례

APT와 YUM/DNF의 근본적인 차이점은 제공하는 배포판 계열과 처리하는 패키지 형식에 있습니다.

기능 APT (Debian/Ubuntu) YUM/DNF (RHEL/Fedora)
패키지 형식 .deb (Debian 패키지) .rpm (Red Hat 패키지)
기본 도구 dpkg rpm
구성 파일 /etc/apt/sources.list /etc/yum.repos.d/*.repo
주요 배포판 Debian, Ubuntu, Mint, Pop!_OS RHEL, Fedora, CentOS, AlmaLinux, Rocky Linux
종속성 해결사 내부 (강력하고 잘 테스트됨) YUM: 내부 (느림); DNF: libsolv (더 빠르고 현대적)
진화 apt-get -> apt yum -> dnf
모듈성 직접 내장되지 않음 (유연성을 위해 PPA 사용) DNF는 여러 버전을 위한 module 스트림 제공
  • APT는 견고한 안정성, 광범위한 커뮤니티 지원 및 방대한 소프트웨어 저장소를 우선시하는 사용자 및 관리자에게 이상적입니다. 서버와 데스크탑 모두에서 인기 있는 Debian 기반 시스템의 표준입니다.
  • YUM은 수년간 엔터프라이즈 환경에서 그 목적을 잘 수행하여 소프트웨어 관리를 위한 안정적이고 검증된 방법을 제공했습니다. 별칭으로 여전히 존재하지만 직접적인 사용은 단계적으로 폐지되고 있습니다.
  • DNF는 Red Hat 기반 시스템의 현대적인 표준입니다. 최신 RHEL, Fedora 또는 그 파생 제품을 실행하는 사람들을 위한 선택으로, 성능, 고급 종속성 해결 및 모듈성과 같은 기능을 제공하여 특정 소프트웨어 버전이 필요한 개발 및 프로덕션 환경에 탁월합니다.

패키지 관리 모범 사례

사용 중인 패키지 관리자에 관계없이 모범 사례를 준수하면 건강하고 안전한 시스템을 보장할 수 있습니다:

  • 정기적인 업데이트: 보안 패치 및 버그 수정을 적용하려면 주기적으로 sudo apt update && sudo apt upgrade 또는 sudo dnf update를 실행하십시오.
  • 설치 전 이해: 특히 타사 저장소에서 패키지를 설치하기 전에 패키지가 무엇을 하는지와 평판을 항상 확인하십시오.
  • 저장소 소스 확인: 추가된 저장소가 신뢰할 수 있는지 확인하여 악의적이거나 불안정한 소프트웨어를 설치하지 않도록 하십시오.
  • 정리: sudo apt autoremove 또는 sudo dnf autoremove를 사용하여 고아 종속성을 제거하고 디스크 공간을 확보하십시오.
  • apt show 또는 dnf info 검토: 설치하기 전에 이러한 명령어를 사용하여 종속성 및 크기를 포함한 패키지에 대한 세부 정보를 얻으십시오.
  • 중요 시스템 백업: 주요 업그레이드(예: apt full-upgrade 또는 배포판 업그레이드)를 수행하기 전에 중요 데이터 및 구성의 백업이 있는지 확인하십시오.

패키지 관리자 문제 해결

대부분의 패키지 관리자 오류는 저장소 메타데이터, 종속성 충돌 및 로컬 패키지 데이터베이스 상태의 세 가지 범주로 분리하면 신비롭지 않습니다.

APT가 패키지를 찾을 수 없다고 말하면 sudo apt update로 시작하십시오. APT는 모든 설치에 대해 모든 원격 저장소를 새로 쿼리하지 않습니다. 로컬 메타데이터를 사용합니다. 패키지가 최근에 추가되었거나 시스템이 한동안 목록을 새로 고치지 않은 경우 저장소가 올바르더라도 설치가 실패할 수 있습니다. apt update 자체가 실패하면 오류의 저장소 줄을 읽으십시오. 오래된 PPA, 만료된 서명 키, 손상된 미러 또는 지원되지 않는 배포판 코드명이 종종 실제 문제입니다.

DNF 또는 YUM 시스템에서 동등한 첫 번째 이동은 일반적으로 다음과 같습니다:

sudo dnf makecache
sudo dnf repolist

이전 시스템:

sudo yum makecache
sudo yum repolist

repolist는 저장소가 전혀 활성화되어 있는지 확인하기 때문에 유용합니다. 패키지는 EPEL, CodeReady Builder, PowerTools, CRB 또는 공급업체 저장소에서 사용 가능할 수 있지만 기본 OS 저장소에서는 사용할 수 없습니다. 이 경우 수정 방법은 웹에서 임의의 RPM을 다운로드하는 것이 아닙니다. 더 깔끔한 수정은 올바른 저장소를 활성화하고 패키지 관리자가 종속성을 처리하도록 하는 것입니다.

종속성 충돌은 더 많은 주의가 필요합니다. APT가 시스템의 많은 부분을 제거하도록 제안하면 중지하고 트랜잭션을 읽으십시오. dnf remove에도 동일하게 적용됩니다. 패키지를 제거하면 패키지에 의존하는 서비스가 제거될 수 있습니다. 서버에서는 트랜잭션을 수락하기 전에 제안된 트랜잭션을 인시던트 노트에 복사하는 것을 좋아합니다. 이렇게 하면 이후에 서비스가 중단될 경우 변경된 사항에 대한 기록이 제공됩니다.

중단된 설치의 경우 수동 정리를 시도하기 전에 기본 복구 명령어를 사용하십시오:

# Debian/Ubuntu
sudo dpkg --configure -a
sudo apt -f install

# Fedora/RHEL 계열
sudo dnf check
sudo dnf history

/var/lib/dpkg, /var/lib/rpm, /var/cache/apt 또는 /var/cache/dnf 아래의 수동 삭제는 최후의 수단이어야 합니다. 해당 디렉토리는 패키지 관리자 상태이지 일반적인 정크가 아닙니다.

실용적인 변환 치트 시트

다른 리눅스 계열용으로 작성된 문서를 따를 때는 명령어뿐만 아니라 의도를 변환하십시오.

작업 Debian/Ubuntu Fedora/RHEL 계열
저장소 메타데이터 새로 고침 sudo apt update sudo dnf makecache
설치된 패키지 업그레이드 sudo apt upgrade sudo dnf upgrade 또는 sudo dnf update
패키지 설치 sudo apt install nginx sudo dnf install nginx
패키지 제거 sudo apt remove nginx sudo dnf remove nginx
패키지 및 구성 제거 sudo apt purge nginx 정확한 동등 항목 없음; 패키지 스크립트가 구성/데이터를 남길 수 있음
패키지 검색 apt search nginx dnf search nginx
패키지 정보 표시 apt show nginx dnf info nginx
설치된 패키지 나열 apt list --installed dnf list installed
패키지 파일 보기 dpkg -L nginx rpm -ql nginx
파일 소유 패키지 찾기 dpkg -S /경로/파일 rpm -qf /경로/파일

마지막 쌍은 과소평가됩니다. 호스트에서 이상한 바이너리나 구성 파일을 발견하면 dpkg -S 또는 rpm -qf가 어떤 패키지가 소유하고 있는지 알려줍니다. 어떤 패키지도 소유하지 않은 경우 파일이 응용 프로그램, 배포 스크립트, 관리자 또는 공격자에 의해 생성되었을 수 있습니다. 이것만으로는 아무것도 증명되지 않지만 더 나은 다음 질문을 제공합니다.

패키지 관리에 대해 생각하는 가장 안전한 방법은 간단합니다: 배포판이 예상하는 도구 내에 머물고, 트랜잭션을 수락하기 전에 읽고, 타사 저장소를 프로덕션 종속성으로 취급하십시오. 저장소 파일이 어디에 있는지와 패키지 소유권을 검사하는 방법을 알게 되면 APT, YUM 및 DNF는 훨씬 덜 다른 세계처럼 느껴집니다.