RedHat 계열(RHEL, CentOS, Rocky Linux, AlmaLinux) 등 대표적인 패키지 관리자로는 한때 yum이 널리 쓰였지만, 지금은 dnf가 그 자리를 대체하고 있습니다.
이번 글에서는 dnf를 사용하는 이유와 yum과의 차이점, 주로 쓰이는 명령어에 대해 정리해보았습니다.
dnf란?
dnf(Dandified YUM)는 yum의 차세대 버전으로 Python3을 기반으로 새롭게 구현된 패키지 관리 시스템입니다. Red Hat Enterprise Linux 8(RHEL 8)부터는 기본 패키지 매니저로 채택되어, 이제는 yum 명령을 입력해도 사실상 dnf가 실행되도록 되어 있습니다.
[root@localhost ~]# which yum
/usr/bin/yum
[root@localhost ~]# ls -l /usr/bin/yum
lrwxrwxrwx. 1 root root 5 May 3 23:12 /usr/bin/yum -> dnf-3
dnf를 사용하는 이유?
- 성능과 의존성 처리 향상
dnf는 의존성 해결 알고리즘을 보다 정확하게 처리합니다.- 설치, 삭제, 업데이트 시에 의존성 충돌을 더 정교하게 탐지할 수 있어 시스템 안정성이 향상됩니다.
- 캐시 및 메타데이터 관리가 개선되어 속도도 상대적으로 빨라졌습니다.
- Python3 기반
dnf는 Python 3을 기반으로 재작성되어 향후 보안과 기능 측면에서 더 나은 지원이 가능합니다. - 기존의 yum은 python2를 기반으로 하고 있었기 때문에, Python2의 공식 지원 종료 이후 유지보수가 어려워졌습니다.
- 플러그인과 API 확장성ex :
dnf versionlock,dnf changelog,dnf copr등. dnf는 모듈형 구조로 설계되어 다양한 플러그인 기반 확장이 용이합니다.- 더 나은 CLI 인터페이스
dnf는 사용자 친화적인 메시지와 보다 일관성 있는 명령 형식을 제공합니다.
yum과 dnf의 주요 차이점 비교
| 항목 | yum | dnf |
| 기반 언어 | Python 2 | Python 3 |
| 의존성 해결 | 불안정한 경우가 있음 | libsolv 기반 알고리즘 |
| 성능 | 느린 편 | 메타데이터 캐싱 최적화로 빠름 |
| 플러그인 | 제한적 | 다양한 공식/비공식 플러그인 |
| API 및 확장성 | 제한적 | REST API 및 Python API 지원 |
| 보안 지원 | 종료됨 (Python 2 영향) | 지속적인 개선 및 지원 중 |
dnf 명령어 정리
시스템 패키지 업데이트
#전체 시스템 업데이트
dnf upgrade
#특정 패키지만 업데이트
dnf upgrade nginx
패키지 설치 / 삭제
#패키지 설치
dnf install httpd
dnf install nginx mariadb-server php
#패키지 삭제
dnf remove httpd
패키지 검색 및 정보 확인
#패키지 이름으로 검색
dnf search nginx
#패키지 상세 정보 확인
dnf info nginx
→ info의 경우 패키지의 설치 가능 여부, 버전, 저장소 등 상세 정보를 확인합니다.
설치된 패키지 확인
#설치된 패키지 목록 전체 보기
dnf list installed
#특정 패키지가 설치되어 있는지 확인
dnf list installed nginx
특정 패키지 버전 보기 및 설치
#사용 가능한 모든 버전 보기
dnf list --showduplicates nginx
#특정 버전 설치
dnf install nginx-1.20.1-9.module_el8.6.0+1149+56fcc9e0
패키지 그룹 관리
#설치 가능한 그룹 보기
dnf group list
#그룹 설치
dnf group install "Development Tools"
#그룹 삭제
dnf group remove "Development Tools"
dnf는 관련된 패키지를 그룹 단위로 묶어서 설치할 수 있는 기능을 제공합니다.
예를 들어 C, C++ 컴파일 환경을 갖추고 싶다면 Development Tools 그룹을 설치하면 됩니다.
그룹 설치를 진행하게 되면, 해당 그룹에 포함된 컴파일러(gcc, make 등)와 관련 도구들을 일괄 설치합니다.
캐시와 메타데이터 관리
#메타데이터 캐시 생성
dnf makecache
#모든 캐시 삭제 - 디스크 공간 확보, 꼬인 메타데이터 문제 해결에 유용
dnf clean all
dnf 는 패키지 이름, 버전, 설명, 의존성 등 메타데이터를 각 저장소(repo)로부터 받아와 내부 캐시에 저장하고, 이를 통해 빠르게 검색/설치 작업을 수행하게 됩니다.
기본적으로 dnf는 자동으로 필요할 때 캐시를 새로 받아오지만, 대규모 서버 환경이나 자동화 스크립트를 사용하는 경우 명시적으로 makecache를 사용하는 것이 좋습니다.
또한 dnf 가 느리거나 오래 걸릴 때, 캐시가 오래 되었거나 꼬여있을 수 있으므로 초기화 후 새로 갱신하면 됩니다.
저장소 관리
dnf는 .repo 파일을 통해 저장소를 관리합니다. 저장소를 추가하거나 삭제하면 해당 저장소에서 패키지 정보를 받아와 설치/업데이트/삭제 작업을 수행합니다.
저장소 추가 방법
- .repo 파일 수동 생성
sudo vi /etc/yum.repos.d/myrepo.repo [docker-ce-stable] name=Docker CE Stable - $basearch baseurl=https://download.docker.com/linux/rhel/$releasever/$basearch/stable #RPN 파일이 있는 경로 enabled=1 #저장소 사용 유무 gpgcheck=1 #패키지 서명 확인 유무 gpgkey=https://download.docker.com/linux/rhel/gpg - dnf는 저장소의 경로를 /etc/yum.repos.d 경로에 저장합니다.
- config-manager를 이용한 자동 추가.repo 파일을 직접 생성하지 않고 URL 기반으로 등록이 가능합니다.
- 내부적으로는 /etc/yum.repos.d/ 경로 아래에 .repo 파일을 생성해줍니다.
sudo dnf install dnf-plugins-core # config-manager 플러그인이 없다면 설치 sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
저장소 활성화/비활성화
#저장소 비활성화
sudo dnf config-manager --disable <repo-id>
#저장소 활성화
sudo dnf config-manager --enable <repo-id>
→ repo-id는 .repo 파일의 [ ] 섹션에 정의된 이름입니다.
저장소 목록 확인
#현재 활성화된 저장소만 표시
dnf repolist
#비활성 저장소까지 모두 보기
dnf repolist all
저장소 삭제
#수동 삭제
sudo rm /etc/yum.repos.d/<repo>.repo
#repo가 패키지 기반으로 설치된 경우 remove로 삭제 가능
sudo dnf remove epel-release
저장소 우선순위 설정
여러 저장소를 사용하는 경우, 패키지 충돌을 방지하기 위해 priority 값을 설정할 수 있습니다.
.repo 파일에 priority=1 과 같이 추가합니다. 숫자가 낮을 수록 높은 우선순위입니다.
패키지 이력 추적
#설치/제거/업데이트 이력 보기
dnf history
ID | Command line | Date and time | Action(s) | Altered
----------------------------------------------------------------------
2 | install git | 2025-06-23 11:14 | I, U | 69 <
#특정 작업의 상세 정보 보기(Transaction ID)
dnf history info 10
#특정 작업 되돌리기(roll back)
dnf history undo 2
시스템에서 수행된 설치/제거 이력을 확인하고 특정 작업을 간단히 되돌릴 수 있습니다.
dnf는 내부적으로 트랜잭션 로그(/var/log/dnf/history.sqlite)를 관리하고 있으며, 각 트랜잭션 ID에서 어떤 패키지에 어떤 작업이 있었는지를 기록합니다.
undo 명령은 해당 로그를 읽고, 가능한 경우 정확히 반대 동작을 수행합니다.
- install → remove
- remove → install (단, 저장소에 해당 버전이 남아있어야 가능)
- upgrade → downgrade
→ dnf history undo는 트랜잭션 단위의 복구/롤백 기능으로, 의존성 포함, 트랜잭션 전체가 동일하게 반전되도록 설계되어 있습니다. (ex. 트랜잭션에서 설치된 nginx, mariadb-server, php 등 모두 제거)
undo 명령어를 사용할 때 주의할 점
- dnf history undo는 트랜잭션 단위의 복구/롤백 기능으로, 의존성 포함, 트랜잭션 전체가 동일하게 반전되도록 설계되어 있습니다.
- dnf는 undo를 실행하기 전, 의존성 검사를 수행하고 충돌이 있는 경우에는 실패하거나, 사용자에게 경고 후 진행 여부를 묻습니다.
- undo를 이용하여 패키지를 삭제하기 전 의존성 검사를 수행하는 것을 권장합니다.
#패키지의 transaction ID 확인 dnf history #되돌릴 트랜잭션의 상세정보 확인 dnf history info 45 #현재 시스템에 설치된 패키지들 중에, nginx에 의존하는 패키지를 보여줍니다. dnf repoquery --installed --whatrequires nginx rpm -q --whatrequires nginx #제거될 항목과 의존성 정보 확인(실제 제거X) dnf remove nginx --assumeno #되돌리기 실행 dnf history undo 45- 설정 파일 등은 패키지에 따라 삭제되지 않을 수 있습니다. (ex. /etc/nginx 의 설정파일은 남아있음)
- 커널 등 일부 핵심 패키지의 되돌리기는 거부될 수 있습니다.
확장된 dnf의 기능
특정 버전에 패키지 고정 - Versionlock 플러그인
dnf install dnf-plugins-core
#특정 버전에 패키지 고정
dnf versionlock add nginx-1.20.1
#특정 패키지 고정 제거
dnf versionlock delete nginx
특정 버전의 패키지에 lock을 걸어 업데이트 되지 않도록 고정할 수 있습니다.
주로 운영중인 서비스의 패키지 버전을 안정적으로 유지할 떄 유용합니다.
설치된 패키지 변경 로그 보기 - changelog 플러그인
dnf changelog nginx
* Mon Oct 16 12:00:00 AM 2023 Luboš Uhliarik <luhliari@redhat.com> - 1:1.20.1-16
- Resolves: RHEL-12518 - nginx: HTTP/2: Multiple HTTP/2 enabled web servers are
vulnerable to a DDoS attack (Rapid Reset Attack) (CVE-2023-44487)
패키지의 업데이트 내역과 변경사항(commit 메시지 포함)을 확인할 수 있습니다.
보안 패치나 주요 변경 사항 파악에 도움이 됩니다.
참고 자료
https://dnf.readthedocs.io/en/latest/command_ref.html
https://access.redhat.com/solutions/98873
https://dnf-plugins-core.readthedocs.io/en/latest/config_manager.html
'Linux' 카테고리의 다른 글
| nslookup, ss - 네트워크 진단 명령어 (0) | 2025.04.12 |
|---|---|
| nmcli - 네트워크 인터페이스 명령어 (0) | 2025.04.11 |
| ip - 네트워크 명령어 (0) | 2025.04.10 |
| rsync : 파일 백업과 동기화 (0) | 2025.04.09 |
| Nginx LB 서버 - nginx.conf (0) | 2024.03.12 |