원작은 방망이 깍던 노인인데 페러디 한것인데 재밌어서 올립니다.
데브피아에서 퍼왔습니다.
***************************************

코딩하던노인

원작 : 尹五榮의 '방망이 깎던 노인'

벌써 3-4년 전이다. 내가 갓 취업 한 지 얼마 안 돼서 구로공단에서 일 하던 때다.
이른 아침. 찜질방에서 잔 뒤 출근 하러가는 길에, 게임한판 하고 가기위해 근처 PC방으로 향했다.

리듬안마 맞은편 PC방에 구석에 앉아 비쥬얼 스튜디오를 들여다 보는 노인이 있었다.
밤새 잡히지 않는 버그에 대한 조언도 구할겸 소스를 봐달라고 부탁을 했다.
값을 굉장히 비싸게 부르는 것 같았다.

“좀 싸게 해줄 수 없습니까?”했더니,

“소스 하나 고쳐주는걸 가지고 에누리 하겠소? 비싸거든 자네가 고쳐.”

대단히 무뚝뚝한 노인이었다. 더 값을 흥정하지도 못하고 버그나 잡아달라고 부탁했다.

그는 잠자코 열심히 들여다 보고 잇었다. 처음에는 대충 보는 것 같더니, 저물도록 이리 스크롤해 보고 저리 스크롤 해보고 굼뜨기 시작하더니, 마냥 늑장이다. 내가 보기에는 그만하면 다 고친것 같은데, 자꾸만 더 고치고 있었다.
인제 잘 돌아는 가는것 같으니 그냥 달라고 해도 통 못 들은 척 대꾸가 없다. 사실 출근 시간이 빠듯해 왔다.
갑갑하고 지루하고 인제는 초조할 지경이었다.

“더 고치지 않아도 좋으니 그만 주십시오.”

라고 했더니, 화를 버럭 내며,

“끓을 만큼 끓어야 밥이 되지, 생쌀이 재촉한다고 밥 되나.”

한다. 나도 기가 막혀서,

“맡긴 사람이 좋다는데 무얼 더 고친다는 말이오? 노인장, 외고집이시구먼, 출근 시간 늦었다니까요.”

노인은 퉁명스럽게.

“다른 데 가 고치우. 난 소스 지우겠소.”

하고 내뱉는다. 지금까지 기다리고 있다가 그냥 갈 수도 없고, 출근 시간은 어차피 틀린 것 같고 해서, 될 대로 되라고 체념할 수밖에 없었다.

“그럼, 마음대로 고쳐 보시오.”

“글쎄, 재촉을 하면 점점 지저분해지고 늦어진다니까. 코드란 제대로 짜야지, 짜다가 놓치면 되나.”

좀 누그러진 말씨다. 이번에는 고치던 것을 숫제 새로 처음부터 태연스럽게 곰방대에 담배를 담아 피우며 짜고 있지 않은가.

나도 그만 지쳐 버려 구경꾼이 되고 말았다. 얼마 후에야 단축기를 눌러 이렇게 저렇게 컴파일 하고 돌려 보더니 다 됐다고 내준다. 다 되기는 아까부터 다 돼 있던 코드다.

출근 놓치고 지각 해야 하는 나는 불쾌하기 짝이 없었다. ‘그 따위로 코딩을 해 가지고는 장사가 될 턱이 없다. 손님 본위가 아니고 제 본위다. 그래 가지고 값만 되게 부른다. 상도덕도 모르고 불친절하고 무뚝뚝한 노인이다.’

생 각할수록 화증이 났다. 그러다가 뒤를 돌아보니 노인은 태연히 허리를 펴고 리듬안마 지붕 추녀를 바라보고 섰다. 그때, 그 바라보고 섰는 옆 모습이 어딘지 모르게 노인다워 보이고, 부드러운 눈매와 흰 수염에 내 마음은 약간 누그러졌다. 노인에 대한 멸시와 증오도 감쇄된 셈이다.

