Skip to main content

소프트웨어 설치와 패키지 관리

Views 144약 11분생성형 AI 활용
Summary

지난 장에서 터미널을 다루며 command not found라는 메시지를 만날 수 있다고 했습니다. 이 메시지는 대개 두 가지 뜻입니다. 하나는 명령어를 잘못 입력했다는 뜻이고, 다른 하나는 그 명령어를 제공하는 프로그램이 아직 설치되어 있지 않다는 뜻입니다. 예를 들어 htop이라고 입력했는데 실행되지 않는다면, 우분투가 "그런 명령은 아직 없어"라고 말하는 셈입니다.

여기서부터 패키지 관리가 시작됩니다. 우분투에서 프로그램을 설치하는 일은 인터넷에서 아무 파일이나 내려받아 더블 클릭하는 일과 조금 다릅니다. 우분투는 "저장소"라는 안전한 창고에서 프로그램을 가져오고, 필요한 부품까지 함께 챙겨 설치합니다. 이 일을 맡는 도구가 바로 패키지 관리자입니다.

패키지 관리를 이해하면 우분투 생활이 갑자기 편해집니다. 필요한 앱을 찾고, 설치하고, 업데이트하고, 지우는 과정이 한 줄 명령으로 정리됩니다. 더 중요한 점은 시스템을 지저분하게 만들지 않고, 비교적 안전하게 관리할 수 있다는 것입니다.

소프트웨어 설치와 패키지 관리

패키지란 무엇인가

패키지는 프로그램을 설치하기 좋게 묶어 둔 꾸러미입니다. 꾸러미 안에는 실행 파일뿐 아니라 설명서, 아이콘, 설정 파일, 의존성 정보가 들어 있습니다. 여기서 의존성이란 어떤 프로그램이 실행되기 위해 필요한 다른 프로그램이나 라이브러리를 말합니다. 라이브러리는 여러 프로그램이 함께 쓰는 공용 부품이라고 생각하면 됩니다.

예를 들어 동영상 플레이어 하나를 설치한다고 해 보겠습니다. 겉으로 보기에는 "플레이어 앱 하나"이지만 실제로는 영상 코덱, 소리 출력 관련 라이브러리, 자막 처리 기능, 그래픽 표시 기능이 필요할 수 있습니다. 이런 부품을 사용자가 하나씩 찾아 설치한다면 금방 지칠 것입니다. 패키지 관리자는 이 관계를 읽고 필요한 부품을 자동으로 설치합니다.

우분투에서는 여러 종류의 패키지 형식을 만납니다. 처음에는 이름이 많아 헷갈릴 수 있지만, 역할을 나누어 보면 그리 어렵지 않습니다.

방식주로 다루는 형식특징어울리는 상황
APT.deb우분투의 기본 패키지 관리 방식. 저장소에서 내려받고 의존성을 자동 처리시스템 도구, 서버 프로그램, 일반적인 명령줄 프로그램
dpkg.deb낮은 수준의 도구. 로컬 .deb 파일을 직접 설치·조회 가능하지만 의존성 자동 해결은 약함패키지 상태 확인, 고급 점검, 특수한 .deb 처리
Snap.snap앱과 필요한 구성 요소를 함께 묶고 샌드박스 방식으로 실행. 우분투에 기본 포함데스크톱 앱, 개발 도구, 최신 앱을 간단히 설치할 때
FlatpakFlatpak 앱리눅스 배포판을 가리지 않는 데스크톱 앱 배포 방식. Flathub와 함께 많이 사용그래픽 앱을 배포판과 독립적으로 설치할 때
AppImage.AppImage설치 과정 없이 실행 파일처럼 내려받아 실행포터블 앱, 잠깐 써 볼 프로그램, 설치 흔적을 줄이고 싶을 때

가장 먼저 익혀야 할 것은 APT입니다. 우분투의 뼈대가 되는 패키지 관리 방식이기 때문입니다. Snap, Flatpak, AppImage는 그다음에 "상황에 따라 고르는 선택지"로 이해하면 좋습니다.

우분투 앱 설치의 큰 그림

우분투에서 앱을 설치하는 방법은 크게 그래픽 방식과 터미널 방식으로 나눌 수 있습니다.

그래픽 방식은 App Center나 Software 앱을 여는 것입니다. 휴대폰의 앱 스토어처럼 검색하고 설치 버튼을 누르면 됩니다. 초보자에게 가장 편합니다. 다만 같은 앱이라도 Snap 버전인지, DEB 버전인지에 따라 설치 방식과 실행 특성이 달라질 수 있습니다.

