20100419 :: 궁극의 폴더 동기화 유틸리티 – DirSync Pro

리눅스에서도 쓸만한 폴더 동기화 유틸리티

딱 작년 이 맘 때 쯤 매우 유용한 폴더 동기화 유틸리티인 Allways Sync에 대한 글을 쓴 적이 있습니다. 리눅스로 넘어온 이후에 가장 아쉽고 미련이 남던 프로그램 중 하나였는데요, 물론 리눅스에도 rsync와 같은 간편한 프로그램이 있긴 합니다만 삼바를 통한 공유폴더로의 설정이 안된다든지 하는 문제점이 있습니다. (생각해보니 안될 것도 없다는 생각도 드네요)

지금의 사용환경

지금의 사용환경은 처음 Allways를 쓸 때 보다는 조금 더 변했습니다. 그때는 노트북, 데스크톱이 모두 윈도 시스템이었는데 지금은 노트북, 데스크톱이 모두 리눅스 (데스크톱은 가끔 윈도)이며, 각종 자료들은 PC에 저장하지 않고 별도의 외부 파일 공유 서버에 차곡차곡 저장하고 있습니다.

따라서 다음과 같은 기능을 지원해야 하는 유틸리티가 필요했습니다.

  1. 윈도, 리눅스에서 모두 돌아간다. 윈도는 Allways가 있으니 최소 리눅스에서는 돌아가야 한다.
  2. 양방향 동기화를 지원하고 가능하면 Allways 수준의 설정을 지원한다.
  3. GUI가 있으면 좋다. (rsync는 별도의 front-end가 있습니다만, 사실 명령줄 프로그램입니다.)
  4. 네트워크 드라이브를 지원해야한다. 특히 삼바 공유를 지원해줘야 한다.

DirSync Pro

그래서 뭐 괜찮은 프로그램 없나하고 여기 저기 뒤져보던 중에 DirSync Pro라는 프로그램을 발견했습니다. Pro라는 단어가 들어있긴 합니다만 상용 소프트웨어가 아니라 오픈소스 프로젝트입니다. 일단 사용기능이나 사용기한 등에 제약이 없고, 회사에서 써도 괜찮습니다! 게다가 제가 찾던 기능들은 모두 망라되어 있군요. 아래는 이 프로그램이 자랑하는 feature입니다.

  • 파워풀한 싱크 알고리듬(?)
  • 양방향 동기화와 단방향 동기화를 모두 지원함
  • 양방향 동기화에 대한 다양한 세부 옵션 지원
  • 동기화 할 수 있는 폴더 수에 제한이 없음
  • 하위 디렉터리를 포함하여 재귀적인 (recursively) 동기화가 가능함
  • 거의 제한이 없는 파일 시스템 지원 (FAT, FAT16, FAT32, NTFS, WinFS, UDF, EXT2, EXT3, EXT4 …)
  • 네트워크 드라이브 지원 (올레!)
  • 마운트된 외부 장치 지원 (외장하드, USB 등)
  • 싱크 기능을 통한 차등 백업 가능
  • 동기화 하기 전 최대 50개 까지의 백업 생성 가능
  • 리눅스 파일 시스템의 심볼릭 링크 처리 지원
  • 동기화한 파일의 타임 스탬프 변경 지원 (원본을 동기화한 후 동기화 시점으로 최종 수정 시간을 변경하여 최신 버전임을 명시)
  • 깔끔하고 쉬운 인터페이스 (논란의 소지가 있지만, 동기화유틸을 써본 사람은 쉽게 사용이 가능합니다)
  • 거의 대부분의 OS 지원 (윈도 계열, 맥OS, 리눅스)
  • 별도의 설치가 필요없음. 태생이 포터블 버전임
  • 오픈소스. 무료. 사용기간, 사용량에 제한이 없음 (올레!)
  • 별도의 로컬 데이터베이스를 필요로하지 않음.
  • 기록되는 로그 레벨을 설정을 통해 변경할 수 있음

하나 하나 써내려가면서 마음이 뿌듯해지는 기능들이 아닐 수 없습니다. 그럼 한 번 설치를 해 보겠습니다.

설치

사용환경 :

  • Ubuntu 10.04 b2
  • & Windows XP SP3
  • 파일 공유 서버는 삼바. (윈도, 리눅스에서 접근하는데 별도의 설정이나 제한은 없음)

설치전 요구 사항 : 이 프로그램은 자바로 만들어져 있습니다. 그래서 실행에는 Java Runtime Environment가 필요합니다. 우분투에는 기본적으로 OpenJava가 설치되어 있으니 별도로 설치할 필요는 없습니다.(제 경우엔 윈도에서도 freemind를 사용하느라 이미 설치했음. ㅋ) 설치를 위해서는 다운로드 페이지에서 플랫폼에 맞는 파일을 내려받은 다음, 원하는 폴더에 압축을 풀어 놓으면 됩니다. 리눅스 버전의 경우 실행파일의 이름은 dirsyncpro.sh입니다. 이 파일을 실행가능하도록 권한을 변경해 줄 필요는 있지요.

$ chmod +x dirsyncpro.sh

이제 파일 탐색기에서 해당 파일을 더블 클릭하면 프로그램이 실행됩니다. 최초 실행시에는 라이센스에 동의하겠느냐는 대화 상자가 한 번 표시됩니다. 동의해주고 바로 넘어가면 다음과 같은 화면을 볼 수 있습니다. (이하 스크린샷은 윈도 버전에서 찍었습니다. 리눅스는 이게 불편해서…)

설정을 위해서는 세 번째 탭인 ‘Dir Settins’를 선택합니다. (위 스샷의 마우스 포인터가 있는 부분)  디렉터리 세팅에서는 동기화 프로필을 생성할 수 있고, 프로필마다 각각 다른 폴더를 지정하여 동기화를 할 수 있습니다. 프로필 설정 방법을 간략히 살펴보면 다음과 같습니다.

  1. 프로필 이름을 지정합니다. (뭐 기본이죠)
  2. 폴더 A, 폴더 B를 선택합니다. (원본과 사본이 될 곳들입니다.)
  3. 동기화 방향을 지정합니다. A>B,  A<B의 일방 동기화 및 A<>B의 양방향 동기화가 가능합니다.
  4. 동기화 옵션은 디폴트로 사용해도 무방합니다만, 별도의 세팅이 필요한 경우 동기화 옵션을 변경합니다. (동기화 옵션 변경에 대한 내용은 뒤에서 다시 다루겠습니다.)

