Media Log

글로벌 소프트웨어를 꿈꾸다 - 9점
김익환 지음/한빛미디어
얼마전에 나온 김익환 선생님의 새 책이다.

이전 책인 소프트웨어 개발의 모든 것과 크게 다른 내용은 아니다. 오히려 이 책에서는 기술적인 사항이나 세부적인 요건들에 대해서는 다루지 않고, 소프트웨어 공학에 있어서의 올바른 그림만을 제시해주고 있다.

그렇기 때문에 이슈 관리시스템이나 소스 관리 시스템 같은 내용을 다루면서도 실제로 어떤 도구들이 있는지에 대해서는 언급하지 않는다.

언제부턴가 나는 어떤 소프트웨어를 선택해야 할 일이 생겼을 때, 항상 위키피디아를 먼저 찾아보게 되었는데 이런 이슈, 소스 관리 시스템을 선택할 때도 위키피디아가 어느 정도 도움이 될 수 있을 것이다. 이 책에서 이 내용을 설명해주지 않아 나처럼 아쉬움이 느껴졌다면 아래 위키피디아 링크에서 해소할 수 있기를 바란다.

이슈관리 시스템
소스관리 시스템

나는 이슈 트래커는 맨티스, 버전 콘트롤은 VSS와 SVN밖에 써본 적이 없기 때문에 어떤 것들이 좋다고 추천해주지는 못하겠다. 위 링크에서 여러가지 조건들을 비교해보고 자신의 상황에 맞는 도구를 선택하면 되겠다.
-사실 어떤 소프트웨어를 선택할 때 내 첫번째 우선순위는 지원되는 기능들보다 해당 프로젝트가 오픈소스인지 아닌지이다. 나는 오픈소스를 무척이나 선호하는데 영감님들이 잔뜩 있는 대기업에 다녔더라면 허구헌날 깨지고 다녔을지도 모르겠다.

다시 책 이야기로 돌아와서, 이 책은 SRS 같은 문서 작성에 대해서 이야기 할 때도 그것의 중요성에 대해서만 다루지 실제로 문서를 어떻게 작성해야 하는지에 대해서는 설명하지 않는다.

그런 기법들을 배우려면 '소프트웨어 개발의 모든 것'이나 다른 소프트웨어 공학 책들을 찾아봐야 할 것이다.

비록 기술적인 내용은 없다만, 이 책에서 말하는 내용들은 모두 공감이 많이 되고 옳은 이야기들만 있기 때문에 충분히 읽어볼만한 가치가 있다.
편하게 개발해오면서 해이해졌던 마음 가짐을 다시 조일 수 있는 계기도 되기 때문에 이런 좋은 충고를 해주는 책들은 주기적으로 읽어주어야 한다. -그런 책 중 가장 좋았던 책은 실용주의 프로그래머였다.

여러 우화나 인용을 제시한 후 그것과 비교하면서 독자를 설득해 나가는 글쓰기 방식도 인상적이다.

이 책에서 말하는 점들을 간추려서 적어보았다.
글에서 묻혀나는 뉘앙스들을 내가 느낀대로 적었기 때문에, 오해한 점도 껴 있을 수 있겠다.

  • 소프트웨어 아키텍쳐는 코더보다 고급 인력이다.
  • 소프트웨어 공학은 뻥이 아니다. 즉, 이를 (잘) 사용하면 개발 시간이 (정말로) 더 단축된다.
  • 그렇다고는 해도 생각없이 무작정 따라하면 쫄딱 망한다.
  • 코딩은 개발의 일부이며, 스펙 작성과 설계를 모두 할 줄 알아야 소프트웨어 개발자라고 할 수 있다.
  • 그리고 코딩보다는 스펙 작성과 설계 능력이 더 중요하고 고급 기술(돈도 많이 버는) 이다.
  • 난이도는 코딩 < 설계 < 스펙 순이다.
  • 중요성도 코딩 < 설계 < 스펙 순이다.
  • 사실 코딩능력은 아무것도 아니다.
  • 소프트웨어를 설계하는데 있어서 가장 중요한 것은 컴포넌트와 인터페이스를 잘 정의하는 것이다.