터미널 방식은 명령어로 설치하는 것입니다. 처음에는 딱딱해 보이지만, 익숙해지면 매우 빠릅니다. 예를 들어 VLC 동영상 플레이어를 설치하려면 다음처럼 입력합니다.

sudo apt install vlc

이 한 줄은 단순히 vlc라는 파일 하나를 복사하는 명령이 아닙니다. APT가 저장소에서 패키지 정보를 확인하고, 필요한 의존성을 계산하고, 다운로드하고, 설치 후 등록까지 처리합니다.

여기서 sudo는 관리자 권한으로 실행하겠다는 뜻입니다. 시스템 전체에 프로그램을 설치하거나 제거하는 작업은 일반 사용자 권한으로 할 수 없습니다. 그래서 우분투는 비밀번호를 물어보고, 허락받은 사용자만 중요한 변경을 하게 합니다.

앞으로 자주 보게 될 기본 흐름은 다음과 같습니다.

sudo apt update
sudo apt install 패키지이름

첫 줄은 저장소의 최신 목록을 가져오는 작업이고, 둘째 줄은 실제 설치입니다. 이 둘의 차이를 이해하는 것이 APT 사용의 첫 관문입니다.

APT: 우분투 패키지 관리의 중심

APT는 Advanced Package Tool의 줄임말입니다. 우분투와 데비안 계열 리눅스에서 .deb 패키지를 설치, 업데이트, 제거하는 대표 도구입니다. 우분투 공식 문서에서도 Debian 패키지, 즉 deb 파일을 설치하고 관리하는 권장 방식으로 APT를 설명합니다.1

APT가 하는 일은 크게 네 가지입니다. 패키지 목록을 가져오고, 패키지를 설치하고, 설치된 패키지를 최신 상태로 올리고, 더 이상 필요 없는 패키지를 제거합니다.

저장소는 인터넷에 있는 패키지 창고입니다. 우분투는 기본 저장소 정보를 바탕으로 "어떤 패키지를 어디서 받을 수 있는지"를 압니다. Ubuntu 24.04 LTS 기준으로 저장소 정보는 주로 /etc/apt/sources.list.d/ 아래에 있으며, 우분투 기본 저장소는 ubuntu.sources 파일에 정의됩니다.1

초보자는 이 파일을 직접 수정할 일이 많지 않습니다. 하지만 저장소라는 개념은 꼭 기억해야 합니다. APT는 아무 곳에서나 프로그램을 가져오는 것이 아니라, 등록된 저장소에서 패키지를 가져옵니다. 등록된 저장소가 신뢰할 만할수록 설치도 안전해집니다.

sudo apt update와 sudo apt upgrade의 차이

우분투를 쓰다 보면 가장 많이 듣는 조합이 있습니다.

sudo apt update
sudo apt upgrade

둘은 이름이 비슷하지만 역할은 완전히 다릅니다.

sudo apt update는 패키지 목록을 갱신합니다. 실제 프로그램을 업데이트하지는 않습니다. 쉽게 말해 마트에 가기 전 "오늘 가격표와 재고표를 새로 받아 오는 일"입니다. 내 컴퓨터에 설치된 프로그램은 아직 바뀌지 않습니다.

sudo apt update

sudo apt upgrade는 실제로 설치된 패키지를 새 버전으로 업그레이드합니다. 앞에서 갱신한 목록을 보고 "내 컴퓨터에 설치된 것 중 새 버전이 있네?"라고 판단한 뒤 업데이트를 진행합니다.

sudo apt upgrade

따라서 업데이트의 기본 순서는 보통 이렇습니다.

sudo apt update
sudo apt upgrade

첫 번째 명령으로 최신 목록을 받고, 두 번째 명령으로 실제 업그레이드를 합니다. apt update만 실행하고 끝내면 "업데이트할 수 있는지 확인만 한 상태"입니다. 반대로 오래된 목록 상태에서 apt upgrade를 실행하면 최신 정보를 반영하지 못할 수 있습니다.

업그레이드할 패키지가 많으면 APT가 다음처럼 물어봅니다.

Do you want to continue? [Y/n]

계속하려면 Y 또는 그냥 Enter를 누르면 됩니다. 여기서 목록을 대충 넘기지 말고 한 번 훑어보는 습관을 들이면 좋습니다. 특히 중요한 작업을 하는 컴퓨터라면 업그레이드 전에 열어 둔 문서를 저장하고, 가능하면 재부팅할 시간까지 확보해 두는 편이 안전합니다.

apt install로 프로그램 설치하기

패키지를 설치하는 기본 명령은 간단합니다.

sudo apt install 패키지이름

예를 들어 터미널 기반 시스템 모니터링 도구인 htop을 설치해 보겠습니다.

