Code Generation 기법 - 득과 실

Code Generation이란 프로그래머가 Program code를 직접 작성하지 않고 자동으로 code를 생성해 내는 것을 말합니다.  자동으로 code를 생성하는 tool을 code generator 혹은 compiler라고 부르죠.  C compiler로도 code generation이라고 볼 수도 있으나, 여기서 말하는 것은 script나 configuration에서 C 코드를 만들어 내는 compiler에 한정 짓도록 하죠.  물론 C가 아닌 다른 Language도 포함됩니다.  XML같은 data도 만들어 낼 수 있겠죠.


Code generation은 많은 장점을 가지고 있습니다.

첫번째, 사람이 Code를 작성하지 않는 다는 것이죠.  저를 포함해서 사람은 code를 작성하는 순간 버그를 만들어 냅니다.  인간미가 넘치는 코드에서 버그를 다 제거하는 일은 오랜 노력이 필요한 작업입니다.  반면 기계가 작성한 코드는 실수가 없습니다.  결과적으로 품질이 뛰어나게 되고, A/S의 노력 또한 줄어들게 되죠.  컴퓨터가 일을 하게 만드는 겁니다.

두번째는 일이 쉬워집니다.  코드를 작성하는 것보다 Code generator의 입력인 Script를 작성하는 것이 훨씬 쉬운 일입니다.  나중에 Upgrade를 하려고 code를 보는 것보다 script를 보는 편이 훨씬 이해하기 쉽죠.  당연히 2~3배 빨리 일하는 것은 식은 죽 먹기죠.  일을 끝내는 것도 2~3배이고, 나중에 upgrade를 위해 재작업을 할 때도 2~3배 빨리 하게 됩니다.  게다가 5년 전에 작성한 코드를 봐도 쉽게 이해가 됩니다.  쉽다는 장점은 또 다른 장점을 만들어 냅니다.  신입사원에게 2시간만 교육시키면 5년 경력이 하던 일을 맡길 수 있습니다.  자~ 이제, 남는 시간에 뭐할지 고민하면 됩니다.

세번째는 작업의 표준화 입니다.  누가 작업을 하던 script는 물론이고 작성된 관련 코드를 누구나 이해할 수 있습니다.  제가 유럽 여행을 2주간 가려고 하는데, 제 코드를 누군가가 봐줄 수 있다면 얼마나 마음 편히 여행을 다녀올 수 있겠습니까. 하하.

정리해 볼까요?
Code generation은 생산성을 2~3배 이상 높여주고, 초보도 참여를 가능하게 하며, 코드의 품질은 0%의 버그에 다가가게 되어 A/S비용을 0에 가깝게 만들고, maintenance비용 또한 2~3배 줄여 줍니다.  이틀만 일해도 이전에 1주일 하던 일을 할 수 있게 되는 거죠.  사장님도 좋아하시겠군요.


그.런.데 말입니다.
Code generation기법은 대부분의 사람이 알고 있고, 개념도 쉽지만, 주변에서 정작 사용하는 경우는 찾아 보기 힘듭니다.  왜 일까요?

이 또한 세가지 정도 이유가 있을 것 같군요.

첫번째는 Code generation기술은 생성되는 code를 작성하는 기술과 다른 영역의 기술이라는 겁니다.  Code generation기법을 공부하기 위해서 투자를 해야 되는 거죠.

두번째는 Code generation기술은 code를 직접 작성하는 기술에 비해 차이는 있지만 2~3배 어려운 기술입니다.  코드를 작성하는 것이 엔진부품을 가지고 자동차는 만드는 것이라면, Code generator를 작성하는 것은 엔진을 설계하는 일이기 때문이죠.

세번째는 시간적인 여유입니다. 주로 시간적인 문제인데, 프로젝트를 수행하는 경우, Code generator를 주어진 시간 내에 개발해야 하는데, 이런 상황이 허락되는 경우는 극히 드문 경우이죠.  게다가 Code generation에 성공한다는 보장이 없기 때문에 Risk또한 부담이 되겠죠.

시간적인 것을 쉽게 예를 들어보죠.
프로젝트를 수행하는 노력은 1이라고 했을 때
Code generator를 작성하는 노력은 0.7  생산성 향상은 2배라고 하죠.

하나의 프로젝트라면 0.7 + 0.5 = 1.2  (vs 1)  시간만 따진다면 안 하는 게 이익입니다.  코드 품질은 훨씬 낫겠죠.  하지만, D-day의 압박이 크다면 이런 Risk를 안는 데는 엄청난 용기가 필요하겠죠.

두개의 프로젝트라면 0.7 + 0.5 + 0.5 = 1.7  (vs 2)  시간적인 측면에서도 효과가 나타납니다.  세개의 프로젝트라면 0.7 + 0.5 + 0.5 + 0.5 = 2.2  (vs 3)  게임 오버군요.

생산성의 가정을 3배로 한다면 그 효과는 더욱 커지겠죠.
하지만, 하나의 프로젝트라면 동일한 결과입니다.  당신이 관리자라면, 특히 장기적인 효과를 알지 못하는 관리자라면 'No'라고 말하겠죠.  저라도 장담 못하겠군요.


Code generation이 가지는 장기적인 효과에 대해서는 모두 이해하시리라 생각합니다.
하지만 단기적은 효율성이나 Risk에 대해서는 반드시 자동화가 득만 있다고 보기 또한 어렵습니다.  판단은 스스로 하는 거죠.

장점 중에 하나를 더 이야기 하면서, 마무리하죠.

우리나라 사람 아주 똑똑합니다.  그래서 그런지 단순하고 반복적인 일에는 쉽게 싫증을 내게 됩니다.  한 1년만 지나면, 신입사원 때 빛이 나던 눈은 어디런가 없어져 버리고 그냥 일상에 젖고 말죠.  그런 친구들에게 'Code generator을 만들어보자!' 라고 하면 말이죠.  그 친구는 이전 신입사원 때의 초롱초롱한 눈을 다시 보여주게 된답니다.  가슴 뛰는 일이죠.

여러분 화이팅~

제임스 드림

 

by 제임스 | 2006/06/01 20:48 | 메인스토리 | 트랙백 | 덧글(1)

트랙백 주소 : http://jamestic.egloos.com/tb/60818
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by stone at 2006/06/09 13:47
원래 스스로 만든 것이 기술이 되는건데... 요즘은 남이 만든거 받아다 customizing 하는게 기술인거 같더군요.
참, 사진에 나오는 고양이는 누구죠? 사진 괜찮네요.

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