회사에 와서 소스를 내놨더니, 팀장은 완벽하게 코딩했다고 야단이다. 퇴사한 박대리(주1)가 코딩한 것보다 참 좋다는 것이다. 그러나 나는 전의 것이나 별로 다른 것 같지가 않았다. 그런데 팀장의 설명을 들어 보니, 코드가 너무 지저분하면 버그가 생기기 쉽고 같은 코드라도 성능이 떨어지며, 변수 이름이 제멋대로이면 다른 사람에게 코드를 넘겨주어도 쪽팔리기 쉽단다. 요렇게 꼭 알맞은 소스는 좀체로 만나기가 어렵다는 것이다. 나는 비로소 마음이 확 풀렸다. 그리고 노인에 대한 내 태도를 뉘우쳤다. 참으로 미안했다.

옛날부터 내려오는 開作(개작-Open Source)은 혹 컴파일이 안되면 자료형을 바꿔 컴파일 하고 파일이 누락되어 있으면 구글에서 찾아 넣고 컴파일 하면 좀체로 에러를 내지 않는다. 그러나 요새 소스는 에러가 한번 튀어나오기 시작하면 걷잡을 수가 없다. 예전에는 오래된 開作(개작-Open Source)코드를 갈아엎을때, 깔끔한 최신 배포판으로 잘 받아서 갈아치우기만 해도 컴파일이 되었다. 이것을 최신 리빌드라고 한다. 이렇게 하기를 세 번 한 뒤에 비로소 배포한다. 이것을 '최신 버전을 릴리즈 한다'라고 한다. 물론 날짜가 걸린다. 그러나 요새는 소스코드를 그냥 통채로 복사해서 붙여넣는다. 금방 붙는다. 그러나 왠지 찝찝하다. 그렇지만 요새 남이 보지도 않는 것을 며칠씩 걸려 가며 리빌드 할 사람이 있을 것 같지 않다.

外注(외주)만 해도 그렇다. 옛날에는 복사한 코드(Copy&Paste Code)는 얼마, 직접 짠 코드는 얼마, 값으로 구별했고, 구디구빌(NDNB:Nine-Debug, Nine-Build)한 것은 세 배 이상 비싸다. '구디구빌(NDNB)'란 아홉 번 디버깅하고 아홉번 리빌드 한 것이다. 눈으로 봐서는 다섯 번을 했는지 열 번을 했는지 알 수가 없다. 단지 말을 믿고 사는 것이다. 신용이다. 지금은 그런 말조차 없다. 어느 누가 남이 클레임 걸지도 않는데 아홉 번씩 디버깅 하고 리빌드 할 이도 없고, 또 그것을 믿고 세 배씩 값을 줄 사람도 없다.

옛날 사람들은 코딩은 코딩이요, 생계는 생계지만, 코드를 만드는 그 순간만은 오직 아름다운 코드를 만든다는 그것에만 열중했다. 그리고 스스로 보람을 느꼈다. 그렇게 순수하게 심혈을 기울여 어플리케이션을 만들어 냈다.

이 소스코드도 그런 심정에서 만들었을 것이다. 나는 그 노인에 대해서 죄를 지은 것 같은 괴로움을 느꼈다. “그 따위로 해서 무슨 코더를 해 먹는담.”하던 말은 “그런 노인이 나 같은 젊은이에게 멸시와 증오를 받는 세상에서, 어떻게 아름다운 코드가 탄생할 수 있담.”하는 말로 바뀌어졌다.

나는 그 노인을 찾아가서 삼겹살에 소주라도 대접하며 진심으로 사과해야겠다고 생각했다. 그래서 그 다음 월요일에 퇴근하는 길로 그 노인을 찾았다. 그러나 그 노인이 앉았던 자리에 노인은 있지 아니했다. 나는 그 노인이 앉았던 자리에 멍하니 서 있었다. 허전하고 서운했다. 내 마음은 사과드릴 길이 없어 안타까웠다. 맞은편 리듬안마의 지붕 추녀를 바라다보았다. 푸른 창공에 날아갈 듯한 추녀 끝으로 섹시한 포스터가 걸려있었다. 아, 그때 그 노인이 저 포스터를 보고 있었구나. 열심히 코딩 하다가 우연히 추녀 끝의 포스터를 바라보던 노인의 거룩한 모습이 떠올랐다. 나는 무심히 ‘採菊東籬不(채국동리불)다가 悠然見南山(유연견남산)!’ 도연명의 시구가 새어 나왔다.