sudo apt update
sudo apt install htop

설치가 끝나면 다음처럼 실행할 수 있습니다.

htop

빠져나오려면 q 키를 누릅니다. 이렇게 설치한 프로그램은 메뉴에 나타나기도 하고, 터미널 명령으로 실행되기도 합니다. 어떤 패키지는 그래픽 앱이고, 어떤 패키지는 명령줄 도구이며, 어떤 패키지는 백그라운드 서비스입니다.

여러 패키지를 한 번에 설치할 수도 있습니다.

sudo apt install curl wget git

이 명령은 curl, wget, git을 한 번에 설치합니다. 공백으로 구분하면 됩니다.

패키지를 설치할 때 APT가 "추가로 이런 패키지도 설치됩니다"라고 알려 줄 때가 있습니다. 이것이 의존성입니다. 겁먹을 필요는 없습니다. 대부분은 선택한 프로그램이 제대로 작동하기 위해 필요한 부품입니다. 다만 모르는 패키지가 너무 많이 설치되거나 제거된다고 나오면 잠시 멈추고 확인하는 것이 좋습니다.

remove, purge, autoremove의 차이

프로그램을 지우는 일도 설치만큼 중요합니다. 우분투에서 패키지를 지울 때 자주 쓰는 명령은 remove, purge, autoremove입니다. 세 명령은 비슷해 보이지만 지우는 범위가 다릅니다.

먼저 remove는 프로그램 파일을 제거합니다. 하지만 설정 파일은 남겨 둡니다.

sudo apt remove htop

이 방식은 나중에 같은 프로그램을 다시 설치할 가능성이 있을 때 유용합니다. 이전 설정을 유지할 수 있기 때문입니다.

purge는 프로그램 파일뿐 아니라 시스템에 남은 설정 파일까지 제거합니다.

sudo apt purge htop

프로그램을 완전히 초기화하고 싶거나, 다시 설치할 때 예전 설정을 가져오고 싶지 않다면 purge가 더 적절합니다. 다만 중요한 설정을 지울 수 있으므로 서버 프로그램이나 복잡하게 설정한 도구에는 신중하게 써야 합니다. 우분투 공식 문서도 apt remove에 --purge 옵션을 붙이면 설정 파일까지 제거된다고 설명하며, 원하는 동작인지 주의해서 사용하라고 안내합니다.1

autoremove는 더 이상 필요하지 않은 의존성 패키지를 정리합니다.

sudo apt autoremove

예를 들어 어떤 프로그램 A를 설치할 때 부품 B와 C가 함께 설치되었다고 합시다. 나중에 A를 삭제했는데 B와 C를 다른 프로그램이 쓰지 않는다면, B와 C는 고아처럼 남습니다. autoremove는 이런 패키지를 찾아 제거합니다.

삭제 작업에서 많이 쓰는 조합은 다음과 같습니다.

sudo apt remove 패키지이름
sudo apt autoremove

완전히 지우고 싶다면 이렇게 할 수 있습니다.

sudo apt purge 패키지이름
sudo apt autoremove

무엇을 지우든 APT가 보여 주는 제거 목록을 확인한 뒤 진행하세요. 특히 ubuntu-desktop, gnome-shell, network-manager처럼 시스템 핵심으로 보이는 패키지가 제거 목록에 보인다면 그대로 진행하지 말고 멈춰야 합니다.

패키지 검색하기: apt search와 apt show

우리가 설치하려는 프로그램의 정확한 패키지 이름을 항상 알고 있는 것은 아닙니다. 이럴 때 apt search를 씁니다.

apt search 키워드

예를 들어 이미지 편집 프로그램을 찾고 싶다면 다음처럼 검색할 수 있습니다.

apt search image editor

또는 특정 이름으로 찾아볼 수도 있습니다.

apt search gimp

검색 결과에는 패키지 이름과 짧은 설명이 함께 나옵니다. 여기서 중요한 것은 "앱 이름"과 "패키지 이름"이 항상 같지는 않다는 점입니다. 어떤 앱은 메뉴에는 멋진 이름으로 보이지만, 패키지 이름은 더 짧거나 다른 이름일 수 있습니다.

패키지의 자세한 정보를 보려면 apt show를 사용합니다.

apt show 패키지이름

예를 들어 vlc 정보를 보려면 다음처럼 입력합니다.

apt show vlc

여기에는 버전, 설명, 다운로드 크기, 설치 후 차지하는 용량, 의존성, 저장소 정보 등이 나옵니다. 설치 전에 "이 패키지가 내가 찾던 것이 맞나?"를 확인하기 좋습니다.

설치 여부 확인하기: apt list와 dpkg -l

이미 설치되어 있는지 확인하고 싶을 때는 apt list --installed를 사용할 수 있습니다.

apt list --installed

출력이 너무 많다면 grep과 함께 쓰면 됩니다. grep은 특정 문자열이 들어간 줄만 골라 보여 주는 도구입니다.

apt list --installed | grep firefox

dpkg -l도 설치된 패키지를 확인할 때 자주 씁니다.

dpkg -l

특정 패키지만 찾으려면 이렇게 합니다.

dpkg -l | grep vlc

apt list --installed는 APT 관점에서 보기 좋고, dpkg -l은 더 낮은 수준의 패키지 데이터베이스를 직접 조회하는 느낌에 가깝습니다. 둘 다 자주 쓰이므로 익숙해지면 좋습니다.

업그레이드 가능한 패키지를 보고 싶다면 다음 명령을 사용합니다.

apt list --upgradable

이 명령은 "지금 업그레이드할 수 있는 패키지 목록"을 보여 줍니다. 실제 업그레이드는 하지 않습니다.

dpkg는 언제 사용할까

dpkg는 데비안 계열 시스템의 낮은 수준 패키지 도구입니다. APT가 더 편한 도구라면, dpkg는 그 아래에서 .deb 패키지를 직접 다루는 도구라고 볼 수 있습니다. 우분투 공식 문서도 dpkg가 Debian 기반 시스템의 패키지 관리자이며, 설치·제거·빌드가 가능하지만 APT처럼 패키지와 의존성을 자동으로 다운로드하고 설치하지는 않는다고 설명합니다.1

패키지 목록을 볼 때는 다음 명령을 씁니다.

dpkg -l

패키지가 설치한 파일 목록을 보고 싶다면 다음처럼 합니다.

dpkg -L 패키지이름

예를 들어 ufw 패키지가 설치한 파일을 보려면 다음과 같습니다.

dpkg -L ufw

어떤 파일이 어느 패키지에 속하는지 알고 싶을 때는 dpkg -S를 씁니다.

dpkg -S /경로/파일이름

예를 들어 /etc/host.conf 파일이 어느 패키지에 속하는지 확인하려면 다음처럼 입력합니다.

dpkg -S /etc/host.conf

이런 명령은 문제 해결에 특히 유용합니다. "이 파일은 누가 설치한 거지?"라는 질문에 답해 주기 때문입니다.

다만 패키지 설치와 제거는 가능하면 APT를 우선으로 쓰세요. dpkg는 의존성을 자동으로 해결하지 못하기 때문에 잘못 사용하면 패키지 상태가 꼬일 수 있습니다. 로컬 .deb 파일도 요즘은 dpkg -i보다 apt install ./파일명.deb 방식이 더 편합니다.

다운로드한 .deb 파일 설치하기

어떤 프로그램은 우분투 공식 저장소에 없어서 개발사 홈페이지에서 .deb 파일로 제공됩니다. 예를 들어 브라우저, 메신저, 코드 편집기, 클라우드 동기화 도구 등이 이런 방식으로 배포되기도 합니다.

.deb 파일을 받았다면 먼저 다운로드 폴더로 이동합니다.

cd ~/Downloads

현재 폴더의 파일을 확인합니다.

ls

파일 이름이 example_1.0_amd64.deb라고 해 보겠습니다. 설치는 다음처럼 합니다.

sudo apt install ./example_1.0_amd64.deb

여기서 ./가 중요합니다. 이것은 "현재 폴더에 있는 파일"이라는 뜻입니다. ./를 빼고 쓰면 APT가 로컬 파일이 아니라 저장소에 있는 패키지 이름으로 해석하려 할 수 있습니다.

APT로 로컬 .deb를 설치하면 좋은 점은 의존성 처리를 도와준다는 것입니다. .deb 파일 자체는 내 컴퓨터에 있지만, 그 프로그램에 필요한 다른 패키지가 우분투 저장소에 있으면 APT가 함께 설치하려고 합니다.

가끔 설치 중 의존성 문제가 날 수 있습니다. 예전 방식으로 다음처럼 설치했을 때 특히 자주 만납니다.

sudo dpkg -i example_1.0_amd64.deb

dpkg는 파일 자체는 설치하려 하지만, 필요한 의존성을 자동으로 가져오지 못합니다. 그래서 오류가 난 뒤 다음 명령으로 부족한 의존성을 고치곤 합니다.

sudo apt install -f

또는 더 명시적으로 다음 명령을 사용할 수 있습니다.

sudo apt --fix-broken install

하지만 초보자라면 처음부터 다음 방식을 추천합니다.

sudo apt install ./파일명.deb

