토요일, 5월 19, 2012

손에 잡히는 정규표현식

몇 달 전에 인턴사원이 왔다. 여기는 보안팀에서 네트워크 허가가 승인되어야 컴퓨터를 사용할 수 있어서 인턴사원은 아무것도 하지 못하고 책을 읽거나 멍하니 앉아 있었다.

"이거나 읽어 둬~"
손에 잡히는 정규표현식 이란 책을 인턴사원 책상으로 휙 하고 던져줬다.
( 묘사와 달리 소중한 책이므로 손에서 손으로 아주 안전하게 전달되었음 )

지나가다 인턴사원의 책상을 보면, 그 책은 책꽂이에 아주 잘~ 보관되어 있었다. 아마도 10분을 투자하기가 아까웠던 것일까?

며칠 전 그 인턴사원의 소스를 검토(인스펙션)를 할 일이 있었다. 여러 가지 얘기를 많이 해줬지만, 그 검토 소스 중에 주민등록번호 입력을 다 하지 않으면 앞 6자리라도 확인을 하는 로직이 있었다.

우리의 인턴사원은 아주 잘 길게 작성을 해놓았다. 우선 6자리인가 확인하고 3, 4번째 숫자를 가져와서 몇 월인지 확인하고, 다시 5, 6번째 숫자를 가져와서 일자인지 확인하고, 글로는 얼마 안 되지만 소스코드로는 여러 for 문과 if 문이 인턴사원의 고민한 흔적 양만큼 있었다(소스코드 공개는 인턴사원의 신변보호를 위해서 숨겨둔다).

그리고 검토결과에 정규식 한 줄

^\d{2}((0[1-9])|(1[0-2]))(([012][0-9])|(3[0-1]))$

그 후로 인턴사원이 책을 다시 봤는지는 모르겠다. 보통 정규식을 배워보겠다 혹은 검색을 해보면 가장 추천되는 책은 "정규 표현식 완전 해부와 실습"이다. 영문 제목은 더 근사하다. "
Mastering Regular Expressions", 정규식을 마스터해주는 책이다.


난 이 책을 DRM 걸려있는 PDF로 샀었는데, DRM 얘기는 다음에 꼭 한번 하고 싶다. (저는 인사이트 DRMFree를 아주 지지합니다).

모두가 알고 있듯이 마스터의 길은 멀고도 험난하다. 이 책 역시 그 길을 그렇게 소개하고 있다. 평범한 사람들은 첫 예제부터가 머리가 지끈할 것이다.

성능을 고려한 문자열 처리나, 정규 표현식 처리 원리 익혀 비슷한 것을 만들어 보겠다고 생각하시는 분들 정도가 깊게 볼 것 같다. 하지만 그 외의 많은 분은 단지 정규식을 해당 업무에 빠르게 사용하고 싶은 경우가 더 많을 것이다.


책 표지에 "10분 안에"라는 약간의 과대광고가 있지만, 정말 필요한 부분만 적당히 잘 정리되어 있다. 특히 책을 다 읽고 나면 주황색으로 요약된 1장의 카드만 있으면 된다. 그리고 모든 것이 그렇듯 자주 사용하지 않는 부분은 잊어버린다. 요약된 주황색 카드의 내용도 부족한 경우가 있다. 그 때 다시 이 책으로 10분 안에 빠르게 파악했던 적이 많다. 표지의 10분은 책을 한번 다 읽고 난 뒤를 가르키는 것 같다.

프로그램머 세계에서 모든 것이 변하지만 잘 변하지 않는 것이 있다. SQL문도 그 중 하나다. 한때 유명DBA의 강의을 들은적이 있는데 그 분이 자랑스럽게 애기했다. 10년전에 발표한 자료에 약간의 수정한 정도라고, 정규식도 잘 변하지 않는 측에 속한다. 오히려 SQL문 보다 더 오래 혹은 내 평생 사용하게 될 것 같기도 하다.

요즘은 프로그래머뿐만 아니라 많은 사람들이 컴퓨터를 사용할 일이 많아졌을 것이다. 그리고 컴퓨터로 일을 하다보면 결국 텍스트를 검색하고 처리하게 되는 일이라는 것을 알게된다. 그럴수록 정규식을 아는 사람과 모르는 사람은 그 처리속도가 위 인터사원 얘기처럼 확연히 차이나게 된다. 그때 여러분 손에 이 책이 있다면 도움이 될 것이다.


댓글 없음: