본문 바로가기

Development

루비가 쿨한 이유 1 - irb

 

  • 이글은 황대산님의 블로그에서 복사한 글입니다.

 

[참고: 루비를 설치하고 읽으면 예제를 따라해 볼 수 있음. 루비가 무엇인지 궁금하다면 여기를 읽어 볼 것.]

루비는 스크립트 언어이다. 스크립트 언어에는 인터랙티브 인터프리터가 같이 제공되는 경우가 많은데 알고 보면 이처럼 편리한 도구가 없다. 루비의 인터랙티브 인터프리터는 irb[1]라 불리는 프로그램이다.

irb는 유닉스의 쉘이나 윈도우의 도스와 여러모로 비슷하다. 윈도우를 사용한다면 도스(명령 프롬프트) 창을, 리눅스나 맥 OS X를 사용한다면 터미날 창을 띄우고 irb를 실행시켜 보자.

c:\> irb
irb(main):001:0>

두번째 줄에서 보여지는 것은 irb 프롬프트이다. irb 프롬프트에 루비 코드를 입력하고 엔터를 누르면 입력한 코드가 한줄씩 실행된다. 루비의 코드는 상당히 함축적이기 때문에, irb에서 직접 코딩을 하는 것이 실용적인 경우가 자주 있다. 10여줄 이하의 코드만으로도 할 수 있는 일이 꽤 많기 때문이다. 나는 이러한 코딩 스타일을 온 디맨드(on demand) 코딩이라고 부른다.

새로운 파일을 생성하는 예를 들어 보면:

irb(main):001:0> f = File.open("test.txt", "w")
=> #<File:text.txt>
irb(main):002:0> f.write "Hello!"
=> 6
irb(main):003:0> f.close
=> nil

첫번째 행은 test.txt 파일을 쓰기전용(w)으로 열라는 뜻이다. 이미 존재하는 파일이 아니라면 새로운 파일이 만들어지게 된다. 이제 변수 f를 통해 test.txt 파일에 접근할 수 있다.

두번째 행은 파일에 "Hello!"란 문자열을 프린트하는 것이다. 그 다음 줄의 "=> 6"은 파일에 쓰여진 데이타가 6바이트라는 것을 알려준다.

마지막으로 f.close를 입력하면 열렸던 파일이 닫히게 된다. 텍스트 편집기에서 파일을 열어 입력된 내용을 한 번 확인해 보자.

이번에는 irb에서 웹서버의 로그파일을 한 번 분석해 보겠다.

f = File.open("access_log", "r")
f.each do |line|
if line =~ /^(\d+\.\d+)\.\d+\.(\d+).*\d+:(\d+:\d+):\d+.*GET \/articles\/\d+\/\d+\/\d+\/([\w-]+).*"(?:-|http:\/\/([\w.]+)\S*)"/
puts "#$4\n #$1.xx.#$2, #$3, #{$5 || 'direct'}"
end
end

첫번째 행은 access_log 파일을 읽기모드(r)로 열라는 뜻이다. 만약에 파일이 존재하지 않는다면 에러가 나게 된다.

두번째 행에서는 루비의 블록을 사용하고 있는데, 블록을 모른다면 line 지역변수에 파일이 한 라인씩 문자열로 전달된다고 이해하면 되겠다. 이런식으로 파일의 모든 라인을 차례대로 line 변수에 넘겨주는 루프인 것이다.

세번째 행은 if 문인데, 정규식을 사용해서 로그 파일의 라인이 특정 형태인 경우에만, puts 프린트문으로 그 라인을 재포맷하여 출력해주고 있다. 여기서는 문서의 URI가 /articles로 시작되는 경우만 정규식의 조건이 통과되게 하고 있는데, 이는 내 블로그의 경우 /images 등으로 시작하는 URI는 문서에 해당되지 않기 때문이다.

네번째 행에서는 앞 줄의 정규식에서 전달 받은 값을 포맷하여 puts로 출력해 주고 있다. $1과 $2는 IP 주소, $3은 방문 시간, $4는 문서 이름, $5는 거쳐온 링크에 해당된다. 5번째와, 6번째 행은 각각 if문과 f.each 블록이 끝나는 위치를 end 키워드로 표시해 주고 있다.

실제의 access_log 파일을 가지고 위의 코드를 irb에서 실행해 보면, 다음과 비슷한 출력물을 얻게 될 것이다.

essence-of-programming
59.187.xx.70, 08:48, www.allblog.net
after-railsconf-2006
66.249.xx.45, 08:50, direct
programmer-expertise-management
143.248.xx.174, 08:50, beyond.daesan.com
peeking-computer-screens
72.30.xx.15, 08:52, direct
essence-of-programming
211.108.xx.98, 09:00, lens.likejazz.com
success-of-us-and-its-soft-spots
72.30.xx.13, 09:03, direct
why-developers-should-use-mac
211.108.xx.98, 09:04, beyond.daesan.com
dynamic-programming-languages-and-java
211.108.xx.98, 09:04, beyond.daesan.com
. .
. .

어떤 일을 시작하는 것이 얼마나 편리하느냐는 사람의 행동패턴에 많은 영향을 미친다. 루비로 프로그래밍을 시작하는 것은 정말로 편리하다. 시동거는 데만도 한참이 걸리는 IDE는 말할 것도 없고, 텍스트 편집기 조차 열 필요가 없으니 말이다. 루비를 쓰게 되면 특별히 진행중인 프로젝트가 없어도 프로그래밍에서 손을 놓지 않게 된다.

관련글: 루비가 쿨한 이유 2 - 블록, 서민구님의 루비 튜토리얼 Part 1Part 2

 

이 글은 스프링노트에서 작성되었습니다.

'Development' 카테고리의 다른 글

루비가 쿨한 이유 3 - 해시  (0) 2008.02.07
루비가 쿨한 이유 2 - 블록  (0) 2008.02.07
3. 루비 설치하기  (0) 2008.02.07
2. 다른 언어와의 비교  (0) 2008.02.07
1. 일반 질문  (0) 2008.02.07