이 방식이 더 깔끔하고, APT가 전체 패키지 상태를 고려해 설치를 진행하기 때문입니다.

설치가 끝난 뒤에는 파일을 꼭 보관할 필요는 없습니다. 같은 프로그램이 자체 저장소를 등록했다면 이후 업데이트는 APT로 받을 수 있고, 그렇지 않다면 새 버전의 .deb 파일을 다시 내려받아 설치해야 합니다.

Snap: 우분투의 또 다른 앱 설치 방식

Snap은 Canonical이 중심이 되어 만든 패키지 형식입니다. 우분투 데스크톱에는 기본적으로 Snap 지원이 들어 있습니다. Snap 앱은 필요한 구성 요소를 함께 묶어 배포하는 경우가 많고, 앱을 시스템과 어느 정도 분리해서 실행하는 샌드박스 개념을 사용합니다. 샌드박스란 앱이 시스템 전체를 마음대로 건드리지 못하게 울타리를 치는 방식이라고 이해하면 됩니다.

Snap 패키지를 검색하려면 다음 명령을 사용합니다.

snap find 키워드

예를 들어 메모 앱을 찾아보려면 다음처럼 할 수 있습니다.

snap find notes

설치는 다음과 같습니다.

sudo snap install 패키지이름

설치된 Snap 목록은 이렇게 확인합니다.

snap list

패키지 정보를 보려면 다음 명령을 씁니다.

snap info 패키지이름

삭제는 다음처럼 합니다.

sudo snap remove 패키지이름

Snap의 장점은 설치가 쉽고, 여러 우분투 버전에서 비교적 일관되게 앱을 제공할 수 있다는 점입니다. 자동 업데이트도 중요한 특징입니다. 반면 앱 크기가 상대적으로 클 수 있고, 일부 앱은 처음 실행이 약간 느리게 느껴질 수 있습니다. 또한 파일 접근 권한이나 외부 장치 접근 권한이 일반 APT 앱과 다르게 동작할 수 있습니다.

어떤 앱은 Snap으로 설치하는 것이 편하고, 어떤 앱은 APT 버전이 더 자연스럽습니다. 예를 들어 시스템과 깊게 연결되는 명령줄 도구는 APT가 나을 때가 많고, 최신 데스크톱 앱은 Snap이 편할 때가 있습니다.

Flatpak과 Flathub

Flatpak은 여러 리눅스 배포판에서 사용할 수 있는 데스크톱 앱 배포 방식입니다. 우분투에는 기본으로 강조되는 방식은 아니지만, 사용자가 원하면 설치해 사용할 수 있습니다. Flatpak 앱은 런타임이라는 공통 실행 환경을 함께 사용합니다. 런타임은 앱들이 공유하는 기반 부품 묶음이라고 생각하면 됩니다.

우분투에서 Flatpak을 설치하려면 다음 명령을 사용할 수 있습니다.

sudo apt update
sudo apt install flatpak

Flatpak 앱을 쉽게 찾으려면 보통 Flathub 저장소를 추가합니다. Flathub는 Flatpak 앱을 배포하는 대표적인 저장소입니다. Flatpak 공식 사이트도 Flathub를 통해 앱을 많은 Flatpak 사용자에게 제공할 수 있다고 소개합니다.2

flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo

앱 검색은 다음과 같습니다.

flatpak search 키워드

설치는 보통 앱 ID로 합니다. Flatpak 앱 ID는 org.mozilla.firefox처럼 도메인을 거꾸로 쓴 형태가 많습니다.

flatpak install flathub 앱ID

설치된 앱 목록은 다음 명령으로 봅니다.

flatpak list --app

업데이트는 다음과 같습니다.

flatpak update

삭제는 이렇게 합니다.

flatpak uninstall 앱ID

사용하지 않는 런타임을 정리하려면 다음 명령을 사용할 수 있습니다.

flatpak uninstall --unused

Flatpak의 장점은 데스크톱 앱을 배포판 버전에 덜 묶이게 설치할 수 있다는 점입니다. Flathub에는 최신 그래픽 앱이 많이 올라옵니다. 반면 첫 앱 설치 때 런타임까지 내려받느라 용량이 커 보일 수 있고, 일부 권한 문제는 따로 조정해야 할 수 있습니다.

AppImage: 설치하지 않고 실행하는 앱

AppImage는 조금 다른 방식입니다. APT처럼 저장소에 등록해 설치하는 것도 아니고, Snap이나 Flatpak처럼 관리 도구가 앱을 추적하는 방식도 아닙니다. 보통 .AppImage 파일 하나를 내려받고 실행 권한을 준 뒤 실행합니다.

