Ruby

 



'''TIOBE 선정 올해의 프로그래밍 언어'''
2005년
Java

2006년
Ruby

2007년
Python
[image]
1. 소개
2. 버전
3. 특징
3.1. 순수 객체지향
3.2. 함수형 언어
3.3. 메타 프로그래밍
3.4. 그 외 특징
4. 인기
5. 라이벌
6. 웹 프레임워크
7. 기타
8. 바깥 고리


1. 소개


컴퓨터를 배운지 얼마 되지 않았을 때, 나는 프로그래밍 언어에 관심을 갖게 되었습니다. 당시 이상적인 프로그래밍 언어는 반드시 이룰 수 있는 것이라고 믿었고, 가능하면 그런 언어를 만드는 디자이너가 되고 싶었습니다. (중략)

나는 행복해지기 위해서 살아간다고 믿습니다(적어도 어느 부문에서는). 이런 믿음에 따라, 루비는 프로그래밍을 쉬우면서도 즐거운 일로 만들기 위해 디자인 되었습니다. 루비는 여러분이 프로그래밍의 창조적인 면에만 집중할 수 있도록 해주고, 스트레스를 줄여줄 것입니다.

- 마츠모토 유키히로, Programming Ruby의 추천사에서

루비는 간결함과 생산성을 강조한 동적인 오픈 소스 프로그래밍 언어입니다. 루비의 우아한 문법으로 자연스럽게 읽히고 쓰기 편한 프로그램을 만들 수 있습니다.

- 루비 공식 홈페이지

스크립트 언어의 일종. 2021년 1월 기준 최신 안정화 버전은 3.0.0이다[1]. 창시자는 마츠모토 유키히로(Matz)로 1995년에 발표되었다. 동서양 모두 마츠라는 애칭으로 부른다. 트위터 bio를 Rubyのパパ (Ruby의 아빠)라고 쓸 정도로 Ruby에 대한 애정이 강하다. 그 때문인지 Ruby 유저들 역시 숫자는 적지만 언어에 대한 애착이 강한 편이다.
PythonPerl, Smalltalk, Ada, Lisp, Eiffel 등의 프로그래밍 언어로부터 일부 문법 사항을 계승하고 발전시켜, 일반적인 목적에 적합하게 만든 언어이다. 특히 Python은 지금도 서로 영향을 주고 받는 라이벌 관계. 언어의 문법이 쉽고 확장이 편리해서, 잘 디자인된 라이브러리를 이용하면 프로그래밍을 처음 시작한 사람도 복잡한 작업을 상대적으로 쉽게 할 수 있다는 점이 매력적이다. 그 때문에 객체 지향 프로그래밍 언어지만, 객체 지향에 대한 흔한 선입견과는 달리 초보자들도 쉽게 다룰 수 있다.
세계 10대 프로그래밍 언어 중 하나로 꼽히기도 하였으며, 2018년 새로 생성된 저장소 개수를 기준으로 GitHub에서 인기언어 5위의 자리를 차지했다. Made in Japan이라서인지 일본에서는 Python보다도 인기가 많다. 특히 웹 개발에서는 백엔드Ruby on Rails와 함께 많이 쓰이고, 심지어 임베디드에도 쓰이는 등 다방면에 절찬리 쓰이는 중이다. macOS의 경우 El Capitan(10.11)부터 최신 버전이 기본적으로 설치되어 나간다. JetBrainsRubyMine이라는 IDE를 사용하면 Ruby와 RoR 코드를 손쉽게 편집하고 배포할 수 있다. 비주얼 스튜디오 코드 같은 텍스트 에디터에서도 Ruby 플러그인을 제공한다.
이름의 유래는 창시자 지인의 탄생석에서 따왔다고 한다. 즉 진짜로 보석 이름에서 따온 것.

2. 버전


