Media Log

/ 를 통해 쉽고 빠르게 원하는 문자열을 하이라이트 서치 할 수 있는 것만 해도 vim은 로그뷰어로서 꽤 쓸만하다.

많은 내용의 로그 파일을 읽을 때는 하이라이트 서치 외에도 보고 싶은 로그만 남도록 불필요한 부분들을 잘 쳐내는 것이 도움이 된다.

1. 특정 패턴이 존재하는 라인을 삭제
2. 특정 패턴이 존재하지 않는 라인을 삭제

불필요한 라인들을 쳐내기 위해서 위의 두가지 기능을 잘 이용할 수 있어야 한다.
물론 빔에서는 이것들을 아주 쉽게 해낼 수 있다.

그 내용을 설명하기 전에 먼저 패턴을 치환하는 방법을 살펴보자.

:%s/pattern/replace/g

위 명령어는 원하는 pattern을 replace로 전역 치환한다. 간단한 패턴이라면 머리 속에 잘 정리해서 한번에 위처럼 명령을 수행할 수 있겠지만, 조금 복잡하다면 먼저 패턴이 잘 매치되는지 부터 확인해보아야 할 것이다.
원하는대로 잘 매치가 되고 나면 이제 위에서 보이는 pattern 부분은 생략이 가능한데, 다음처럼 써서 이미 이전에 매치된 패턴을 치환시킬 수 있다.

:%s//replace/g
pattern 부분에 아무 것도 적지 않은 것을 주목해서 봐야한다. 빔은 저렇게 빈 패턴이 들어왔을 때 이전에 / 을 통해 마지막으로 매치시켰던 패턴을 기억하고 그 패턴을 대입해준다.

이제 처음 설명하기로 했던 2가지 기능을 알아보자.

특정 패턴이 존재하는 라인을 삭제
:g/pattern/d
위와 같은 간단한 입력을 통해서 특정 패턴이 존재하는 라인들을 삭제할 수 있다.
물론 위에서 설명한 것처럼 먼저 원하는 패턴을 한번 매치시켜놓고,
:g//d
라고 쓰는 것이 더 편리하다.
:g/pattern/p
위 명령은 특정 패턴이 존재하는 라인들만을 출력해준다.

특정 패턴이 존재하지 않는 라인을 삭제
위와는 반대로 특정 패턴이 존재하는 라인만을 남겨놓고 싶은 경우도 많이 생긴다.
:v/pattern/d
물론
:v//d
역시 가능하다.

v는 invert를 의미하며, 즉 :v//d는 선택되지 않은 패턴들을 삭제하겠다는 명령이 된다.

이 기능들을 얼마나 잘 사용하느냐는 정규표현식의 능숙도에 달려있다. 원하거나 원하지 않은 라인을 쳐내기 위해 해당 데이터를 잘 분석하고 정규식으로 매칭 시킬 수 있는 능력은 따로 연습해야 한다.
정규 표현식에 대해서는 따로 설명하지 않겠지만, 세상에서 가장 잘 쓰여진 정규식 책을 한 권 소개해 줄 수는 있다.


이 책은 이제는 아쉽게도 절판되었는데, 몇몇 사람들이 블로그를 통해 이 책을 팔아달라고 요청했지만 너무 아끼는 책이라서 나는 도저히 팔 수가 없었다.

빔 위키에 가면 유용하고 재미있는 팁들을 많이 배울 수 있다.
아래 처럼 vimrc에 적어주게 되면 F3 키를 한번 누름으로서 이전에 매치된 문자열이 포함된 라인들만 모아서 새창으로 자동으로 복사해준다.

nmap <F3> :redir @a<CR>:g//<CR>:redir END<CR>:new<CR>:put! a<CR><CR>

지금 설명한 것들과 그 외의 많은 기법들을 neocoin 님에게 배울 수 있었다.
KLDP에서 vim에 대해 질문을 하면 항상 그가 답해주곤 했는데, 많은 것들을 가르쳐주어서 너무나 고맙게 생각한다.
그의 위키에는 vim에 대한 많은 재밌는 이야기들이 있으니 관심이 있다면 한번씩 읽어보길 추천한다.

관련글


크리에이티브 커먼즈 라이선스
Creative Commons License

http://www.benjaminlog.com/trackback/133 관련글 쓰기

  1. Favicon of http://sunyzero.tistory.com BlogIcon 김선영 at 2010/07/10 04:08 [edit/del]

    "v는 Vertical을 의미하는데 나는 왜 이렇게 이름 지었는지를 깨달을 수가 없어서 그냥 '반대' 라고 해석하고는 한다."
    -> UNIX계열에서 v는 verbose나 혹은 invert로 사용됩니다.(대문자는 주로 version으로) 따라서 vim에서는 invert로 사용되었다고 생각되네요. vertical은 생소한데...아마도 아닌듯 합니다.

    참고로 grep도 -v 옵션이 invert의 의미로 사용됩니다.

    Reply
  2. Favicon of http://www.petabytes.org BlogIcon 김재호 at 2010/07/10 17:52 [edit/del]

    엇. 제가 착각했었네요. :vs로 창을 수직으로 나눌 때랑 완전히 햇갈렸나봅니다. 도움말에는 vglobal로 되어있는데 invert가 맞는 것 같네요.

    Reply

submit

vim은 내가 가장 좋아하는 에디터이다.
Windows에서나 Linux에서나 vim을 애용하곤 하는데, 거의 모든 텍스트 문서는 빔으로 열어보고 그 중의 대부분은 로그 파일이다.

오픈 소스들을 받아서 코드를 읽어볼 때도 vim을 사용하긴 하지만 vim에서 코드를 작성하지는 않기 때문에 거의 읽기 전용으로 사용하는 것이나 마찬가지이다. 빔의 쓰기 기능보다는 검색과 이동 그리고 치환 기능을 주로 사용하는데, 이것만으로도 나는 너무나 편리하다.

내가 가장 좋아하는 빔의 기능 중 하나는 *이다.
원하는 단어위에 커서를 올려놓고 *를 누르면 해당 단어들을 모두 하이라이팅 시켜주고 앞뒤로 쉽게 이동해 나갈 수 있다.

정말 편리하지만 이 기능에 한가지 불만이 있다면, 멀티 하이라이팅이 안된다는 것이다.
그래서 나는 word1\|word2 와 같이 직접 정규식의 alternation을 사용해서 멀티 하이라이팅을 시켜나가곤 했는데, 타이핑 하는 것이 꽤나 귀찮을뿐더러 색상도 다 똑같아서 보기에도 불편했다.

계속 그렇게 사용해오다가 아무래도 멍청한 짓을 하는 것 같아서 빔 위키를 한참 뒤져서 드디어 마음에 꼭 드는 플러그인을 찾았다.


설치 방법이나 사용방법은 해당 링크에서 확인하면 될 것이다.

3가지를 다 사용해봤는데 가장 마음에 드는 것은 Mark 이다.
Highlights는 gvim에서만 사용할 수 있어서 탈락.
MultipleSearch는 사용자 인터페이스가 Mark보다 지저분하다.


Mark는 단어뿐 아니라 패턴을 하이라이팅 시킬 수 있으며, 비주얼 모드로 선택한 단어들 역시 하이라이팅 시킬 수 있어서 편리하다.
물론 패턴들마다 다른 색상으로 하이라이팅되며 같은 패턴 내에서 이동시킬 수도 있고 선택된 모든 패턴간에 이동도 가능하다.

디바이스 드라이버 로그나 서버 로그 등을 읽을 때 몇몇 포인터들을 추적해 나가거나 쓰레드 별로 로그를 확인할 때에 똑같은 색상으로 하이라이팅 해놓고 눈알이 빠질 것만 같아서 너무나 불편했다.

개발자나 시스템 관리자라면 로그를 많이 읽어야 하고 또 잘 분석해야한다.
이런 기능들을 잘 사용하면 (꼬물 에디터를 쓰는)다른 사람들보다 쉽게 그리고 다른 사람들이 발견하지 못하는 문제들도 해결할 수 있을 것이다.

관련글
크리에이티브 커먼즈 라이선스
Creative Commons License

http://www.benjaminlog.com/trackback/131 관련글 쓰기

submit
소프트웨어 개발의 모든 것 - 9점
김익환.전규현 지음/페가수스
소프트웨어 개발의 모든 것이라 제목이 붙긴 했다만 물론 제목은 뻥이다.
어떻게 이 얇은 책이 소프트웨어 개발의 모든 것을 다루겠는가.

사실은 소프트웨어 공학의 모든 것이 책 내용과 조금 더 어울리긴 하지만 그렇게 이름지었으면 난 죽을 때까지 이 책을 안 읽었을 것이다.

나는 컴퓨터 과학의 대부분의 분야가 아주 재밌고 흥미롭지만 소프트웨어 공학 만큼은 질색이다.
그럼에도 불구하고 이 책은 꽤나 재밌게 잘 쓰여졌다. 내가 읽은 -몇 권 안되긴 하지만- 소프트웨어 공학 책 중에서는 가장 재밌는 책이었다. 스티브 맥코넬의 책보다도 재밌다! -물론 Code Complete는 빼고.

이 책은 개발자뿐만이 아니라 프로젝트 매니저, 기획자, 테스터, 그리고 심지어 세일즈맨까지도 읽어보면 도움이 되는 책이다.

얼마 전에 저자의 블로그에서 재밌는 포스팅을 읽었다.

하수
소스코드관리시스템을 거의 제대로 쓰지 못하는 경우, 오늘 고치고 있는 소스코드를 수동으로 하나씩 지워서 원래 버전을 만들어냅니다. 이러한 경우는 믿기 힘들겠지만 제가 컨설팅을 하면서 많은 회사들이 이렇게 하고 있다는 것을 접했습니다. 이렇게 원래 버전을 만들어서 Hotfix를 만들어서 내보낸 후에 다시 재작업을 합니다.

