13년차의 서버실

서버, 인프라, 홈랩 기술 블로그

[태그:] Ubuntu

  • [Linux] APT 패키지 관리와 Flatpak 전환 전략

    [Linux] APT 패키지 관리와 Flatpak 전환 전략

    APT 패키지 관리와 Flatpak 전환 전략

    APT를 버리는 문제가 아니라, 경계를 다시 긋는 문제입니다

    APT에서 Flatpak으로 옮긴다는 표현은 조금 위험합니다. Debian, Ubuntu 계열에서 APT는 여전히 운영체제 패키지 관리의 기준축입니다. 커널, systemd, OpenSSH, 네트워크 도구, 드라이버, 서버 데몬, 보안 업데이트 흐름은 배포판 저장소 정책 위에서 돌아갑니다. Flatpak은 이 자리를 대체하기보다, 데스크톱 애플리케이션을 배포판 릴리스 주기에서 분리하는 선택지에 가깝습니다.

    제가 13년 정도 Linux 서버와 데스크톱을 같이 운영하면서 얻은 기준은 단순합니다. 시스템을 구성하는 패키지는 APT, 사용자가 실행하는 독립형 GUI 앱은 Flatpak 후보로 봅니다. 이 기준을 세우면 “무엇을 옮길지”보다 “무엇을 절대 옮기지 말아야 할지”가 먼저 보입니다. 실제 마이그레이션에서 사고를 줄이는 건 과감한 전환이 아니라 경계 설정이더라고요.

    무작정 “기존 앱을 전부 Flatpak으로 바꾸자”로 가면 생각보다 빨리 꼬입니다. 같은 앱을 배포판 패키지와 Flatpak으로 동시에 설치하면 설정 경로, 실행 파일, MIME 연결, 포털 권한, 자동 실행 항목이 서로 다른 층에서 움직입니다. 사용자는 같은 아이콘을 눌렀다고 생각하지만 실제로는 다른 패키징 채널의 앱이 실행될 수 있습니다. 이때 “설정이 사라졌다”가 아니라 다른 설정 디렉터리를 보고 있는 것인 경우가 많습니다.

    APT와 Flatpak 패키지 관리 구조 다이어그램

    APT는 운영체제와 서비스 계층, Flatpak은 사용자 앱 계층으로 나뉘는 구조를 보여주는 다이어그램이 잘 맞습니다.

    APT와 Flatpak의 차이는 설치 방식보다 운영 책임입니다

    APT는 배포판 저장소의 패키지를 시스템 경로에 설치하고, 의존성까지 배포판 기준으로 맞춥니다. 패키지는 대체로 /usr/bin, /usr/lib, /etc, /var 같은 경로와 강하게 연결됩니다. 운영 입장에서는 이 점이 꽤 든든합니다. 보안 업데이트, 서비스 재시작, 설정 파일 관리, 로그 위치가 배포판 관례를 따르거든요.

    Flatpak은 앱과 런타임을 별도로 관리하고, 앱을 샌드박스 안에서 실행합니다. 사용자 설정은 대체로 ~/.var/app/앱ID/ 아래에 쌓입니다. 앱은 flatpak run 앱ID 형태로 실행하며, 파일 접근은 Flatpak 권한과 데스크톱 포털(xdg-desktop-portal)의 영향을 받습니다. 그래서 Flatpak은 “최신 GUI 앱을 깔기 쉬운 도구”이면서 동시에 “파일 접근과 시스템 통합을 명시적으로 다뤄야 하는 도구”입니다.

    판단 항목 APT가 맞는 경우 Flatpak이 맞는 경우 실무 판단 기준
    운영 책임 OS, 서비스, 보안 업데이트와 함께 관리해야 함 앱 단위로 독립 업데이트해도 됨 장애 시 systemd, 로그, 설정 파일을 바로 추적해야 하면 APT
    업데이트 속도 배포판 안정성 정책을 따름 Flathub 또는 remote 정책을 따름 최신 GUI 기능이 중요하면 Flatpak 후보
    파일 접근 홈 디렉터리와 시스템 경로 접근이 자연스러움 샌드박스 권한과 포털 정책의 영향을 받음 프로젝트 폴더, 외장 디스크, 네트워크 마운트를 많이 쓰면 사전 테스트 필요
    자동화 apt, dpkg, apt-mark로 서버 자동화에 적합 flatpak install, override, mask 등 별도 관리 필요 Ansible이나 셸 스크립트에 넣을 때 두 업데이트 루틴을 분리
    설정 위치 ~/.config, ~/.local, /etc 등 앱별 관례 ~/.var/app/앱ID/ 중심 전환 전 설정 백업과 경로 비교가 필수
    추천 대상 SSH, Docker 엔진, 서버 데몬, 입력기, 드라이버, CLI 도구 GIMP, Inkscape, 미디어 플레이어, 메신저, 독립형 GUI 앱 시스템과 많이 붙을수록 APT, 독립 실행 성격이 강할수록 Flatpak

    이 표에서 핵심은 “Flatpak이 더 좋다”가 아닙니다. Flatpak은 앱 경계를 명확하게 만들지만, 그만큼 경계 밖 리소스를 쓰려면 권한을 열어야 합니다. 반대로 배포판 패키지는 시스템과 자연스럽게 붙지만, 앱별 격리나 배포판 버전 독립성은 약합니다. 도구의 우열보다 책임 범위가 다릅니다.

    Linux 마이그레이션 전에는 설치 목록보다 출처를 먼저 확인하세요

    제가 현장에서 제일 먼저 보는 건 패키지 이름이 아니라 어느 채널에서 설치됐는지입니다. 같은 Firefox, 같은 GIMP라도 배포판 패키지, Snap, Flatpak, 수동 압축 해제본이 섞여 있으면 문제를 재현하기 어렵습니다. 특히 Ubuntu 계열은 일부 데스크톱 앱이 apt 명령으로 설치되는 것처럼 보여도 실제로는 다른 패키징 채널로 연결되는 경우가 있어 실행 경로 확인이 중요합니다.

    # 현재 APT 설치 상태를 파일로 남깁니다.
    apt list --installed > apt-installed.txt
    apt-mark showmanual > apt-manual.txt
    
    # Flatpak 앱과 런타임을 분리해서 확인합니다.
    flatpak list --app > flatpak-apps.txt 2>/dev/null || true
    flatpak list --runtime > flatpak-runtimes.txt 2>/dev/null || true
    
    # 특정 앱의 APT 출처와 버전 후보를 봅니다.
    apt policy gimp
    apt-cache show gimp | sed -n '1,80p'
    
    # 실행 경로와 데스크톱 런처를 확인합니다.
    command -v gimp
    which -a gimp
    ls /usr/share/applications | grep -i gimp || true
    ls ~/.local/share/applications | grep -i gimp || true
    ls /var/lib/flatpak/exports/share/applications | grep -i gimp 2>/dev/null || true
    ls ~/.local/share/flatpak/exports/share/applications | grep -i gimp 2>/dev/null || true

    apt policy에서 Installed는 현재 설치된 버전, Candidate는 저장소 기준으로 설치 또는 업그레이드될 후보입니다. Candidate: (none)에 가깝거나 배포판 저장소의 앱이 업무에 필요한 기능보다 늦게 따라온다면 Flatpak 전환 후보로 표시합니다. 다만 후보가 오래됐다는 이유만으로 서버 도구까지 옮기면 안 됩니다. 서버 도구는 최신 기능보다 재현성과 배포판 보안 흐름이 더 중요한 경우가 많습니다.

    실행 경로도 꼭 봐야 합니다. 터미널에서 command -v gimp가 /usr/bin/gimp를 가리키는데 런처는 Flatpak 데스크톱 파일을 가리키는 상황이 생길 수 있습니다. 이러면 터미널에서 실행한 앱과 메뉴에서 실행한 앱이 서로 다른 설정을 씁니다. 버그처럼 보이지만 실제 원인은 런처와 PATH의 불일치입니다.

    Flatpak 설치와 Flathub remote는 시스템 단위와 사용자 단위를 구분하세요

    Flatpak 자체는 보통 배포판 패키지 관리자로 설치합니다. 여기서 이미 역할 분리가 시작됩니다. 기반 도구는 배포판 패키지로 받고, GUI 앱 배포 채널만 Flatpak remote로 분리하는 방식입니다. 데스크톱 한 대만 쓰면 별 차이가 없어 보이지만, 가족 PC, 홈랩 워크스테이션, 공용 장비처럼 사용자가 여러 명이면 설치 범위가 중요해집니다.

    # Debian/Ubuntu 계열에서 Flatpak 기반 도구 설치
    sudo apt update
    sudo apt install flatpak
    
    # 시스템 전체에 Flathub remote 추가
    sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
    
    # 현재 등록된 remote와 설치 범위 확인
    flatpak remotes --show-details
    flatpak remotes --user --show-details
    flatpak remotes --system --show-details
    
    # 앱 목록 확인
    flatpak list --app
    flatpak list --app --columns=application,name,version,branch,installation

    sudo flatpak remote-add는 시스템 설치 범위에 remote를 추가합니다. 반대로 사용자 단위로만 쓰고 싶다면 flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo 형태를 씁니다. 개인 노트북이라면 둘 중 하나로 통일하는 편이 낫습니다. 같은 remote가 사용자 범위와 시스템 범위에 동시에 들어가면 나중에 앱이 어디에 설치됐는지 헷갈립니다.

    설치 위치도 달라집니다. 시스템 범위 Flatpak은 보통 /var/lib/flatpak 아래에 있고, 사용자 범위 설치는 ~/.local/share/flatpak 아래에 있습니다. 백업이나 디스크 정리를 할 때 이 차이가 바로 영향을 줍니다. 용량이 부족한 데스크톱이라면 앱뿐 아니라 런타임도 같이 쌓인다는 점을 염두에 두셔야 합니다. 정확한 용량은 설치한 앱과 런타임에 따라 달라지므로, 추측하지 말고 아래처럼 직접 확인하는 게 좋습니다.

    # Flatpak 설치 공간 확인
    sudo du -sh /var/lib/flatpak 2>/dev/null || true
    du -sh ~/.local/share/flatpak 2>/dev/null || true
    
    # 사용하지 않는 런타임 정리 후보 확인 및 제거
    flatpak uninstall --unused
    
    # Flatpak 앱, 런타임, 설치 범위를 함께 확인
    flatpak list --columns=application,name,type,branch,installation
    Flatpak remote 런타임 앱 구성 다이어그램

    Flathub remote, 런타임, 앱, 사용자/시스템 설치 범위가 어떻게 이어지는지 보여주는 구성도가 있으면 좋습니다.

    APT 앱을 Flatpak으로 옮기는 절차: 한 번에 하나씩, 되돌릴 수 있게

    실전에서는 앱 하나를 골라 전환하고 하루 정도 써본 뒤 다음 앱으로 넘어가는 방식이 안전합니다. GIMP 같은 GUI 앱은 좋은 시험 대상입니다. 시스템 서비스가 아니고, 파일 접근 권한 문제가 드러나기 쉽고, 설정 디렉터리 차이도 확인하기 좋기 때문입니다. 이거 진짜 번거로워 보여도, 나중에 문제를 좁히는 데 큰 도움이 됩니다.

    1. 배포판 패키지 설치 여부, 버전, 실행 경로, 데스크톱 파일을 확인합니다.
    2. 기존 설정 디렉터리를 백업합니다. 바로 삭제하지 않습니다.
    3. Flatpak 앱 ID를 확인하고 설치합니다.
    4. 실행, 파일 열기, 저장, 플러그인, 기본 앱 연결을 테스트합니다.
    5. 문제가 없으면 기존 패키지를 제거하되, 설정 purge는 며칠 뒤에 판단합니다.
    # 1. APT 상태 확인
    apt policy gimp
    command -v gimp
    which -a gimp
    
    # 2. 기존 사용자 설정 백업 예시
    mkdir -p ~/migration-backup/gimp
    cp -a ~/.config/GIMP ~/migration-backup/gimp/ 2>/dev/null || true
    cp -a ~/.gimp-* ~/migration-backup/gimp/ 2>/dev/null || true
    
    # 3. Flatpak 앱 검색 및 설치
    flatpak search gimp
    flatpak install flathub org.gimp.GIMP
    
    # 4. 실행 및 정보 확인
    flatpak run org.gimp.GIMP
    flatpak info org.gimp.GIMP
    flatpak info --show-permissions org.gimp.GIMP
    
    # 5. APT 패키지 제거. 마이그레이션 직후에는 purge보다 remove를 권합니다.
    sudo apt remove gimp
    sudo apt autoremove

    flatpak search에서는 이름보다 Application ID를 확인해야 합니다. org.gimp.GIMP 같은 ID가 이후 실행, 권한 확인, 제거, override, 업데이트에서 계속 쓰입니다. 이름은 사람이 읽는 라벨이고, 운영할 때 필요한 키는 앱 ID입니다.

    sudo apt remove는 시스템 패키지를 제거하지만 사용자 홈 디렉터리 설정은 대체로 남깁니다. sudo apt purge는 패키지의 시스템 설정까지 제거하는 데 쓰지만, 사용자 홈 아래 설정까지 항상 정리해주는 만능 청소 도구는 아닙니다. 저는 마이그레이션 당일에는 purge를 피합니다. 되돌릴 일이 생겼을 때 기존 설정이 남아 있으면 복구가 훨씬 빠릅니다.

    설정 이전은 앱마다 다릅니다. 기존 설정을 Flatpak 경로로 그대로 복사하면 될 때도 있지만, 버전 차이나 플러그인 경로 차이 때문에 오히려 문제를 만들 수 있습니다. 특히 IDE, 브라우저, 그래픽 도구는 “설정 폴더 전체 복사”보다 내보내기/가져오기 기능을 우선 쓰는 편이 낫습니다.

    가장 자주 본 실패 모드: 파일이 안 보이는 건 권한 모델 차이입니다

    Flatpak 전환 후 가장 흔한 문제는 “파일이 안 보인다”입니다. 배포판 패키지로 설치한 앱은 홈 디렉터리를 자연스럽게 읽는 경우가 많지만, Flatpak 앱은 샌드박스와 포털을 거칩니다. 그래서 다운로드 폴더는 보이는데 ~/projects, 외장 디스크, NAS 마운트, 숨김 디렉터리는 안 보이는 상황이 생깁니다. 근본 원인은 앱 버그가 아니라 파일시스템 권한이 앱에 부여되지 않았거나, 포털 파일 선택기를 통해 전달된 파일만 접근 가능한 상태인 경우가 많습니다.

    # 현재 권한 확인
    flatpak info --show-permissions org.gimp.GIMP
    
    # 현재 적용된 사용자 override 확인
    flatpak override --user --show org.gimp.GIMP
    
    # 특정 프로젝트 디렉터리만 읽기/쓰기 허용
    flatpak override --user --filesystem="$HOME/projects" org.gimp.GIMP
    
    # 읽기 전용으로만 허용하고 싶을 때
    flatpak override --user --filesystem="$HOME/reference:ro" org.gimp.GIMP
    
    # 홈 전체 접근을 허용하는 예시. 편하지만 격리 이점은 줄어듭니다.
    flatpak override --user --filesystem=home org.gimp.GIMP
    
    # override 초기화
    flatpak override --user --reset org.gimp.GIMP

    권한을 줄 때는 넓게 열기 전에 좁게 열어보는 편이 좋습니다. 이미지 편집 앱이 ~/projects/design만 필요하다면 해당 디렉터리만 허용합니다. 문서 편집기처럼 여러 작업 폴더를 오가야 한다면 xdg-documents, 특정 마운트 경로, 또는 홈 접근을 검토합니다. 다만 메신저, 뷰어, 단순 유틸리티에 홈 전체 권한을 주는 건 Flatpak을 쓰는 이유를 스스로 줄이는 선택입니다.

    개발 도구는 더 까다롭습니다. Flatpak IDE가 프로젝트는 보지만 시스템의 /usr/bin/python, Docker 소켓, SDK 경로, SSH agent, GPG agent를 기대대로 못 볼 수 있습니다. 이 경우 Flatpak이 나쁘다기보다 개발 환경 자체가 호스트 시스템과 강하게 결합돼 있기 때문입니다. IDE를 Flatpak으로 옮길 때는 “편집만 하는가, 빌드와 디버깅까지 하는가”를 기준으로 판단하세요. 빌드, 컨테이너, 디바이스 접근이 많다면 배포판 패키지, 공식 tarball, 또는 전용 툴박스 환경이 더 안정적일 수 있습니다.

    전환 후 검증: 실행되는지보다 어느 쪽이 실행되는지 보세요

    마이그레이션 검증은 앱이 켜지는 순간 끝나지 않습니다. 실제로 문제는 그 다음에 옵니다. 파일 더블클릭은 기존 앱으로 열리고, 메뉴 런처는 Flatpak을 띄우고, 터미널에서는 예전 바이너리가 실행되는 식입니다. 사용자는 같은 앱을 쓴다고 느끼지만, 시스템은 서로 다른 실행 단위를 다루고 있습니다.

    # Flatpak 앱 목록과 설치 범위
    flatpak list --app --columns=application,name,version,branch,installation
    
    # Flatpak 업데이트
    flatpak update
    
    # APT 쪽 동일 패키지 잔존 여부
    apt list --installed 2>/dev/null | grep -i '^gimp/' || true
    apt policy gimp
    
    # 실행 경로 확인
    command -v gimp || true
    which -a gimp || true
    
    # 데스크톱 파일 중복 확인
    find /usr/share/applications ~/.local/share/applications /var/lib/flatpak/exports/share/applications ~/.local/share/flatpak/exports/share/applications \
      -iname '*gimp*.desktop' 2>/dev/null -print
    
    # MIME 연결 확인 예시
    xdg-mime query default image/png
    xdg-mime query default image/jpeg

    flatpak list --app에 앱이 있고 flatpak run 앱ID로 정상 실행되면 Flatpak 설치는 된 겁니다. 하지만 apt list --installed에도 같은 앱이 남아 있으면 중복 설치 상태입니다. 이 자체가 항상 장애는 아니지만, 기본 앱 연결과 런처가 섞이면 사용성이 나빠집니다. 장기 운영에서는 하나로 정리하는 편이 낫습니다.

    업데이트 루틴도 분리해야 합니다. sudo apt upgrade는 APT 패키지를 갱신하고, flatpak update는 Flatpak 앱과 런타임을 갱신합니다. 둘 중 하나만 자동화하면 절반만 관리하는 셈입니다. 저는 데스크톱 장비에서는 주기적으로 둘 다 실행하고, 오래 안 쓰는 런타임은 flatpak uninstall --unused로 정리합니다.

    Flatpak 전환 후 앱 목록과 업데이트 상태 확인 화면

    APT 잔존 패키지, Flatpak 앱 목록, MIME 연결, 업데이트 상태를 한 화면에서 점검하는 대시보드형 이미지가 어울립니다.

    APT와 Flatpak을 같이 쓸 때의 패키지 관리 전략

    저는 데스크톱 Linux를 운영할 때 패키지를 세 부류로 나눕니다. 첫째, OS와 서비스에 붙은 패키지는 배포판 기본 관리 체계에 남깁니다. 둘째, 독립형 GUI 앱은 Flatpak 후보로 둡니다. 셋째, 개발 도구와 브라우저처럼 시스템 연동이 많은 앱은 테스트 후 결정합니다. 이 셋을 구분하지 않으면 패키지 관리가 취향 싸움처럼 흐릅니다.

    앱/구성요소 추천 이유 확인할 것
    OpenSSH, systemd 서비스, 서버 데몬 APT 유지 배포판 보안 업데이트, 로그, 서비스 관리와 강하게 연결 systemctl, journalctl, /etc 설정 흐름
    그래픽 편집기, 미디어 플레이어, 메신저 Flatpak 우선 검토 앱 단위 업데이트와 격리의 이점이 큼 파일 접근 권한, 포털 동작, 플러그인 경로
    브라우저 환경별 판단 보안 격리 장점이 있지만 인증서, 확장, 외부 앱 호출 이슈 가능 기본 브라우저 설정, 다운로드 경로, 패스키/인증 장치 연동
    IDE, SDK, Docker 연동 도구 신중히 테스트 호스트 도구, 소켓, 터미널, 빌드 체인과 많이 연결됨 프로젝트 권한, Docker socket, SSH/GPG agent, SDK 경로
    파일 관리자, 입력기, 드라이버 APT 권장 세션, 장치, 시스템 통합 의존도가 높음 데스크톱 환경 통합, 권한, 장치 접근

    현실적인 운영 예시는 이렇습니다. Ubuntu 데스크톱에서 SSH, Git, 빌드 도구, Docker 엔진은 APT로 유지합니다. GIMP, Inkscape, VLC, 일부 메신저는 Flatpak으로 둡니다. VS Code나 JetBrains IDE처럼 프로젝트 빌드와 컨테이너 연동이 많은 도구는 Flatpak으로 먼저 시험 설치한 뒤, 터미널 통합과 SDK 탐지가 불편하면 배포판 저장소나 공식 패키지로 돌아갑니다. 이 접근이 지저분해 보일 수 있지만, 실제 운영에서는 훨씬 덜 고장 납니다.

    자동화할 때는 두 세계를 분리해서 써야 합니다. APT는 apt-mark showmanual과 패키지 목록으로 관리하고, Flatpak은 앱 ID 목록으로 관리합니다. 아래처럼 간단한 목록 파일을 만들면 새 장비 세팅이 편해집니다. 관련 글을 운영한다면 “Ubuntu 초기 세팅 체크리스트”나 “Linux 백업 전략” 같은 내부 링크로 이어주기 좋습니다.

    # flatpak-apps.txt 예시
    org.gimp.GIMP
    org.inkscape.Inkscape
    org.videolan.VLC
    
    # 목록 파일 기반 설치
    while read -r app; do
      [ -z "$app" ] && continue
      flatpak install -y flathub "$app"
    done < flatpak-apps.txt
    
    # 현재 설치된 Flatpak 앱 ID만 추출
    flatpak list --app --columns=application > flatpak-apps-current.txt

    자주 묻는 질문

    Flatpak으로 바꾸면 APT는 안 써도 되나요?

    아닙니다. Debian/Ubuntu 계열에서는 APT가 시스템 패키지 관리의 중심입니다. Flatpak은 주로 데스크톱 GUI 앱을 배포판 릴리스 주기와 분리해 관리하기 위한 보조 축으로 보는 게 맞습니다.

    같은 앱을 APT와 Flatpak으로 같이 설치해도 되나요?

    짧은 테스트 기간에는 괜찮습니다. 다만 장기간 유지하는 건 추천하지 않습니다. 실행 경로, 설정 디렉터리, 파일 연결, 런처 항목이 섞이면 문제를 추적하기 어려워집니다. 테스트가 끝나면 한쪽으로 정리하세요.

    Flatpak 앱이 느리거나 무겁다고 봐야 하나요?

    앱과 런타임 구성에 따라 다르므로 일반화하면 안 됩니다. 다만 런타임이 별도로 설치되고 업데이트되기 때문에 디스크 사용량과 업데이트 대상이 늘 수 있습니다. 실제 판단은 du -sh /var/lib/flatpak ~/.local/share/flatpak, flatpak list --runtime으로 확인하는 게 정확합니다.

    마이그레이션 순서는 어떻게 잡는 게 좋나요?

    시스템 핵심 패키지가 아닌 독립형 GUI 앱부터 시작하세요. 앱별로 설치, 실행, 파일 열기/저장, 권한, 기본 앱 연결, 업데이트를 확인한 뒤 다음 앱으로 넘어가는 방식이 안전합니다.

    권한 관리는 CLI만 써야 하나요?

    아닙니다. CLI에서는 flatpak info --show-permissions와 flatpak override를 쓰고, GUI로는 Flatseal 같은 도구를 쓸 수 있습니다. 다만 자동화나 문서화가 필요하면 CLI 명령을 남겨두는 편이 재현성이 좋습니다.

    제가 권하는 최종 기준

    서버 운영, 시스템 구성, 드라이버, 입력기, 네트워크 도구, 서비스 데몬은 APT를 유지하세요. 이 영역은 배포판의 보안 업데이트와 서비스 관리 흐름을 타는 편이 안정적입니다. 반대로 그래픽 편집기, 미디어 플레이어, 메신저, 독립형 데스크톱 앱은 Flatpak으로 먼저 테스트할 가치가 있습니다. 최신 버전과 앱별 격리의 이점이 실제 사용성으로 이어질 가능성이 큽니다.

    브라우저와 개발 IDE는 중간 지대입니다. 브라우저는 인증서, 패스키, 외부 앱 호출, 다운로드 경로를 확인해야 합니다. IDE는 프로젝트 디렉터리, SDK, Docker, SSH/GPG agent, 터미널 통합까지 봐야 합니다. 이 항목에서 문제가 생기면 Flatpak을 고집하지 말고 배포판 패키지나 공식 패키지로 남기는 게 더 실용적입니다.

    제가 쓰는 한 줄 기준은 이렇습니다. 운영체제와 서비스는 APT, 독립형 데스크톱 앱은 Flatpak, 호스트와 깊게 엮인 개발 도구는 별도 검증. 이 기준만 잡아도 “설치했는데 왜 설정이 없지?”, “왜 터미널과 런처 결과가 다르지?”, “왜 프로젝트 폴더가 안 보이지?” 같은 시간을 꽤 줄일 수 있습니다.

    APT와 Flatpak 선택 기준 요약 인포그래픽

    서버 패키지, GUI 앱, 브라우저, 개발 도구별로 APT와 Flatpak 선택 기준을 나눈 인포그래픽이 마무리에 잘 맞습니다.

    마이그레이션은 도구 교체가 아니라 운영 모델 변경입니다. APT는 시스템의 기준선을 안정적으로 잡고, Flatpak은 사용자 앱 레이어를 더 유연하게 만듭니다. 둘을 섞어 쓰는 것이 타협처럼 보일 수 있지만, Linux 데스크톱을 오래 굴려보면 그게 가장 덜 피곤한 전략인 경우가 많습니다.

  • [OpenStack] MicroStack 1년 운영 회고: 소규모 프라이빗 클라우드 구축 경험과 한계

    [OpenStack] MicroStack 1년 운영 회고: 소규모 프라이빗 클라우드 구축 경험과 한계

    [프라이빗 클라우드] MicroStack 1년 운영 회고: 소규모 환경 구축 경험과 한계

    1. 홈랩에 프라이빗 클라우드가 필요했던 이유

    안녕하세요, 13년차 서버실 지킴이입니다. 오늘은 제 홈랩에서 1년 넘게 운영해온 MicroStack(마이크로스택)에 대한 솔직한 회고를 해볼까 합니다. 인프라 엔지니어라면 누구나 한 번쯤 나만의 클라우드를 꿈꾸지 않나요? 저도 그랬습니다. AWS, Azure, GCP 같은 퍼블릭 클라우드도 좋지만, 직접 바닥부터 쌓아 올리는 프라이빗 클라우드의 매력은 또 다르거든요. 특히 OpenStack(오픈스택)은 예전부터 계속 만져보고 싶었던 기술이었는데, 제 홈랩 환경에서는 너무 무겁고 복잡해서 엄두를 못 내고 있었죠.

    그러다 "가볍게 OpenStack을 경험할 수 있다"는 말에 홀려 MicroStack을 만나게 됐습니다. 처음에는 "이게 진짜 OpenStack이라고?" 싶을 정도로 간편한 설치에 놀랐어요. 작은 서버 한 대로 온프레미스 클라우드를 꾸리고 싶었던 저에게는 정말 솔깃한 제안이었거든요. 제 홈랩에서 다양한 서비스를 올리고 내리면서 자유롭게 테스트하고 싶었고, Public Cloud 비용 걱정 없이 마구 실험해보고 싶다는 욕구가 컸습니다. 과연 1년 동안 MicroStack은 저의 이런 기대를 얼마나 충족시켜줬을까요? 삽질 경험과 함께 솔직한 후기를 공유해볼게요.

    MicroStack은 단일 서버 위에서 LXD 컨테이너 기술을 활용해 OpenStack 핵심 구성 요소들을 경량으로 실행하는 아키텍처를 가집니다.

    2. MicroStack이란 무엇인가요?

    MicroStack은 Ubuntu를 개발하는 Canonical(캐노니컬)에서 만든 OpenStack 배포판 중 하나입니다. 기존 OpenStack은 수십 대의 서버와 복잡한 설정이 필요한 거대한 프로젝트인데, MicroStack은 이런 복잡성을 확 줄여서 단일 서버에서도 OpenStack의 핵심 기능들을 사용할 수 있게 해주는 경량 솔루션이에요. 쉽게 말해, "홈랩이나 소규모 환경을 위한 미니 OpenStack"이라고 생각하시면 편합니다.

    • LXD 기반: 컨테이너 기술인 LXD(Linux Container Daemon)를 활용해서 OpenStack의 다양한 서비스들(Nova, Neutron, Glance, Keystone 등)을 컨테이너 형태로 실행합니다. 덕분에 자원 효율성이 좋고, 격리된 환경에서 안정적으로 운영할 수 있어요.

    • Snap 패키징: Ubuntu의 Snap(스냅) 패키지 형태로 제공되어서 설치와 관리가 굉장히 간편합니다. snap install 한 줄이면 끝이에요. 업데이트도 자동이라 관리 부담이 적습니다.

    • 단일 노드 지향: 기본적으로 단일 서버에서 모든 OpenStack 서비스가 돌아가는 구조를 지향합니다. 고가용성(HA, High Availability)이나 대규모 확장이 목표가 아니라, 빠르고 쉽게 OpenStack을 시작해보는 데 초점이 맞춰져 있어요.

    이런 특징 덕분에 저처럼 "OpenStack은 너무 어려울 것 같고… 그래도 한 번쯤 경험해보고 싶다" 하는 분들에게는 아주 좋은 진입점이라고 생각했습니다.

    3. 설치 및 초기 구성: 이렇게 쉬워도 되나?

    MicroStack의 가장 큰 장점 중 하나는 바로 설치 간편성입니다. 정말 너무 쉬워서 처음엔 놀랐어요. Ubuntu 서버만 있다면 몇 가지 명령어만으로 바로 OpenStack 환경을 구축할 수 있습니다.

    3.1. 설치 명령어

    # MicroStack 설치
    sudo snap install microstack --classic
    
    # 초기화 (All-in-one 모드 선택, 네트워크 설정 등) 
    # 이 과정에서 OpenStack 서비스들이 LXD 컨테이너로 배포됩니다.
    sudo microstack init --auto --control --compute --network --config
    
    # OpenStack CLI 환경 설정 (OpenStack Client를 통해 컨트롤)
    source /snap/microstack/common/etc/microstack.rc
    
    # OpenStack 서비스 상태 확인
    sudo microstack status
    

    microstack init 명령어를 실행하면 몇 가지 질문이 나오는데, 기본적으로 All-in-one 모드로 진행하면 됩니다. 네트워크 구성이나 인증 방식 등은 나중에 다시 설정할 수 있으니 부담 없이 진행해도 괜찮아요. 이 과정에서 LXD 컨테이너들이 생성되고 그 안에 Nova(컴퓨트), Neutron(네트워킹), Glance(이미지), Keystone(인증) 같은 OpenStack 핵심 서비스들이 배포됩니다. 몇 분 기다리면 OpenStack 환경이 뚝딱 만들어지는 걸 보면서 정말 감탄했어요 🎉.

    3.2. 네트워크 설정, 그리고 삽질 시작

    MicroStack 설치는 쉬웠지만, 진짜 "내 것"으로 만들려면 네트워크 설정이 중요하죠. 특히 외부에서 생성된 VM(Virtual Machine)에 접근하려면 Floating IP(플로팅 IP)를 할당해야 하는데, 이를 위한 네트워크 구성을 제대로 해줘야 합니다. 저는 처음에는 내부 네트워크만 만들고 외부 연결이 안 돼서 한참을 헤맸습니다 😅.

    # 외부 네트워크 생성 (내부망과 연결할 라우터 역할을 합니다)
    # --external은 이 네트워크가 외부와 연결될 수 있음을 나타냅니다.
    openstack network create --external --provider-physical-network extnet --provider-network-type flat ext_net
    
    # 서브넷 생성 (외부망 IP 대역과 일치하게 설정)
    # --no-dhcp 옵션을 사용해 DHCP 서버가 IP를 자동으로 할당하지 않도록 합니다 (외부망과 충돌 방지)
    # --gateway는 외부망 게이트웨이 IP를 입력합니다.
    openstack subnet create --network ext_net \ 
      --subnet-range 192.168.0.0/24 \ 
      --no-dhcp \ 
      --gateway 192.168.0.1 \ 
      ext_subnet
    
    # 라우터 생성
    openstack router create router1
    
    # 라우터에 외부 네트워크 연결
    openstack router set router1 --external-gateway ext_net
    
    # 내부 네트워크 생성 (VM들이 사용할 사설 네트워크)
    openstack network create int_net
    
    # 내부 서브넷 생성
    openstack subnet create --network int_net --subnet-range 10.0.0.0/24 int_subnet
    
    # 라우터에 내부 네트워크 인터페이스 추가
    openstack router add subnet router1 int_subnet
    

    이런 식으로 네트워크를 구성해주고 나서 VM을 생성할 때 int_net에 연결하고, 필요할 경우 ext_net의 IP 대역에서 Floating IP를 할당해주면 외부에서 VM에 접근할 수 있게 됩니다. 이 부분을 이해하는 데 좀 시간이 걸렸네요. OpenStack 네트워크 개념인 Provider Network, Tenant Network, Router, Floating IP 등을 잘 알아야 해요.

    OpenStack Horizon 대시보드 스크린샷: VM 인스턴스 목록과 네트워크 토폴로지

    OpenStack Horizon 대시보드를 통해 생성된 가상머신과 네트워크 구성을 한눈에 볼 수 있습니다.

    4. 1년 운영 경험: 장점, 단점 그리고 한계

    1년 동안 MicroStack을 운영하면서 느낀 장점과 단점을 솔직하게 정리해봤습니다.

    4.1. 장점: 쉬운 접근성과 자원 효율성 ✅

    • 빠른 배포 및 관리 용이성: snap과 microstack CLI 덕분에 설치, 업그레이드, 관리가 정말 편했습니다. "OpenStack은 어렵다"는 고정관념을 깨기에 충분했죠.

    • 자원 효율성: LXD 컨테이너 기반이라 일반 가상머신보다 훨씬 가볍게 OpenStack 서비스를 운영할 수 있었습니다. 제 홈랩의 서버 자원이 제한적이라 이 점이 가장 만족스러웠어요.

    • OpenStack 학습 도구로 최적: 실제 OpenStack 환경에서 CLI 명령어를 직접 쳐보고, Horizon(호라이즌, 웹 대시보드)을 만져보면서 OpenStack의 핵심 개념(Nova, Neutron, Glance, Keystone 등)을 빠르게 익힐 수 있었습니다. 덕분에 회사에서 OpenStack 관련 프로젝트를 할 때 훨씬 더 빠르게 적응할 수 있었어요.

    4.2. 단점 및 한계점: 삽질의 연속 ⚠️

    하지만 장점만 있었던 건 아닙니다. "미니 OpenStack"이라는 태생적 한계와 함께 몇몇 삽질을 피할 수 없었습니다.

    • 단일 노드 아키텍처의 한계: MicroStack은 기본적으로 단일 서버에 모든 서비스가 올라가는 All-in-one 구조입니다. 이는 곧 고가용성(HA)을 전혀 보장할 수 없다는 의미예요. 서버가 한 번 죽으면 모든 VM과 OpenStack 서비스가 멈춥니다. 홈랩이야 괜찮지만, 실제 운영 환경에서는 절대 사용할 수 없는 구조죠.

    • 문제 발생 시 디버깅의 어려움: LXD 컨테이너 안에 OpenStack 서비스들이 돌아가다 보니, 문제가 생겼을 때 로그를 찾거나 디버깅하는 과정이 생각보다 복잡했습니다. 일반적인 OpenStack 설치라면 `systemctl`로 서비스를 제어하고 로그를 바로 확인할 수 있지만, MicroStack은 LXD 컨테이너 내부로 들어가서 각 서비스의 로그를 찾아야 했어요. 예를 들어 Nova 서비스에 문제가 생기면 다음과 같이 접근해야 합니다.

      # MicroStack의 LXD 컨테이너 목록 확인
      sudo lxc list
      
      # nova 컨테이너 쉘 접근
      sudo lxc exec microstack-nova -- bash
      
      # 컨테이너 내부에서 nova 서비스 로그 확인 (예시)
      # 경로와 파일명은 OpenStack 버전에 따라 다를 수 있습니다.
      tail -f /var/log/nova/nova-conductor.log
      

      이런 과정이 익숙지 않은 초보자에게는 진입 장벽이 될 수 있습니다.

    • 복잡한 네트워크 구성의 제약: 위에서 보여드린 기본적인 네트워크 구성은 가능하지만, OpenStack의 고급 네트워킹 기능(예: SD-WAN 통합, 복잡한 로드밸런싱 등)을 활용하기에는 제약이 많았습니다. 특히 물리 네트워크 인터페이스를 여러 개 활용하거나 VLAN(Virtual LAN)을 섬세하게 제어하는 부분은 쉽지 않았어요.

    • OpenStack 버전 관리 및 호환성: Snap 패키지 덕분에 업데이트는 편하지만, 특정 OpenStack 버전(예: Wallaby, Xena)을 선택하거나 고정하기는 어려웠습니다. 항상 최신 안정화 버전으로 유지되는데, 이는 호환성 문제가 발생할 수도 있다는 의미입니다. 제가 겪었던 문제 중 하나는 특정 이미지 포맷이 지원되지 않거나, CLI와 Horizon의 기능 차이가 발생하는 경우였습니다.

    • 커뮤니티 지원 부족: 일반적인 OpenStack 커뮤니티에 비해 MicroStack만의 정보는 상대적으로 적습니다. 문제가 생겼을 때 구글링이나 스택오버플로우에서 해답을 찾기 어려울 때가 많았어요. 결국 OpenStack 자체의 지식을 바탕으로 직접 해결해야 하는 경우가 많았습니다.

    5. MicroStack vs. 다른 OpenStack 배포판: 선택의 고민

    MicroStack이 편리하긴 하지만, "진짜" OpenStack을 경험하거나 운영하려는 분들에게는 다른 선택지도 있습니다. 제가 고민했던 몇 가지 옵션과 MicroStack을 비교해봤어요.

    특징 MicroStack (Snap + LXD) DevStack (스크립트 설치) Packstack (Ansible 기반) RDO/OpenStack-Ansible (프로덕션 배포)
    주요 목적 빠른 학습, 홈랩, 소규모 테스트 개발, 테스트 환경 구축 소규모 프로덕션, 테스트 엔터프라이즈 프로덕션 환경
    설치 난이도 매우 쉬움 (snap install) 쉬움 (git clone && ./stack.sh) 보통 (Ansible 지식 필요) 어려움 (복잡한 설정, HA 구성)
    자원 요구량 낮음 (LXD 컨테이너) 보통 (VM 또는 베어메탈) 보통~높음 높음 (다중 노드 필수)
    고가용성 (HA) 지원 안 함 (단일 노드) 지원 안 함 제한적 지원 완벽 지원
    관리 용이성 매우 좋음 (Snap 업데이트) 낮음 (수동 스크립트) 좋음 (Ansible 관리) 높음 (자동화 도구)
    확장성 없음 없음 제한적 매우 좋음
    추천 사용자 OpenStack 입문자, 홈랩 사용자 OpenStack 개발자, 기능 테스트 소규모 운영팀, POC 대규모 클라우드 운영팀
    MicroStack 홈랩 운영 장점과 한계 요약 인포그래픽

    MicroStack은 간편함이 가장 큰 장점이지만, 프로덕션 환경에 필요한 기능과 안정성에는 한계가 명확합니다.

    6. 누구에게 MicroStack이 적합할까? 나의 결론 💡

    1년 동안 MicroStack을 직접 운영해본 결과, 저는 다음과 같은 분들에게 MicroStack을 추천하고 싶습니다.

    1. OpenStack 초보자 및 학습자: "OpenStack이 뭔지 한 번 경험해보고 싶다" 하는 분들에게는 이만한 진입점이 없습니다. 복잡한 설치 과정 없이 핵심 기능을 빠르게 만져볼 수 있어요. CLI 명령어와 Horizon 대시보드 사용법을 익히는 데 아주 유용합니다.

    2. 홈랩 환경에서 가벼운 프라이빗 클라우드를 원하는 분: 저처럼 개인 서버 한 대로 가상 환경을 구축하고, 다양한 OS 이미지를 올려보고 싶을 때 좋습니다. 퍼블릭 클라우드 비용이 부담스러울 때 대안이 될 수 있죠.

    3. 가벼운 PoC(개념 증명) 또는 테스트 환경이 필요한 개발자: 특정 OpenStack API를 활용하는 애플리케이션을 개발하거나, 간단한 테스트 환경을 빠르게 구축해야 할 때 유용합니다. 복잡한 프로덕션 환경을 그대로 구현할 필요가 없을 때 말이죠.

    하지만 실제 프로덕션 환경에 OpenStack을 도입하려는 분이라면 MicroStack은 부적합합니다. 고가용성, 확장성, 안정성 등 엔터프라이즈 환경에서 필요한 요소들을 MicroStack은 제공하지 않거든요. 이런 경우에는 DevStack이나 Packstack으로 개념을 잡고, 더 나아가 RDO나 OpenStack-Ansible 같은 프로덕션용 배포판을 고려해야 합니다.

    7. 마무리: 1년의 경험을 통해 배운 점, 그리고 다음 스텝

    MicroStack 1년 운영은 저에게 많은 것을 알려줬습니다. OpenStack의 핵심 개념을 직접 손으로 익히고, 프라이빗 클라우드 운영의 재미와 동시에 한계를 명확히 깨닫게 해줬어요. 특히 "간편함"과 "안정성/확장성"은 상충되는 가치라는 것을 다시 한번 실감했습니다. 작은 홈랩에서 시작했지만, 덕분에 회사에서 더 큰 규모의 클라우드 인프라를 이해하고 설계하는 데 큰 도움이 됐습니다.

    솔직히 삽질도 많이 했지만, 그 과정에서 얻은 지식과 경험은 무엇과도 바꿀 수 없는 소중한 자산이 되었습니다. OpenStack이라는 거대한 프로젝트에 대한 막연한 두려움을 깼다는 것만으로도 충분히 만족스러웠네요. 앞으로는 MicroK8s(마이크로케이츠)처럼 경량 Kubernetes(쿠버네티스) 솔루션도 홈랩에 도입해서, MicroStack과 연동하는 하이브리드 클라우드 환경을 구축해보는 것도 재미있을 것 같다는 생각이 듭니다. 홈랩은 언제나 새로운 기술을 실험하고 배우는 저만의 놀이터거든요!

    혹시 여러분도 OpenStack에 관심이 있으시다면, MicroStack으로 가볍게 시작해보는 건 어떠세요? 분명 좋은 경험이 될 겁니다. 궁금한 점이 있다면 언제든 댓글로 남겨주세요. 제가 겪었던 삽질 경험을 바탕으로 최대한 도와드리겠습니다! 💪

    13년차 인프라 엔지니어가 홈랩에서 MicroStack 대시보드를 보며 만족하는 모습

    13년차 인프라 엔지니어가 홈랩 서버 앞에서 MicroStack 대시보드를 보며 만족스럽게 웃고 있습니다.