누군가 "시스템 Ruby를 사용하지 마세요"라고 조언한 적이 있을 겁니다. 좋은 조언이지만, 도대체 왜 그럴까요? 지금부터 그 이유를 자세히 알아보겠습니다.
어떤 Ruby를 사용하고 있나요?
macOS에는 "시스템 Ruby"가 기본적으로 사전 설치되어 있습니다.
which 명령어로 Ruby의 설치 위치를 확인할 수 있습니다:
$ which ruby
/usr/bin/ruby
만약 /usr/bin/ruby가 표시된다면, 그것은 macOS에 기본 탑재된 시스템 Ruby입니다.
시스템 Ruby를 업데이트하거나 gem을 추가하지 않는 한, 시스템 관리용 스크립트를 실행하는 정도로는 문제가 없습니다. 하지만 Ruby로 프로젝트를 개발할 때는 절대 사용해서는 안 됩니다.
개발용 Ruby는 따로 준비해야 합니다
Ruby로 프로젝트를 개발하려면 Homebrew로 Ruby를 직접 설치하거나, asdf, chruby, rbenv, rvm 같은 버전 관리자(version manager)를 사용해야 합니다.
버전 관리자는 여러 프로젝트를 동시에 진행하면서 각 프로젝트의 요구 버전이 다를 때 특히 유용합니다. 버전 관리자 비교와 Ruby 설치의 최선의 방법을 다룬 가이드가 필요하다면 "Install Ruby on a Mac" 아티클을 참고하세요.
그렇다면 왜 macOS 기본 Ruby를 사용하면 안 될까요? 개발 환경에서 Mac 기본 Ruby가 나쁜 선택이 되는 이유를 하나씩 살펴보겠습니다.
1. Gem 설치 시 권한 문제가 발생합니다
RubyGems는 Ruby 개발을 쉽고 재미있게 만들어 주는 즉시 사용 가능한 소프트웨어 라이브러리입니다. 대부분의 Ruby 프로젝트는 최소 몇 개의 gem을 사용합니다.
그런데 Mac 시스템 Ruby를 사용하면 gem install 명령이 시스템 Ruby 디렉터리인 /Library/Ruby/Gems/2.6.0에 gem을 저장하려고 시도합니다. 이 디렉터리는 시스템 슈퍼유저인 root가 소유하고 있어 일반 사용자에게는 쓰기 권한이 없습니다. 그리고 이 폴더는 애초에 함부로 변경해서도 안 되는 곳입니다.
예를 들어 gem install rails처럼 gem을 설치하려고 하면 다음과 같은 권한 오류가 발생합니다:
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.6.0 directory
2. 시스템 보안을 위반합니다
Unix 기반 시스템은 강력하기 때문에 우회 방법이 존재합니다. 슈퍼유저 권한으로 gem을 설치하면 권한 제한을 무시할 수 있죠. 하지만 절대 그러지 마세요!
$ sudo gem install rails
sudo를 입력하기 전이라면 잠시 멈추고, 스스로 발등을 찍으려는 것은 아닌지 생각해 봐야 합니다.
이 경우 sudo가 필요한 이유는 OS가 관리하는 시스템 파일을 변경하려고 하기 때문입니다. 하지 마세요! 시스템이 손상되거나 보안이 침해된 상태로 방치될 수 있습니다. 더 심각한 문제는, 설치하는 gem에 컴퓨터를 조작하는 악성 코드가 숨어 있을 가능성도 있다는 점입니다.
3. Gem 관리가 엉망이 됩니다
경험 많은 개발자들은 Bundler를 사용해 gem을 설치하고 의존성을 관리합니다.
서로 다른 버전의 gem을 요구하는 프로젝트가 여러 개 있다고 상상해 보세요. 프로젝트 사이에 새로운 gem이 릴리스되었을 수도 있고, 하나의 프로젝트 안에서도 서로 다른 gem이 같은 종속 gem의 다른 버전에 의존할 수 있습니다.
Bundler는 프로젝트 디렉터리의 Gemfile을 통해 필요한 gem 목록을 체계적으로 추적합니다. 만약 sudo로 시스템 Ruby에 gem을 설치했다면, 시스템 Ruby 디렉터리에는 호환되지 않는 gem들이 뒤엉킨 난장판이 생기고 말 것입니다.
홈 디렉터리에 gem을 저장하는 옵션으로 Bundler를 설치하면 시스템 권한 문제를 우회할 수 있지만, 차라리 Homebrew로 Ruby를 설치하거나 버전 관리자를 사용하는 편이 훨씬 간편합니다. 함께 설치되는 Bundler가 로컬 개발 환경을 알아서 올바르게 구성해 줍니다.
4. 항상 최신 Ruby를 사용하세요
새 프로젝트를 시작할 때는 최신 Ruby 릴리스를 사용하는 것이 좋습니다(이 글 작성 시점 기준 3.0입니다).
macOS Catalina와 Big Sur에 탑재된 시스템 Ruby는 2.6.3으로 꽤 오래된 버전입니다. Ruby를 처음 배우는 단계라면 Homebrew로 설치해 Ruby 3.0 환경에서 프로젝트를 진행하세요. 이후 새로운 프로젝트를 시작할 무렵이 되면, 서로 다른 Ruby 버전을 넘나들며 여러 프로젝트를 관리할 수 있도록 버전 관리자를 도입할 적절한 시점일 겁니다.
Big Sur 이후의 macOS는 어떻게 될까?
Apple은 공식적으로 다음과 같이 밝힌 바 있습니다:
"Python, Ruby, Perl과 같은 스크립팅 언어 런타임은 레거시 소프트웨어와의 호환성을 위해 macOS에 포함되어 있습니다. 향후 macOS 버전에는 스크립팅 언어 런타임이 기본 포함되지 않으며, 추가 패키지 설치가 필요할 수 있습니다."
2021년 말에 이 글을 읽고 있다면, 시스템 Ruby는 이미 사라졌을 수도 있습니다. 아직 남아 있다 해도, 미리 Homebrew나 버전 관리자로 Ruby를 설치해 두는 것이 현명합니다.
Ruby 개발을 즐기세요
Rails로 웹 애플리케이션을 만들 계획이라면 "Install Rails on a Mac" 가이드를 참고해 보세요. 이 가이드는 "Install Ruby on a Mac"의 연장선으로, Node와 Ruby를 모두 지원하는 버전 관리자를 고르는 방법까지 다룹니다.
Ruby 코딩의 즐거움을 마음껏 누리세요! Ruby는 원래 '프로그래머의 행복'을 위해 설계된 언어로 유명하니까요. 다만 잊지 마세요. 시스템 Ruby는 당신이 아니라 macOS를 위해 존재한다는 사실을요.