2006년 11월 10일 금요일

Bar Camp Seoul

지난달에 간만에 외박을 나가서 BarCamp Seoul에 참여했습니다. 남들은 군인이 무슨 외박나가서 세미나를 가냐면서 말들이 많았지만, 전 좋았던걸요. -_-;

여하튼 인터넷 쓸 수 있는 휴가 나가서 자세한 썰은 풀어두도록 하겠지만, 동영상이 있길래 트랙백도 보냅니다.

참고로 점심은 아웃백도시락이어서, 맨날 짬밥만 먹다가 간만에 스테이크랑 립을 먹었더니 좋던데요. ^^

동영상은 여기에서.

2006년 7월 3일 월요일

하늘 위의 지하실 - Cellar in the Sky






하늘 위의 지하실
현재덕 지음/은행나무


어떤 사람에 대해 이야기 하는 방법은 여러가지가 있습니다. 그 사람의 성격을 이야기 할 수도 있고, 그 사람이 어떤 학교를 나왔는지 어떤 직업을 가지고 있는지 이야기 할 수도 있습니다. 그 사람이 어떻게 생겼는지 말할 수도 있고 그 사람은 어떤 생각을 가지고 있는지 말하기도 합니다.

제가 현재덕이라는 사람에 대해서 알고 있는 건 별로 없습니다. 전 이 사람의 본명을 알기전에 현카피라는 필명을 먼저 접했고 이 사람의 얼굴을 보기 전에 그가 찍은 사진을 먼저 접했으며, 이 사람의 목소리를 듣기 전에 그가 쓴 글들을 먼저 보았습니다. 결국 제게 현재덕이라는 사람은 현카피라는 필명으로 사진과 글을 올리는 사람으로 기억되고 누군가에게 이야기 할 때도 그렇게 설명합니다. 사실, 현재덕이라는 이름도 이 책을 사면서 적힌 저자명을 보고 알게 되었습니다. 제게는 아직 현카피가 친근하게 느껴지고 12시가 넘어가는 시간에 조명이 꺼진 방 안에서 스피커에서 흘러나오는 음악에 발로 박자를 맞추면서 사진과 글을 읽고 답글을 남기는 사람들의 사연을 듣던 기억이 더 강하게 남아 있습니다. 그래서 책을 보면서도 그 기억들이 흘러나와서 눈을 감고 있으니 이런 저런 생각들로 고민도 많았고 사랑과 외로움을 동시에 느끼던 그때가 기억났습니다.

전 온라인을 통해서 이 글들을 접했었습니다. 그 때 스피커에서 흘러 나오던 음악들이 글과 사진 못지 않게 제게 큰 의미가 되었습니다. 책에서는 그 음악들을 들어볼 수 없으니 조금 아쉽습니다. 저처럼 아쉬움을 느끼시는 분들은 책에 적혀 있는 음악을 찾아서 들어보는 것도 좋을 것 같습니다. 아니면 현카피의 홈페이지에 들러서 글을 찾아보는 것도 좋을 테구요. 그래도 어떻게 접하게 되더라도 그 시절 제게 현카피의 글이 제 외로움을 달래주고 제 사랑에 귀를 기울여주고 제 아픔을 이해해 주었던 것처럼, 이 책을 보면서 어떤 사람은 위로 받고 어떤 사람은 자신의 사랑을 발견하고 어떤 사람은 아픔을 극복하는 방법을 배울거라 생각합니다.

눈 앞에 책이 있는데 책의 분위기를 잘 표현해 줄 사진을 한장 선택하기가 쉽지 않군요. 제게 특별한 의미가 있었던 사진들이 이 책을 대변하지는 않을 테고 결국 누구든 읽고나면 그런 대표할 만한 사진을 찾을 수 있을 테니 제가 굳이 한정짓지 않는 것이 좋겠다는 생각이 들었습니다. 그래서 알라딘에 있던 책 사진 중에 한장을 이렇게 링크합니다.

pics
출처 : http://www.aladdin.co.kr/shop/book/wletslook.aspx?ISBN=8956601488#letsLook

관련 링크

당신에겐 열정이 있습니까?

Ron Jeffries는 제가 좋아하는 프로그래머입니다. 그는 eXtreme Programming를 만든 사람 중에 하나이고 수십년의 경력을 가지고 있는 프로그래머 입니다. 그리고 아직도 활발하게 프로그래밍을 하고 있고 다양한 것에 관심을 가지고 견해를 내놓곤 합니다.

여기서 약간 이야기의 방향을 틀어보기로 하겠습니다.

고등학교 때 이스케이프라는 컴퓨터 동아리에서 활동했었습니다. 그 때 정말 열심히 모여서 공부하고 이것 저것 도전해보고 그렇게 고등학교 생활을 보냈던 기억이 납니다. 당시 리눅스가 국내 보급되던 초기임에도 2학년 때, 같이 리눅스를 공부하고 PHP를 공부하고 웹서버를 구축하고 PHP로 게시판과 홈페이지를 만들고 강좌를 만들어서 올리고 했었습니다. 학업에 전념하진 않았지만 하고 싶은 걸 하면서 즐겁게 지냈었습니다. 그때의 그 열정이 지금까지도 제게 많은 도움이 되고 있고 컴퓨터를 공부하고 세상을 공부하는데 더 없이 큰 힘이 되고 있습니다.

그런 것들에 대한 기억이었는지 대학에 와서 만들었던 이스케이프 티셔츠의 뒷편에 Do you have a passion?이란 문장을 넣었었습니다.

전 그 시절의 열정을 추억하지만 그 열정이 단지 그 때로 끝나기를 바라지 않습니다. 제 생활 속에서 그리고 저와 다른 사람들 사이의 관계에서 불처럼 뜨겁고 강한 열정은 아니라도 지속적으로 사그라들지 않게 타오르는 열정을 가지고 싶습니다. 조엘The Best Software Writing I을 보면서 론의 글에서 전 그런 제가 가지고 있던 생각과 같은 열정을 볼 수 있었습니다. 제가 말주변이 없어서 표현하지 못했던 그 열정의 모습을 론이 표현할 글을 보면서 동감하면서 좀 더 구체적인 모습을 그려볼 수 있었습니다. 전 이 글을 보면서 정말 즐겁고 깊이 동감했습니다. 이 글을 읽는 여러분도 자신의 열정을 다시 한번 확인하는 기회가 될 수 있으면 합니다.

번역서에서 본 글을 이곳에 그대로 올리는 것은 저작권 침해이니-사실, 론의 글을 이렇게 인용하는 것도 그렇겠지만 상식적으로 출처를 밝힌 인용이고 특별히 불가의 의사를 밝히지 않아서 인용합니다- 원문으로 대신하려고 합니다.

Passion
I was born for passion, passion in my work and the people relating to it. I have great success in building teams with a mission and getting things done, and some great failures in the trying. I've had people love me and had people hate me, and while I prefer the love by a wide margin, I kind of prefer either to indifference. Because I'm not about making indifference, I'm about making a difference.

That's what I think this movement is about: making a difference. That's what I want it to be about: making a difference.

Here's what I try to be, and what I like to find in those around me:

I want to stay the course with the people who converse with me, not just drift away as if no longer interested.
I want to argue passionately without rancor, let you call me names in the morning and drink in peace and affection with me that night.
I want to hold others in the true respect that allows them to be what they are, act like they will, while working as hard as possible to influence them to try other things.
I want to give my ideas away, confident that my little gift will come back to me manyfold.
I want to try every way I can to communicate with my colleagues, to get my ideas across and to get their ideas back in return.
I want to honor the passion that people feel, to honor the strongly held beliefs and ideas of others as much as I honor my own
I want to crash-test those beliefs and ideas hard against each other, confident that even better ideas will come out of the testing.
I want to assume that we do this from love, that we care about each other, and that we welcome the crackle of real passion, real work, the real interaction of ideas.
I do my best to be that kind of person. And I want to be with other people like that. Thanks for being around.

출처 : Passion, Ron Jeffries, 10/04/2004

2006년 5월 31일 수요일

시작하는 웨이트맨을 위하여

일단은 다른 이야기로 시작하려고 합니다. 평소에 웹서핑을 하려고만 하면 막막해지는 기분 같은걸 느낍니다. 하루중에 절반 이상을 컴퓨터 앞에서 보내지만 실제 서핑을 하는 시간은 그리 많지 않기 때문에 어떤 곳에 들어가야 할지 잘 모른다고나 할까요. 뭘 봐야할지도 알 수 없습니다. 제게 웹은 목적을 위한 도구로 존재하지 웹에서 인생을 영유하진 않거든요.

뭐, 결국 그래서 제가 들리는 사이트는 몇군데 되지 않습니다. 하루에 10분이면 전부보고 웹서핑 끝났네 라고 생각할 수 있을 정도입니다. 그 사이트들에 대해서는 나중에 다루도록 하고 그 몇군데 사이트 중에 딴지일보가 끼어 있는데 제가 딴지일보를 좋아해서가 아니라(싫어하지도 않지만) 그곳에 연재되는 기사중에 스포츠 강좌를 보기 위해서 입니다. 맛스타드림 이라는 사람이 정기적으로 1년 넘게 연재하고 있는 강좌인데, 기존의 웨이트 트레이닝 같은 운동에 대한 근본부터 다른 생각으로 접근하고 있습니다.

예를 들어 초반 강좌중에 유산소 운동과 무산소 운동 이라는 글이 있습니다. 글 중간에 보면 아래와 같은 이야기가 나오는데 흔히들 생각하는 유산소 운동의 장점이나 단점을 알 수 있었습니다. 냅따 달린다고 무조건 좋은게 아니라는 거죠.


우리가 흔히 아는 축구, 야구, 농구, 테니스, 복싱, 이종격투기, 암벽 타기 등 거의 모든 운동은 유산소 능력보다 무산소 능력위주의 운동이라 보면 된다. 도표를 함 확인해 보자.

위의 도표에서 알 수 있듯이 무산소 운동의 장점은 유산소 운동 보다 훨씬 많다. 또한 생각과는 달리 무산소 능력은 유산소 능력을 감소시키기는커녕 더욱 더 강화시킨다는 것을 알 수 있다.

그 대표적인 것으로 마라톤에서 기록을 앞당기기 위해 꼭 해야 하는 훈련인 인터벌 훈련을 예로 들 수 있는데 인터벌 훈련이란, 일정거리를 아주 빠른 속도(무산소)로 뛰고 천천히 달리기를 일정횟수 반복하는 훈련이다. 무산소 운동에 의한 유산소 능력을 향상시키는 대표적인 훈련 방법인 것이다.

출처 : [스포츠강좌] 유산소 운동과 무산소 운동

이 이외에도 근육운동을 어떻게 해야 하는지 영양은 어떻게 섭취해야 하는지 말하는데, 우리가 알고 있는 방법들과 약간 다른 점들이 있습니다. 그 중 대표적인 것이 대부분의 사람들이 웨이트 트레이닝을 하려고 헬스클럽을 이용할 때 기계로 하는 운동(기계를 움직여서 특정 부분을 운동시키는)이 좋지 않다는 것입니다. 기계로 하는 운동보다는 같은 운동이라도 바벨(긴 봉에 무게가 달려있는 일명 역도)과 덤벨(한손에 쥐고 들어다 내리는 일명 아령)을 이용하여 하는 것이 부상 예방이나 효율적인 운동이라는 것이죠. 다른 운동관련 서적에도 많이들 언급하고 있는 것이지만 실제 헬스클럽 코치들은 기계운동의 사용법만 알려주지 아령이나 덤벨을 이용해서 운동하는 걸 알려주지 않는 경우가 많습니다. 자신들이 잘 모르는 경우도 있겠고 귀찮아서 그러는 경우도 있겠지만 우리는 그런 것들을 모르고 운동을 하게 되는 것이니 비효율적인 운동을 하고 있는 것이죠.

그렇다고 무작정 덤벨을 이용해서 TV에서 많이 보던 것처럼 이두박근 운동만 한다고 좋은 건 아니랍니다. 강좌에서 여러번 나오면서도 중점적으로 이야기 하는 것은 스콰트의 장점과 단순한 관절운동 보다는 데드 리프트나 밀리터리 프레스 같은 복합관절 운동을 하는게 좋다라는 것입니다. 그리고 단순하게 가슴근육만 만들어 보여줄려는 목적이 아니면(물론 젤 큰 목적이겠지만) 실제로 힘을 기르고 생활에 도움이 되는 근육을 생성하는 운동을 하자고 말하고 있습니다. 뭐, 이런 저런 말을 들어보아도 이 사람의 주장이 제가 공감할 수 있는 부분이 젤 크다고 생각해서 결론은.


운동 시작 한다는 것입니다.

이건 신변잡기 포스트라 이런 쓰레기 잡다한 글도 생각없이 올리는 겁니다.

운동 계획은 제가 지킬 수 있는 범위에서 잡았습니다. 너무 열심히 하는건 사정도 좋지 않고(육군 일병 -_-) 귀찮으니까시간도 없으니까 일주일에 2-3번하는 걸로 잡고 강좌의 시작하려는 웨이트맨을 위하여를 참고하여 데드 리프트와 밀리터리 프레스를 각각 5회씩 5세트 도합 25번씩 하고 있습니다.

막사 운동기구가 별로 좋지 않아 바벨에 끼울 웨이트가 많이 부족하긴 하지만 있는데로 다 달아서 들어보니 대략 80kg정도 나오는 것 같던데 데드리프트 하기 딱좋았습니다. 앞으로 더 올라가겠지만 어떻게든 해결될꺼라 생각하고 열심히는 아니라도 가볍게 운동해야겠습니다.

Finding Sung Won

고등학교 1학년 때(1999)부터 친하게 지내던 친구들이 몇 있습니다. 초등학교부터 같이 놀던 지훈이와 영휘 그리고 같은 반이 되면서 친해진 우준이 광현이 국현이(맞나? -_-) 성원이가 있습니다. 시간이 지나고 다들 다른 일들을 하게 되면서 자연스럽게 연락이 안되거나 이런 저런 사정으로 서로 연락하지 않게 된 경우도 있지만 이스케이프 친구들을 제외하고는 고등학교 기간 동안 잘 뭉쳐다녔던 녀석들입니다.

지훈이와는 대학교 같이 가고 같은 학회에서 활동하면서 항상 보고 있었지만 다른 친구들은 일단 대학에 들어가면서 부터 그렇게 자주 만나기가 힘들었습니다. 그래도 서울에 올라와 있던 성원이와 영휘와는 이런 저런 일들로 보곤 했었습니다. 1학년 때는 신촌에서 놀다가 성원이집에서 자던 기억이 많네요. 여하튼 잘 지내고 있었는데. 2학년되고(2003) 재수에 삼수를 거듭하던 그 성원이라는 친구가 점점 희미해 지는 겁니다.

물론 저도 바빠서 연락하기 힘들었지만, 여하튼 어느 시점부터인가 연락이 안되고 주변 친구들에게 수소문을 해봐도 살아는 있는 것 같더라 정도의 답변만 얻을 수 있었을 뿐이었죠. 그래서 주로 활동하는 무대가 온라인이었던 만큼 온라인에서 수소문 해보면 나오겠지 생각하고 온라인을 뒤졌는데도 흔적을 발견해도 연락을 하기가 힘들었습니다. 급기야는 죽었다는 소문도 돌고 희말리아(!) 산으로 수도행을 갔다는 소문도 들리는 시점에서(2005년) 다행인지 불행인지 그 녀석이 활동하던 커뮤니티에서 한점의 글을 발견했습니다. 그 글이 씌여진 시점을 증거로 살아 있다는 생존설이 설득력을 얻게 되었습니다.