예를 들어 SomeApp.AppImage 파일을 다운로드 폴더에 받았다면 다음처럼 할 수 있습니다.

cd ~/Downloads
chmod +x SomeApp.AppImage
./SomeApp.AppImage

chmod +x는 파일에 실행 권한을 주는 명령입니다. 그래픽 파일 관리자에서도 파일 속성에서 "프로그램으로 실행 허용" 같은 옵션을 켤 수 있습니다.

AppImage의 장점은 간단함입니다. 설치하지 않고 실행할 수 있고, 파일 하나를 지우면 대체로 정리도 끝납니다. 여러 버전을 나란히 보관하기도 쉽습니다. 예를 들어 어떤 앱의 2.0 버전과 2.1 버전을 각각 AppImage 파일로 가지고 있다가 필요할 때 골라 실행할 수 있습니다.

하지만 단점도 분명합니다. APT처럼 자동 업데이트나 의존성 관리를 해 주지 않습니다. 시스템 메뉴에 자동 등록되지 않을 수 있고, 파일을 어디에 두었는지 스스로 관리해야 합니다. 무엇보다 출처 확인이 중요합니다. AppImage는 파일 하나에 많은 것이 들어 있기 때문에, 신뢰할 수 없는 곳에서 받은 파일을 실행하는 것은 매우 위험합니다.

어떤 방식을 선택해야 할까

처음에는 "그냥 하나로 통일하면 안 되나?"라는 생각이 들 수 있습니다. 실제로 우분투에서는 여러 방식이 공존합니다. 불편해 보이지만, 각각 잘하는 일이 다릅니다.

일상적인 기준은 간단합니다. 시스템 도구와 기본 명령줄 프로그램은 APT를 먼저 생각하세요. 우분투 공식 저장소에 있는 패키지는 안정성과 업데이트 흐름이 좋습니다. App Center에서 설치할 수 있는 일반 앱은 그래픽 방식으로 설치해도 괜찮습니다. 최신 데스크톱 앱이 필요하고 APT 저장소 버전이 너무 오래되었다면 Snap이나 Flatpak을 고려합니다. 개발사 홈페이지에서 공식 .deb를 제공한다면 sudo apt install ./파일명.deb로 설치합니다. 잠깐 써 볼 앱이나 포터블 앱은 AppImage가 편할 수 있습니다.

다만 한 앱을 여러 방식으로 중복 설치하지 않는 것이 좋습니다. 예를 들어 Firefox가 APT, Snap, Flatpak으로 동시에 설치되어 있으면 어떤 아이콘이 어떤 버전인지 헷갈릴 수 있습니다. 설정 파일 위치도 다를 수 있습니다. 특별한 이유가 없다면 한 앱은 한 방식으로만 설치하세요.

저장소의 종류와 신뢰 문제

패키지 관리는 편하지만, "어디서 가져오는가"가 매우 중요합니다. 저장소는 소프트웨어 공급망입니다. 공급망이 믿을 만하면 안전성이 높아지고, 출처가 불분명하면 위험이 커집니다.

우분투 공식 저장소는 우선적으로 신뢰할 수 있는 출처입니다. 우분투 생태계에서 관리되는 패키지들이 제공되고, 보안 업데이트 흐름도 잘 갖추어져 있습니다. APT를 사용할 때 가장 먼저 고려할 곳입니다.

PPA는 Personal Package Archive의 줄임말로, Launchpad에서 개인이나 팀이 운영하는 APT 저장소입니다. 공식 저장소보다 새 버전의 프로그램을 제공할 때가 많습니다. 예를 들어 최신 그래픽 드라이버나 개발 도구가 PPA로 제공되기도 합니다. 하지만 PPA는 운영 주체가 제각각입니다. 유명 프로젝트의 공식 PPA인지, 오래 방치된 PPA인지, 관리자가 누구인지 확인해야 합니다.

외부 저장소는 특정 회사나 프로젝트가 직접 제공하는 저장소입니다. 예를 들어 브라우저나 코드 편집기 같은 프로그램은 자체 APT 저장소를 추가하도록 안내할 수 있습니다. 이 경우 공식 웹사이트에서 안내하는 명령인지 확인해야 합니다. 블로그나 게시판에 복사된 오래된 명령을 그대로 실행하는 것은 피하세요.

Snap Store와 Flathub도 앱을 쉽게 찾게 해 주지만, 각 앱의 게시자와 권한을 확인해야 합니다. Flathub는 Flatpak 앱을 배포하는 대표 저장소이고, Flathub 문서는 앱 안전성을 위해 여러 단계의 접근을 취한다고 설명합니다.3 그렇다고 사용자가 아무 앱이나 설치해도 된다는 뜻은 아닙니다. 게시자가 공식 개발자인지, 앱 설명과 권한이 자연스러운지 살펴보는 습관이 필요합니다.

