[맥북 / macOS] Homebrew를 이용하여 앱(패키지) 설치 및 버전 관리를 간편하게!

Homebrew는 macOS를 위한 패키지 관리 도구입니다. 터미널 커맨드로 동작하며, 각종 터미널 내에서 동작하는 앱 이외에도 GUI에서 동작하는 앱(패키지) 역시 관리할 수 있기 때문에 아주 편리합니다.

“GUI에서도 다 할 수 있는 앱 다운로드/업데이트/관리를 왜 굳이 터미널 커맨드를 써가면서 해야할까?”

위의 질문에 대한 답은 아래와 같을 수 있습니다.

  1. 앱스토어를 통해 다운받은 앱 이외에 다른 패키지들은 업데이트 등의 버전 관리를 하기가 힘듭니다. 앱이 많으면 많을 수록 하나하나 찾아가며, 할 순 없기 때문입니다.
  2. 1번의 문제 사항을 해결해줄 GUI 내, 앱이 없습니다(버전을 잘 관리해주는 앱).
  3. Homebrew를 통해 설치된 앱의 설치/삭제/리스트 조회가 매우 편리합니다.

혹, 이전에 터미널을 사용해보지 않았더라도, 충분히 쉽게 활용할 수 있으므로 한번 시도해보시기 바랍니다 🙂


Homebrew 설치하기

Homebrew를 사용하기 위해선 우선 설치를 해야합니다. 터미널 앱을 열고, 아래 커맨드를 실행합니다. 만약, 아래 커맨드가 동작하지 않을 시, 공식 홈페이지 링크를 통해 재확인 바랍니다. macOS에는 Ruby가 기본적으로 설치되어 있기 때문에, 아래 Ruby로 동작하는 내용에 대한 다른 사전 준비 사항은 필요없습니다.

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

*터미널 앱은 Spotlight (cmd + space) > “Terminal” 커맨드로 찾으실 수 있습니다.

설치가 완료되었으면, brew update 커맨드로 Homebrew가 정상적으로 동작하는지, 최신 버전이지 확인해줍니다.

~ (227) $brew update
Already up-to-date.

Homebrew 사용방법

위에서 잠깐 보셨듯이 Homebrew는 모두 brew 커맨드를 필두로 시작합니다. 즉, brew install …, brew remove …, brew update 등으로 커맨드가 구성됩니다.

brew update //Homebrew 업데이트
brew search <패키지 이름> //패키지 검색
brew install <패키지 이름> //패키지 설치
brew remove <패키지 이름> //패키지 삭제
brew list //패키지 리스트
brew upgrade <패키지 이름> //패키지 업데이트

앱 검색

크롬을 다운받고 싶은데, brew install chrome이라고 치면 되나? 모를 수 있습니다. 그래서 brew에 존재하는 기능이 search입니다. 대충, brew search chrome라고 검색해봅니다. 그럼 아래에 caskroom/cask/google-chrome이라고 우리가 원하는 그 “크롬”의 키워드를 정확하게 알 수 있습니다.

~ (228) $brew search chrome
==> Searching local taps...
chrome-cli chrome-export
==> Searching taps on GitHub...
caskroom/cask/chrome-devtools
caskroom/cask/chrome-remote-desktop-host
caskroom/cask/dmm-player-for-chrome
caskroom/cask/google-chrome
caskroom/versions/google-chrome-beta
caskroom/versions/google-chrome-canary
caskroom/versions/google-chrome-dev
==> Searching blacklisted, migrated and deleted formulae...
~ (229) $

*cask가 붙어 있는 앱은 GUI에서 동작하는 앱이고, cask가 없는 앱은 터미널 커맨드라인 베이스로 동작하는 앱입니다. 즉, 우리가 찾는 크롬은 cask가 붙어있는 웹브라우저입니다.

앱 설치

위에서 찾은 google-chrome을 설치하고자 합니다. 이제 brew install 커맨드를 이용하여 설치해보겠습니다.

brew install caskroom/cask/google-chrome

cask가 붙어 있는 앱을 설치할 땐, 위 커맨드 말고도

brew cask install google-chrome

이라고 해도 동작합니다.

결과는 아래와 같이 주루룩 나오게 되는데, 필자는 이미 chrome이 있기 때문에, 있다고 하고 설치가 멈췄습니다.

~ (228) $brew search chrome
==> Searching local taps...
chrome-cli chrome-export
==> Searching taps on GitHub...
caskroom/cask/chrome-devtools
caskroom/cask/chrome-remote-desktop-host
caskroom/cask/dmm-player-for-chrome
caskroom/cask/google-chrome
caskroom/versions/google-chrome-beta
caskroom/versions/google-chrome-canary
caskroom/versions/google-chrome-dev
==> Searching blacklisted, migrated and deleted formulae...
~ (229) $brew install caskroom/cask/google-chrome
==> brew cask install caskroom/cask/google-chrome
==> Satisfying dependencies
==> Downloading https://dl.google.com/chrome/mac/stable/GGRO/googlechrome.dmg
######################################################################## 100.0%
==> Verifying checksum for Cask google-chrome
==> Installing Cask google-chrome
==> Purging files for version 66.0.3359.170 of Cask google-chrome
Error: It seems there is already an App at '/Applications/Google Chrome.app'.

“그럼 이미 설치된 앱은 Homebrew에서 관리할 수 없는건가??”

그땐, –force 키워드를 통해 강제로 Homebrew에 집어넣어주면 가능합니다.

brew cask install google-chrome --force

결과 값:

~ (239) $brew cask install google-chrome --force
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (caskroom/cask, homebrew/core).
No changes to formulae.

==> Satisfying dependencies
==> Downloading https://dl.google.com/chrome/mac/stable/GGRO/googlechrome.dmg
######################################################################## 100.0%
==> Verifying checksum for Cask google-chrome
==> Installing Cask google-chrome
Warning: It seems there is already an App at '/Applications/Google Chrome.app'; overwriting.
==> Removing App '/Applications/Google Chrome.app'.
==> Moving App 'Google Chrome.app' to '/Applications/Google Chrome.app'.
🍺 google-chrome was successfully installed!
~ (240) $

앱 리스트 보기

아래 커맨드를 이용하여 Homebrew를 통해 설치된 앱들의 list를 볼 수 있습니다.

  • 커맨드 라인 앱의 경우 : brew list
  • GUI 앱에서 동작하는 앱의 경우 : brew cask list
~ (230) $brew cask list
betterzipql qlcolorcode qlvideo
iina qlimagesize
michaelvillar-timer qlmarkdown

앱 제거

설치된 앱 중 하나를 제거해보겠습니다. GUI에서 동작하는 앱의 경우, 앞에 cask를 꼭 붙여주셔야합니다. 아니면 아래와 같이 오류 메세지를 출력합니다.

brew remove <패키지 이름>
~ (231) $brew remove michaelvillar-timer
Error: No such keg: /usr/local/Cellar/michaelvillar-timer
~ (232) $brew cask remove michaelvillar-timer
==> Uninstalling Cask michaelvillar-timer
==> Backing App 'Timer.app' up to '/usr/local/Caskroom/michaelvillar-timer/1.3/T
==> Removing App '/Applications/Timer.app'.
==> Purging files for version 1.3 of Cask michaelvillar-timer
~ (233) $

현재 설치된 앱들의 버전 확인

  • 커맨드 라인 앱의 경우 : brew outdated
  • GUI 앱에서 동작하는 앱의 경우 : brew cask outdated

현재 설치된 버전과 최신 버전을 비교하여 보여줍니다.

~ (234) $brew cask outdated
qlcolorcode (2.0.8) != 2.0.9
qlvideo (1.89) != 1.91
~ (235) $

패키지를 업그레이드하기 위해선 아래 커맨드를 사용합니다.

  • 커맨드 라인 앱의 경우 : brew upgrade <패키지 이름>
  • GUI 앱에서 동작하는 앱의 경우 : brew cask upgrade <패키지 이름>
~ (235) $brew cask upgrade qlvideo
==> Upgrading 1 outdated package, with result:
qlvideo 1.91
==> Satisfying dependencies
==> Downloading https://github.com/Marginal/QLVideo/releases/download/rel-191/QL
######################################################################## 100.0%
==> Verifying checksum for Cask qlvideo
==> Starting upgrade for Cask qlvideo
==> Running uninstall process for qlvideo; your password may be necessary
==> Uninstalling packages:
uk.org.marginal.qlvideo
중략

모든 패키지와 Homebrew를 업데이트하고 싶다면, 아래 커맨드를 실행합니다.

brew upgrade && brew update

아래와 같이 12개의 outdated 패키지들을 업데이트한다고 결과값과 함께 보여줍니다.

~ (236) $brew upgrade && brew update
==> Upgrading 12 outdated packages, with result:
automake 1.15 -> 1.16.1, boost 1.65.1 -> 1.67.0_1, coreutils 8.27 -> 8.29, highlight 3.39 -> 3.43, htop 0.8.2.8 -> 2.2.0, icu4c 58.2 -> 61.1, libgpg-error 1.27 -> 1.31, lua 5.2.4_4 -> 5.3.4_3, node 8.1.0_1 -> 10.1.0, openssl@1.1 1.1.0e -> 1.1.0h, redis 3.2.9 -> 4.0.9, xz 5.2.3 -> 5.2.4

이전 버전의 패키지 삭제

업데이트 후 필요 없는 이전 버전의 패키지는 아래 커맨드로 삭제합니다.

  • 커맨드 라인 앱의 경우 : brew cleanup
  • GUI 앱에서 동작하는 앱의 경우 : brew cask cleanup
~ (238) $brew cask cleanup
==> Removing cached downloads
/Users/Travelholics/Library/Caches/Homebrew/Cask/betterzipql--latest.zip
/Users/Travelholics/Library/Caches/Homebrew/Cask/google-chrome--66.0.3359.170.dmg
/Users/Travelholics/Library/Caches/Homebrew/Cask/iina--0.0.15.1.dmg
/Users/Travelholics/Library/Caches/Homebrew/Cask/michaelvillar-timer--1.3.zip
/Users/Travelholics/Library/Caches/Homebrew/Cask/qlcolorcode--2.0.8.zip
/Users/Travelholics/Library/Caches/Homebrew/Cask/qlimagesize--latest.pkg
/Users/Travelholics/Library/Caches/Homebrew/Cask/qlmarkdown--1.3.5.zip
/Users/Travelholics/Library/Caches/Homebrew/Cask/qlvideo--1.89.pkg
/Users/Travelholics/Library/Caches/Homebrew/Cask/qlvideo--1.91.pkg
/Users/Travelholics/Library/Caches/Homebrew/Cask/suspicious-package--3.3.dmg
==> This operation has freed approximately 139.3MB of disk space.
~ (239) $

Homebrew를 이용하는 방법이 하나씩 찾아다니며 업데이트하는 것보다 훨씬 더 간편하고 빠른 방법이라는 것을 이해하셨으리라 생각합니다 🙂