그래도 연락이 되질 않아서 살아도 살아 있는게 아니다. 라고 생각하고 있었는데, 오늘 고등학교때 같은 동아리에서 활동하던 친구가 소재를 알아서 공개했습니다. 세상에 나름대로 멀쩡하게 살아 있더군요. 허허.. 게다가 06학번이라니...

06학번의 귀여운 여동생들과 다닌다고 생각해도 많이전혀 부럽지 않았습니다. 뭐, 살아 있다는 것에 참 감동했습니다. 살다보니 이런 일에도 감동을. -_-;

흠.. 군대에서 별 일 다 겪는군요.

2006년 5월 29일 월요일

자동화 도구를 이용한 웹 프로그래밍

군대 오기 몇 달 전에 그러니까 작년에 "실용주의 프로그래머"가 처음 번역되어 출판되던 때 예약구매해서 며칠 만에 읽었습니다. 원서(Pragmatic Programmer)의 명성은 익히 알고 있었지만 게으른 탓에 제대로 읽어보지 못하다가 김창준씨의 번역으로 책이 나온다는 소문을 듣고 기대하면서 바로 구입하여 읽었던 기억이 납니다.

지금은 반년이 지나도록 다시 볼 기회가 없어서 내용의 대부분을 잊었지만 요즘 이곳에서 하고 있는 작업에 실용주의 프로그래머를 읽으면서 자연스럽게 채득되었던 지식들이 도움이 되고 있습니다.

제가 이야기할 내용은 실용주의 프로그래머에서 언급된 내용이지만 "실용주의 프로그래머를 위한 프로젝트 자동화"와 더 가까운 내용입니다. 전, 이 글에서 프로젝트를 진행하면서 수 없이 접하게 되는 똑같은 작업들을 어떻게 하면 더 편하게 할 수 있을지 그리고 노동 집약형의 작업들을 어떻게 빠르게 해결할 수 있을지 이야기 하려고 합니다.


웹사이트를 개발하면서 접하게 되는 상황에서 도구를 이용해 해결하는 사례를 보겠습니다. 참고로 제가 군복무 중이고 군대에서 개발하는 상황이라는 점과 현재 개발하는 웹사이트가 어느 정도 큰 규모(18000여개의 파일, 600Mb정도의 용량) 의 사이트라는 점을 염두에 두시고 읽으셨으면 합니다. 이로 인해 일반적인 회사의 상황과 다른 경우가 많을 수도 있습니다.


1. 소스 버전 관리를 이용한 협업


요즘은 Subversion이나 CVS같은 소스 관리 프로그램이 워낙 많이 알려져서 많은 사람들이 실제로 업무에서 사용하고 있고 그에 따른 효과를 이야기 합니다. 하지만 아직도 기존의 방법을 버리고 버전관리 시스템을 이용하는 것에 거부감이나 어려움을 느끼는 경우가 많습니다.

버전관리를 통해서 얻을 수 있는 다양한 이점들은 다른 곳에서도 많이 접할 수 있기 때문에 말을 줄이고 최근 제가 겪은 버전관리를 통해서 얻었던 이점을 간단히 소개해 보려고 합니다.

우리팀에서는 그동안 웹사이트에 사용하는 DB로 MySQL을 쓰고 있었습니다. 초반에 Oracle로 DBMS가 정해 졌었지만 개발속도를 위해 MySQL로 개발을 했었습니다. 차후 Oracle로의 포팅을 위하여 PEAR DB를 이용하여 작업하였습니다. 하지만 실제 포팅할 시기에 생각보다 포팅을 위해 수정해야 할 부분이 많아서 포팅 작업에 일주일 정도의 시간이 소모될거라 예상되었습니다.

조직의 특성상 프로젝트 관리자들은 날마다 눈에 보이는 성과를 요구했습니다. 그래서 내부적인 작업을 하는 동안이라도 실제로 보이는 성과를 제출해야 했습니다. 물론 비합리적이지만 실제로는 얼마든지 부딪힐 수 있는 경우 입니다. 결국 일주일이란 시간 동안 내부적인 작업만을 하기가 힘들었습니다.

이를 해결하기 위해 html작업을 통한 작업진척을 이용하여 시연을 하여 성과를 제출하려는 계획을 세웠습니다. 프로그램은 90%이상 개발 되었기 때문에 MySQL을 이용해서 작동한다는 점을 제외하면 웹페이지 작업을 통해서 성과를 보여주는데 많은 문제가 없었습니다. 다만 Oracle로의 포팅 작업 도중에는 프로그램이 정상적으로 실행되지 않기 때문에 웹페이지 작업을 하는 부분은 기존의 프로그램이 계속 동작해야 했습니다.

이를 해결하기 위해 Subversion의 branch기능을 이용해 /branches/RB-x.x.x-MySQL(이하 RB)과 같은 형식으로 복사했습니다. 그리고 웹페이지 작업은 분리된 RB에서 진행되도록 웹페이지의 작업 소스를 switch기능을 이용해 바꾸었습니다. 그리고 기존에 작업이 이루어지고 있던 /trunk/src(이하 trunk) 에서는 Oracle로의 포팅작업을 진행하였습니다. 그렇게 4일 정도 작업이 이루어진 후 포팅 작업을 완료하고 RB에서 이루어진 웹페이지 작업과 포팅작업의 결과물을 합쳐야 했습니다. 4일 정도의 길지 않은 기간이지만 Subversion Revision이 200이 넘는 차이가 나고 변경된 파일만 수백개에 이르는 많은 양의 작업이 진행된 후였습니다. 그 중에는 trunk에서의 작업과 중복되는 부분도 있어서 일일이 수작업으로 합치는건 불가능했습니다. 여기서 subversion의 merge기능을 유용하게 사용하여 쉽게 소스를 통합할 수 있었습니다.

소스를 통합하기 위해서 제가 사용한 명령은 아래와 같은 한줄의 간단한 문장이었습니다.


svn merge - r 981:HEAD file:///home/svn/framework/branches/RB - 0.7.1


간단한 이 명령을 통해 revision 981(4일전의 작업)에서 분기 되었던 소스의 분기 시점부터 현재까지의 변경분을 메인 소스에 적용시킬 수 있었습니다.


2. 게시판 생성과 같은 단순 반복 작업


프로젝트를 진행하면서 여러 유형은 단순 반복작업을 접할 수 있었습니다. 특히 군 내부 프로젝트라 중간 점검 단계가 군인이다보니 그로 인한 것인지 개인적인 것인지는 알 수 없지만, 단순한 중간 점검을 위해서도 게시판이나 각 프로그램들에 실제와 유사한 데이터가 입력되어 있고 800개에 가까운 게시판 중에 300개 이상이 생성되어 있어야 했습니다. 문제는 개발과정에서 그러한 것을 요구했기 때문에 300개의 게시판을 생성했다가도 변경으로 인해 스키마나 DB를 변경해야 할 문제가 발생하기도 하고 여러 이유로 다시 생성하거나 전반적인 이름을 바꿔야 할 경우가 생기곤 했습니다. 그리고 각 게시판은 사용하는 부분에 따라 스킨을 다르게 쓰거나 게시판 이름을 붙여줘야 하는 경우도 있어서 단순한 게시판 생성 프로그램을 만들었지만 이를 활용하여 초기 게시판 생성을 하기에는 무리가 있었습니다.

이 문제를 해결하기 위해 게시판 정보를 excel로 작업하여 문서로 만들었습니다. 문서에는 800개 가량의 게시판형 프로그램의 정보가 들어 있으며 전 이 문서를 읽어들여 정보를 바탕으로 각각에 맞는 게시판을 생성하는 프로그램을 만들었습니다. 이를 이용해 생성을 하여 중간 중간 대규모의 변경도 쉽게 적용할 수 있게 되었습니다.

이와 비슷한 많은 작업들이 같은 방식으로 해결 할 수 있습니다. 시연을 위한 가상의 데이터를 입력해 줘야 할 경우도 sql문을 만들어 가지고 있는 것보다 스키마 변경이나 로직 변경에 유연한 생성 프로그램을 만들어 이용하면 데이터의 무작위성이나 현실적인 부분에서 많은 이익을 볼 수 있다고 생각합니다.

이런 종류의 프로그램을 만들 때는 아래와 같은 점들을 고려하는 것이 좋습니다.


1) 전반적인 작업이 한번의 실행으로 이루어져야 합니다


예를 들어 기존에 입력되어 있는 db의 테이블, 시퀀스 등을 제거하고 새로운 테이블이나 시퀀스를 생성한 후, config테이블 등의 테이블에 내용을 입력하고 permission세팅과 같은 부분을 해야 하는 작업이 전부 이루어져야 하는 것과 같은 경우, 한번의 실행으로 순차적으로 위의 작업들이 일괄적으로 이루어지도록 프로그램을 만들어야 합니다. 각 부분의 재사용을 위해서는 해당 부분을 모듈화하거나 각각의 함수로 만들어 사용하여 해결하고 각 파트를 따로 실행시킬 수 있는 부분 또한 추가하는 것이 좋습니다.


2) 튼튼하게(?) 만들어야 합니다


다소 웃기는 표현이지만 단순하게 도구로 사용하는 프로그램이라도 튼튼하게 만들어야 합니다. 프로그램이 실행되는 도중에 종료되더라도 쓰레기 데이터나 값들을 남기지 않도록 트랜젝션 처리에 신경을 써야 합니다. 그리고 다시 실행시키더라도 이미 완료된 동작은 스킵하고 지나갈 수 있도록 해야 합니다. 예를 들어 총 500개의 테이블을 생성해야 할 경우에 150번째 생성에서 오류로 종료되었다면 다시 실행시키면 정상적으로 만들어져 있는 경우는 넘어가서 150번째 부터 다시 시도하게 되어야 합니다.

프로젝트에 따라 다르겠지만 프로그램 동작의 기반을 만들어주는 프로그램은 다양한 경우에서 다양한 방법으로 사용될 수 있기 때문에 기반을 만들다기 보다는 쓰레기를 추가 시킬 우려가 없도록 하는 것이 중요합니다. 이를 위해 앞에서 말한바와 같이 미리 입력된 데이터를 점검하여 상태를 파악하여 입력할지 하지 않을지 업데이트를 할지 결정하는 부분이 있어야 합니다.


3) 사용자 입력에 친화적으로 제작해야 합니다


이는 화려한 인터페이스를 통해 사용자가 쉽게 입력할 수 있도록 해야 한다는게 아닙니다. 일반적으로 자동화 프로그램은 표준입력을 받아서 실행되기 보다는 config파일이나 내부적으로 특정 목적에 특화되어 있기 때문에 그냥 실행만 시키면 알아서 동작하도록 하는 것이 좋습니다.

다만 이때 소스로 사용할 데이터는 기획자와 같은 프로그래머가 아닌 사람을 통해서 만들어지는 경우가 많은데 그런 경우를 위해 간단한 형식의 excel문서를 이용할 수 있도록 만드는 것이 좋습니다. 그렇다고 이해하기 힘든 프로그램을 위한 정보만 기입된 문서보다는 프로젝트에서 스펙문서로 사용될 수 있을 정도의 문서를 입력받아 적당한 파싱을 통해 이용하는 것이 좋습니다. 차후에도 사용자가 간단한 변경을 했을 경우 소스만 변경하면 그 변경사항이 적용되도록 하는 것이 중요합니다. 일반적으로 excel을 바로 파싱하는 것은 복잡하기 때문에 excel에서 csv로 저장한 결과를 파싱하도록 작업하는 것이 괜찮습니다.