superuser.comserverfault.com에 이어 stackoverflow.com에도 채팅기능 추가되었다.

플러그인도 요구되지 않고 어떤 브라우저에서나 채팅을 할 수 있는데다가 약간의 스마트 에디팅도 지원되기 때문에 아주 편리하다.

모르는 것도 물어보고 영어 공부도 쉽게 할 수 있으니 1석 2조 아닌가?

한번 구경하러 가보자.
ReactOS의 새로운 버전이 1년여 만에 릴리즈 되었다.

윈도우즈를 공부하는 사람들에게 이 정도 수준의 참고할만한 프로젝트가 또 있을까.

리버싱 지식이 전혀 없는 나로서는 윈도우 내부가 궁금할 때마다 항상 ReactOS의 코드에서 답을 찾고는 하는데, 이는 정말 많은 도움이 된다.

혹시 이런 프로젝트를 아직까지 모르고 있었다면 당장 코드를 다운받아서 몽땅 태깅해놓고 필요할 때마다 살펴보자.

아직은 구현이 안된 코드들도 상당히 많은데, 빨리 빨리 발전해서 더 많은 코드들을 참고할 수 있었으면 좋겠다.

처음 프로그래밍을 배울 때 재귀함수라는 것은 정말 내 머리를 핑핑 돌게하는 어려운 장벽이었다.
데이터구조를 가르치셨던 교수님께서 어느 날 수업 중, 재귀로 프로그래밍을 짜는 것이 가장 쉽다는 말을 한 적이 있었는데 나는 그게 농담인지 진담인지 구분을 못했던 기억이 난다. -물론 진담이었다.

재귀를 이해하기 위해서 좋은 질문이 여기에 있다.
Enjoy recursion.
유닉스.리눅스 프로그래밍 필수 유틸리티 - 8점
백창우 지음/한빛미디어

이 책은 2004년도에 1판이 발행되었고, 최근에 2판이 나왔다.
외국에는 1/E, 2/E 처럼 1판 2판이라고 표기하는데, 국내 출판사들은 개정판이라는 용어를 좋아하는 것 같다.
개정판이 뭐지? 2판이라는 말과 뭐가 다르지? 하고 문득 궁금해서 사전을 찾아보았다.
기존 내용이 수정된 것 뿐만이 아니라 subversion 처럼 완전히 새로운 장들이 추가되었는데도 개정판이라고 하는 것은 좀 이상해 보인다.
내가 출판사 사장이면 개정판이란 말은 쓰지 않고 항상 2판 3판 이라는 용어를 사용하겠다. 기든 아니든 그게 장사하는데 더 낫지 않겠는가. 크크.

편집기인 vim 부터 시작해서 make, gcc, gdb, 그리고 형상관리툴인 svn과 cvs까지도 다루어 주므로 리눅스에서 프로그래밍을 시작하는 사람들에게는 필수이자 안성맞춤인 책이라 할 수 있겠다.

vim 챕터는 별로 기대를 하지 않았는데, 꽤 괜찮았다. 다른 책들과는 다르게 딱딱하고 형식적이지 않고 실제로 많이 쓰이는 ctags나 cscope 같은 외부툴과 몇가지 유용한 플러그인들을 함께 소개해주어서 아주 좋았다. 1판이 나왔을 때보다 지금은 좋은 플러그인이 훨씬 많이 나왔는데, 이런 것들을 좀 찾아보고 개정판에 실어주었다면 두말할 나위 없이 더 좋았을 것이다.