오늘, 회사에 출근했더니 후배가 MFC(Microsoft Foundation Classes)와 리소스 편집기로 코딩을 하고 있었다. 전에 커맨드라인과 배치파일로 힘겹게 코딩하고 컴파일 하던 생각이 난다. 도스를 구경한 지도 참 오래다. 요새는 까만 화면은 볼 수도 없다. '왓콤씨' 이니, '어셈블러'이니 애수를 자아내던 그 개발툴들도 사라진지 이미 오래다. 문득 3-4년 전 코딩 하던 노인의 모습이 떠오른다.

주1) "퇴사한 박대리" - 필자가 자기자신을 희화한 인물.

1.설치 기본값으로
2. 디렉토리설정
3.temp 설정
4. 포트추가
5.패스 설정
6. 계정테스트

set cvsroot=:sspi:<computername>:/TEST
(ex--> set cvsroot=:sppi:127.0.0.1:/work)
서버 경로 완료
안돼면 (set CVSROOT=:pserver:IP:/cvsroot <- 위쪽 name 과 같게)

cvs passwd -a <account name>
(ex--> cvs passwd -a administrator ) account name 는 지금 윈도우 접속 아이디(계정)를 말한다.

서버  패스워드 입력하여 로그인

7. 계정 추가
cvs passwd -r <real accountname> -a <cvs login name>

계정에 공백이 포함되어 있다면 쌍따옴표로 감싸도록 한다.

cvs passwd -r "system admin" -a "new user"




(ex --> cvs passwd -r administrator -a layers )
<real accountname 윈도우 계정>
<cvs login name 만들 cvs 아이디>


8. 테스트
set cvsroot=:pserver:<user>@<computername>:/TEST
(ex --> set cvsroot=:pserver:layers@127.0.0.1:/work )
<user (cvs login name)만든아이디>
<computername 서버 아이피주소>
/test 만든 디렉토리이름

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

















 

모든지 하나를 쓸려면 알아야 하는게 많치만 자주 쓰는 명령어들만 익혀도 별 무리는 없는듯


* cvs help 사용

 - cvs command -- help

ex) cvs update[ui] -- help

Usage: cvs update [-APCdflRp] [-k kopt] [-r rev] [-D date] [-j rev]
    [-I ign] [-W spec] [files...]
        -A      Reset any sticky tags/date/kopts.
        -P      Prune empty directories.
        -C      Overwrite locally modified files with clean repository copies.
        -d      Build directories, like checkout does.
        -f      Force a head revision match if tag/date not found.
        -l      Local directory only, no recursion.
        -R      Process directories recursively.

...............

command 에 따른 옵션들을 쉽게 알아 찾아볼수가 있다.


* cvs 로그인 정보는 .profile 에 기록

 - 리눅스에서 같은 계정을 등록하여 사용할 경우 .bash_profile 을 자신만의 profile 로 카피하여 사용한다.

ex) cp .bash_profile .jhcho_profile

.jhcho_profile 내용

alias javacc='/export/www/jhcho/.javacc'

export CVSROOT=:pserver:jhcho@214.216.176.195/home/webmaste/webhard/source-forge

.........

........


* cvs history

cvs log 명령을 통해 저장된 소스 파일의 history 를 볼수 있다.

[webmaste@test controller]$ cvs log BaseAction.java

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

revision 1.2

date: 2004/11/08 04:41:49;  author: jhcho;  state: Exp;  lines: +1 -13

가상메소드변경

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

revision 1.1

date: 2004/11/04 01:44:35;  author: jdjang;  state: Exp;

기본 엑션 크랠스


* 잘못 checkin 하여 이전 버전의 소스를 가져오고 싶을 경우

cvs update 명령을 통해 버전에 맞는 파일을 가져 올수 있다.

> cvs update -f 1.2 BaseAction.java


* binary 파일을 저장소에 올릴때

> cvs add -kb *.gif

 

* update 를 통한 repository 디렉토리 생성

: 작업 디렉토리를 기준으로 저장소에 만들어져 있는 디렉토리가 생성이 되므로 원치않는 디렉토리가 생길수도 있다.

> cvs update -d



참고 사이트

-  cvs quick reference guide

cvs FAQ

cvs 사용

[출처] 몇가지 cvs 명령어|작성자 블즈