3. 시간을 잡아 먹는 프로그램 배포 작업


프로젝트를 배포하는 작업은 웹사이트의 경우 목적 서버에 웹사이트 소스를 올리고 사이트가 동작하도록 변수 변경이나 빌드, 테스트 등을 하는 작업입니다. 여기에 몇 가지 사항이 추가되거나 할수도 있지만 일반적으로 목적 서버에 소스를 올리고 동작시키는 작업을 배포라고 할 수 있습니다. 팩키지 프로그램의 경우는 빌드하여 패키지를 생성하여 웹사이트에 배포하거나 목적 장소에 위치시키는 작업이 될 것입니다.

이러한 배포작업을 자동화 시키는 것에 대한 최고의 서적은 "실용주의 프로그래머를 위한 프로젝트 자동화"입니다. 제가 아는 한 이 책은 이 부분에 대한 최고의 책이며 프로젝트 자동화에 대해 다룬 몇 안되는 책입니다. 강추입니다. 번역판도 나와 있으니 꼭 읽어보세요~.

각설하고 CruiseControl과 Subversion을 이용하여 일정 주기로 변경사항을 개발서버에 적용시키고 유닛 테스트를 실행시키는(있다면) 작업을 알아보겠습니다.

CruiseControl은 제가 이전에 쓴 포스트에 간략하게나마 설명되어 있습니다. 지금 제가 개발하고 있는 웹사이트는 PHP로 만들었기 때문에 Ant를 이용한 빌드 과정은 불필요합니다. 경우에 따라서는 초기화 디렉토리를 생성하거나 기동 스크립트를 실행시키는 역할을 ant를 이용해서 할 수도 있습니다. ant를 프로젝트 빌드에만 이용할 필요는 없는 것이죠. 현재 제가 개발하고있는 웹사이트는 파일이 18000여개 정도이고 600메가가 넘는 사이즈이기 때문에 시연을 위해 서버에 개발중인 소스를 복사하고 환경에 맞게 세팅하는 것에만도 많은 시간이 소요됩니다.

이를 해결하기 위해 subversion을 이용해서 소스를 update하는 방법을 이용하고 있습니다. subversion의 업데이트 기능은 변경된 부분만을 받아와서 적용시키기 때문에 주기적으로 update해줄 경우 동기화에 많은 시간이 걸리지 않습니다.

CruiseControl은 램에 상주하면서 주기적으로 subversion 저장소에 소스가 업데이트되었는지 체크하여 버전이 올라갔을 경우 subversion의 update명령을 실행합니다. 그리고 unittest를 위한 testcase를 실행하여 결과를 저장할 수 있습니다. 또한 프로그램을 제대로 실행하기 위해 필요한 디렉토리를 생성한다거나 설정을 변경하는 등의 작업을 추가적으로 실행시킬 수도 있습니다.

CruiseControl의 최대 장점은 한번 실행되면 자동적으로 소스를 동기화 시키고 추가적인 작업들을 진행하여 결과를 통보해 줄 수 있다는데 있습니다. 사람이 주기적으로 혹은 가끔이라도 해야 했던 일들을 완전히 프로그램에 위임하면 결국 우리가 할 일이 하나 더 줄어듭니다. 남는 시간은 프로그래밍을 하면 되겠죠. :-)

Man of Month를 마치며

벌써 2020년 1월 14일이다. 19년의 마지막 달에 Man of Month라는 팀의 제도를 시작한다고 했었는데, 12월이 지나고 그 다음 달도 거의 절반이 흐른 것이다. MoM을 시작하면서 하겠다고 계획했던 것들도 실제 한 것들과 비교해보니...