책 전체적으로는 도구의 여러 옵션들과 그것들을 이해하기 위해 알고 있어야 할 기본 지식을 따로 설명해주므로 누구든지 읽을 수 있도록 구성되어 있다.
하지만 저자가 OS도 만드는 등 임베디드 쪽에서 많이 일을 해서 그런지 임베디드 리눅스에 치중된 내용을 너무 많이 다루는 것 같은 느낌이 강하게 든다.
사실 리눅스 개발자 중에는 임베디드 개발자도 많지만 일반적인 서버 개발자도 그만큼이나 많지 않은가. 이런 사람들은 필요한 내용들만을 잘 골라내서 읽어야 할 것이다.

시간이 많이 흐른만큼 애플리케이션들도 많은 변화가 있었는데, 개정판에서는 이런 것들이 많이 반영되지 않은 것 같아서 아쉽다. 우분투 사용자를 배려해서 우분투에서의 설치 방법 또한 제공해주는 것은 좋았는데 우분투 버전이 7.04인가 그랬다. 맙소사. 2010년 책인데.
또한 CVS 같은 구식 툴은 과감하게 제거해버리고 svn에 git를 추가해서 설명해줬으면 더 좋았을 것 같다. 최근에는 아주 많이 사용되고 있는 cmake 도 2판에서는 꼭 설명되었어야 할 도구인데 빠져있는 것이 참 아쉽다.

마지막으로 이 책의 표지는 참으로 맘에 안든다.
예전에, 도서관에서나 회사에서 이 책의 1판 표지를 보면 항상 책 내용을 훑어보고 싶도록 나를 이끌었었는데, 이번 개정판은 내용은 전판보다 보강되었을지 몰라도, 워드나 엑셀의 표지에나 어울릴법한 아동틱한 표지로 만들어버렸다. 최근에 한빛미디어에서 나오는 책들은 대부분 이런 아동틱한 밝은 디자인의 표지인데, 개인적으로 이런 표지의 책들을 보면 별로 배울 것이 많이 담겨있지 않을 것 같아 꺼려지게 된다.

그럼 멋진 표지를 가진 책은 무엇이냐고?
지금 딱 생각나는 책이 하나있는데 바로 이런 책이다.
원서가 더 멋있긴 하지만 한글판도 참 잘 나온 것 같다. 하드커버로 나온게 좀 싫었지만.

한달 쯤 전에 집에서 사용하는 PC를 새로 교체했다.
다른 PC 부품들에 대해서는 별로 욕심이 없는 편인데, 램에는 조금 욕심이 있다.

이제 PC용도 4G짜리 램이 나와서 4G짜리 램 2개를 구입했다. 메인보드는 그래픽 기능이 내장되어 있고 램 슬롯은 2개가 달려있는 아주 싼 저가형 보드를 구입했는데, 그래픽 카드나 비싼 메인보드 값 대신 램에 투자했다고 할 수 있겠다.

기존에 사용하던 PC보다 램이 조금 더 충족해지면서, 1~2기가 정도는 램디스크로 써볼까 하는 생각이 들었다.

램디스크를 설정하기 전에 몇 가지들을 검색해보니, 사람들은 주로 웹브라우저의 임시 파일을 캐시하는 용도로 많이들 사용하고 있었다.

윈도에서는 램디스크를 설치하기 위해 따로 프로그램(램디스크 드라이버)을 구해야 하지만 리눅스에서는 아주 간단하게 설정할 수 있다.
/tmp는 컴퓨터를 껐다켜면 지워지는 장소이므로 리눅스에서 램디스크로 잡아 쓰기에 적당한 곳이라고 할 수 있다.

/etc/fstab 파일을 연 뒤 다음 한 줄을 추가해주면 된다.
ramdisk  /tmp  tmpfs  mode=1777,size=1g

재부팅하면 /tmp가 1기가바이트 크기로 마운트 된다.
이 위치에 실제로 파일 복사등을 해보면서 dstat 같은 유틸리티로 I/O 를 살펴보면 램디스크로서 잘 동작하고 있음을 확인할 수 있다. -똑같은 파일을 또 복사하면 캐시에서 읽어오는 것에 유의해서 확인해야 한다.