루비의 버전은 A.B.C 형식으로 표현하며 일반적인 오픈소스 진영의 표기와 마찬가지로 B에 해당하는 숫자가 홀수면 개발버전, 짝수면 안정화 버전이다. 오픈 진영에서는 일반적으로 이렇게 표기한다. 모두 다 이 법칙을 지키는건 아니지만, 대부분의 오픈 소스 진영의 프로그램들은 이렇게 분류가 가능하다. 단 1.9.x는 예외. 1.9 자체가 안정 버전. 또한 루비는 1.9버전을 기점으로 큰 성능의 향상이 있었으며, 이때 유저들 또한 많이 유입되었다. 이 때문에 1.9버전은 지금도 사용되는 곳이 간간이 있지만, 구버전을 사용해서 득볼 수 있는 것은 없으므로 특수한 케이스가 아니라면 최신 버전을 사용하자.
처리기로는 공식 인터프리터인 MRI(Matz's Ruby Interpreter. C언어로 만들어져서 CRuby라고 불리기도 한다)를 필두로 MacRuby, JRuby[2], IronRuby[3], Rubinius, MagLev 등 여러가지가 있다. 물론 표준 기능은 원칙상 다 같아야 하나, 어떤 언어로 어떤 가상 머신 위에서 어떻게 만드느냐의 차이가 있다. 근데 문제는 루비는 호환성이라는 개념을 반정도 쓰레기통에 갖다 버려서 인터프리터 종류는 둘째치고 버전이 다르다고 호환이 안되는 경우가 왕왕 있었다. 이 때문에 루비는 유달리 최신버전이 많이 강조된다.

3. 특징



3.1. 순수 객체지향


순수 객체지향적 언어는 원시 자료형이 사실상 존재하지 않고 모든 것은 객체인 언어를 말하는데, 루비가 이런 언어 중 하나이다. 다른 언어 중 예를 들어서 Java의 경우에는 int, char 등 원시 자료형이 있고, 그것을 Boxing한 Integer, Character 등의 래퍼 클래스가 있다. 루비는 이러한 '''클래스'''만 존재하고 원시 자료형이라 구분지을 만한 것이 존재하지 않는다. 그 외에도 모듈이 있는데 모듈도 클래스다. 메소드도 당연히 클래스. 그리고 이 클래스는 모두 열려있다. 이를 OpenClass라고 하는데, 한마디로 '''사용자가 마음대로 수정하는 것이 가능하다.'''

3.2. 함수형 언어


특이한 점이라면 스칼라와 같은 함수형 언어로서의 특징도 가진다는 것이다. 언어차원에서 Block이라는 클래스를 지원하기 때문에 변수나 메소드의 인수로 코드의 집합, 즉 우리가 흔히 함수나 메소드로 부르는 그것을 전달할 수 있다. 그런 관계로 당연히 메소드 안에서 메소드를 생성 가능하며, 클로저를 지원한다. 또, 요즘의 Java[4], C++, Python과 같은 고급언어는 거의 모두 지원하는 람다도 있다. 게다가 아래의 메타 프로그래밍과 합쳐서 더욱 강력히 작용하기도 한다.

3.3. 메타 프로그래밍


가장 큰 장점은 언어 자체를 쉽게 확장시킬 수 있는 '메타 프로그래밍'을 지원한다는 것이다. 요즘 C++ 등의 언어도 지원하는 상황이긴 하지만 루비는 객체지향적인 특징과 함수형 언어적인 특징이 결합되어 더욱 강력하게 나타난다. 사실 마츠모토 유키히로 본인 자신부터 "이맥스는 내 인생을 어떻게 바꾸었나" 라는 슬라이드쇼를 할정도의 진성 이맥스 빠돌이였고, 거기서 Elisp intepreter로서의 이맥스의 소스코드를 보면서 언어 구현하는 방법을 배웠다고 한다. 그런 관계로 이런 메타 프로그래밍은 언어 차원에서 권장하는 기능이고 매우 큰 프로그램도 매우 작은 소스로 가능하게 만들어준다.

3.4. 그 외 특징


  • 모듈과 클래스를 다른 모듈이나 클래스 또는 객체에 붙여서 확장시키는 개념을 최초로 도입. 다중 상속에 대한 새로운 해석/구현으로 볼 수 있으며 실제로 C++의 것보다 많이 간편하고 써먹기도 쉽다. 나중에는 C\# 등에도 이러한 개념이 비슷하게 도입되었다.
  • load, require 등으로 외부 소스를 참조할 때 소스 파일의 실제 경로를 지정해 줄 수 있다는 것도 특징이라면 특징. 같은 인터프리터 언어인 , 파이썬, 루아는 이게 안된다.
  • 0을 false로 취급하는 여러 언어들과는 달리 0도 true로 취급한다. 이 점은 루아도 비슷하다.
반대로 문제점이 있다면 실행 속도가 느리다는 것이다. 2.x 버전 기준으로 컴파일 언어에 비해 성능이 비교적 떨어지는 Python과 엎치락뒤치락 하는 편이다. 다만 지속적인 개선을 통해 요즘에는 속도가 상당히 빨라졌고, 최근 Ruby는 Vagrant처럼 성능이 중요하다고 여겨지는 가상화 소프트웨어 등에도 사용되고 있다.

4. 인기


'''Programming Ruby'''(곡괭이 책)
[image]
[image]
원서 (4판)
4판 한국어 번역서
원래는 일본에서만 조금 사용하는 정도였지만, Programming Ruby[5]라는 희대의 명저가 나오면서 주목받기 시작하다가, Ruby on Rails라는 웹 애플리케이션 프레임워크가 나오면서 사용자가 꽤 많이 늘어나고 있다.
이 언어가 이렇게 뜨게 된 가장 아이러니한 점은 라이벌 언어인 파이썬과 펄의 지원 문서가 모두 영어인데 루비는 일본에서 개발되었기 때문에 기본적으로 모든 API에 대한 설명과 기타 모든 문서가 일본어로 되어 있었기 때문이다. 그렇게 일본 내부를 중심으로 인기를 얻다가 실용주의 프로그래밍의 저자가 쓴 곡괭이책과 2005년부터 지원되기 시작한 루비 온 레일즈라는 MVC 웹 프레임워크가 나오면서 일본 밖(주로 유럽)에서도 인기를 끌고 있다. 2012년에는 GitHub에서 루비가 2위를 차지했다!(1위는 자바스크립트) GitHub 사이트 자체도 Ruby on Rails로 만들어졌다.
일본 금융회사들이 채용하고 있는 프로그래밍 언어이다. 이 때문에 한국 금융사에서도 일본제 프로그램을 해독하기 위해 프로그래밍 인원에 대한 루비 재교육을 일부 하고 있다. 미국 금융권에서도 Ruby 프로그래머 대우가 좋아지는 중. 이유는 당연히 일본제 프로그램 때문이다. 일본에서는 알고리즘 트레이딩을 Ruby로 만든다.

5. 라이벌


문서를 읽어보면 알겠지만, Python이 유달리 많이 등장한다. 두 언어가 유달리 비슷하면서도 유달리 대비되는 특성들이 많아 라이벌 구도를 이루기 때문이다. 오죽했으면 2015년 루비 카이기에서 한 루비 유저는 파이썬 쓰는 친구가 자꾸 Python으로 넘어오라고 꼬신다고(...). 이에 대해 다른 유저들은 파이썬 가서 좋은 기능 있으면, 가지고 와서 루비에 커밋하라는 대안을 제시했다. 사실 파이썬보다는 Perl과 많이 닮았고 따르는 철학도 똑같다. TIMTOWTDI(There's more than one way to do it). 파이썬의 철학과는 정반대(There should be one - and preferably only one - obvious way to do it.) 단 처럼 Once write, read never 언어는 아니다. 하지만 펄의 인지도가 과거보다 많이 떨어져서 물망오른 파이썬과 라이벌 구도를 이루는 듯 하다. (예시: Python & Ruby - 생활코딩)

6. 웹 프레임워크


Ruby on Rails는 풀 스택 웹 프레임워크이고, non full-stack 웹 프레임워크로는 Sinatra 등이 있다. PythonFlask에 해당하는 게 Ruby의 Sinatra이다. 대표적인 통합 개발 환경으로는 JetBrainsRubyMine이 있다. 텍스트 에디터 중에서는 Ruby 플러그인이 제공되는 비주얼 스튜디오 코드가 많이 쓰이고 있다.
에어비앤비, 킥스타터, GitHub 등이 루비 온 레일즈를 사용한다.
루비와 루비 온 레일즈를 전문으로 공부하는 사이트도 생겼다. 코드카데미 강좌
루비 온 레일스 코리아 커뮤니티(RORLAB) http://rorlab.org 에서 만든 초보자를 위한 레일스 가이드 http://rorlab.gitbooks.io/railsguidebook 가 있다.
RORLAB에서는 매주 화요일 오프라인 모임을 진행하며 루비와 레일스가 국내에서도 널리 쓰이도록 활동한다. 모임 참가 신청은 미텁에서 할 수 있고 페이스북 그룹슬랙에 가입하여 온라인으로도 참여할 수 있다.

7. 기타


많은 스케치업용 플러그인이 루비 언어를 사용한다.
RPG 쯔꾸르 XP부터는 이 언어 기반의 스크립트 엔진을 베이스로 작동하며, 스크립트를 통해 더욱 세부적인 제작을 할 수 있게 되었다. 정확하게는 Ruby가 아닌 RGSS('''R'''uby '''G'''ame '''S'''cripting '''S'''ystem)라는 명칭으로, 최신판 RGSS3(VX Ace) 기준 Ruby 버전 1.9.2(XP 및 VX은 1.8.1)의 라이브러리를 기반으로 하여 만들어진 언어이다. 기존 Ruby에서 게임 제작에 불필요한 명령어는 빼고, 반대로 기존에 없던 게임 제작에 특화된 새로운 명령어가 추가되는 등, 문법은 같으나 사실상 별개의 언어로 취급해야 옳다. 물론 루비의 속도가 느린데다 최적화도 잘 안 되어있어서 더 이상의 자세한 설명은 생략한다. 다만 RPG 쯔꾸르 MV부터는 JavaScript로 변경되었다.
또한 macOS의 패키지 매니저 Homebrew도 루비 기반으로 돌아간다. FreeBSD의 Ports 같은 역할을 해 주는 것이라 보면 된다.
루비 언어로 캐릭터를 조작해서 던전을 클리어하는 게임이 있다. 단, 페이스북 계정이 있어야 한다.
패키지 관리자 이름이 보석을 의미하는 gem이다 보니, 간혹 타노스와 엮이기도 한다. Thanos JS 발 유머인데, power, reality, mind, space, time, soul 패키지를 설치하고 thanos snap-fingers --with-glove를 입력하면 코드 길이가 반으로 줄어든다는 스포일러성 유머.[6] 이 유머를 진짜 node.js 패키지로 만든 thanos-js도 존재한다.

8. 바깥 고리



[1] 루비 프로그래밍 언어는 크리스마스 때에 버전업을 하는 것으로 유명하다. 3.0.0 버전이 2021년 크리스마스에 2.7.0 버전은 2019년 크리스마스, 2.6.0버전은 2018년 크리스마스... 2.1.0 버전은 2013년 크리스마스에 출시되었다.[2] Java로 만들어진 인터프리터. GIL(Global Interpreter Lock)이 없어 멀티 쓰레드 병렬 수행이 가능하다.[3] 닷넷 프레임워크 지원[4] 자바는 자바 8부터 람다를 지원한다.[5] 표지에 곡괭이가 그려져 있어서 일명 곡괭이 책. 다만 일본에서 나올 때는 표지에 토끼가 그려져 있었다고.[6] 실제로는 Netlify Drop에서 기술 홍보를 위해 만든 데모용 패러디 사이트로, gem install을 통해서는 당장 power 패키지부터 찾을 수 없는 패키지라고 나온다.