상세 컨텐츠

본문 제목

루비를 깨우치다: 루비 인터널의 이해

전체 출간 도서

by 비제이퍼블릭 2014. 8. 13. 10:10

본문

루비를 깨우치다

: 루비 인터널의 이해

 

저자 팻 쇼네시

역자 최효성

 

출판사 비제이퍼블릭

출간 2014829()

정가 27,500

페이지 412

판형 173 x 230

 

ISBN 978-89-94774-76-3 (93000)

원서정보 Ruby Under a Microscope

 

 

책 소개

 

루비의 내부 구조를 파헤치,

루비로 유연함과 객체지향성을 강화하자

 

루비는 간결함에 초점을 강력한 프로그래밍 언어이지만, 우아한 문법 뒤에는 없이 작업들이 감춰져 있다.

 

『루비를 깨우치다: 루비 인터널의 이해』에는 광범위한 다이어그램이 삽입되어 있고 루비가 어떻게 구현되어 있는지에 대한 자세한 설명(C언어에 대한 지식이 없어도 이해할 있음) 함께 제공되기 때문에 실제로 루비의 핵심을 있다. 책의 저자는 프로그래밍 언어가 동작하는 장면 뒤에서 일어나는 것을 보여주기 위해 루비코드를 이용한 일련의 실험을 배치하여 과학적 접근을 시도한다. 루비의 가비지 컬렉션 알고리즘뿐만 아니라, 다른 방법으로 구현한 개의 루비 대체 툴인 JRuby Rubinius 대한 정보도 찾아볼 있다.

 

이 책에서 다루는 내용

 

- 몇 가지 컴퓨터 사이언스 개념이 어떻게 루비의 복잡한 구현에 기초하는가

- 루비가 어떻게 가상머신을 이용해서 코드를 실행하는가

- 클래스와 모듈이 루비 내에서 어떤 식으로 동일하게 취급되는가

- 루비가 원래 리습(Lisp)용으로 개발된 알고리즘을 어떤 식으로 차용해서 사용하는가

- 루비가 코드를 파싱하고 이해하기 위해 어떻게 문법을 이용하는가

- 컴파일러를 이용해서 루비코드를 어떻게 다른 언어로 변환하는가

 

모든 프로그래밍 언어는 내부 구조를 알 필요가 있다. 언어 구현에 흥미를 가지고 있거나 루비를 더 깊이 알고 싶다면, 『루비를 깨우치다: 루비 인터널의 이해 』에서 더 훌륭한 프로그래머가 되기 위한 매력적인 방법을 찾게 될 것이다.

 

* 이 책은 루비 2.x, 1.9, 1.8 버전을 룬다.

 

 

독자 대상

 

초중급

 

 

저자 소개

 

팻 쇼네시Pat Shaughnessy

 

프로그래밍 언어에 대한 코딩 전문성과 열정으로 유명한 쇼네시는 경영 컨설팅 회사인 McKinsey & Co.에서 근무하는 루비 개발자이며, http://patshaughnessy.net 자신을 글을 게재하고 튜토리얼을 작성한다. 또한 Ruby Conference Circuit에서 정규 발표자로 활동하고 있으며, 그의 기사와 발표는 Ruby Weekly newsletter, Ruby5 podcasts, Ruby Show에서 특집으로 다뤄왔다.

 

 

역자 소개

 

최효성

 

