[ 나의 첫번째 자바 기반 프로젝트 ]
내가 처음 Java, Servlet으로 웹 개발을 할 때 시중에 나와있는 서블릿 관련 국내서라곤 유일하게 한 권 있었던 것으로 기억한다. - 제목은 가물가물하지만 표지가 빨간색이었던 것 같다. OSDK(Oracle Servlet Development Kit)로 개발했었는데 그때 OSDK는 JSP 0.92(1.0?), Servlet 2.1 대의 최신(!) 스펙을 지원했었다. 90년대 후반이었으니, 자바를 시작한 것이 그리 빠른 것도 아니었지만 지금처럼 자바 개발자가 넘쳐나던 시기도 아니었다. 개발하면서 주변에 서블릿은 물론 자바를 해봤던 사람도 없었고, 나 역시 자바 경험이 전무한지라 책과 함께 인터넷 자료를 싸그리 뒤져가면서 열공하며 코딩했던 기억이 난다.
아무튼 그때는 코딩도 꽤나 원시적인(?) 방법이었다. 따로 개발툴을 사용하지 않았고 울트라에디트(UltraEdit)로 소스 코드를 편집하고, 커맨드라인(command-line)으로 컴파일하여 수동 배치하였다. JSP는 사용하지 않았고 서블릿으로만 작성했기 때문에 자바 소스 파일에는 HTML 태그와 javacript가 난무하였고, PrintWriter 타입의 out 변수를 사용하여 해당 문자열들을 출력하는 라인을 모두 삽입해야 했다. 또 디버그를 위해서 남발한 'System.out.println'은 소스를 '스파게티 코드'화 시키고 가독성을 떨어뜨리는데 충분히 일조했다.
결과적으로 소스는 길어질대로 길어졌고 심지어 몇몇 복잡한 서블릿 소스들은 4천에서 5천라인 가까이 되기도 했다. 그 시절에 만들었던 소스들은 내 개인 개발사에 있어서 역사적 유물로 간주되어 현재까지 소장하고 있다. ^^
이후로 자바 스펙은 지속적으로 업그레이드되고 개발 환경도 계속 급변해감에 따라 개발 환경과 개발 툴에 대한 경험치도 자연스럽게 늘어가게 되었다. 단적으로 'IDEs & RAD' 툴에 대해서 얘기하자면, 메이저 마이너급을 통털어 한번이라도 만지작거려 봤던 것들로 Kawa, SunOne Studio(Forte for Java), Visual Cafe, JDeveloper, JBuilder, Visual Age for Java, NetBeans, Eclipse, WSAD, Visual Studio(.Net 포함), Delphi, PowerBuilder 등이 있다. 가장 최근에는 파워빌더와 더불어 일반적인 툴은 아니지만 WSAD와 마찬가지로 이클립스 기반의 ProWeb Studio라는 티맥스소프트사의 제품을 사용해봤다(RIA, X-인터넷 솔루션의 비교와 선택 참고). 이들 중에는 이미 역사의 뒤안길로 사라진 유물도 있고 벤더가 변경 되는 우여곡절을 겪은 것들도 있는 것 같다.
개발에 있어서 텍스트 편집기의 사용은 기본이지만 IDE(Integrated Development Environment, 통합개발환경) 또는 RAD(Rapid Application Development) 툴을 사용함으로써 얻을 수 있는 가장 큰 잇점은 '비주얼하게 개발하고 디버깅 하기 편한 것'이 아닐까 싶다. 이들 개발툴들은 편리하고 진보된 기능들을 제공하여 개발자들이 수동으로 작업할 것들을 거의 자동화시켜 개발 생산성과 효율성을 향상시켜준다.
[ 고달픈 개발자의 숙명? ]
개발자라는 것은 참으로 고달픈 직업이다. 직업을 불문하고 '자기계발'은 사회 활동을 하는 누구에게나 꾸준히 요구되는 덕목 중의 하나겠지만, 개발자들에겐 더 큰 부담으로 작용하는 것이 사실이다. 패션에 유행이 있듯이 개발에도 트랜드가 있다. 패션이 바뀌듯 개발 방법론의 패러다임은 계속해서 진화하고 하루가 멀다하고 새로운 기술들이 쏟아져나오며 끊임없이 변화하고 발전하고 있다. 더불어 개발 환경과 사용하는 개발 툴들도 말그대로 환골탈태하고 있다.
이런저런 사정으로 개발자가 갖춰야할 스펙들은 지겨울 정도로 늘어만 가는 것이 사실이다. 그만큼 개발자는 쏟아져나오는 신기술과 변화에 민감해야 하고 꾸준히 공부하고 버전업해야 하는 직업이다. 안타깝지만 개발자로 살아가는 그날까지! ^^;
어렵지만 개발자의 이런 고단한 라이프 스타일을 싫어도 즐길 수 있게될 때, '성공한 개발자'라는 수식어를 얻을 수 있지 않을까하는 생각이 든다. 자신의 일을 사랑하고 즐길 줄 아는 것이 개발자로서의 삶을 윤택하게 만든다.
[ 나의 이야기 ]
가끔 주변에서 나는 개발이 체질이라는 얘기를 듣곤 한다. 잘한다는 얘기는 아니다. 단지 즐겨 일한다는 의미이다. 하지만 정말 그럴까? 별로 잘난 개발자는 아니지만 돌이켜보면 그 동안 꽤 열심히 해왔던 것 같다. 스스로도 적성에 맞는다고 느껴질 정도로 일에 재미를 붙여 왔다. 하지만 어쩔 때는 넘쳐나는 IT 기술의 홍수 속에서 허우적거리다 지칠 때도 없지 않았다. 언제까지 이렇게 밥 벌어 먹고 살아야 하나 하고 종종 회의를 느끼기도 하고 스스로 매너리즘에 빠져 넋 놓고 있는 듯한 느낌을 받을 때도 있었다.
때로는 의도적으로 새로운 것은 받아들이는 것을 거부할 때도 있었다. 한참 전 일이지만 java를 계속하다가 .Net(마이크로소프트 닷넷)을 해야하는 상황이 된 적이 있었다. 자바에 나름 자부심도 갖고 탄력도 받고 있었는데 갑자기 생소한 닷넷 진영으로 갈아타야 한다는 것에 다소 거부 반응이 들었다. 그때 이전 회사를 그만두고 잠시 프리랜서를 막 시작하려던 시기여서 싫으면 안하면 그만이었을지도 모른다. 하지만 이래저래 고민, 고민하다가 결국 닷넷 프로젝트에 뛰어들게되었다. 다행이도 닷넷, 특히 C#이 워낙 java와 닮은꼴이라 진입하는데 크게 어려움은 없었다. 지금 생각하면 결과적으로 잃은 것도 많지만 얻은 것도 적지 않다.
여담이지만 자바에서 닷넷으로 포팅된 프레임워크며 툴들이 꽤 있다. 특히 Apache Projects의 많은 것들이 그렇다. 예를 들면 log4j는 log4net으로, Ant는 NAnt로, JUnit은 NUnit으로, Spring은 Spring.NET으로, iBAITS는 iBATIS.NET으로 포팅되어 있다. C#과 ASP.Net 기반의 웹어플리케이션 프레임워크를 만들고 적용할 때, 이런 닷넷 포팅들은 자바에서 익숙해져 있던 것들도 있었기 때문에 닷넷 어플리케이션을 구현하는데 적지않은 도움을 주었다.
아무튼 그후로 닷넷 진영에서만 한 4, 5년은 있었던 것 같다. 그리고 닷넷의 매력에 빠져 재미도 붙이고 기술적으로도 이제 탄력 좀 받는구나 싶을 때, 또 다시 자바 진영으로 옮기게 되었다.
이때에는 자바의 스펙 자체가 많이 버전업되었고 개발 환경도, 기술적으로도 많이 변해 있었다. 사실 닷넷으로 건너가던 상황에 자바는 이미 Struts며 Spring 같은 일명 대세 프레임워크들이 자리를 잡고 꿈틀거리기 시작했었다. 닷넷을 하면서도 자바에 대한 관심의 끈을 놓지는 않았지만 닷넷도 만만하지는 않은지라 그것에 집중하느라 시간을 내어 이러한 자바의 변화를 자세히 들여다 보고 쫓아 가기란 쉽지 않은 일이었다. 사실, 핑계에 지나지 않을지도 모르겠지만. ^^;
작년 초에 다시 자바 진영으로 옮겨오면서 일단 Spring과 iBATIS 관련 도서를 한권씩 구매하여 읽어 보았다. 그리고 기초부터 다시 정리하자는 생각으로 갖고 있던 철 지난 책들은 내버려두고 변경된 API와 Spec을 담고 있는 새로운 버전의 Servlet, JSP, EJB 관련 자바 기본 도서들을 구매하여 최대한 빨리 독파하였다. 그리고 이전에는 자바 자격증에 별로 관심이 없었지만, 이왕 정리하는 김에 관련 자격증도 따보자 싶은 생각이 들어 겸사겸사로 SCWCD, SCBCD 등의 자바 자격증도 이때에 취득했다. - 덤프 보고 따는 자격증보다는 알고있는 것들을 체계적으로 정리할 수 있는 기회를 제공할 수 있다는 점에서 자격증의 의미가 있는 것 같다.
최근 자바 진영으로 다시 옮겨와서 최초로 수행한 프로젝트는 X-인터넷 기반의 인트라넷 어플리케이션을 만드는 것이었다. 그래서인지 1년이 훌쩍 지난 지금까지도 여전히 최신의 자바 웹어플리케이션의 기술과 트랜드에는 감이 멀게 느껴진다. -_-
요즘 또 약간의 슬럼프를 겪고 있는 것 같다. 현재 시점에서의 내 롤 자체가 조금 불분명한 부분이 있기도 하고, 이것저것 할 것은 많은데 막상 손이 가지 않는다. 이 글을 빌어 조금이라도 마음을 다잡아봐야겠다. ^^
[ 새로운 것을 받아들이는 자세 ]
새로운 것보다는 자신이 이미 겪었던 상황과 사물에 더 애착이 가고, 지난날의 추억에 향수를 느끼게 되는 것은 인지상정이다. 미래적이고 진취적인 것, 최신의 것을 좋아하는 사람이 있는가 하면, 반대로 고전적이고 보수적이며 구닥다리 옛것을 더 좋아하는 사람도 있다. 이것은 단순한 취향의 문제이다.
개발자들도 사람인지라 당연히 선호하는 것이 다르고 취향이 다르다. 하지만 프로젝트에 투입된 개발자에게 있어서 개인적 선호도는 더이상 단순한 취향의 문제가 아니다. 프로젝트에는 '표준'이란 것이 있기 때문이다. 이 표준에는 코딩 가이드와 표준, 네이밍 표준 등이 포함되며, 툴을 포함한 개발의 제반 환경에 대한 표준도 함께 포함 된다. 그러한 이유로 상황에 따라서는 개발자 자신의 선호도와 무관하게 다른 툴의 사용을 강요받을 수도 있다. 이렇게 되면 싫든 좋든 따라가야 한다. 대부분의 개발자에게 툴의 선정은 선택의 문제가 아니라 준수 대상이자 주어진 조건일 뿐이다. - 강조하지만 사적인 영역이 아니라 프로젝트 내부에서의 의미이다.
이러한 환경은 개발자로 하여금 계속해서 새로운 기술과 환경을 습득하도록 강요하고 채찍질 해댄다. 하지만 이 모든 변화들을 쉽게쉽게 받아들일 수 있는 것만은 아니다. 이런 환경은 간혹 개발자들을 지치게 만들고 IT 업계 혹은 Coder란 역할에 등을 돌리게 만들며 조금 더 편한 환경으로 이탈하도록 종용하고 있는지도 모르겠다. 사실 편한 환경이 어디있겠냐마는.
책임감, 근면, 성실, 빠른 두뇌 회전 등 개발자에게 요구되는 기본 소양들이 많겠지만 내가 생각하기에 가장 중요하고도 필요한 것은 '오기'와 '고집'이다. 뭐, 프라이드라 해도 좋을 것 같다. 굳이 '프로 의식' 처럼 거창하게 표현하지 않더라도 대부분의 잘난 개발자들은 대개 오기와 고집이 있다. 소위 맨땅에 헤딩하며 무에서 유를 만들어 내고 난해한 버그를 잡아 시스템을 돌아가게 하기 위해서는 고집이 없다면 불가능하다. 고집스러움은 뛰어난 개발자에게 필요한 최고의 덕목일지도 모르겠다. 물론 고집이 너무 심해서 아집이나 독선으로 발전하는 것은 경계 대상이다. ^^;
개발자는 변화하는 환경을 받아들이는데 인색하지 않아야 한다. 기술이 바뀌고 툴이 바뀌고 심지어 기반 프로그래밍 언어가 바뀐다 하더라도 두려워할 필요는 없다. 새로운 기술이 나타나면 깊이 있게 파지는 않더라도 '이 정도는 알아야겠군' 하며, 적당한 오기와 고집으로 최소한의 개념을 파악하고 흐름만 이해해도 중상위권은 간다고 본다.
회사에서 여건을 제공하고 본인 스스로가 '나는 한넘만 패!', 자바 하나만 죽도록 파겠다라는 심산이 아닌 다음에야 다른 플랫폼, 다른 언어를 대하는 것도 기피할 필요가 없다. JAVA와 .Net은 벤더도 다르고 스펙도 다르지만 기본적인 사상은 대동소이 하다고 본다. 자바에 있는 것은 닷넷에도 거의 있기 마련이고, 닷넷이 지원하는 것 또한 자바에서도 대부분 지원한다. 모양이나 표현 방식이 약간 다를 뿐이다. 여타 개발툴에 대해서도 다를바 없다. 익숙하지 않으면 설치해서 적당히 써보면 된다.
이렇게 써놓고 보니 말이 쉽다. 욕 먹기 딱이다. ^^; 요는 잘하자?! ㅋ~
조금 원론적이고 일반적인 얘기일 뿐 따지고 보면 엎어치나 매치나 개발자는 여전히 고달픈 것이 사실이다. ㅜ.ㅡ
개발툴에 대한 얘기를 조금 더 덧붙이며 얘기를 마무리하고자 한다. 단순히 개발툴이란 협소한 예를 들어 얘기하기에는 어폐가 있지만 이전보다 새롭고 진보된 개발 툴을 익히고 사용하는 것과 그렇지 않은 경우를 비교해본다면?
[ IDEs & RAD Tools - 툴을 미워하는 사람들 ]
시간이 충분한 프로젝트는 거의 없다. 빨리 만들고 빨리 테스트하고 빨리 납품하기 위해서는 개발의 효율성과 생산성을 극대화할 수 있도록 아키텍처를 설계해야 하고, 아키텍처에 상응하는 기반 프레임워크를 구현하고 활용하는 것도 중요하겠지만 구현의 도구로써 개발자들이 직접 사용하는 툴의 중요성 역시 간과할 수 없는 부분이다.
개발자에겐 툴이 무기인 셈이다. 툴을 과하게 신봉하고 그것에 의존해서도 안되겠지만 좋은 툴은 적극적으로 활용할 수 있어야 한다. 개발툴들이 쏟아져 나오고 발전하는데는 분명 그것을 사용해서 얻는 잇점이 있기 때문이다.
예를 하나 들어 보겠다. 조금은 극단적일 예가 될 것이다. ^^;
'우리는 개발 환경으로 이클립스를 사용하기로 했어'라는 전제 조건을 안고 신규 프로젝트를 구축하는 과정에 있다고 하자. 그런데 혹자가 '난 넷빈이 익숙하고 좋아!' 라며 이클립스 대신 넷빈을 사용한다거나 또 어떤 사람은 '난 그런 툴 써본적이 없으니 그냥 울트라 에디트로 코딩할래' 라고 한다거나 심지어 어떤 사람은 '툴은 창조적이지 않아. 너무 쉬워. 인텔리센스? 그런거 필요치 않아. 기본적인 API는 머릿속에 있는거지. 또 모르면 온라인 레퍼런스 문서가 있잖아. 멋진 프로그래머는 메모장으로 짜고 컴파일할 줄 알아야 하는거야.' 라며 극단적인 툴 혐오증세를 보인다고 해보자. 프로젝트는 아마 산으로 갈 것이다.
여기서 '넷빈이 좋아'를 외친 첫번째는 프로젝트의 '표준'이란 개념을 제대로 이해하지 못하는 개발자이고, 두번째 '써본적이 없으니...' 개발자는 마냥 귀차니즘에 빠져있거나 새로운 것에 부담 백배하는 스타일이다. 세번째 '프로그래머는 메모장으로...'는 정말로 초고수 개발자이거나 어쩌면 고수인척 하며 우월감이나 즐기는 개발자일 수 있다. 하지만 '초고수'가 맞더라도 내 생각에 코딩에 있어서는 초고수일지 몰라도 혼자하는 프로젝트가 아닌 이상 일류가 될 수는 없을 것 같다.
물론 이런 가상의 시나리오는 조금 과장되고 비현실적인 예라 치부할 수도 있지만, 이유불문하고 이클립스, 넷빈 등 충분히 좋은 툴을 활용할 수 있는 상황임에도 불구하고 울트라 에디트 같은 텍스트 기반 편집기를 더 선호하는 사람들이 (드물지만) 실제로 있다. 적어도 툴 사용에 적잖은 부담을 느끼는 개발자들을 주변에서 본 적이 있을 것이다. 필요 이상으로 개발 툴을 미워하는 경우이다. 매너리즘에 빠져 새로운 환경에 적응하지 못하거나 기본이 중요하다는 강박관념에 편리를 외면하는 경우가 아닐까 생각해봐야 한다. 또는 특정 툴에 너무 익숙해지고 종속되는 것을 '지나치게' 견제하고 있는 것인지도 모르겠다.
[Sword vs. Gun]
좋은 툴을 적극 활용하여 개발하지 목하는 것과 그 반대의 경우는 총과 칼의 싸움과 다름이 없다. 개발자는 특정 툴에 종속되는 것이 두려워 아예 사용하지 않는 우를 범해서는 안된다.
칼빈(Carbine) 소총이나 M16을 거쳐 비교적 최근에 나온 K2나 일보백보다. 모양도 비슷하고 사용법도 크게 다르지 않다. 이클립스를 사용할 줄 안다면 넷빈에 익숙해지는 것은 시간문제일 뿐이다. 하나를 알면 열을 안다는 얘기다.
극단적으로 울트라 에디트로 작업하는 것과 이클립스로 작업하는 것은 한마디로 천지 차이다. 물론 개발자에 따라 양상이 달라질 수 있겠지만 대개의 경우 제 아무리 텍스트 편집기로 날고 기어봤자 IDE의 편의성과 생산성을 따라잡기는 뱁새가 황새 쫓아가는 격과 다를 바 없다. 현란한 칼 솜씨는 분명 보기엔 멋있지만 '탕!'하는 소리와 함께 상황은 싱겁게 종료된다.
이 글을 빌어 나 역시 매너리즘에 빠져 새로운 것들에 소홀하고 있는 건 아닌지, 마음을 다잡아 본다. 그리고 인디아나 존스의 썩소를 날릴 수 있는 개발자가 되자?! ^^;;
P.S. 매너리즘에 대한 가벼운 포스트를 작성하려고 했는데 결국 횡설수설하고 말았다. 블로그가 체질에 맞지 않는 걸까? 뭔가를 쓴다는 것은 역시 힘든 작업이다. -_-
어차피 인생은 하루하루가 습작의 연속이다. 조금씩 완성도를 높여갈 수는 있겠지만 하루 아침에 완벽한 하루를 만들 수는 없다. 이 포스트도 습작과 다름 아니다. 포스트는 계속된다. ㅋ~
나는 단순한 Coder보다는 Developer! 그리고 Developer를 뛰어넘어 Architect가 되기를 언제나 희망한다! ^^
Posted by Mr.朴

