맥을 사용하는 개발자의 패키지 관리자 홈브루(Homebrew) 설치방법을 서술하겠습니다. 배경지식은 소프트웨어 개발역사와 오픈소스 커뮤니티 생태계같은 얘기라서 초보개발자인 저도 사실 잘 모르지만 제가 이해한대로만 언급하고 가겠습니다. iOS앱개발만 할때는 이런거 모르고 살아도 별탈 없었는데 웹개발을 하다보니 이런저런 것들을 하게 되더군요.
홈브루는 무엇인가?
여러분이 홈브루를 궁금해서 이곳에 왔다면 홈브루가 뭔지 왜 이걸 쓰는지등 이유가 궁금 하실 겁니다. 아니, 그 것 조차 모르겠는데 여러분이 홈브루를 설치하려 드는 이유를 제가 맞춰보죠.
“맥에서 뭔가 개발하다 뭐 좀 가져다 쓸랬더니 홈브루로 설치하라고 해서…”
맞죠? 어떻게 알았냐고요? 제가 그랬으니까요..홈브루는 맥의 CLI 환경에서 사용되는 패키지 관리자입니다. 물론 홈브루만이 Mac에서 쓸 수 있는 유일한 패키지 관리자는 아닙니다. 패키지관리자는 의존성관리 도구의 범주에 들어갑니다. 혹은 그 반대일 수도 있지만 개발자가 패키지 관리자를 사용하는 가장 큰 이유가 의존성 관리 때문이겠지요. 꼭 오픈소스 코드 관리뿐만 아니라 맥 터미널에서 CLI로 실행시키는 크고 작은 커맨드라인 프로그램을 설치할 때도 홈브루를 씁니다. 맥에서 뭐 좀 설치할라치면 홈브루를 이용해서 설치하라는 안내를 보곤하죠.
의존성 관리 도구와 패키지관리자
개발세상에는 OS, 개발필드에 따라 여러 의존성 관리도구와 패키지 관리자가 있더군요. 레드햇 리눅스는 리눅스 패키지 관리자인 RPM을, PHP의 의존성 관리도구는 컴포저, Node.js 서버프로그래밍에서는 npm 같은 것들이 있고, 저같은 맥앱이나 아이폰앱 개발자에겐 라이브러리 관리를 위한 코코아팟(Cocoapods)이 있지요.
‘패키지’ 라는 용어가 생소할 수도 있는데요. 그냥 프로그램 묶음 또는 소프트웨어 묶음이라는 말로 생각해도 문제는 없을 것입니다. 어떤건 라이브러리이고 어떤건 프레임워크고 어떤건 패키지인데 결론은 소스코드가 있는 프로그램인건 마찬가지니까요. ‘패키지’같은 경우 Node.js 프로젝트를 만들 때 자신의 애플리케이션 소스를 구성하는 전체 (루트)폴더, Vapor 프로젝트에서도 마찮가지로 그 폴더를 ‘패키지’라고 하더군요. 그리고 자신이 구성한 패키지를 빌드해서 나오는게 웹애플리케이션이 됩니다. 거기에다 내가 구성한 패키지는 다른사람이 만든 또다른 패키지를 포함하고 있게되는 상황이 많아집니다.
저는 iOS와 OS X 개발로 시작, 그러니까 코코아(Cocoa)나 마시던 개인 개발자였습니다. 그러니까 혼자노는 응용프로그래머이죠. 혼자놀때 초보시절엔 오픈소스를 쓸일이 별로 없었습니다. 프로젝트도 그리 크지 않고요. 내 것도 못 만드는데 남이 만든거 가져다 쓰는 건 고급스킬이죠. 더군다나 iOS앱개발만 하면 홈브루를 쓸일이 별로 없기도 합니다.
남이 만든거 가져다 쓰는게 왜 고급 스킬이겠느냐는 의문이 있을 수 있는데 대부분은 한번 가져다 쓰면 끝이 아닙니다. 버전업 때마다 천지개벽하는 Swift 언어를 예로 들면 Swift언어가 업그레이드 되면 내가 가져다 쓴 오픈소스 라이브러리도 업데이트를 마구마구합니다. 그럼 저도 업데이트 해야하죠. 남이 만든 소스코드를 내가 또 수정하는 건 왠 미친짓인가 싶습니다. 코드를 보다 보면 이 오픈소스가 또 다른 오픈소스를 가져다 썼네요? 이것도 고쳐야겠네? 하다 보면 남이 만든 걸 가져다 쓰는게 무의미해집니다. 그래서 오픈커뮤니티 사람들이 새로 업데이트하길 기다렸다가 내 라이브러리를 업데이트 하는 게 정석입니다. 기다리기 싫으면 자신이 직접 커뮤니티에 기여하든지 기여자가 많고 활성화된 오픈소스만 가져다 쓰는게 상책입니다.
이렇게 남이 만든 소프트웨어 패키지,라이브러리등을 가져다 쓸땐 ‘관리의 비용’이 듭니다. 그렇게 가져다 쓰는게 한 두개가 아닐 때 더욱 그렇죠. 다시 다운로드받고 프로젝트 파일에 다시 임포팅하고 그럴필요없이 홈브루,코코아팟 같은 관리 소프트웨어를 이용합니다
그처럼 오픈소스 역시도 패키지형태로 배포되곤 하는데 (남의소스를 내거랑 합쳐서 빌드해야하니까..) 관리도구를 사용하면 이 패키지는 버전 몇을 쓸거고 어떤 또 다른 패키지를 가져다 썼는지 그 버전은 무엇인지등등의 정보를 기반으로 패키지를 업데이트 합니다. 내 프로젝트는 이 오픈소스를 가져다 쓰고 그건 다시 저 오픈소스가 필요하고 그거는 또 이게 필요하고.. 결국 내 프로젝트가 다른 패키지에 의존하게 되는 상황이 되어서 그런 의존성을 관리하기 쉽게 하고자 나온게 의존성 관리 도구라고 합니다.
Node.js를 공부하던때 누군가 npm을 앱스토어라고 표현하던데 가장 쉽게 이해할 수 있는 설명이 아닐까 합니다. 배포와 업데이트를 관리하죠.
Installing Homebrew (홈브루 설치하기)
홈브루 홈페이지에가보면 한글 도움말이 잘 되어있습니다. 홈브루 설치는 그곳에 나온 설치명령어를 터미널에 입력하면 되는데요. 저는 맥의 CLI 툴인 터미널 프로그램에서 아래 명령어를 넣어서 홈브루 설치를 시작했습니다. 홈페이지에 나온 설치명령어와 조금 다르지만 어쨌든 잘 설치되는 군요.
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
그럼 아래처럼 메시지가 나오면서 설치가 시작되고 이것저것 만드느라 시간이 좀 걸립니다.(내 소중한 맥이 지저분해지는 느낌이지만..)
설치가 완료되면 아래처럼 Installation successful!
메시지가 나옵니다.
이렇게 맥에 홈브루 설치가 완료 되었습니다.
홈브루 설치위치는 /usr/local 입니다. 파인더를 열고 Command + Shift + G 키를 눌러/usr/local
를 입력해 이동해보면 아래처럼 Homebrew 폴더가 생긴걸 볼 수 있습니다.
이제 홈브루로 이런 저런것들을 설치하고 관리할 준비가 되었습니다.
Updating Homebrew
홈브루도 프로그램(또는 소프트웨어)이므로, 업데이트가 있을 수 있는데요. 시간이 지나 최신 버전으로 업데이트하려면 아래 명령어를 넣으면 됩니다.
brew update
Uninstall Homebrew
홈브루를 삭제하려면 아래 명령어를 넣어서 삭제할 수 있다고 합니다.
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
도움이 될만한 관련 링크
http://www.popit.kr/개발자를-위한-맥mac-정보-패키지관리자-homebrew/
쿠루미 예뻐요
쿠루미 재밌는 캐릭터죠 ^^ 블로그 포스팅때문에 예전처럼 터미널을 꾸미지 못해 아쉬워요