주로 루비온레일스 프레임워크를 이용하여 웹 애플리케이션을 개발하고 있으며, 루비온레일스 오프라인 강의를 격주로 진행하는 ROR Lab.의 운영자이기도 하다. 국내 루비 관련 커뮤니티 활동이 침체된 가운데 ROR Lab.을 기반으로 루비온레일스 초보자를 위한 길라잡이의 역할을 자청하며 루비온레일스 관련 리소스의 한글화 작업도 꾸준히 해오고 있다. 루비온레일스 공식 가이드 문서의 한글화 작업, Railscasts 스크린캐스트 한글화 작업, 그리고 현재 진행 중인 Michael Hartl Ruby on Rails Tutorial 공동 번역 프로젝트 등을 주도하고 있으며, 저술활동으로는 『초보자를 위한 레일스 가이드북』 전자책을 공동 집필하였고, 또한 전자책 단독 집필서로는 『Devise 젬 파헤치기』와 『FoundBlog 따라하기』가 있다. 페이스북 그룹 Ruby on Rails, Korea(https://www.facebook.com/groups/rubyonrailskorea/)와 트위터(@rorlab)를 통해 루비와 기타 웹 기술에 관한 정보를 전하고 있다.

 

 

목차

 

1. 토큰화 및 파싱

--토큰: 루비 언어를 구성하는 단어

--실험 1-1: Ripper를 이용한 루비 스크립트 토큰화하기

--파싱: 루비가 코드를 이해하는 방법

--요약

 

2. 컴파일 작업

--루비 1.8에는 컴파일러가 없다

--루비 1.9 2.0은 컴파일러를 도입한다

--루비는 간단한 스크립트를 어떻게 컴파일할까?

--블록 호출 컴파일하기

--실험 2-1: YARV 명령 표시하기

--로컬 테이블

--실험 2-2: 로컬 테이블 표시하기

--요약

 

3. 루비가 코드를 실행하는 방법

--YARV의 내부 스택과 루비 스택

--실험 3-1: 루비 2.0 1.9 대비 1.8 버전 벤치마킹하기

--루비 변수의 로컬 및 동적 접근

--실험 3-2: Special 변수 살펴보기

--요약

 

4. 제어구조와 메소드 발송

--루비가 if문을 실행하는 방법

--한 스코프에서 다른 스코프로 점프하기

--실험 4-1: 루비가 내부적으로 루프를 실행하는 방법을 테스트하기

--send 명령: 루비의 가장 복잡한 제어구조

--일반적인 루비 메소드 호출하기

--내장 루비 메소드 호출하기

--실험 4-2: 루비가 키워드 인수를 실행하는 방법 살펴보기

--요약

 

5. 객체와 클래스

--루비 객체의 내부구조

--실험 5-1: 새로운 인스턴스 변수를 저장하는 데 시간이 얼마나 걸리나?

--RClass 구조체의 내부에는 무엇이 존재할까?

--실험 5-2: 루비는 클래스 메소드를 어디에 저장하나?

--요약

 

6. 메소드 검색과 상수 검색

--루비가 모듈을 실행하는 방법

--루비의 메소드 검색 알고리즘

--실험 6-1: include한 후에 모듈 변경하기

--상수 검색

--루비에서의 렉시컬 스코프

--실험 6-2: 루비는 어떤 상수를 가장 먼저 찾을까?

--요약

 

7. 해시 테이블: 루비 내부의 일꾼

--루비의 해시 테이블

--실험 7-1: 다양한 크기의 해시로부터 값을 불러오기

--해시 테이블이 더 많은 값을 수용하기 위해서 확장하는 방법

--실험 7-2: 다양한 크기의 해시에 새로운 요소를 추가하기

--루비가 해시 함수를 실행하는 방법

--실험 7-3: 객체를 해시의 키로 사용하기

--요약

 

8. 루비가 리습(LISP)으로부터 수십 년 된 아이디어를 차용한 방법

--블록: 루비 클로저

--루비의 해시 테이블

--실험 8-1: 어떤 것이 더 빠를까? while 루프 아니면 each 메소드로 블록 넘기기?

--lambda proc: 함수를 First-Class Citizen으로 취급하기

--실험 8-2: lambda 호출 후 로컬변수 변경하기

--요약

 

9. 메타프로그래밍

--메소드를 정의하는 대체 방법

--실험 9-1: 나는 누구지? self가 렉시컬 스코프에 함께 변경되는 방법

--메타프로그래밍과 클로저: eval, instance_eval, binding

--실험 9-2: 클로저를 이용하여 메소드 정의하기

--요약

 

10. JRUBY: RUBY ON THE JVM

--MRI JRuby로 프로그램 실행하기

--실험 10-1: JRuby Just-in-time 컴파일러 모니터링하기

--JRuby MRI에서 문자열

--실험 10-2: Copy-on-Write 퍼포먼스 측정하기

--요약

 

11. RUBINIUS: 루비로 구현한 루비

--Rubinius 커널과 가상머신

--실험 11-1: MRI Rubinius에서 백트레이스 비교하기

--Rubinius MRI에서의 배열

--실험 11-2: Array#shift Rubinius 구현 알아보기

--요약

 

12. MRI, JRuby, Rubinus의 가비지 컬렉션

--가비지 컬렉터는 세가지 문제를 해결해준다

--MRI에서의 가비지 컬렉션: Mark and Sweep

--실험 12-1: MRI 가비지 컬렉션의 작동 과정 보기

--JRuby Rubinius의 가비지 컬렉션

--복사 가비지 컬렉션

--세대간 가비지 컬렉션

--동시성 가비지 컬렉션

--실험 12-2: JRuby verbose GC 모드 사용하기

--더 읽어보기

--요약

 

 

이 책의 구성

 

1: 토큰화와 파싱에서는 루비가 루비 프로그램을 파싱하는 방법을 배우게 될 것이다. 이것은 컴퓨터 사이언스의 가장 매혹적인 분야 중의 하나다.

 

2: 컴파일 작업에서는 루비가 프로그램을 실행하기 전에 컴파일러를 이용해서 다른 언어로 변환하는 방법에 대해서 설명한다.

 

3: 루비가 코드를 실행하는 방법에서는 루비가 프로그램을 실행하기 위해서 사용하는 가상머신을 살펴본다. 이 가상머신 내부에는 무엇이 있는가? 동작은 어떻게 하는가? 이러한 것들을 알아보기 위해서 이 가상머신의 내부를 깊이 살펴볼 것이다.

 

4: 제어구조와 메소드 Dispatch에서는 루비의 가상머신에 대한 설명을 이어간다. 여기에서는 if...else문과 while...end 루프와 같은 제어구조를 루비가 어떻게 구현하는지를 살펴볼 것이다. 또한 루비가 메소드 호출을 어떻게 구현하는지에 대해서도 설명한다.

 

5: 객체와 클래스에서는 루비의 객체와 클래스 구현에 대해서 논한다.

 

6: 메소드 참조와 상수 참조에서는 모듈과 모듈의 클래스와의 관계를 살펴본다. 루비가 코드상에서 메소드와 상수를 어떻게 찾아가는지를 배우게 될 것이다.

 

7: 루비 내부에서 많은 일을 하는 해시 테이블에서는 루비가 구현하는 해시 테이블에 대해서 살펴본다.

 

8: 루비는 리습(Lisp)으로부터의 수십 년 된 아이디어를 어떻게 차용해서 사용하는가?에서는 루비의 가장 우아하고 유용한 기능인 블록(block)이 리습용으로 원래 개발된 아이디어에 근거하고 있는 것을 보여준다.

 

9: 메타프로그래밍에서는 루비 개발자들에게 가장 어려운 주제에 대해 다룬다. 루비가 내부적으로 메타프로그래밍을 어떻게 구현하는지를 공부함으로써 메타프로그래밍을 효과적으로 사용하는 방법을 배우게 될 것이다.

 

10: JRuby: JVM에서 실행되는 루비에서는 자바로 구현한 루비인 JRuby를 소개한다. 여기서는 루비 프로그램을 보다 신속하게 실행하기 위해서 JRuby가 자바 가상머신(JVM)을 어떻게 사용하는지를 배우게 될 것이다.

 

11: Rubinius: 루비로 구현한 루비에서는 루비의 가장 흥미롭고 혁신적인 구현체 중의 하나인 Rubinius에 대해서 살펴본다. 특정 루비 메소드가 동작하는 방법을 알기 위해 Rubinius에서 루비코드의 위치를 찾아 변경하는 방법을 배우게 될 것이다.

 

12: MRI, JRuby, Rubinius에서의 가비지 컬렉션에서는 컴퓨터 사이언스 분야에서 가장 미스터리하고 혼란스러운 주제 중의 하나인 가비지 컬렉션(GC)에 대해서 살펴보고 글을 맺는다.

 

 

출판사 리뷰

 

여러분은 루비(Ruby) 사용법을 익히는 것이 매우 간단하다고 생각할 수도 있다. 전세계 개발자들은 루비의 문법이 기품이 있고 쉽다고 말한다. 아주 자연스럽게 알고리즘을 표현할 수 있고, 커맨드라인에서 단지 루비라고 치고 엔터 키를 누르기만 하면, 작성한 루비 스크립트를 실행할 수 있다.

 

그러나 루비의 문법이 간단해 보일지 모르지만, 사실은 리습(Lisp)과 스몰토크(Smalltalk)와 같은 복잡한 언어로부터 세세한 아이디어를 가져와 사용하고 있다. 이외에도 루비는 동적이어서 메타프로그래밍을 사용할 경우, 루비 프로그램들은 자신을 들여다 보고 변경할 수 있다. 이와 같이 겉으로는 단순해 보일지라도, 루비는 매우 복잡한 툴(tool)인 것이다.

 

루비가 내부적으로 동작하는 것을 학습하면, 루비의 많은 특징들이 몇 가지 중요한 컴퓨터 사이언스 개념들에 근거하고 있다는 것을 알게 될 것이다. 이러한 특징들을 공부하면, 루비를 사용하게 되면서 차차 배후에서 어떤 일이 일어나고 있는지 좀 더 심도 있게 이해하게 될 것이다. 이러한 과정을 통해 루비를 만든 팀이 이 언어를 사용하도록 의도하는 바를 깨우치게 될 것이다.

 

『루비를 깨우치다』는 실제로 간단한 프로그램을 실행하면서 루비 내부에서 어떤 일이 일어나는지를 깨닫게 해줄 것이다. 직접 작성한 코드를, 루비를 이용해서 실행하는 방법을 배우게 될 것이고, 광범위한 다이어그램(diagram: 도표)을 통해 객체를 만들거나 블럭1 호출 시에 루비가 내부적으로 어떤 작업을 하는지에 대한 개념적인 이해를 할 수 있을 것이다.

 

누구를 위한 책인가?

 

『루비를 깨우치다: 루비 인터널의 이해』는 초보자를 위한 루비 학습 안내서가 아니다. 이 책은 여러분이 이미 루비로 프로그래밍하는 법을 알고 있고, 루비를 매일 사용하는 것으로 가정한다.

 

루비 자체는 저수준의 어려운 C언어로 작성되었지만, 이 책을 읽는 데 C프로그래밍에 대한 지식은 필요 없다. 『루비를 깨우치다: 루비 인터널의 이해』는 C언어로 프로그래밍하는 방법을 몰라도, 고수준에서 루비가 동작하는 방법을 개념적으로 이해할 수 있도록 해줄 것이다. 이 책은 수백 개의 다이어그램을 통해 루비의 내부 구현에 대한 저수준의 상세한 내용을 이해하기 쉽도록 해줄 것이다.

 

관련글 더보기

댓글 영역