2025년에 Ruby를 배우다: Python 개발자의 시선으로 본 Ruby

Learning Ruby as a Pythonista

작성자
HackerNews
발행일
2025년 09월 22일

핵심 요약

  • 1 Python 개발자가 2025년에 Ruby를 배우며 겪는 문화적 충격과 흥미로운 언어적 특징들을 상세히 설명합니다.
  • 2 Ruby의 Gem 다중 버전 관리 시스템이 Python의 가상 환경 없이도 의존성 충돌을 방지하는 방식에 깊은 인상을 받았습니다.
  • 3 메서드 이름 규칙(?, !, =), 블록, include를 통한 모듈 주입 등 Ruby 고유의 표현 방식과 철학을 탐구합니다.

도입

저자는 평생 프로그래밍 언어를 배우는 것을 즐기며, 주로 Python과 Rust를 사용해왔습니다. 2014년 Python을 선택했던 배경(Qt 바인딩)을 회상하며, 2025년에 Ruby를 배우게 된 계기와 그 과정에서 느낀 언어 철학의 차이를 비교합니다. 표면적인 학습이 아닌, 언어의 내부 동작 방식을 이해하려는 깊이 있는 접근 방식을 강조하며, Ruby와 Python을 대조하여 언어에 대한 진지한 접근을 시도합니다.

저자는 Flipkart 재직 중 대용량 CSV 파일 처리를 위해 Python을 학습했으며, 당시 Ruby의 Qt 바인딩 미유지로 Python을 선택했던 일화를 언급합니다. Ruby 커뮤니티의 주요 인물인 Zed Shaw(Mongrel), Steve Klabnik(Rails, Rust Book), DHH(Rails 창시자) 등에 대한 간접적인 만남을 회상합니다. 초기에는 Ruby의 필요성을 느끼지 못했으나, 친구의 조언과 새로운 회사에서의 요구로 학습을 시작했습니다. Python의 과도한 사용과 마이크로프레임워크(Flask)의 한계를 지적하며, Django와 같이 ‘의견이 있는(opinionated)’ 프레임워크의 장점을 인식하게 됩니다.

Ruby 학습 과정

  • LSP 및 환경 관리: Neovim용 LSP로 ruby-lsp를 선택했으며, mise-en-place를 사용하여 Ruby 버전을 관리했습니다.

  • Gem 다중 버전 관리: gem list 명령어를 통해 Ruby가 여러 버전의 Gem을 전역적으로 관리하는 방식(gem-version/ 디렉토리)에 깊은 인상을 받았습니다. 이는 Python의 virtualenv 없이도 의존성 충돌을 방지하며, ‘Ruby Way’의 큰 장점으로 꼽힙니다.

Rubyisms

  • 메서드 이름 규칙: ?(boolean 반환), !(위험한/수정하는 메서드), = (할당 메서드) 접미사를 통해 메서드의 의도를 명확히 하는 컨벤션을 설명합니다. 이는 강제성은 없지만 강력한 관습으로 작용한다고 언급합니다.

  • 블록: Python의 lambdacontextmanager와 유사하지만 다른 Ruby의 블록 개념(yield, &block)에 대한 흥미를 표현합니다.

  • return 선택 사항: Rust에서 경험했던 것처럼 Ruby에서도 return이 선택 사항인 점을 언급하며, 코드의 우아함을 인정합니다.

  • include와 Monkey Patching: include를 통해 모듈의 동작을 클래스에 주입하여 조상 체인에 추가하는 방식(예: String, IntegerPalindrome 모듈 주입)에 깊은 인상을 받습니다. 이는 Monkey Patching의 한 형태로, Rust의 impl과 비교하며 런타임 동작 변경 가능성에 대한 우려와 함께 Ruby의 특징으로 받아들입니다.

  • 모듈 해결: requirerelative_require를 설명하며, env_logger::init()와 같이 명시적인 use 없이도 모듈 함수를 호출하는 Rust의 방식이 Ruby에서 왔다는 사실에 놀라움을 표합니다.

결론

저자는 아직 Rails를 배우는 중이며, 'Rails Way'를 깊이 이해하려 노력하고 있습니다. Python에서 Ruby로의 전환은 '다른 도시로 이사 가는 것'과 같은 문화적 충격이지만, 동시에 도로의 구덩이를 직접 메울 수 있는 자유로움('monke loose')을 느낀다고 비유합니다. Ruby의 다중 버전 Gem 관리, 명확한 메서드 명명 규칙, 그리고 `include`를 통한 유연한 동작 주입 방식에 긍정적인 평가를 내립니다. 한 달 후 Ruby에 대한 추가적인 경험을 공유할 예정임을 밝히며, Rails의 내부 동작 원리를 이해하는 것이 중요하다고 강조합니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!