티스토리 뷰

1. 들어가며


 일전에 과학콘서트로 유명한 정재승씨가 트윗으로 세상에서 가장 긴 단어를 맞춰보라는 멘션을 날린적이 있었습니다. 정재승씨도 시간이 꽤 걸릴것이라 생각했고, 제 생각에도 무슨 기네스같은곳에 등재되어있는게 아닐까 생각하면서 아무 생각없이 놀고 있었는데, 내 기억으로는 A라는 사람에게서 몇 분 안걸려서 답이 Reply 되어 왔었던 것으로 기억됩니다. 자세한 기억은 나지 않지만, 멘션을 날렸던, 당시 대학원생이었던 A씨가 사용한 방법은 리눅스 내에 존재하는 사전형태의 keyword 파일에서 정규표현식으로 가장 긴 단어를 추출했었던 것이라고 기억합니다. 그 때 이후로 정규표현식이라는 것은 소수 GUI를 사용하지 않고 CLI 를 쓰는 소수 리눅서들만 주로 사용하는 것으로 생각했고, 프로젝트를 할 때 JavaScript 로 Form 의 입력값을 검증할 때나 사용했지, 그 외 용도로는 잘 손이 가지 않았습니다. 봐도 잘 모르겠기도 했거니와 중요하다고 생각하지만, 직관적으로 이해가 되지는 않지 않나싶네요.


 그런데 최근 파이썬을 사용하기 시작하고, 뭔가 문자열을 다뤄야하는 일들이 많아짐에 따라, 언어에서 기본제공하는 문자열 API 로는 부족함을 많이 느끼게 되었습니다. 그래서 좀 더 나은 방법이 없나 찾던 도중, 정규표현식으로 잘 패턴을 맞추면 한줄로 줄일 수 있다는 생각이 들어 정규표현식과 관련된 리뷰를 진행하게 되었습니다.




사실 다음과 같은 이유로 정규표현식을 잘 습득하지 못합니다.

기껏해야 필요할 때 웹사이트를 배회하며 본인이 원하는 정규표현식은 어디에 있는지 찾느라 시간을 낭비한다. 운이 좋으면 본인에게 필요한 정규표현식과 근접한 것을 찾을 수는 있지만, 충족해야 할 조건이 조금이라도 까다로워지면 비슷한 것조차 찾기 힘들다. 심지어 만약 필요한 사항을 만족하는 정규 표현식을 발견했다 하더라도 그 문법이 본인의 사용 언어나 툴에 내장된 정규표현식 기능과 호환되지 않아 문제 해결을 위해 골머리를 앓게 되는 상황이 흔히 발생한다.


Case by case 식으로 찾기도 힘들거니와, 찾은 내용들도 응용을 해야하는데 보통 스크립트 키드들의 경우엔(저포함) 원리를 모르기때문에 응용이 잘 되지 않더군요. 남이 짠 소스코드를 수정하려면 일단 해독을 할 수 있어야 하는데, 그러한 노력이 쉽지 않기 때문에 이번 기회에 몰랐었던 부분을 많이 배울 수 있지 않을까 해서 해당 책을 선택하게 되었습니다.



2. 구성

 

구성은 크게 두 부분으로 나뉘어집니다.

.NET, Java, JavaScript, PCRE, Perl, Python, Ruby 7가지 정규표현식 스타일

C#, Java, JavaScript, PHP, Perl, Python, Ruby, VB.NET 8가지 정규표현식 스타일 예제코드.


또한 목차는 다음과 같습니다.

1장 정규표현식 소개

2장 정규표현식 기본 기술

3장 프로그래밍을 위한 정규표현식

4장 유효검사와 형식화

5장 단어, 행, 특수문자

6장 숫자

7장 URL, 경로, 인터넷주소

8장 마크업과 데이터 상호변환


그리고 각 장은 다음과 같은 패턴으로 서술이 되고 있습니다.

제목

문제

해결책

토의

참조


 한 장은 위와 같은 형태를 취하면서 8개 언어에 대한 설명들이 있어 분량이 상당히 방대합니다. 그리고 같은 상황 아래서 각 언어들이 정규표현식으로 어떻게 문제를 해결해 나가는지를 비교해볼 수 있는 재미도 쏠쏠합니다. 


 또한 1~3장은 기본 규칙, 4장 부터는 실무에 써먹을 수 있는 내용들을 코드와 함께 담았기 때문에 4장 이후만 보아도 여전히 유용한 책이지만, 기본 규칙들이 있는 장을 제대로 하지 않는다면 후반부에선 이해하기가 굉장히 까다롭지 않을까 합니다.


 내용들과 그에 연계되는 코드들이 거의 개별적으로 구성되었기 때문에 조각나 있는 코드들을 보고도 바로 사용할 수 있게끔 미 리 1~3장를 공부해야할 필요성을 느낍니다. 


 위에 있는 각 장의 세부패턴 중 [토의] 부분은 일종의 풀이라고 생각하면 쉬울 것 같은데, 제목에 해당하는 배경 설명은 물론이고, 해결책에 나오는 정규표현식의 개별 역할들을 분리해서 설명해주는 부분이 학습하는데 많은 도움이 되었습니다.


  원제가 Regular Expressions Cookbook 인 것 처럼 아주 많은 분량을 다뤘다기보다는 여러 언어들의 기본적인 정규표현식을 어떻게 사용하는지에 초점을 맞춘 느낌이라, 어찌보면 실망을 할 수 있는 부분이지 않을까 생각합니다.



3. 결론


 책을 읽긴 읽었는데, shell 에서 정규표현식의 연습을 좀 더 해야겠다는 생각이 듭니다. 지난번에 리뷰했던 '리팩토링 - 코드품질을 개선하는 객체지향 사고법' 과 마찬가지로 한번 읽고 끝나는 책이 아니라 앞으로 프로젝트들을 하는 내내 두고두고 읽어서 너덜너덜 해 질때까지 봐야하지 않을까 생각합니다. 아니면 이 책으로 공부할 수 있는 스터디를 만들어서 구성원들끼리 서로 문제를 내고 답을 하는 가운데서 실력이 쌓이지 않을까 생각해봅니다. 책 초반부에 정규표현식을 검증해주는 툴들이 있다는데 그런 툴들을 이용해도 학습에 많은 도움이 될 것 같습니다. 이것으로 미흡한 리뷰를 마치도록 하겠습니다.


-----------------------------------------------------------------------------------------------------


 이 도서가 한빛리더스 5기활동의 마지막 리뷰입니다. 프로젝트 하는 동시에 리뷰를 하려니 지금시간까지 잠을 못 이루고 헤롱대고 있습니다. 그런데도 불구하고 이렇게 한 글자, 한 글자 남기는 것이 뭔가 후련하기도하고 아쉽기도 하고 합니다. 6개월 동안 모두들 수고하셨고, 이런 기회를 주신 한빛출판사 분들께도 감사의 말씀 드리고 싶네요.