웹브라우저가 이 곳을 캐시 저장소로 사용하게 하기 위해서는 브라우저의 캐시위치를 이 위치로 변경해주어야 하는데 구글 크롬을 사용하고 있다면 바탕화면 아이콘을 우클릭해서 속성을 열어 다음처럼 편집해주면 될 것이다.

/usr/bin/chromium-browser %U --disk-cache-dir="/tmp"

이제 원하던대로 웹의 리소스들이 디스크에 쓰여지지 않고 램에 저장된다.
웹페이지에 새로 들어갈 때마다 /tmp의 용량이 조금씩 늘어난다. 잘 동작하는 것 같고 끝내주게 빠른 것 같은 느낌이다.

그렇다면 실제로도 엄청난 속도 변화가 있었을까? 아니다. 그냥 원래 속도와 비슷하다.

웹에서 리소스를 다운로드 받을 때는 램디스크에 저장하던지 하드 디스크에 저장하던지 속도가 똑같다. 램의 쓰기 속도가 하드 디스크보다 훨씬 빠르기는 하지만, 네트워크에서 데이터가 한없이 느리게 읽혀지는데 어떻게 빨리 쓴단 말인가.

일단 한 번 캐시 해두었다면, 그 리소스를 다시 읽을 때는 램디스크에서 읽는 것이 물론 훨씬 빠르다. 컴퓨터를 껐다켜기 전까지는 계속 약발이 통한다. -물론 램디스크 드라이버가 언로딩 되기 직전에 하드디스크로 복사해줄 수도 있지만 이것도 부팅속도나 셧다운이 많이 느려지는 단점이 있다. 램디스크는 램처럼 쓰는 것이 어울린다.
그럼 하드 디스크의 경우에는 램디스크보다 항상 느리냐하면 그것도 아니다. 운영체제가 I/O를 할 때 캐시를 잘 해주기 때문에 최근에 사용된 많은 데이터들이 램 상에 올라가있고 실제로는 디스크 I/O를 하지 않고 램에서 읽는다.

그럼 컴퓨터를 껐다 다시 켜게 되면?
애써 받아놓았던 램디스크의 임시 인터넷 파일들이 날라가고 다시 다운로드를 받아야 한다.
그래서 커다란 용량의 트위터 바탕화면을 사용하는 페이지 같은 곳에 가면 이미지가 새로 다운로드 받아지는 것을 눈으로 확인할 수 있다. 그냥 하드디스크에 저장했으면 다운로드는 다시 안받아도 됐을텐데 말이다.

램디스크를 사용해서 웹서핑을 할 때 미친듯한 속도를 느끼고 있다는 글들이 많이 봤는데, 그들은 도대체 어떻게 속도가 빨라진건지. 내가 모르는 뭔가가 있는것인지 궁금하다.

리눅스의 경우에는 많은 프로그램들이 임시파일을 생성하여 작업할 때에 관례적으로 /tmp 위치에서 한다. 이런 애플리케이션들이 많으면 많을수록 /tmp 를 램디스크로 잡아 놓은 것이 더욱 효과가 있을 것이다.
하지만 용량을 얼마로 잡을것인지가 고민인데, 너무 크게 잡으면 안쓰는 램이 예약되어 버리는 것이 아깝고, 또 너무 작게 잡으면 애플리케이션들의 구현에 따라 오동작 할 수가 있기 때문에 찜찜하다. 잘 만들어진 애플리케이션이라면 I/O할 공간이 없는 것을 알고 메세지를 보여주는 등 예외처리를 시도하겠지만, 그렇지 않은 프로그램들도 참 많다. 이럴 경우에 사용자는 문제의 원인도 찾지 못하고 골탕만 먹게 될 수가 있다.

램디스크를 몇 일 사용해본 후, 나는 운영체제가 그냥 자연스레 캐시로 사용하게 하는 것이 훨씬 낫겠다 싶어서 다시 램디스크 설정을 제거해버리고 말았다.
나는 똑딱이 포토그래퍼다 - 8점
안태영(정민러브) 지음/한빛미디어

