개요
Ubuntu 환경에서 소프트웨어를 설치하고 관리할 때 기본이 되는 apt-get의 내부 동작 과정을 살펴봅니다. 저장소 인덱스 갱신부터 의존성 해결, 패키지 다운로드 및 캐시 관리까지 실제 터미널 실행 화면과 함께 단계별로 학습합니다.
1. 저장소 메타데이터 갱신과 동작 원리 (apt-get update)
우분투에서 패키지를 다운로드할 원격 저장소(Repository) 주소와 배포판 컴포넌트 정보가 정의된 설정 파일을 확인합니다.
Ubuntu 24.04 noble 버전부터 기본 적용된 deb822 포맷(ubuntu.sources) 또는 기존 sources.list 파일의 내용을 조회하여 apt가 참조하는 저장소 목록을 점검합니다.

apt-get은 데비안 및 우분투 리눅스에서 패키지의 설치, 업데이트, 삭제와 의존성을 관리하는 핵심 패키지 관리 도구입니다.apt-get update 명령어는 설정 파일에 등록된 원격 저장소 서버에 접속하여 최신 패키지 인덱스 정보(메타데이터)를 로컬로 다운로드하여 갱신합니다.
⚙️ [주요 옵션]
-y : 패키지 작업 시 발생하는 확인 질문에 자동으로 yes로 응답합니다.-s : 시스템을 실제로 변경하지 않고 설치나 삭제 과정을 시뮬레이션합니다.-d : 패키지를 설치하지 않고 로컬 캐시 디렉터리에 다운로드만 수행합니다.-q : 진행 상황 출력을 생략하여 화면에 표시되는 로그를 간소화합니다.--purge : 패키지 삭제 시 관련 설정 파일까지 완전히 함께 제거합니다.--fix-broken : 의존성이 깨진 패키지가 있을 때 이를 감지하고 자동으로 복구를 시도합니다.

apt-get update 명령으로 다운로드된 패키지 인덱스 메타데이터 파일들이 /var/lib/apt/lists/ 디렉터리에 정상적으로 저장되었는지 확인합니다.
저장소 URL과 컴포넌트 정보가 파일명으로 인코딩되어 압축 보관되며, 이후 패키지 검색이나 설치 작업 시 이 로컬 캐시 데이터를 기반으로 패키지 정보를 탐색합니다.

2. 의존성 트리 분석과 시뮬레이션 설치 (apt-get install)
apt-cache show 명령어는 로컬 캐시에서 대상 패키지의 상세 메타데이터를 조회합니다.htop의 기본 정보와 버전은 물론 함께 설치되어야 하는 필수 의존성(Depends) 목록을 사전에 확인합니다.

apt-get install 명령에 시뮬레이션 옵션(-s)을 사용하여 시스템 변경 없이 설치 계획을 미리 검증합니다.
패키지 의존성 트리를 분석하여 함께 설치될 추가 라이브러리 목록과 변경 사항을 안전하게 확인합니다.

사전 검증된 계획에 따라 관리자 권한(sudo)과 자동 승인 옵션(-y)을 적용하여 실제 설치를 진행합니다.
원격 저장소로부터 htop과 필수 의존성 패키지를 다운로드하여 시스템에 설치하고 구성을 완료합니다.

3. 다운로드 아카이브 캐시 구조와 디스크 정리 (apt-get clean)
ls -la /var/cache/apt/archives/ 명령어로 패키지 설치 시 다운로드된 .deb 아카이브 파일들이 보관되는 로컬 캐시 디렉터리 내부를 확인합니다.
다운로드 중인 임시 파일이 위치하는 partial 디렉터리와 작업 동시 실행을 방지하는 lock 파일의 존재를 점검합니다.

sudo apt-get clean 명령어를 실행하여 로컬 캐시 디렉터리에 보관 중인 다운로드 완료된 .deb 패키지 파일들을 모두 삭제합니다.
불필요하게 누적된 설치 패키지 아카이브를 비워 시스템의 디스크 여유 공간을 안전하게 확보합니다.

ls -la /var/cache/apt/archives/ 명령어를 다시 실행하여 캐시 정리 작업이 정상적으로 완료되었는지 확인합니다.
패키지 파일들이 정상적으로 삭제되어 디렉터리 내에 기본 시스템 요소인 lock 파일과 partial 디렉터리만 남아있는 상태를 검증합니다.

4. 패키지 삭제와 잔여 설정 정리 (remove vs autoremove)
sudo apt-get remove -y htop 명령어를 실행하여 설치된 htop 패키지의 실행 바이너리를 시스템에서 삭제합니다.
설정 파일은 보존한 채 메인 패키지만 제거되며, 로그에 명시된 것처럼 설치 당시 함께 설치되었던 의존성 패키지들(libnl-3-200, libnl-genl-3-200)은 더 이상 필요하지 않은 고아 상태로 남게 됩니다.

dpkg -l | grep htop || echo 'htop removed successfully' 명령어를 실행하여 시스템 패키지 데이터베이스에서 htop이 정상적으로 제거되었는지 검증합니다.
패키지 조회 결과가 존재하지 않아 뒤쪽의 대체 명령어가 실행되면서 삭제가 성공적으로 완료되었음을 확인합니다.

sudo apt-get autoremove -y 명령어를 실행하여 메인 패키지 삭제 후 시스템에 불필요하게 남아있는 고아 의존성 패키지들을 일괄 정리합니다.
자동 설치 플래그가 설정된 라이브러리들을 추적하여 안전하게 제거함으로써 추가적인 디스크 공간을 확보합니다.

지금까지 우분투 apt-get의 내부 동작 원리와 패키지 관리 메커니즘을 간단하게 정리해보았습니다.
원리를 정확히 이해한 만큼, 앞으로 리눅스 환경에서 패키지 관리와 의존성 문제를 더욱 수월하고 효율적으로 해결해보시기 바랍니다.