Blog

Do Not Brew Language: Installing Language by Homebrew Is NOT Clean

July 22, 2015

Do Not Brew Language: Installing Language by Homebrew Is NOT Clean

※ 이 글은 원본이 갱신되었습니다. 원본을 읽어주시면 감사하겠습니다.

 

소프트웨어 마에스트로를 처음 시작했을때의 일이다.
우리 팀은 Python 3.4를 사용했다.
나는 처음 맥북을 사고는 brew뽕에 취해서1 gcc와 Python 3 등등을 brew로 설치했다.
그러자 멘토님이 “그렇게 설치하시면 안되요!” 라고 했고, 딱히 깔끔하게 복구할 방법이 떠오르지 않아서 맥북을 리셋했다.2
그때 당시에는 솔직히 이유를 알지 못했다.
하지만 지금에 와서는 그 이유를 알 것 같다.
이 글은 이 깨달음을 얻기까지 내가 brew때문에 삽질한 이야기다.

나는 블로그를 Jekyll로 운영중이다.
테스트를 위해선 어쩔 수 없이 ruby가 필요하다.
문제는 내가 (언제 그랬는진 몰라도) brew로 ruby를 깔았었던데에서 시작한다.
나는 프로그램들 업데이트를 위해 그냥 아무 생각 없이 brew update를 했었다.
그리고 시간이 지나서 블로그에 글을 쓴 것이 잘 출력되는지 확인하기 위해 jekyll을 실행하려고 하자 의존성 에러가 나왔다.
처음엔 gem 의존성 문제인줄 알고 모든 gem들을 모두 버전업했다.
하지만 에러는 여전했다.
별의 별 방법을 다 시도해도 안되서 (루비 설치가 잘못된 줄 알고) brew uninstall ruby를 해봤는데 갑자기 jekyll이 되기 시작했다.

알고보니 원인은 Mac에 ruby가 기본으로 내장되기 때문이다.
본인은 ruby를 잘 모르므로 뜯어보진 않았지만 jekyll 명령어가 실행될때 사용되는 ruby버전과 컴파일 할때 사용되는 ruby 버전이 엇갈렸던 것 같다.
당연히 실행이 될 리 없다.
이런 문제를 막으려면 애당초 ruby를 brew로 깔면 안된다.

사실 최종적으로는 이번에 내가 겪은 일은 ruby를 잘못 설치한 내 잘못이지만, Mac 사용자라면 누구나 겪을 수 있는 문제이기도 하다.
불친절하게도 brew측에선 설치시에 이런 문제가 생길 수 있음을 고지해주지 않는다.
심지어 brew info ruby를 해도 의존성 문제 등에 대한 언급은 없다.
심지어 나는 brew 자체의 버전 이슈로 brew로 설치된 ruby가 2개인 상황이었다.
이것을 정상적이라고 할 수 있겠는가?


그럼 어떻게 설치해야 깔끔하게 프로그래밍 언어를 설치할 수 있을까?

Python

Mac에 이미 기본적으로 2.6과 2.7이 설치되어 있다.
즉, Python 2 사용자는 그냥 별도로 설치 안해도 된다.
(굳이 2.7의 최신 버전을 써야한다면 이야기가 다르겠지만 말이다.)
그 외의 버전을 설치해야하는데 Tox를 사용해야한다면 (사실 Tox를 사용하지 않더라도 별 다른 이유가 없다면) Python은 공식 홈페이지에서 배포하는 설치본으로 설치하는게 제일 깔끔하다.
brew로는 2와 3의 가장 최신 버전만을 설치할 수 있는데, 공식 홈페이지에선 베타 버전을 포함한 여러 버전을 모두 받아 사용할 수 있다.
당연히 tox는 설치된 버전을 모두 인식한다.
후술할 rvm이나 nvm이 부러운 사람은 pyenv를 사용하는 것도 방법이 될 수 있다.

Ruby

Mac에 이미 기본적으로 2.0.0p481이 설치되어 있다.
Ruby를 jekyll이나 sass, github-pages, travis 명령어 정도만 쓸 사람이라면 저걸로 대부분 충분할 것이다.
Ruby의 여러 버전이 필요한 상황이라면 rvm을 사용하면 좋다.

Node.js / io.js

가볍게 쓸 것이라면 사실 brew로 설치해도 된다.
하지만 역시 여러 버전을 돌려가며 써야한다면 (io.js를 써야한다던가) nvm을 쓰면 된다.
다만 nvm은 rvm과 달리 node가 이미 적어도 하나 설치되어 있어야 설치할 수 있다.
(npm이 필요하므로)

C, C++

이미 X-Code가 있고, clang이 있다. 뭘 더 깔 필요가 없다.
굳이 gcc가 쓰고 싶다면 아예 Linux VM을 띄울 것을 추천하고 싶다.
이유인 즉슨 Mac은 gcc를 clang으로 링크해놓은 상태이기 때문이다.
이미 이것을 전제로 하고 Installer를 개발할때 Mac용 예외처리를 안했다면?
예상치 못한 오류를 조우할 수 있을 것이다.

PHP

(왜인지는 모르겠으나) Mac은 PHP도 내장하고 있다.
단지 PHP_CodeSniffer같은 것이 필요한것이라면 그냥 내장된 PHP를 쓰면 된다.
좀 더 최신 버전을 원한다면?
http://php-osx.liip.ch/를 사용하자.
애초에 brew를 쓰고 싶어도 brew에는 PHP가 없다.


brew는 굉장히 편한 도구임에는 틀림 없다.
본인도 이미 brew로 MySQL등을 설치해서 사용하고 있다.
하지만 아주 잠깐 편하자고 brew로 프로그래밍 언어를 설치했다가 의존성 문제 등으로 나처럼 낭패를 보진 말자.

덧: 언어 이야기만 했는데 DBMS중에 PostgreSQL을 설치할 사람은 brew 대신 Postgres.app을 사용하는 것도 좋다.


  1. Windows만 쓰던 입장에서, Ubuntu에서 apt-get을 쓰는게 매우 부러웠다. 
  2. 사실 gcc의 삭제는 brew uninstall gcc를 하면 되는 일이었다. Python도 마찬가지.