최근에 출시된
Effective awk Programming, 3rd Edition은 아놀드 로빈스(Arnold Robbins)가 오라일리에서 6번째로 출간한 도서이다. 아놀드는
Unix in a Nutshell, 3rd Edition,
Learning the vi Editor(린다 램 공저),
vi Editor Pocket Reference,
sed & awk, 2nd Edition(데일 도허티 공저), sed & awk Pocket Reference를 저작 및 공저했다. 아놀드는 현재 gawk과 이에 대한 문서화의 공식적인 메인테이너이다.
Effective awk Programming, 3rd Edition의 편집자인 척 토포렉은 "이 책을 출간한 것은 기념적인 프로젝트였다. 이 책이
자유 소프트웨어 재단(FSF)의
FDL(Free Documentation License) 아래서 출간된 최초의 오라일리 도서란 점을 비롯해 현실적인 장애가 많았다." 라고 회상한다. 척은 최근에 저자이자 프로그래머인 아놀드 로빈스와 마주 앉아서 Effective awk Programming, 3rd Edition에 대해, 그리고 gawk과 함께 하며 겪었던 일에 대해 인터뷰하였다.
토포렉: 본론으로 들어 가기 전에 당신에 대해, 그리고 유닉스 시스템을 처음으로 사용할 때 어땠는지 간단하게 얘기 좀 해 주세요.
로빈스: 저는 막 40을 넘어 섰죠. 훌륭한 아내와 아름다운 4 아이가 있는데, 3명은 딸이고 한 명은 아들입니다. 조지아州의 애틀랜타에서 태어나 자랐고, 뉴욕의 예시바 대학에 들어갔습니다. 예루살렘의 예시바에서 2년간 신학을 공부한 후, 애틀랜타로 돌아와 조지아 기술대에서 컴퓨터 과학 분야의 박사 학위를 취득했습니다. 대학이나 신생 기업에서 일하면서 소프트웨어 개발 업무를 주로 맡았는데, 대학에서는 유닉스, C, TCP/IP 네트워킹을 계속 강의했습니다. 요즘엔 오라일리 책을 집필하고 있으며 계약 프로그래머로 일합니다. 시간이 나면 gawk 업무도 병행하고 있습니다.
유닉스를 처음 다룰 때는 대학 졸업반이었는데, 제 기억이 맞다면 V6 Unix인 Interactive"s IS/1를 PDP-11에서 구동했습니다. 그 때부터 유닉스에 빠진 거죠. 유닉스는 그 당시 가장 진보된 OS였습니다. 대학원에서는 4.1 BSD를 사용했는데, USG Unix 4.0으로 서던 벨(Southern Bell)에서 계약직으로 일하기도 했습니다. USG Unix 4.0은 벨 시스템이 아니라면 출시될 수 없었던 System IV와 동급이었죠. 그 때부터 바로 BSD(v4.2, v4.3), System V(1에서 4까지 릴리즈된), DEC Ultrix, SunOS, 솔라리스, HP-UX, IBM의 AIX와 같은 여러 상용 혼합 기반에서 많은 경험을 쌓았습니다. 요즘엔 GNU/Linux, RedHat 7.x를 사용하는데,
벨 연구소에서 출시한 Plan 9를 가지고 노는 것도 재미있습니다.
토포렉: awk는 어떻게 사용하게 되었습니까?
로빈스: 1997년 말에 아호, 커니건, 웨인버거가 쓴 [The AWK Programming Language]라는 awk에 관한 책을 처음으로 읽었습니다. awk은 아주 강력하긴 했지만, 그 당시만 해도 문서화 되어 있는 게 거의 없었습니다.
브라이언 커니건이 쓴 글이라면 한 번 이상은 읽어 봐야 된다는 걸 알았죠. 전 항상 awk을 더 많이 알기를 원했고 책이 더 많았으면 했기 때문에, 이번에 책을 직접 집필하게 된 건 정말 좋은 기회였습니다. 집필 당시에는 시스템 관리자로 일했는데, 일상 업무를 하면서 텍스트 처리에 필요한 언어를 더 배워야 겠다는 생각이 많이 들었습니다.
토포렉: Effective awk Programming, 3rd Edition까지 하면 로빈스씨가 오라일리에서 출간한 책이 모두 6권이 되네요. 처음에 오라일리에서 책을 내게 된 이유가 있다면요, 그리고 지금까지 책을 출간해 오면서 얻은 경험이 있다면 무엇입니까?
| |
|
| 전 항상 awk을 더 많이 알기를 원했고 책이 더 많았으면 했기 때문에, 이번에 책을 직접 집필하게 된 건 정말 좋은 기회였습니다. 집필 당시에는 시스템 관리자로 일했는데, 일상 업무를 하면서 텍스트 처리에 필요한 언어를 더 배워야 겠다는 생각이 많이 들었습니다. |
|
| |
로빈스: 1995년경에 한동안 gawk과 이의 문서화 작업을 했고, 이 문서가 출간되도록 노력했습니다.
sed & awk 1판을 처음 읽었을 때, 이렇게 말해도 될지 모르겠지만, 솔직히 너무 부정확한 게 많았습니다. 대학원에 가서 유진 스패포드(
Practical UNIX & Internet Security, 2nd Edition의 공저자)를 알게 되어, 오라일리와 연결시켜 달라고 했습니다. 오라일리라면 단순히 sed & awk을 awk으로 대신하는 게 아니라, gawk 문서화도 포함해서 책을 두 부분으로 나눠 출간하리라는 생각이 들었던 겁니다. 오라일리의 X 시리즈를 증정 받는 대신, gawk에 관한 책을 내기로 합의했습니다. 저는 gawk 책을 집필하고, 오라일리는 X 시리즈를 저에게 주고, 그래서 이렇게 된 겁니다.
얼마 후 함께 작업할 편집자 기기 에스타브룩이
sed & awk을 개정해 달라고 저에게 연락을 취했습니다. 원 저자가 개정판을 작업할 수 없다면서요. 큰 돈을 벌겠다는 생각은 없었지만, 오라일리는 꽤 수완이 좋은 출판사였고, 독자 커뮤니티가 그처럼 부정확한 책을 보게 내버려 둘 수 없었기 때문에 집필하기로 했습니다. (첫 번째 계약금을 받았을 때 한편으론 놀랐지만 정말 기분 좋았습니다.)
1997년 이스라엘로 가기로 결정했을 때, 기기에게 책을 더 집필하고 싶다고 했습니다. 랩탑을 가지고 가서 작업하면 되고, 당장 어떤 일을 하지도 않을 것이었거든요. 그래서
Learning the vi Editor와
Unix in a Nutshell 개정판을 내게 됐고, 이어 포켓 레퍼런스 시리즈도 집필하게 되었습니다.
전체적으로 보자면, 책을 많이 써 온 건 좋았고, 매번 쓸 때마다 집필 과정이 쉬워 집니다. 앞으로도 계속 오라일리에서 더 많은 책을 출간하려고 생각하고 있습니다.
토포렉: 어떻게 해서 awk과 gawk의 GNU 구현으로 개발 업무를 맡게 되었습니까?
로빈스: AWK Programming Language 원본을 읽고 나서
GNU 프로젝트에 버전이 있는지 확인하러 갔습니다. 제가 원래 소스 코드로 노는 걸 좋아해서요. 가 봤더니 awk 원 버전만이 조금 구현되어 있더군요. 언어 구현 프로그래밍을 원래 좋아하고, 그 당시엔 혼자였기 때문에(시간이 많았죠), FSF에 이 책에 나와 있는 awk과 호환될 수 있게 만들겠다고 요청했습니다. 나중에 알고 보니 데이빗 트루먼이란 사람이 이미 이 일을 하겠다고 자원한 상태였고, FSF에서는 저와 데이빗이 함께 일하도록 해 줬습니다. 우리는 몇 년간 함께 일했습니다. 프로젝트 리더는 그였지만, gawk에 관해서는 각자 맡은 바 임무를 완벽하게 해 냈습니다. 1994년경에 데이빗이 다른 업무로 바빠서 제가 리더 자리를 맡게 되었습니다.
업무량이 많았지만, 그만큼 일도 재미있었습니다. 수많은 사람들의 메일에 답하고, 제가 만든 소프트웨어가 수백만의 GNU/리눅스와 BSD 시스템에 탑재되는 것을 보면 정말 뿌듯했습니다. 농담조로 저 혼자 힘으로 남는 시간에만 수백만의 고객을 지원한다며 말하곤 합니다만, 실제로는 여러 유닉스 시스템에서 이식성을 테스트하고 비유닉스 시스템에 이식하도록 하는 전담 팀이 있어서, 이들의 도움과 피드백으로 프로그램의 질이 아주 좋아졌습니다. gawk과 이의 문서화에 대해 이메일로 피드백하는 것 역시 정말 도움이 됩니다. 이 자리를 빌어서 저에게 도움 주신 모든 분에게 감사의 말씀을 전합니다.
이 과정에서 벨 연구소의 브라이언 커니건과도 가깝게 됐는데, 그는
mawk의 저자인 마이클 브레넌과 함께
The One True awk을 유지 보수하는 사람입니다. 이 두 사람과 알게 된 건 정말 제게 소중하며, 마이클은
Effective awk Programming, 3rd Edition의 서문을 써 주기도 했습니다.
토포렉: awk과 gawk을 사용해서 효과적으로 프로그램하는 게 중요하다는 건 분명하지만, 사람들이 이를 꼭 사용해야 하는 특별한 이유라도 있습니까?
로빈스: 데이터 방식으로 프로그램하는 패러다임이 단순하다는 게 awk에서 가장 매력적인 측면입니다. 집안 일을 하면서도 awk으로 무엇을 할 수 있을 것인지 생각해 볼 수 있을 정도입니다.
GNU 프로그램의 "제한이 없는" 코딩 원칙 또한 중요하며 요즘 들어 그 중요성이 더 부각되고 있습니다. 너무 많은 필드와 바이트가 기록되고 있는 가운데, awk의 여러 벤더 버전이 쇠퇴하고 없어지고 있지만, gawk은 그냥 계속 전진할 것입니다.
토포렉: 펄이나 파이썬이 아닌 awk이나 gawk을 굳이 사용해야 하는 이유가 있다면요? awk이나 gawk을 사용하면 더 효과적인 작업이 있다면 예를 좀 들어 주세요.
로빈스: 토포렉씨의 질문은 오해의 소지가 있습니다. 저는 펄이나 파이썬 전문가들에게 awk이나 gawk이 더 낫다고 주장하는 것도 아니고, 이러한 언어의 위력과 유연성에 대해서는 깊이 인정하고 있습니다. 저는 일에 맞는 툴을 사용해야 한다는 주의며, 만약 awk이 알맞은 툴이 아니라면, 굳이 이를 쓸 필요는 없습니다.
이제 토포렉씨의 질문에 답을 해 봅시다. 아래에 몇 가지 이유를 들었습니다.
- 시스템에 구애받지 않는다: 새로운 awk 버전은 상용 및 무료 유닉스 시스템에서 모두 사용할 수 있습니다. awk 프로그램을 잘만 작성하면 지구상의 모든 유닉스 시스템에서 사용하는 데 아무 문제가 없습니다. 이에 반해 펄이나 파이썬은 프로그램을 다운로드 및 설치해야 하는 번거로움이 있습니다.
- 배우기 쉽다: awk은 작은 언어라 아주 배우기 쉽습니다. 어느 정도 프로그래밍 지식만 있다면 무척 빨리 배울 수 있을 겁니다.
- 단순하다: 작업에 awk이 적당한 툴로 판명 났다면, 쓰기 쉬운 것은 말할 필요도 없고, 단순하고 간결하며 읽기 쉽습니다.
- 속도가 빠르다: 같은 작업에 gawk이 펄 5보다 빠르다라고 말하는 사람들이 많습니다. mawk은 대개 gawk보다 훨씬 더 빨라서 펄이 따라오지 못할 거라고 장담합니다.
- 세련돼 있다: 누군가가 "힘은 단순함에 있다."라고 하더군요. 문제의 클래스로 보자면 awk은 세련되었습니다.
토포렉: 3판까지 오면서 이 책은 어떻게 업데이트 되었습니까?
SSC(Specialized Systems Consultants)에서 출간되기도 한 걸로 아는데요.
| |
|
| 데이터 방식으로 프로그램하는 패러다임이 단순하다는 게 awk에서 가장 매력적인 측면입니다. 집안 일을 하면서도 awk으로 무엇을 할 수 있을 것인지 생각해 볼 수 있을 정도입니다. |
|
| |
로빈스: 1989년도에 FSF에서 gawk에 관한 90페이지의 초고 매뉴얼 작업을 시작했습니다. 그 때부터 계속 성장 진화한 거죠. 1995년경에는 이 책에 대한 긍정적인 피드백이 많이 왔고 그래서 이 책이 출간되길 바라게 되었습니다. 그 당시만 해도 독점권을 행사할 수 있는 책이 아니라면 출간하려는 출판사가 없었습니다. 하지만 전 SSC의 회장인 필 휴즈와 개인적 친분이 있어, 그가 책을 읽어 보곤 "이 책은 세상 사람들을 위해서라도 출간되어야 한다"며 책을 출간하게 되었습니다. 마침 SSC는 기본을 넘어서서 어느 정도의 수익까지도 얻게 되었습니다. 물론 저도 돈을 좀 벌었구요.
1999년 말인가 2000년 초쯤 되자, SSC는 출판 사업에서 손을 떼기로 결정했습니다. 그 당시 저는 오라일리와 괜찮은 관계를 유지하고 있었고 오라일리에서 SSC에서 출간해 오던 책을 맡아 출간하며, 웹사이트나 다른 채널로 제 책을 팔아 주었습니다. 오라일리는 무료로 문서를 공개해 놓는 정책을 수정했고, 저와 제 3판을 출간하기로 했습니다. 그래서 한동안 gawk 개발에만 열중할 수 있었고 마침내 gawk 3.1이 빛을 보게 되었으므로 정말 다행이었습니다.
토포렉: Effective awk Programming은 원래 Texinfo 형식으로 작성되지 않았습니까? 이 때문에 문서의 저자로서 또 메인테이너로서 출간하기까지 어려운 점이 많았을 텐데요?
로빈스: Texinfo 버전으로 된 부분은 오라일리에서 편집(내용 편집, 책 편성, 수정 작업)하기로 했습니다. 그래서 저는 gawk에만 제 역량을 집중할 수 있었습니다. 이에 대해 깊이 감사합니다. 정말 많이 향상됐거든요. 전 책에 변경 사항을 집어 넣고 DocBook XML로 변경하기만 하면 되었습니다. DocBook XML은 오라일리에서 책을 출간할 때 가장 선호하는 형식입니다.
다행스럽게도 전 맨 바닥부터 하지 않아도 됐죠. GNU makeinfo 프로그램이 Texinfo를 info나 HTML로 바꿔주거든요. 필립 마틴은 makeinfo를 수정해서 DocBook SGML을 만들어 냈어요. 그가 수정한 것을 바탕으로 전 좀더 XML과 호환되는 형식을 만들었습니다. 그리고 나서는 6개의 awk 스크립트에 대해 써 나가면서 DocBook 후기 작업에 들어갔습니다. 그래서 DocBook은 좀더 읽기 쉽고 오라일리에서 해온 방식으로 변한 거죠. 똑같은 일의 반복이었습니다.
책의 버전이 완성되어 오라일리의 DocBook 툴로 다듬은 뒤, 전체 글을 인쇄해서 다시 읽으면서 DocBook을 재차 다듬었습니다(DocBook에 대해서는 오라일리의 DocBook: The Definitive Guide를 참조하세요).
토포렉: 정말 일이 많았겠군요. 원래의 Texinfo에서 사용 가능한 XML 파일을 만드는 데 얼마만큼의 시간이 걸린 것 같습니까?
로빈스: 글쎄요. 책을 편집하고 다시 검토하는 와중에 변환 툴을 개발하기 시작했습니다. 거의 4주 정도 걸렸는데, 마지막 2주는 하루 종일 개발 작업에만 매달렸습니다. 한동안은 Texinfo와 DocBook 버전으로 된 두 문서를 모두 수정하는 작업을 하기도 했습니다. 다행히 이렇게 노력한 게 보람이 있었는지 책이 꽤 잘 팔리는군요.
토포렉: 이 책은 FSF의 Free Documentation License 아래서 출간되기도 했습니다. FDL에 생소한 사람들이 많을 텐데, 이것이 gawk 문서의 메인테이너이자, 이를 출간한 저자인 로빈스씨에겐 어떤 의미인지 좀 말씀해 주세요.
로빈스: FDL은 FDL의 라이선스를 가지고 있는 출판사라면 문서의 소스 코드를 만들기를 요구합니다. 그래서 문서 형식은 최종 사용자가 쉽게 수정할 수 있는 TeX, Texinfo, troff, DocBook과 같은 형태라야 하며, 작업하기 힘든 PostScript나 상용 워드 프로세서는 안됩니다. GPL이 소프트웨어에 대해서 작용한다면, FDL은 문서에 대해서 같은 작용을 합니다. 최종 사용자는 온라인에서 언제든지 문서를 내려 받을 수 있고, 이를 자신의 필요에 맞게 수정할 수 있습니다. 대부분의 출판사는 소프트웨어 벤더와 마찬가지로 불법 복제로 골머리를 썩힙니다. 이러한 의미에서 보자면 FDL이나 GPL은 명백히 이들에겐 안 좋은 것으로 보일 겁니다.
이 책이 FDL 아래에서 개발되었다는 것과 관련해서 저는 두 가지 장점이 있다고 봅니다. 이론적으로 보면 자유 소프트웨어 운동 진영에서는 출판사가 독점권이 없는 책을 출판하는 위험을 감수하지 않아 좋고, 출판사 측에서는 오라일리가 무료 문서를 출간하는 것도 그다지 위험하지 않다는 것을 최초로 입증한 셈이 되는 겁니다.
| |
|
| 중간 정도의 텍스트 조작 업무를 맡았다면, awk을 사용하십시오. awk이 감당할 수 없는 일이거나, 더 많은 특성이 필요하다면 gawk을 사용하십시오. 그리고 awk을 좋아하긴 하지만 더 빠른 속도를 원하면 mawk을 사용하십시오. |
|
| |
저 역시 저자이기 때문에 더 많은 사람들이 제 책을 읽고, 그에 따른 수익을 얻는 건 좋은 일입니다. 에릭 레이몬드의 어투를 빌리지 않더라도 자유 소프트웨어와 자유 소프트웨어 운동은 그 나름대로 중요하며, 현재의 저를 있게 한 동기가 되는 것들입니다. 하지만 저도 한 가정을 꾸리고 있고, 대출 받은 돈도 있는 평범한 사람이므로 수입은 무시할 수 없는 요인입니다. 한편으로 저의 경우에서 자유 소프트웨어 문서의 저자들도 "돈을 벌 수 있다"라는 선례를 남겼다고 봅니다. 출판사가 자유 문서에 로열티를 지급하게 된다면, 미래의 저자들이 상업적인 도서를 저작할 필요도 없어질 테니까요.
거의 모든 책을 자유 문서에서 출간하는 또 다른 출판사를 알고 있는데, 이 출판사에서는 제가 쓴 책인데도 출간 후 책 한 권도 안 주더군요(여기에서 이름은 밝힐 수 없지만요). 이와 달리 오라일리에서는
Effective awk Programming, 3rd Edition를 쓸 때, 필요한 편집 리소스를 저에게 제공했을 뿐 아니라, FSF에도 인세의 일부를 기증했습니다.
토포렉: gawk 3.1의 새로운 특성 중에서 가장 눈여겨 봐야 할 건 무엇입니까?
로빈스: 2판과 3판 사이에는 5년이라는 시간차가 있어 달라진 부분이 많습니다. 여기에 간략하게 나열했습니다. 웹사이트의
샘플챕터보기에 자세히 나와 있습니다. 물론 전체를 알려면 제 책을 보면 되겠죠.
- awk 언어 수준에서 국제화 기능
- gawk의 C 코드는 국제화 되었습니다. gawk은 메시지를 히브리어로 번역해 주는 최초의 GNU 프로그램입니다. 지금까지는 그렇습니다.
- |& 오퍼레이터를 통해 서브프로세서와 쌍방향으로 커뮤니케이션
- TCP/IP 커뮤니케이션
- awk 코드의 프로파일
- 배열 소팅(sorting)과 비트 조작(bit-manipul) 기능
- 동적으로 로드되는 내장 함수 첨가
물론 비교적 작은 변경 사항도 많습니다.
토포렉: 50 단어로 누군가에게 awk과 gawk을 사용하도록 설득한다면 뭐라고 말씀하실 건지요?
로빈스: 음. 이렇게 말할 것 같은데요. 중간 정도의 텍스트 조작 업무가 있다면, 혼동스럽지 않게 문제의 핵심을 바로 배우려 한다면, 그리고 최고의 성능이 필요한 일이 아니라면, awk 언어로 문제를 해결하십시오. awk이 감당할 수 없는 일이거나, 더 많은 특성이 필요하다면 gawk을 사용하십시오. awk을 좋아하긴 하지만, 더 빠른 속도를 원한다면 mawk을 사용하십시오.
토포렉: 세어보니 43단어군요. 하기야 일일이 세어 볼 사람도 없겠지요. 바쁘실 텐데 이렇게 시간 내서 awk과 Effective awk Programming, 3rd Edition에 대해 인터뷰에 응해 주셔서 감사합니다. 앞으로도 자주 뵙게 될 것 같군요.
로빈스: 아뇨, 별말씀을요. 인터뷰가 재미있었어요. 이 글을 읽는 독자들도 이 기사에서 뭔가를 얻었으면 좋겠습니다.
아놀드 로빈스는 애틀랜타 태생으로, 전문 프로그래머이며 기술 관련 저자이다. 좋은 가장이자 4 아이의 아버지이기도 하다. 아놀드는 1980년, Sixth Edition Unix를 구동하는 PDP-11을 접했을 때부터 유닉스를 다뤄 왔다. 그는 1987년, awk의 GNU 프로젝트 버전인 gawk에 관련되면서 awk을 중점적으로 사용하고 있다. POSIX 1003.2 balloting group의 일원으로 활동하면서, awk을 위한 POSIX 표준을 구현하는 데 일조했다. 현재는 gawk과 이의 문서를 유지하는 메인테이너이다. 문서는
자유 소프트웨어 재단의 웹 페이지에서도 볼 수 있다. 아놀드는 이 일을 하기 전에 시스템 관리자, 유닉스와 네트워킹 Continuing Education classes를 맡아 강의한 경력을 가지고 있다. 오라일리는 그를 꽤 바쁘게 만들었다. 그는 sed & awk 2판, Learning the vi Editor 6판, Unix in a Nutshell 3판의 공저자이다.
척 토포렉은 오라일리의 오픈 소스와 XML 편집자로, 최근에는
CVS Pocket Reference,
GIMP Pocket Reference, 그리고 최근에 출간된
Beyond Contact: A Guide to SETI and Communicating with Alien Civilizations를 편집했다. 척은 오라일리의 환자 중심의 가이드 시리즈의 일환으로, 아내인 켈리 로빈슨과 함께
Hydrocephalus: A Guide for Patients, Families, and Friends를 공동 저작한 바 있다.