※ 이 게시물은 오래되었고, 작성자는 이 게시물의 방법들 중 공감하지 못하는 내용이 꽤 있습니다. 잘못된 정보 또한 포함하고 있으므로 주의를 요합니다.

소프트웨어 마에스트로를 처음 시작했을때의 일입니다. 우리 팀은 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으로 ruby를 쓸 일이 조금이라도 있는 사용자라면 누구나 겪을 수 있는 문제이기도 합니다. 불친절하게도 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로 설치해도 됩니다. 하지만 역시 여러 버전을 돌려가며 써야한다면 (최신버전을 써야한다던가) nvm을 쓰면 됩니다. 다만 nvm은 rvm과 달리 npm 구동을 위해 node가 이미 적어도 하나 설치되어 있어야 설치할 수 있습니다.

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도 마찬가지.