어제는 불꽃 축제를 다녀왔다.
불꽃 축제는 한화에서 진행하는데, 나는 운이 좋게도 한화 블로그에서 무려 1500분의 1 확률의 이벤트에 당첨이 되어 맨 앞의 좋은 자리에서 너무 편하게 아름다운 장면들을 구경할 수 있었다. 나는 한화하면 류현진이하고 빙그레밖에는 연상되는 것이 없었는데, 이번 일로 호감도가 많이 상승했다.

어쨌거나, 기왕 좋은 자리에서 보는거 사진이라도 몇 장 남겨두고 싶어서 평생 사진에는 관심도 없던 내가 회사에서 동료에게 DSLR을 빌리고, 아침에 도서관에서 DSLR 책과 이 책을 빌려서 몇가지들을 공부하고 조작법을 연습한 뒤에 한강으로 갔다.

불꽃들은 너무도 아름다웠고 가슴이 쿵쾅 쿵쾅 두근 거리도록 감동적이었는데, 집에 돌아와서 찍은 사진들을 컴퓨터에서 열어보니 그 예뻤던 불꽃이 다 불떡이 되어 있는 것이 아닌가.

나는 똑딱이 카메라를 항상 가방에 휴대하고 다니지만, 잘 꺼내지도 않을뿐더러 한 번 찍더라도 모든 아름다운 것들이 떡이 되고 만다. 카메라가 꼬졌구나, 좋은 카메라를 사면 나도 예쁘게 사진을 찍을 수 있을까. 하고 생각해왔었는데, '아, 안되는 놈은 뭘로 해도 안되는구나.' 라는 것을 확실히 깨달았다.

그럼 되는 놈은 뭘로 해도 될까?
얼마 전에 한빛미디어 사이트에서 새로 나온 책들을 살펴 보다가 눈길이 가는 책 제목을 발견해서, 조금 살펴보았었는데 소개글이 너무도 인상적이어서 어제 이 책도 같이 빌려왔었다.

아침에 일어나서 불떡 사진들을 보면서 문득 어제 빌려놨던 이 책이 생각이 났다.
똑딱이로도 사진이 잘 나오긴 하나. 어떤 사진들이 있나 한 번 보고 싶었던 것이었는데, 책이 아주 재미있어서 금새 다 읽었다. 우선 똑딱이로 찍었다는 그 사진들이 너무 좋았고, 세련되지는 않았지만 독자들을 공감하게 하고 설득시키는 글솜씨가 참 마음에 들었다.



책에 나오는 사진들을 보면 사진을 전혀 모르는 나로서는 이게 정말 똑딱이로 찍은게 맞는건지조차 모르겠다.
그 사진들 중에는 시흥역이나 석수역이 종종 등장하는데 그 곳은 우리 동네이기도 하고 내가 어렸을 때 부터 아주 많이 밟고 지나 다녔던 곳이다. 그 익숙한 장소들이 아름다운 사진으로 그려질 수 있다니 나도 사진을 잘 찍어보고 싶다는 욕구가 왕창 생겨버렸지 뭔가.



책을 읽으면서 가장 궁금했던 것은 도대체 이 사진은 정확히 어떤 카메라로 찍었을까 였다. 그런데 카메라 제품에 대해서는 전혀 언급이 없었다. 책에는 없지만 글쓴이의 블로그에서는 정확히 어떤 카메라로 찍었는지에 대한 정보도 공개가 되어 있다. 똑딱이는 똑딱이인데, 물론 역시 내 것보다는 훨씬 좋은 30만원 이상의 카메라들이었기는 했지만 그래도 정말 똑딱이로도 할 수있구나 하는 확신이 들었다.

이 곳이 저자의 블로그이다. 가서 한 번 그의 다른 사진들을 구경해보라.

나는 몇가지 물어보고 싶은 것들이 있었는데, 메일 주소도 찾을 수 없고 로그인한 사람만 글 쓰기를 허용해두고 있어서 그냥 말았다.