중수
이보다 조금더 나은 경우, 원래 고치고 있던 소스코드의 디렉토리를 임시로 백업 받아 놓고 소스코드관리시스템에 있는 어제 버전의 소스코드를 다시 Check out합니다. 이렇게 Check out한 소스코드를 가지고 Hotfix를 만들어서 내보내고 오늘 작업하던 백업을 받아 놓은 소스코드와 Merge tool을 이용해서 Merge를 한 후에 정기 업데이트 버전을 만들어서 내보내는 방법입니다. 아까보다는 조금 나아 졌지만, 여전히 수작업에 많이 의존을 하고 귀찮은 작업들을 해줘야 합니다.

고수
Subversion등의 소스코드 관리시스템을 제대로 사용한다면 이보다 좀더 손쉽습니다.
우선 어제 릴리즈를 한 소스코드의 Baseline(Tag)에서 Hotfix용 브랜치를 만듭니다. 기존에 개발하고 있던 디렉터리는 그대로 놔두고 새로운 디렉터리에 Hotfix를 Check out 받습니다. 보고된 버그를 수정하여 자동화된 빌드스크립트를 이용해서 Hotfix를 만들어내고 업데이트에 올립니다. 정상적으로 Hotfix가 배포된 것을 확인하고 Hotfix 브랜치는 Trunk로 Merge를 합니다. 이때 3Way Merge 툴을 이용하면 됩니다.

나는 처음 회사에 들어갔을 때는 하수였고 지금은 중수이다.
저자는 하수가 하는 짓을 믿기 힘든 짓이라 말하지만, 형상관리툴 사용을 잘 모르는 입장에서 보면 사실 그리 믿기 힘든 일도 아니다. 똥줄이 바짝 타는 상황이 생기면 믿기 힘든 무식한 일도 하게 되는 법이다. -핫픽스를 만든다는 것이 바로 그 똥줄이 타들어가는 상황이기도 하다.

시간이 좀 흘러서 고수가 하는 저 방법을 알게 되었음에도 불구하고 계속 중수의 방법을 고수해 온 것은 전적으로 나의 게으름 때문이었다. 저렇게 핫픽스를 만들어내야 하는 상황은 자주 오지 않기 때문에 나중에 배워야지하고는 계속 미루고 있었는데, 위 글을 읽으면서 몹시 부끄러움을 느꼈다.

그래서 잠시 시간을 내서 이것 저것 실험해보며 테스트를 해봤는데, 그동안 왜 그토록 게으름을 부렸을까 싶을 정도로 쉽게 해낼 수 있었다. -Subversion과 KDiff3의 개발자들 그리고 전규현씨께 감사한다. :-)

처음에는 정말 재미있게 읽었다.
하지만 폭포수 모델하고 SRS(요구사항 명세)에 대해서 설명하기 시작할 때는 읽다가 읽다가 결국 포기해버렸다.
저자가 지금 이 글을 보면 아니 그 중요한 부분을 그냥 넘어가면 어떻하나 하고 안쓰러워 할 것이 눈에 훤할 정도로 SRS의 중요성에 대해 입에 침이 닳도록 설명하지만, 그래도 정말 어쩔 수 없었다.

이 책의 내용에서 아쉬운 점 하나는 내가 가장 궁금해하는 내용이 빠졌다는 것이다.

나는 마이크로소프트 같은 커다랗고 프로세스가 잘 정립된 회사의 형상 관리툴의 소스트리를 보고 싶다.
그들이 모듈을 어떤 식으로 분리하고 어떤 구조로 트리를 구성하는지, 중복되는 코드들을 어떤 식으로 제거하고 또 공유하는지, 체크인 되는 코드의 코멘팅은 어떤 규칙으로 하는지 등이 너무 너무 궁금하다. 1시간 만이라도 들어가서 차근차근 살펴볼 수 있다면 내 실력은 훨씬 나아질 것이다.

이 책의 저자 중 김익환 선생님께서는 마이크로소프트에 버금가는 훌륭한 회사들에서 일했었는데, 그런 내용도 함께 알려주었더라면 나는 이 책에 주저 없이 별 5개를 줬을 것이다!

...물론 그래도 SRS는 싫다.

크리에이티브 커먼즈 라이선스
Creative Commons License

http://www.benjaminlog.com/trackback/132 관련글 쓰기

  1. 혼자서 개발을 하면 소스코드의 브랜치/머지가 필요없을까?
    // All of Software 2010/06/08 09:47 x
  2. 마이크로소프트, 구글의 소스코드 트리의 비밀?
    // All of Software 2010/06/08 11:02 x
  1. Favicon of http://dol9.tistory.com BlogIcon 오산돌구 at 2010/06/16 16:22 [edit/del]

    하수인 저로서는 잠시 시간을내어 핫픽스관련 테스트를 하셨다는 글귀에
    ㅎㄷㄷ 부러움이...ㅎ
    무엇을 하든 게으름이 가장 큰 적인것같습니다.
    좋은글 잘 읽었습니다.

    Reply

submit