이 때, 리눅스에서는 삼바 공유가 디렉터리 선택 목록에서 표시되지 않습니다. 노틸러스를 통해 마운트한 삼바 공유 폴더는 숨김 속성을 가지므로 목록에서 표시가 되지 않더군요. 이 경우에 저는 아래와 같이 해당 폴더에 대한 심볼릭 링크를 만들어 해결 했습니다.

  • 노틸러스를 통해 삼바 공유 폴더를 마운트 합니다. (smb://아이디@서버주소/공유폴더이름) 이 때 패스워드가 걸린 경우에는 패스워드를 입력해 줍니다.
  • 이렇게 공유한 폴더는 홈 디렉터리 아래에 ./gvfs/공유이름으로 마운트 됩니다.
  • 그래서 $ ln -s ~/.gvfs/공유이름 심볼릭링크이름 과 같이 명령을 주어 홈 디렉터리에 해당 폴더로의 심볼릭 링크를 생성해서, 디렉터리 란에 심볼릭 링크의 경로를 적어주었습니다. (혹은 아이콘을 눌러 선택해도 됨)
    * 생각해보니 이 방법이면 rsync도 삼바 공유를 지원하지 않을까 싶긴 합니다.

윈도에서는 공유폴더에 \\공유.서버.아이피.주소\공유폴더\경로명 과 같은 형태로 접근하므로, 원격 폴더의 이름을 그대로 사용했습니다. 그리고 동기화 버튼은 양방향을 선택했지요. 그리고 특정 폴더는 동기화에서 제외하기 위해 ‘방송’ 폴더는 제외 폴더에 등록하였습니다. (이렇게 하면 ‘방송’이라는 폴더와 그 하위 폴더, 파일이 모두 동기화에서 제외됩니다.)

그런 후 Analyze 버튼을 클릭하면 아래 스크린 샷처럼 분석 결과가 표시됩니다.

이제 play 모양처럼 생긴 Sync 버튼을 클릭해 주면 왔다 갔다 파일의 복사가 진행됩니다. 만약 같은 이름의 파일이 위치한다면 설정에 따라 가장 최근에 변경된 파일이 살아 남도록 합니다. (설정에 따라서는 용량이 가장 큰 파일을 남겨두거나 이름을 바꾸어 두 개의 파일을 모두 남겨둘 수도 있습니다.)

그리하여 저는 노트북 — 공유서버 — 데스크톱의 순으로 연결하여 그간 수동으로 동기화 할 엄두를 못 내던 폴더들을 지금 동기화하고 있습니다. 근 몇 달에 걸친 사항들이 백업되는 과정을 지켜보노라니, 흐뭇하기 그지 없네요.

20100207 :: MS가 제공하는 프리웨어 모음

오픈소스에 대한 관심이 날로 커지고, 실제로 오픈소스 진영의 양이나 질적인 성장도 최근 몇 년 사이에는 상당히 두드러지게 이루어진 것 같습니다. 광고를 끼워 넣고도 프리웨어라고 뻥치는 일부 양심없는 국내 유틸리티들에 신물이 났던 저로서는 sourceforge등을 전전하며, 괜찮은 프리웨어를 발굴하는 게 취미였던 적도 있었습니다. 하지만 오픈 소스가 아니더라도 프리웨어(일부 기능제약이 있더라도)를 제공하는 상용 소프트웨어 업체들도 여전히 많이 존재하며, 이 들 중 상당수는 오픈 소스 소프트웨어들이 보여주지 못한 막강한 성능이나 편리한 기능을 제공하는 녀석들도 많이 있습니다. (대표적으로 Piriform이 있지요. CCleaner나 Defraggler를 제작한…)

이러한 프리웨어를 제공하는 상용 소프트웨어 제작업체 중 가장 큰 곳은 다름 아닌 마이크로소프트입니다. process explorer를 만든 sysinternal등의 회사를 합병하여 작지만 강한 프리웨어를 상당수 제공하고 있습니다. 오늘은 이렇게 마이크로소프트가 제공하는 윈도우용 프리웨어 중 쓸만한 녀석들을 한 번 살펴볼까 합니다. 본 블로그에서 소개하는 프로그램의 목록은 techradar.com의 기사에 소개된  내용 중 일부를 추린 것입니다.

RichCopy

RichCopy는 멀티쓰레드를 통해 동시에 여러 파일을 복사할 수 있도록 파일 전송 도구입니다. GUI를 통해 원본 폴더와 대상 폴더를 지정하고, 복사/이동에 대한 조건을 꽤나 세세하게 설정할 수 있도록 합니다. 수가 많은 파일의 복사/전송에 유리해 보입니다만, 차라리 버퍼링을 통해 최대 속도로 읽고 쓰는 것을 지원하는 Teracopy가 더 낫지 않나 싶습니다. (Teracopy는 복사 이벤트 핸들러를 통해 파일을 탐색기에서 끌어 옮기는 동작을 수행할 때 실행되어 동작될 수도 있습니다.) 속도 면에 있어서도 파일복사의 속도는 결국 CPU의 부하보다는 하드 디스크의 액세스 속도(혹은 네트워크 대역폭)에 의해 좌우되므로 성능의 차이는 두 개 어플리케이션이 큰 차이를 보이지는 않을 듯 합니다.

RichCopy : Microsoft Technet

Scalable fabric

Scalable fabric은 일종의 작업 관리 도구입니다. 하단 작업 표시줄이 가리키는 프로그램의 창을 썸네일 형태로 만들어주는 (마치 비스타나 윈7처럼) 유틸리티도 있습니다만, 이 프로그램은 보다 직관적입니다. 바탕화면의 중앙 영역에 위치하는 프로그램의 창은 일반적인 창과 같이 동작하지만, 창을 바탕화면의 가장자리로 옮기면 썸네일처럼 축소되어 바탕화면을 넓게 사용할 수 있게 됩니다. 또한 사용 용도에 따른 프로그램의 그룹핑도 지원하는 조금 재미있는 기능입니다. 대신 큰 창을 전체화면으로 사용하는 일이 많은 분들은 그다지 많이 쓰실 일은 없을 듯 하네요.

Scalable fabric : Microsoft Research

Insomnia

말 그대로 대형 파일을 다운로드 받거나 할 때 자동으로 컴퓨터가 절전 모드로 들어가지 않도록 해주는 유틸리티입니다. 노트북 사용자외에는 그다지 사용할 일은 없을 것 같네요. 간단히 창이 열린 동안에 절전 모드로 진입하지 않도록 하는 역할만 합니다.

Insomnia : Delay’s Blog

Virtual PC

VirtualBOX, VMWare 등과 같이 가상 시스템을 만들고 돌릴 수 있도록 하는 유틸리티입니다. 아토 개발자이신 루저님도 예전에 블로그에 소개하신 적이 있는 듯 하네요. 윈도 계열의 OS를 설치할 가상 머신을 손쉽게 만들 수 있습니다. 리눅스 계열의 가상 머신은 잘 설치가 안되는 것 같더군요. (기억이 잘 안납니다) 윈도7 가상화 모드에서 사용하는 기술도 Virtual PC로 알고 있습니다. 여기서 소개하는 프로그램은 윈도 비스타 이하 사양의 OS에서 동작하는  Virtual PC 2007 입니다. 개인적으로는 IE6으로 웹페이지를 테스트하는 데 사용하고 했었습니다.

Microsoft Virtual PC 2007

Process Explorer(*)

말이 필요없는 강추 유틸리티입니다. 현재 실행 중인 프로세스의 목록과 하나의 프로세스에서 동작하는 하위 서비스들등을 추적하고 관리할 수 있게 해줍니다. 동시에 시스템 부하 모니터의 역할도 겸하고 있지요. 윈도 어플리케이션의 동작을 추적하거나 DLL 등의 문제점을 분석하는데 유용하게 사용할 수 있습니다. 개인 사용자의 경우 ‘멀쩡한 상태’의 프로세스 목록을 하나 이미지로 캡쳐해 두면, 나중에 악성코드가 실행중인 프로세스를 잡아내는 데에도 사용할 수 있습니다. 개인적으로는 이러한 프로세스 목록을 자주 열어 보고 눈에 익혀 두는 것을 권장합니다.

Process Explorer : Microsoft Technet

TrueSpace

TreuSpace는 원래 Caligari라는 회사가 판매하던 유료 3D 모델/렌더링 소프트웨어였습니다만, Virtual Earth를 개발하면서 이 기술을 통째로 MS가 사버렸습니다. 그리고는 프로그램이 무료로 공개된 케이스입니다. (구글 스케치업과 유사한 상황이네요)

하지만 3D 그래픽 소프트웨어의 특성상 ‘배워야 할’ 점이 너무 많아서, 원래 3D 그래픽툴을 만져보지 않으신 분들에게는 그닥 권하고 싶지는 않습니다. 물론 그만큼 많은 기능을 제공한다는 의미겠지요.

TrueSpace Download

Windows Steady State

명절이되면 꼬꼬마들의 습격을 받아 컴퓨터가 온갖 온라인 게임의 바로가기와 찌꺼기들로 걸레가 되어본 경험이 있거나 혹은 이러한 상황이 현재 진행형이신가요? Windows SteadyState는 특정 시점의 시스템 상태를 스냅샷으로 남겨, 재부팅시에 원상 복구해주는 프로그램입니다. 집에 게임을 좋아하는 아이가 있다거나 (자신의 아이를 과소평가하지 마세요… 애들은 안가르쳐줘도 게임은 기가막히게 설치해냅니다) 혹은 야구 동영상을 위해 배너로 가득찬 해외 사이트를 위험을 무릅쓰고 돌아다니는 걸 즐기신다면 꼭 필요한 프로그램이지 싶네요. 국내에도 유사한 프로그램들이 많이 있는 것으로 알고 있습니다. 아, PC방 사장님들도 애용하실 듯 하네요.

Windows SteadyState – Microsoft Download Center

Microsoft ICE (Image Composite Editor)

ICE는 조각조각 찍혀있는 사진들의 서로 살짝 겹쳐지는 이미지를 찾아 이를 하나의 이미지로 붙여주는 프로그램입니다. 물론 포토샵 같은 것들도 이런 기능들이 있고, 심지어 일부 디지털 카메라들도 지원하는 기능이지요. 하지만 작업을 해보신 분들은 알겠지만 디카로 찍은 이미지는 가장자리 부분에 왜곡으로 인해 이를 부드럽게 이어붙이기는 정말 쉽지 않습니다. Microsoft ICE는 이러한 작업을 자동으로 수행해주며 놀라우리만치 깨끗한 합성실력(?)을 보여줍니다.

단순히 파일들을 선택해주기만하면 하나의 사진으로 이어붙여줍니다. 사용법도 간편하고 기능도 괜찮아 보이네요.

Microsoft Image Composite Editor

동영상으로 보기 : Microsoft ICE on youtube.com

Search Command

MS오피스 2007부터 등장한 리본 인터페이스는 MS에서는 인터페이스 혁명이라 불렀지만, 정작 사용자들은 혼란을 겪어야만 했습니다. 혁신적인 것보다는 익숙한 것이 더 편한 법이지요. 그러다보니 이런 것 까지 등장하네요. 원하는 기능을 뚫어져라 쳐다보며 리본 인터페이스 내의 버튼을 찾기 보다는 원하는 명령을 입력하여 해당 기능을 호출해주는 프로그램입니다. 일종의 MS오피스의 확장이라 볼 수 있겠네요. 단, 명령어를 영어로 입력해야 하는지 한글로 번역된 명령을 찾아줄지는 의문입니다. (결국 리본인터페이스는 풀다운 방식의 메뉴를 보다 그래피컬하게 표현한 것 이상도 이하도 아닌 듯 보입니다만, 그치고는 오피스 스위트가 너무 무거워지는 결과를 초래한 듯 합니다.)

Search Command – Microsoft Office Labs

Desktops

리눅스계열의 OS와 같이 바탕화면 작업 영역을 여러 개로 확장해주는 유틸리티입니다. 무려 64kb 밖에 하지 않는데, 이 기능을 왜 윈도에 아예 뺀채로 출시했는지는 조금 의문스럽습니다. 단지 회사가 게을렀던 것일까요, 아니면 이렇게 사용하면 문제가 생기기 때문일까요?

Desktops 1.02 – Microsoft Technet

이상 10개의 프로그램은 그나마 쓸만하여 소개하였습니다. 원래 기사에서는 총 48개의 프로그램을 소개하고 있는데 이중 일부는 윈도7에서 사용 가능한 것이거나, 프로그램으로 소개를 별도로 하기가 그래서 뺐더니 10개만 남네요;; 아무튼 조금이라도 도움이 될 수 있을 듯 하니 한 번 참고해보시면 좋을 듯 합니다.

ps. 기사 원문에는 오피스 호환성팩을 다루고 있습니다. 오피스 2007 호환성팩은 오피스 서비스팩3를 설치하면 자동으로 2007에서 만든 문서를 감지하고, 자동으로 호환성팩을 다운로드 할 수 있게 합니다. 서비스팩3 및 호환성팩은 언어가 다른 버전을 설치하는 경우 정상 동작하지 않으므로 꼭 한글판 서비스팩3 및 한글판 호환성팩을 설치하도록 하세요. 호환성팩은 오피스2003 서비스팩3 및 윈도 XP 서비스팩 1을 설치되어 있어야 설치 가능합니다.

오피스 2003 서비스팩3(SP3) 다운로드 (한글)

오피스 2007 호환성팩 다운로드 (한글)

20091206 :: 윈도우용 무료 파티션 관리 프로그램

윈도우에서 우분투로 넘어오면서 가장 멋지다며 환호를 질렀던 기능은 다름아닌 파티션 관리 기능이었습니다. 우분투라이브시디에 포함되어 있으면서 이미 다른 운영체제가 설치되어 있는 시스템에 우분투가 비집고 들어갈 수 있는 자리를 마련해주는 gParted의 기능은, 윈도에서는 어둠의 경로로 찾을래야 찾기도 힘들었던 ‘파티션 매직’과 같은 그런 기능 아니겠습니까. 파티션 매직을 써 본 적은 없지만, 하드 디스크를 포맷하지 않고 파티션의 포맷을 바꾼다거나(이미 명령줄에서는 사실 별도의 유틸리티 없이 fat32->ntfs로의 변환은 가능합니다.) 설정을 변경하는 기능이 있어서 신기해 했었죠. 사실, 윈도 자체가 설치된 파티션만 포기하지 않는다면, 윈도XP 설치 시디로 부팅해서 다른 파티션을 날려버리고 변경하는 것은 가능했지요.

아무튼 저는 사실 이 멋진 기능을 제대로 알지 못해서, 처음 우분투를 설치할 때 하드 디스크의 가장 큰 공간-과 그 안에 있던 많은 음악/영화 데이터들-을 날려 먹은 아픈 과거가 있기는 합니다.

그런데, 윈도우용으로도 이런 기능을 수행해주는 유틸리티가 있더군요. 그것도 무료입니다. 이번에 회사에서 사용하는 노트북의 C 드라이브가 지나치게 방대한 공간을 낭비하고 있길래 시험삼아 사용해 보았습니다. 우선, 기본적인 UI는 gParted와 매우 유사합니다. 화면 상에서 바로 Drag를 할 수 없는 부분이 있지만 어느 정도 그런 점만 (사실 위험할 수 있으니) 양보한다면 매우 직관적이고 사용하기 쉬운 사용자 인터페이스가 아닐까 싶네요.

말씀드리는 유틸리티는 EAUS PARTITION WIZARD입니다. 말씀드린 대로 파티션 매직을 사용해보지 않아서 두 유틸리티의 비교를 하기에는 어렵지만 대략적으로 무료인 HOME Edition에서만도 쓸만한 기능들을 많이 제공 하고 있습니다.

  • 윈도 2000 이상의 모든 윈도OS 지원 (32bit/64bit, 윈도7 포함)
  • RAID 지원
  • 하드 디스크 파티션 관리를 통해 시스템 성능 향상 지원 (개인적으로 이런 식의 툴로 손쉽게 성능이 향상된다는 건 믿지 않습니다만)
  • 파티션을 만들고, 복제하고, 삭제하는 것이 가능
  • 파티션을 옮기고 크기를 바꾸는 것이 가능
  • 파티션 및 디스크 복제 기능
  • 디스크 맵
  • 디스크 표면 검사 및 파티션 표면 검사
  • MBR 복구

파티션의 크기를 변경하는 과정을 담은 비디오는 아래 페이지에서 확인하실 수 있습니다.

Partition Wizard Move/Resize Partition tutorial video

제작사 : MT Solution Ltd

제품 홈페이지 : http://www.partitionwizard.com/

다운로드 : http://www.partitionwizard.com/free-partition-manager.html

[추가 : 20100122 – 현재 4.1.1  pro  버전을 1월 31일까지 무료로 공개한다고 합니다. 향후 업그레이드시에는 유료화가 되지만, 고급 기능을 사용해 볼 수 있는 좋은 기회일 듯 싶네요 (http://muzbox.tistory.com/433)

20071111 : notepad++ 과 정규표현식

지난 글에서는 소개하지 못한 notepad++의 기능 중 찾기/바꾸기에서 정규 표현식을 사용하는 법에 대한 이야기를 조금 하고자 합니다.

최근엔 html 코딩을 거의 하지 않고 (좀 해야할텐데) 있지만, 엑셀 문서의 내용을 미리 텍스트 파일로 만든다던가, 콘솔박스로부터 가져온 로그에서 필요한 자료를 추출하는데 있어서 notepad 의 덕을 톡톡히 보고 있습니다. 물론 회사 노트북은 주로 개발자들이 많이 사용하므로 Ultra Edit나 Edit Plus와 같은 보다 널리 알려진 편집기들이 설치가 되어 있습니다만, 개인적으로 뭔가 복잡해보이는 UI를 가진 이런 편집기보다는 깔끔해보이는 notepad++가 훨씬 더 사랑스럽더군요. 뿐만 아니라 무설치버전을 그냥 USB 메모리에 넣어다니면서 간단히 사용할 수 있다는 장점도 있고 해서 계속 notepad++를 고집중입니다.

그리하여 오늘 소개하려는 내용은 정규표현식을 사용하여 텍스트를 손보는 내용입니다. 그럼 정규표현식은 뭔가요?하고 물어야 정상입니다. 스크립트나 프로그래밍에 익숙한 분이시라면 그래도 어느정도 정규표현식에 익숙하시리라 생각이 됩니다. 하지만 대략 정규표현식이 무엇인지 모르는 블로거들이 더더더욱 많을 것으로 생각되니, 정규 표현식에 대한 간략한 설명이 필요할 듯 합니다.

정규표현식이란

정규표현식은 특정한 문자열을 쉽고 간단한 방법으로 찾아내기 위한 표현식입니다. 정규표현식은 현재까지 표준화된 하나의 통일안이 있는 듯 하지는 않습니다. 대표적으로 Perl 언어가 정규표현식을 지원하는 것으로 알고 있습니다. 또한 리눅스의 강력한(강력하다고 소문난) grep 라는 텍스트 필터 툴에서도 정규표현식을 지원합니다. 그 중 notepad의 정규표현식은 Scintilla의 그것을 거의 그대로 받아들였으며, 이는 펄에서 지원하는 정규식과 그 사용법이 매우 흡사합니다. 참고로 firefox의 국민 확장기능인 Adblock[adblock plus]는 자바스크립트와 비슷한 정규식을 사용하며, UltraEdit의 경우에는 grep와 비슷한 정규식을 사용하는 것으로 알고 있습니다.

Notepad 정규표현식의 문법

물론 여기에서 모든 걸 다 설명할 수는 없지만 몇 가지만 알려드리도록 하겠습니다. 정규표현식 자체는 일반 문자열의 매치를 포함하여, 이를 축약하여 이의 변형까지 함께 찾을 수 있도록 합니다. 참고로 백슬래시는 한글로 인코딩된 페이지에서는 \(원화표시)로 보이게 됩니다.

  • ^ : 행의 시작을 가리킵니다. 곧 숫자로 시작하는 행은 다음과 같이 표현됩니다.
    • ^\d.+
  • [] : 대괄호는 포함된 문자들 중 하나와 매치하는 문자를 나타냅니다. 즉 [abc]라고 쓰면 a, b, c 중의 한 글자라고 보면 됩니다. 물론 [a-z]와 같이 하이픈을 넣어서 범위 전체를 지정해줄 수 있습니다.
    • [0-9]라고 적으면 한 글자의 숫자를 뜻합니다.
  • [^abc] : []속에 들어간 ^표시는 이 대괄호에 포함된 글씨는 제외한다는 뜻입니다.
    • S[^cde]m 이라는 정규식은 Sam, Sbm은 매치하지만 Scm, Sdm은 매치하지 않습니다.
  • $ : 행의 끝을 말합니다.즉 숫자로 끝나는 행은 ^.+[0-9]$와 같이 표현합니다.
  • . : 마침표는 임의의 한 글자에 해당합니다.
  • + :어떤 문자 뒤에 붙어서 해당하는 문자가 1개 이상, 여러 개라는 뜻입니다.
    • \d+라고 하면 1, 123141, 2513452345234등 길이에 무관하게 연속된 숫자를 찾습니다.
  • * : +와 비슷하게 어떤 문자 뒤에 붙어서 그 문자가 0개 이상이라는 뜻을 나타냅니다. +는 그 문자가 반드시 한번은나오지만 *는 문자가 나오지 않아도 상관없습니다.
    • sa+m은 sam, saam, saaaaaam에 매치됩니다만 sm에는 매치되지 않습니다. 하지만 sa*m은 sm에도 매치됩니다.
  • \d : 한 글자의 숫자를 말합니다. (digit) [0-9]와 같습니다.
  • \w : 한 글자의 문자를 말합니다. [a-zA-Z]와 같습니다.
  • \s : 한 칸의 공백을 의미합니다.
  • \ : 백 슬래쉬는 이스케이프 문자를 뜻합니다. 즉 ^, [, .과 같은 특수한 의미를 가지는 문자들을 글자 그대로 찾을 때 사용합니다.
    • \[abc\]라고 입력하면 a,b,c 중의 한 글자가 아닌 [abc] 자체에 매치됩니다.

보다 더 상세한 설명은 notepad++ 홈페이지(영문)에서 살펴볼 수 있습니다. 영문으로 설명이 되어 있지만 설명 자체가 쉽고 간단하며 예제와 함께 살펴보면 금방 이해할 수 있으리라 생각됩니다.

예제를 통해 살펴봅시다.

예제를 머리 써서 만들기 보다는 실제로 숩이 사용하는 방법을 예로 들어보려고 합니다. 콘솔박스를 통해 수집된 로그를 (어디서부터 받은 로그인지는 비밀) 토대로 메모리 사용량에 대한 정보를 추출합니다. 사실 콘솔 박스로부터 수집되는 정보는 상당히 다양하지만 메모리 정보를 담고 있는 부분은 아래와 같은 형식으로 되어 있습니다.

[21:44:07 Oct 12 Fri] @0x3924004E|JVM| Free Memory: Heap [ 2368340/ 6291456], Native[ 7299824/32505856]

우선 로그파일 전체를 notepad++로 불러들어와서 찾기(ctrl+F)를 실행합니다. 우리는 위와 같은행을 모두 찾아서 추출해야합니다. 통상 ‘Free Memory:’ 로 검색해도 무리가 없겠습니다만, 종종 중간에 정보가 끊어지고 2행에 걸쳐 깨진 채로 정보가 남는 경우가 있기 때문에, 그러한 행들은 찾아서는 안되겠습니다. 따라서 heap과 native 정보를 모두 포함하고 ‘숫자]’로 끝나는 행을 찾아야겠지요. 이러한 정보는 다음과 같은 정규식을 통해 찾을 수 있습니다.

heap.+native.+\d]$

아래 스크린샷과 같이 ‘정규표현식’에 체크를 해주고 위의 정규식을 입력한 다음, ‘열려진 파일에서 모두 찾기’ 버튼을 클릭합니다. 버튼을 클릭하면 notepad++아래쪽으로 분할창이 생성되며 해당하는 행들이 모두 찾아집니다.

2007-11-12_062.png

그럼 새 파일을 하나 만들고, 아래의 내용을 모두 선택(Ctrl+A)하여 새 파일에 붙여 넣습니다.

이제 만들어진 식을 모두 요리할 차례입니다. 타임스탬프가 필요한 경우도 있고 그렇지 않은 경우도 있지만, 여기에서는 타임 스탬프를 포함하여 데이터를 정리하는 방법을 살펴보겠습니다. 그러기 위해서는 정규식의 패턴에 대해 살짝 살펴보아야 할 듯 합니다.

정규표현식의 패턴

정규표현식의 패턴은 사실 ‘찾기’ 보다는 ‘바꾸기’에 더 적합한 방법입니다. 예를 들어 ‘Tom Smith’라는 이름의 표현을 “Smith, Tom”과 같이 바꾸고 싶다면 어떻게 해야할까요? 단지 바꿀 이름이 하나가 아니라 굉장히 많은 고객 명단이라든가 그런 것들이라면 난감하겠죠. (단지 이런 경우라면 텍스트 파일을 엑셀로 불러들여서 공백으로 나누어 바꾸는 용자들도 존재합니다. 좋은 아이디어죠.)

이런 경우에 패턴을 사용합니다. notepad의 패턴 사용은 간단합니다. 패턴이 되는 부분을 () 괄호로 묶은 다음, 바꿀 단어에서 \1, \2와 같이 나온 순서대로 써주면 되는 것이죠. 즉 우리가 바꾸고자 하는 정보를 기준으로 예를 들어보겠습니다.

Line 394 : [21:44:07 Oct 12 Fri] @0x3924004E|JVM| Free Memory: Heap [ 2368340/ 6291456], Native[ 7299824/32505856]

위와 같은 로그 정보는 다음과 같이 풀이됩니다.

  1. 라인넘버가 표시됩니다.L로 시작됩니다.
  2. 타임스탬프는 [ 대괄호로 시작됩니다.
  3. 3쌍의 숫자가 콜론(:)으로 구분되어 시간을 표시합니다.
  4. 날짜와 요일이 표시되고 ]로 대괄호가 닫힙니다.
  5. 제거되어야할 문자열들이 주르륵 이어지고
  6. Heap 이라는 단어 다음에
  7. [로 시작되며 남은 heap 메모리량과 슬래시(/)가 붙어 전체 heap 메모리량을 표시합니다.이 때 숫자의 길이에 따라 공백이 있을 수 있습니다.
  8. heap 메모리 정보는 ]로 끝나며 이후 native 메모리 정보가 같은 형식으로 표시됩니다

따라서 우리는 다음과 같은 정규식표현을 써서 필요한 정보를 패턴으로 묶어줍니다.

^L.+\[(\d\d:\d\d:\d\d).+\[([\s\d]+)/([\s\d]+)].+\[([\s\d]+)/([\s\d]+)]$

그럼 괄호로 묶은 부분은 순서대로 (타임스탬프),(heap),(total heap),(native),(total native)가 되는 것이며 이는 순서대로 \1,\2,\3,\4,\5가 됩니다. 이를 엑셀에서 쉽게 가져오기 위해서 임의의 구분자 |를 사용하겠습니다. 따라서 바꿀 단어는 \1|\2|\3|\4|\5가 되겠습니다.

2007-11-12_064.png

찾을 단어와 바꿀 단어에 위에서 작성한 정규식을 넣어주고 정규표현식에 체크한 상태에서 ‘모두바꾸기’를 클릭하면 깔끔하게 필요한 정보만 남은 창을 보여줍니다. 이를 텍스트 파일로 저장한다음, 엑셀에서 불러들여 |로 구분하여 셀을 나눠주면 깔끔하게 그래프를 그릴 수 있습니다.

정규표현식의 활용

“정규표현식이 뭐야 그거 몰라 무서워”

라고 외면하던 시절이 있었지만 이렇게 강력한 기능이 있다는 사실을 깨닫고 완전 빠져들 수 밖에 없었습니다. 자바스크립트도 이러한 정규식을 지원하며 엑셀 VBA도 정규표현식 객체를 지원한다고 하더군요. 각종 데이터를 노가다로 가공해온 지난날에 대한 아련한 아픔이 느껴지는 순간입니다. 에디트 플러스나 울트라 에디터를 비롯하여 다른 거의 모든 편집기는 정규표현식을 지원하는 추세입니다. 막상 정규식 자체의 모양새는 암호 저리가라 할 만큼 이상해 보이기도 하지만 조금만 활용하면 엄청난 노가다를 너무나 손쉽게 처리해 버릴 수 있는 강력한 무기가 될 수도 있습니다. 아울러 adblock과 같은 광고 차단 익스텐션들도 정규식을 지원하는데요, 여기서는 정규식의 시작과 끝을 ‘/’ 슬래시로 감싸주면 광고필터를 정규식으로 인식합니다.즉

/.+shop.+naver.+$/

과 같이 입력한다면 shop, naver가 들어간 url의 소스는 모두 차단해버리게 되어 네이버 메인화면에서 약간 썰렁한 쇼핑몰 광고 이미지들을 한 방에 날려버릴 수 있게 되는 것이지요.

20090923 :: Notepad++ 5.5 출시

오랜만에 쓰는 리눅스가 아닌 -_ – 유틸리티 이야기입니다. 제가 사랑한다고 여러 차례 고백한 바 있는 텍스트 편집기 notepad++이야기입니다. 버전이 4.X 대로 올라가면서부터는 그다지 눈에 띌만한 이슈가 없었죠… 뭐 사실 없었다기보다는 유니코드를 지원하기 시작했고, 많은 플러그인들을 기본으로포함하게 되었지요. 그럼에도 불구하고 이에 대한 포스팅이 없었던 것은 그저 뭐 귀찮았기 때문이랄까요. 아무튼 오늘 notepad++은 벌써 5.5 버전으로 훌쩍 뛰어 올랐습니다. 그럼 뭐가 바꼈는지 한 번 살펴 볼까요.

  1. 편집 콤포넌트인 Scintilla가 v1.78에서 v2.01로 변경되었습니다.
  2. 덕분에 다중선택에 대한 편집이 강화되었습니다.
  3. 여러 줄을 한번에 위/아래로 옮길 수 있게 됐습니다.
  4. 아이콘이 귀엽게 바뀌었습니다.
  5. 프로그래밍 언어별로 탭 설정을 다르게 할 수 있습니다.
  6. 증분 검색의 UI가 개선되었습니다.파이어폭스처럼 맞는 단어가 없으면 핑크색으로 변합니다.
  7. 기타 새로운 기능이 추가되고, 버그가 많이 수정되었다고 합니다.

스샷상으로는 사실 바뀐 걸 많이 찾아보기 힘드네요. 스샷은 우분투에서 WINE으로 띄운 모습입니다. 아이콘이 바뀐 건 사실 별 거 아닌데, 다른 에디터들과 헷갈리던 차에 차별화되니 그건 마음에 듭니다.