AppImage는 특히 출처 확인이 중요합니다. 중앙 패키지 관리자가 자동으로 검증해 주는 흐름이 약하기 때문입니다. 가능하면 프로젝트 공식 홈페이지나 공식 GitHub 릴리스에서 받고, 제공되는 체크섬이나 서명이 있다면 확인하는 것이 좋습니다. AppImage를 다루는 실용 가이드들도 다운로드 후 실행 권한을 부여해 실행하는 기본 흐름과 함께, 체크섬이나 서명이 제공될 경우 검증할 것을 권합니다.4

PPA와 외부 저장소를 추가할 때

PPA를 추가하는 기본 형태는 다음과 같습니다.

sudo add-apt-repository ppa:사용자이름/저장소이름
sudo apt update

그다음 일반 APT 패키지처럼 설치합니다.

sudo apt install 패키지이름

하지만 PPA를 추가하기 전에는 잠깐 멈춰야 합니다. PPA를 추가한다는 것은 그 저장소가 제공하는 패키지를 내 시스템 업데이트 흐름에 포함한다는 뜻입니다. 단순히 파일 하나를 내려받는 것보다 영향이 큽니다.

확인할 것은 최소한 다음과 같습니다.

  • 프로젝트 공식 문서에서 안내하는 PPA인가

  • 내 우분투 버전을 지원하는가

  • 최근에도 업데이트되고 있는가

  • 같은 패키지를 우분투 공식 저장소보다 우선해서 덮어쓰지 않는가

PPA를 제거하려면 다음처럼 합니다.

sudo add-apt-repository --remove ppa:사용자이름/저장소이름
sudo apt update

다만 PPA를 제거한다고 해서 그 PPA에서 설치한 패키지가 자동으로 공식 저장소 버전으로 돌아가는 것은 아닐 수 있습니다. 이런 경우에는 ppa-purge 같은 도구가 필요할 수 있지만, 초보 단계에서는 PPA 추가 자체를 신중하게 하는 것이 가장 좋은 예방책입니다.

외부 저장소를 추가하는 명령은 프로젝트마다 다릅니다. 예전 문서에서는 apt-key를 쓰는 예제가 많았지만, 최근 우분투에서는 키를 /etc/apt/keyrings/에 두고 저장소 파일에서 signed-by=로 지정하는 방식이 더 권장되는 흐름입니다. 인터넷에서 오래된 설치 명령을 복사할 때 특히 조심해야 합니다.

설치와 삭제 전 확인하는 습관

패키지 관리에서 가장 좋은 습관은 "명령을 입력한 뒤 바로 Enter를 치지 않는 것"입니다. 특히 sudo가 붙은 명령은 시스템에 변화를 줍니다.

APT는 설치나 삭제 전에 무엇을 할지 요약해 보여 줍니다. 새로 설치할 패키지, 업그레이드할 패키지, 제거할 패키지, 추가로 사용할 디스크 용량을 알려 줍니다. 여기서 제거 목록을 특히 잘 봐야 합니다. 내가 지우려는 앱 하나 때문에 데스크톱 환경이나 네트워크 관련 패키지가 함께 제거된다고 나오면 이상 신호입니다.

설치 전에 시뮬레이션을 해 볼 수도 있습니다.

apt install -s 패키지이름

-s는 실제로 설치하지 않고 어떤 일이 일어날지 미리 보여 주는 옵션입니다. 중요한 시스템에서 큰 패키지를 설치하거나 제거할 때 유용합니다.

또 하나의 좋은 습관은 패키지 이름을 검색하고 정보를 확인한 뒤 설치하는 것입니다.

apt search 패키지이름
apt show 패키지이름
sudo apt install 패키지이름

조금 느려 보여도 실수를 줄여 줍니다.

자주 만나는 문제와 해결 방향

패키지를 설치하다 보면 오류가 날 수 있습니다. 오류 메시지는 겁을 주려고 있는 것이 아니라, 문제의 단서를 주려고 있는 것입니다.

Unable to locate package는 APT가 해당 패키지를 찾지 못했다는 뜻입니다. 패키지 이름이 틀렸거나, 아직 apt update를 하지 않았거나, 필요한 저장소가 등록되어 있지 않을 수 있습니다.

sudo apt update
apt search 패키지이름

이 순서로 다시 확인해 보세요.

Could not get lock 또는 잠금 관련 메시지가 나온다면 다른 APT 작업이 실행 중일 수 있습니다. 예를 들어 백그라운드에서 업데이트 관리자가 돌아가고 있을 때 터미널에서 동시에 APT를 실행하면 잠금이 걸립니다. 이때는 무작정 잠금 파일을 지우지 말고 잠시 기다리세요. 정말 아무 작업도 진행 중이 아닌지 확인한 뒤에야 조치해야 합니다.

의존성 문제가 생겼다면 다음 명령이 도움이 될 수 있습니다.

sudo apt --fix-broken install

또는 패키지 설정이 중간에 멈춘 경우 다음 명령을 사용할 수 있습니다.

sudo dpkg --configure -a

다운로드 캐시가 꼬였거나 오래된 패키지 파일 때문에 문제가 생긴 듯하면 캐시를 정리할 수 있습니다.

sudo apt clean
sudo apt update

하지만 문제 해결 명령을 인터넷에서 찾아 그대로 붙여 넣기 전에, 그 명령이 무엇을 지우는지 꼭 확인해야 합니다. 특히 rm -rf가 들어간 명령은 매우 조심해야 합니다. 패키지 관리 문제를 해결하려다가 시스템 파일을 직접 삭제하면 더 큰 문제가 생길 수 있습니다.

업데이트를 생활화하기

우분투를 안전하게 쓰려면 업데이트가 중요합니다. 특히 보안 업데이트는 미루지 않는 것이 좋습니다. 데스크톱에서는 Software Updater나 App Center가 업데이트를 알려 주기도 하고, 터미널에서는 다음 명령을 사용할 수 있습니다.

sudo apt update
sudo apt upgrade
sudo apt autoremove

이 세 줄은 우분투 관리의 기본 루틴입니다. 첫 줄로 목록을 갱신하고, 둘째 줄로 실제 업데이트를 적용하고, 셋째 줄로 더 이상 필요 없는 패키지를 정리합니다.

Snap 앱은 보통 자동 업데이트가 이루어지지만, 수동으로 확인하고 싶다면 다음 명령을 쓸 수 있습니다.

sudo snap refresh

Flatpak 앱을 사용한다면 다음 명령으로 업데이트합니다.

flatpak update

AppImage는 각 앱마다 업데이트 방식이 다릅니다. 자체 업데이트 기능이 있는 앱도 있고, 새 파일을 직접 내려받아 교체해야 하는 앱도 있습니다. 그래서 AppImage는 편리하지만, 업데이트 관리 측면에서는 사용자의 책임이 조금 더 큽니다.

패키지 관리 감각 익히기

우분투에서 패키지 관리는 단순한 설치 기술이 아닙니다. 내 시스템이 어디서 소프트웨어를 가져오고, 어떤 방식으로 업데이트되며, 어떤 흔적을 남기는지 이해하는 일입니다.

처음에는 APT만 잘 써도 충분합니다. 다음 명령만 익숙해져도 일상적인 관리는 대부분 해결됩니다.

sudo apt update
sudo apt upgrade
apt search 키워드
apt show 패키지이름
sudo apt install 패키지이름
sudo apt remove 패키지이름
sudo apt purge 패키지이름
sudo apt autoremove
apt list --installed
dpkg -l | grep 패키지이름

여기에 Snap, Flatpak, AppImage의 성격을 알고 나면 선택지가 넓어집니다. 어떤 앱은 APT가 가장 안정적이고, 어떤 앱은 Snap이 편하며, 어떤 앱은 Flatpak에서 최신 버전을 쉽게 얻을 수 있습니다. 또 어떤 앱은 AppImage 파일 하나로 가볍게 써 보는 것이 좋을 수 있습니다.

중요한 기준은 늘 같습니다. 먼저 공식 저장소를 확인하고, 그다음 공식 개발자가 제공하는 방법을 살펴보며, 출처가 불분명한 명령은 실행하지 않는 것입니다. 패키지 관리를 알면 필요한 프로그램을 빠르게 설치할 수 있을 뿐 아니라, 시스템을 안전하고 깔끔하게 유지할 수 있습니다.

다음 장에서는 이 패키지 관리와 밀접하게 이어지는 사용자 계정, sudo, 권한 관리를 다룹니다. 지금까지 sudo를 "관리자 권한을 잠깐 빌리는 명령" 정도로 사용했다면, 이제는 왜 이 권한이 필요하고 어디까지 허용해야 하는지 더 깊이 살펴볼 차례입니다.

참고

1Install and manage packages - Ubuntu Server documentation

2Flatpak 공식 사이트

3Flathub Safety: A Layered Approach from Source to User

4How to Install AppImage on Ubuntu 26.04, 24.04 and 22.04

책 목록

우분투 리눅스 완전 입문: 설치부터 터미널, 패키지 관리, 시스템 운영까지

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기