[스크랩]인터넷 시대의 진정한 개발자로 거듭나기 - 자바를 중심으로 보자

http://www.zdnet.co.kr/news/column/hotissue/0,39024748,10036763,00.htm

그러나 C++와의 승부는 자바의 승리였다고 해도 과언이 아니다. 인터넷이라는 거대한 인프라에 더 적절한, 쉽고 간결하면서도 강력한 자바의 언어적 특성이 C++보다는 훨씬 더 빠른 확산을 가능하게 했기 때문이다. 그러므로 C 언어의 정통성은 자바가 계승을 완료했다고 보아도 되지 않을까. 적어도 산업적인 측면에서는 말이다.

플랫폼 측면에서도 자바의 미래는 밝다. 워크스테이션과 PC라는 뚜렷하게 나눠지는 영역을 각각 유닉스와 윈도우라는 운영체제가 지배하던 90년대와는 달리, 지금은 모든 컴퓨터가 네트워크에 연결되고, 모든 기계를 컴퓨터로 간주할 수 있는 거미줄 같이 복잡한 세상이 아닌가. 그렇다면 자바와 같은 작고 효율적인 플랫폼이 새로운 시대를 위해 '준비된 플랫폼'으로서 갖는 의미는 이미 무시할 수 없는 수준이 되었다.

...

흔히 프로그래머를 '꿈을 먹고사는 자존심 강한 막노동꾼'이라고 하지 않는가.

...

그러나 필자가 만난 대부분의 자바 개발자들은 비슷한 이유로 자바를 '선택'했다고 한다. 그 이유는 쉽고 재미있었기 때문이란다. 그리고 대부분 자바에 매료된 이유는 자바의 간결한 객체지향적인 특성 때문이라고 한다. 필자 역시 마찬가지다.

...

코딩의 즐거움을 맛보는 순간
그러나 필자가 만난 대부분의 자바 개발자들은 비슷한 이유로 자바를 '선택'했다고 한다. 그 이유는 쉽고 재미있었기 때문이란다. 그리고 대부분 자바에 매료된 이유는 자바의 간결한 객체지향적인 특성 때문이라고 한다. 필자 역시 마찬가지다.

객체지향이라는 '철학'을 공부하던 중에 C++의 난해함과, 객체지향 이론의 판독 불가능함이 뒤섞여, 극심한 고초를 겪고 있던 중에 자바를 만났던 것이다.

필자가 학교에서 공부?객체지향 관련 서暳湧?객체와 클래스, 상속성과 다형성, 정보 은닉과 메시지 전달 등의 심오하고 어렵기만 한 '철학적인' 용어들이 난무하고 있었다. 게다가 객체는 '실세계에 존재하는 모든 것'이라고 하고, 상속은 재사용성을 보장하고, 다형성에는 오버라이딩과 오버로딩이 있고, 객체간의 메시지 전달은 메쏘드로 이뤄지고......

이런 뜬구름 잡는 모든 용어와 개념들은 차라리 서양 철학에 대한 교양서적을 읽는 것이 더 낫겠다는 생각만 들게 만들었다. 책에서 보는 예제와 달리, 실제로 C++로 코딩을 해 보면 결과는 언제나 C++ 문법을 적절하게 활용한 구조적 C 프로그램이 되었기 때문이다.

늘 명상하는 기분으로 접하던 객체지향 개념들이 필자가 작성한 코드에서 나타나기 시작한 것은 자바를 접하고 나서부터였다. 이 클래스는 저 클래스를 상속하고, 이 메쏘드는 오버라이딩을 해야 하고, 이 멤버는 private으로 선언해 놓고, 이 메쏘드를 사용해서 접근해야 되겠지.

이런 결론을 내리고 열심히 코딩에 임하면서 스스로를 대견해 하는 기분은 프로그래머가 코딩하는 일에 가장 큰 즐거움을 맛보는 순간에 느껴지는 기분일 것이다.

첫 직장에서 필자는 개발자가 아닌, 운영자가 되었다. 네트워크와 시스템 관리 업무를 맡으면서, 한 동안 방황했었다. 지금은 그 때의 경험이 아주 소중했다고 생각하지만, 당시에는 도무지 업무에 전념할 수 없었다. 그리고 결국 오래 버티지 못했다. 그래서 생각해 낸 것이 자바 프로그래머가 되겠다는 것이었다. 자바를 '선택'한 것이다.

...

우리를 슬프게 하는 것들
잠시, GNU 선언문 중에서 프로그래머의 생계에 관련된 몇 가지 질문을 살펴보자.

◆ 프로그래머는 자신의 창의력에 대한 보상을 받을 자격이 있지 않은가?
◆ 프로그래머는 그의 창의력에 대한 보상을 요구할 수 없는가?
◆ 프로그래머의 밥줄이 끊기지 않을까?
◆ 금전적인 특혜가 없다면 아무도 프로그래밍을 하지 않을 것이다.

우리나라 국민들 대부분이 존경하거나, 혹은 부러워하는 프로그래머는 마이크로소프트의 빌 게이츠 회장, 또는 한글과컴퓨터의 전임 이찬진 사장 등이다. 그러나 프로그래머들이 존경하는 프로그래머는 리처드 스톨만, 리누스 토발즈, 또는 안철수 박사가 항상 국내외 1, 2위를 다툰다.

즉, 프로그래머들은 보편적으로 현실적인 부와 명예, 그리고 권력에 대한 욕심보다는 창조적인 기술적 진보와 사회적 공헌에 더 많은 점수를 주고 싶어한다는 것이다. 실제로도 개발자들이 원하는 직장은 연봉이 높은 회사보다는 기술적으로 많이 배울 수 있는 회사를 더 선호하는 것 같다. 즉, 금전적인 혜택보다는 기술적 진보라는 추상적인 혜택을 더 필요로 하다는 것이다.

그렇지만 프로그래밍이 고도의 창조력을 요하는 창작행위라고 주장하는 것은 프로그래머들의 자존심 때문이다. 실질적인 반대 급부 없이 창조적 프로그래머로서 배고픈 예술가와 같은 여정을 걷는 사람을 필자는 아직 보지 못했다. 현업에서 활동하는 프로그래머들 대부분은 프로그래밍이 손가락을 많이 사용하고, 앉아서 하는 막노동일 뿐이라고 자조하지 않는가. 복사해서 갖다 붙이기(Copy & Paste)는 그 노동행위의 중요한 기법 중의 하나다.

필자가 만난 대부분의 프로그래머들은 머리가 희끗희끗해 질 때까지 프로그래머로 남고 싶다고 말했다. 프로젝트 관리자로 돌아서고 싶지 않다는 것이다. 그러나 그 사람들 중에 과연 얼마나 많은 사람들이 실제로 그렇게 될까. 우리를 슬프게 하는 것은 프로그래밍이 예술적 창조 행위가 아닌, 단지 월급봉투를 우러러 한 점 부끄럼 없기 위한 노동행위의 일부에 지나지 않음을 깨닫는 것이다. 그리고 그 월급봉투가 개발자라는 스스로의 존재를 고집하는 한, 적어도 한국사회 내에서는 결코 두툼해 지지 않을 것임을 잘 알고 있다는 것이다.

최근에 자바 개발자들이 자바를 선택하는 이유는 자바가 취업에 도움이 되고, 실제 업무에 적용할 수 있기 때문이다. 만약, 그렇지 않다면 자바를 공부해야 할 이유가 없는 것이다. 자바가 기업환경에서 폭 넓게 수용되기 전부터 자바를 공부한 사람이 있었다고 하더라도, 그것은 그가 학생이었거나 학원 강사였기 때문이었을 것이다.

그리고 자바 프로그래밍을 하다 보면, 자바는 누구나 쉽게 배우고 활용할 수 있는 프로그래밍 언어이므로, 감히 범접할 수 없는 독보적인 자기만의 영역을 구축하는 것은 어려운 일임을 깨닫는다.

게다가 자바는 리버스 엔지니어링을 막는 것이 불가능하다. obfuscator를 사용한다고 해도 역 컴파일된 소스를 읽기가 조금 불편할 뿐이다. 필자의 경우에는 그런 자바의 환경에 큰 불만을 느껴본 적은 없지만, 때로는 그런 이유로 인해 자바 프로그래밍에 별로 매력을 느껴본 적이 없다는 사람을 만나게 된다.

최근에 필자가 리눅스 개발자 포럼에서 벌어 진 자바 논쟁에 참여하면서도 비슷한 경험을 했다. '리눅스에서 자바는 찬밥인가'라는 것이 논쟁의 주제였다. 프로그래밍 언어 및 플랫폼으로서의 자바의 우수성과 중요성을 강조하는 자바 옹호론과 썬 마이크로시스템즈의 독점과 느린 퍼포먼스, 그리고 시스템 프로그램을 작성할 수 없다는 이유를 ┗銖?자바 비관론이 첨예하게 대립하는 양상이었다.

필자는 C 기반의 X윈도우 프로그램을 작성하는 일이 AWT/Swing을 이용한 자바 프로그래밍보다 더 힘든 작업이라고 생각한다. 그러므로 리눅스 비즈니스가 성공하기 위해서는 지금보다 더 활발한 자바 지원이 이뤄져야 한다고 생각한다. 모든 리눅스 프로그래머가 GTK를 이용해야만 리눅스 환경에서의 애플리케이션을 개발할 수 있다면, 리눅스는 너무 담이 높은 성벽을 쌓아가고 있는 것이 아닐까.

연봉 책정 기준은 기술력이 전부일까
프로그래머들 중에는 프로그래밍이 진입장벽이 아주 높은 고난도의 기술을 사용하는 영역이 되기를 원하는 사람들도 있는 것 같다. 그래서 전문성을 보장받고, 희소가치가 있어서, 몸값도 따라 올라가기를 기대하기도 한다.

한 때 '자바 개발자 몸값은 금값'이라는 도무지 이해할 수 없는 신문기사가 화제가 되기도 했지만, 만약 현실이 그렇게 된다면, 기업의 입장에서는 굳이 비싼 개발비용을 감수하면서 자바를 선택할 이유가 없는 것이다. 풍부하고 값싼 인력이 많이 포진하고 있는 기술을 선택해야 하는 것이 기업의 입장이기 때문이다.

그러므로 내가 어떤 기술을 가지고 있으므로, 나는 이 정도의 대우를 받아야 한다라는 생각은 버리는 것이 어떨까. 지난 95년 8월부터 자바를 공부했으며, 자바 관련 프로젝트를 몇 번 수행했고, 자바로 이런 저런 일을 할 수 있기 때문에 나의 몸값은 이 정도라고 결론을 내리는 것은 자칫 위험한 자가당착일 수 있다.

어느 취업 전문 사이트에서 권하는 연봉협상 방법은 먼저, '그 회사에서 내가 어떤 일을 수행해야 하는 지를 질문하고, 그 일을 수행해 낼 능력이 내게 있다면, 어느 정도의 연봉을 생각한다'고 말하는 것이었다.

필자의 생각에도 연봉 책정의 기준은 단순히 그 사람의 기술력 평가에 의해 내려지는 것이 아니라, 그 사람이 수행하는 역할과 그 역할의 중요도 및 기여도에 의해 결정되는 것이 합리적인 방법이라고 생각한다.

모든 개발자가 현실을 초월한 수행자의 자세로 코딩에 임한다는 것은 현실적으로 불가능하다. 프로그래밍은 구도의 과정일 뿐, 생계를 유지하기 위한 수단이 결코 아니라고 말하는 것은 일부 몽상가들의 꿈일 뿐이다. 우리를 슬프게 하는 것은 6펜스다.

그렇다고 해서 달을 잊고 산다는 것은 더욱 슬픈 일이다. 손바닥 위의 6펜스를 바라보면서, 그 위에 달빛이 비치고 있음을 잊지 않는다면, 다시 코딩은 그 자체로 완결된 아름다운 예술에 가까울 수 있지 않을까.

...

처음에는 이런 저런 일상적인 영어 회화를 나누다가, 그의 젊은 시절 이야기가 나오게 되었고, 갑자기 그는 흥분하기 시작했다. 필자는 그의 말을 거의 알아들을 수 없게 되었지만, 그의 어조로 보아서 그가 젊은 시절, 얼마나 열정적인 프로그래머였을 지는 분위기로 미루어 짐작할 수 있었다. 필자는 한 마디만 반복했다. 'really?'

다른 부류의 사람들이 개발자 집단을 이상한 사람들이라고 생각하는 일은 어쩌면 당연한 일이다.
개발자들은 밤샘을 하는 것을 당연하게 생각하고, 지각하는 일에 익숙해져 있다. 그들이 가지고 다니는 책은 보편적으로 많이 읽는 베스트셀러가 아니라, '30일 완성'이거나, '개발자 가이드'이거나, 'Development'라는 단어가 들어가는 두꺼운 원서가 대부분이다. 게다가 그들은 그들끼리만 이해할 수 있는 전문용어를 들먹이며 갑론을박하기를 좋아한다. 어쩌다가 본인이 수행한 프로젝트에서 어떤 기술을 어떻게 적용했었는 지를 설명할 수 있는 좋은 기회가 생기면, 본인도 모르게 입에 거품을 물게 된다.

우리를 즐겁게 하는 것은 어제 발표된 새로운 기술에 대한 백서를 오늘 읽을 수 있었고, 내일이면 다음 프로젝트에는 이 기술을 도입하자고 말할 수 있음을 느낄 때일 것이다. 며칠간 계속된 야근과 밤샘을 통해 그 동안 개발하던 시스템을 드디어 배포하고, 다음으로 주면 사용자 로그를 분석할 수 있으며, 몇 가지 새로운 기능을 추가할 수 있을 때 보람을 느낀다.

비록 책상 서랍 속에는 몇 가지 종류의 위장약과 소화제가 쌓여 가지만, 썩 마음에 들지 않던 아키텍처를 리모델링하고, 스파게티처럼 꼬여 있던 소스를 리팩토링할 여유가 생긴다면 더할 나위 없는 즐거움을 만끽하게 되는 것이다.
"우리를 즐겁게 하는 것" 이라고 명시해 두었지만 내게는 좀 다르게 다가온다. 밤샘작업이 당연하고 위장약과 소화제가 쌓여가고 있는데 창의적 작업, 성취감 자체에 즐거움을 느낀다고? 즐거움이긴 할 지 몰라도 결코 행복은 아닐 듯. 나는 그 성취감 필요없으니, 밤의 고요함과 함께 잠들고, 기본적 "식"의 즐거움을 만끽하는 인간다운 삶을 선택하겠다.


자바 프로그래밍은 고난도의 기술을 요구하지 않는다. 자바의 문법은 C/C++ 문법을 그대로 채용했으며, 이미 방대한 API가 있기에 굳이 정렬(sorting)같은 보편화 된 알고리즘을 구현하느라 골머리를 앓지 않아도 된다. 하지만 자바로 프로젝트를 수행하기 위해서 알아야 하는 것은 자바 프로그래밍 언어의 문법과 자바 가상머신의 아키텍처만은 아니다.

<공부해야할 것들>데이터베이스를 사용한다면, JDBC와 RDBMS에 대해서 이해를 해야 하고, 분산환경을 채택했다면 RMI나 CORBA 환경도 알아야 한다. 클라이언트 개발을 위해서는 AWT와 Swing의 아키텍처를 이해하고, 관련 API를 제대로 사용할 수 있어야 한다.

엔터프라이즈급 서버 프로그래밍을 위해서는 EJB 아키텍처를 적절히 적용할 수 있어야 한다. 레거시 시스템과의 연동이 필요하다면, Connector API를 사용할 수 있어야 한다. 모바일 환경까지 시스템을 확장하고 싶다면 J2ME와 CLDC/MIDP 명세도 이해하고 있어야 한다.

웹 프로젝트를 위해서는 HTTP, TCP/IP 같은 프로토콜도 이해를 해야 하고, 아파치나 톰캣 같은 웹 서버와 JSP/Servlet 컨테이너에 대해서도 알아야 한다. 객체지향 방법론에 입각한 프로젝트를 수행하기 위해서는 객체지향적인 분석(OOA)과 객체지향적인 설계(OOD)를 어느 정도까지는 알고 있어야 한다.

견고한 코드를 작성하기 위해서는 디자인 패턴을 적용할 줄 알아야 한다. 요구사항 분석 및 설계 결과를 문서화하기 위해서는 UML을 이해하고 있어야 하고, 효율적인 프로젝트 수행을 위해서 RUP나 XP와 같은 방법론에 입각한 프로젝트 진행과정에 대해서도 이해를 해야 한다.


이렇게 '알아야 하고, 알고 싶은 모든 것'들이 우리를 즐겁게 한다. 지난주에 산 책의 서장을 다 읽기도 전에 새로 읽고 싶은 책이 출간되고, 어제 뽑아 놓은 웹 문서를 다 읽기 전에 새로운 기사가 발표된다.

그리고 프로젝트는 계속해서 진행 중이다. 밤샘을 해도, 주말을 반납해도 프로젝트는 연기되거나, 일정이 수정된다. 잠시, 회사를 그만 두고 심산유곡을 찾아 꼭 읽고 싶은 책 몇 가지만 들?떠나버리고 싶지만, 내일 아침에 팀 회의가 있다. 지각하지 말아야 겠다고 생각하지만, 보던 책의 코드만 마저 이해하고 자야겠다고 생각하고, 결국 뜬눈으로 밤을 새고 만다.

필자 역시 앞에 열거한 용어들의 극히 일부에 대해서만 이해하고 있는 수준이다. 그리고 어느 과자 광고의 표범처럼 '언젠가는 꼭...' 이라고 수없이 다짐하지만, 책상 위에 꽂아 놓은 책들의 대부분은 항상 깨끗하다. 그래도 가끔씩 의자에 깊숙이 몸을 파묻고 그 책들을 바라보면서 야릇한 흥분을 느끼곤 한다. 지금 급한 이 일만 마무리하고 꼭 저 책들을 봐야지...라는 것이 그 흥분의 이유다.

원고를 작성하던 중에 필자는 함께 일하고 있는 팀원에게 넌지시 물어 봤다. '최근에 일 하면서 즐거웠던 순간이 있었어요?' 최근에 그는 팀장에게 상당히 강력한 쪼임(?)을 당하면서 일정에 대한 압박을 받고 있던 중이었다. 하지만, 역시 그의 대답은 개발자의 행복이 무엇인 지를 잘 알게 해 주는 답변이었다. '주말에 다 같이 출근해서 코드 리뷰할 때였죠'
역시나 내겐 처량해 보이는 군. 이 모든 일들이 행복한 사람이 있는 가 하면 아닌도 ㅅ람도 있다. 나는 어떤 유형에 속하는 지를 알아내는 것이 너무나 중요하다. '배울 것이 많다'는 것에 대해 한때 매력을 느꼈지만 그것들이 쌓여만 간다면? 그리고 배우는 것을 완료하지 못했는데 또 다시 새로운 것을 배워야 하는 상황이 온다면? (이번학기의 경험에 비추어서) 과제는 산더미같이 많이 나오고 나는 하나 하나 해결해가려 노력하고 있었지만, 어쩔 수 없이 쌓여만 가고 Due는 매몰차도록 어김없이 찾아와서 이미 늦지나간 과제를 하고 있는 나를 발견할 때의 심정일 것이다. 폐인처럼 학교 연구실에서 며칠날 밤을 새던 선배는 해갔다. 밤새는 것이 정말 당연한 것인가? 나는 그걸 용납할 수 있는가?
사람은 왜 살고 있을까. 아니 됐다, 나는 왜 살고 있는가.
(어딘가에서 들은 말이지만) 결국은 모두 '행복하기 위해' 살고 있는 거라고 하더군. 그리고 그 말은 꽤 타당하다.
쉼없이 발전하고 눈코뜰 새 없이 진행되는 기술에 뒤처지지 않기 위해 사는 건 아니다. 거기에 쓰러지지 않고 당당해지기 위해 사는 게 아니란 거다. 내가 알고 있는 것들을 더 깊이 이해하고, 그걸 어디에 이용하여 가치로운 작업들을 이루어내기위해서 살아가고 있다함은 타당할 것이다. 그러기 위해 뒤처지지 않아야 한다고? 이봐, 그건 주객전도다.
연이은 밤샘작업 떨어지는 시력, 상해가는 몸과 함께 행복할 수 있는가는 생각해 볼 문제다. 물론 그런 사람도 있다. 많다. 저 수많은 개발자들. 그런데 나는? 나는 아닌거 같다.


...

아직까지 대부분의 자바 개발자들은 JSP/Servlet과 JDBC를 통한 웹 애플리케이션 개발에 집중돼 있다. 이제는 당당히 대세로 인정받고 있는 EJB 기반의 컴포넌트 프로그래밍과 핸드폰에 탑재된 경량 자바 가상머신의 무선 단말용 게임 개발 등이 각광을 받고 있기는 하지만 역시 아직도 PC 기반의 애플리케이션 프로그래밍에 적용하기에는 자바는 무리다. 아니라고 우기고 싶지만, 비주얼 베이직, VC++나 파워빌더와 같은 툴을 사용한 애플리케이션에 비해 자바는 아직 역부족이다. 자바 애플릿보다는 액티브X 컴포넌트가 훨씬 더 유려하게 동작하는 경우가 많다.

그러나 필자의 '선택적 지각'에 의하면, 이미 자바의 기술 수준은 '느리고, 볼 품 없는' 수준을 넘어 섰다. 다만 핫스팟 가상머신의 특성이나, 퍼포먼스 튜닝 기법을 잘 활용해서 네이티브 애플리케이션 보다 더 빠르게 동작하는, 그리고, 커스텀 컴포넌트 기반의 깔끔한 유저 인터페이스로 최종 사용자의 두 눈을 휘둥그레지게 만들 수 있는 자바 개발자는 아직, 턱없이 부족하다. 요리왕이 없다는 것이고, 그런 상황에서는 아무리 훌륭한 재료가 있더라도 황제의 입맛에 맞는 요리를 만들 수 없다는 것이다.

최근에 훌륭한 자바 요리사를 많이 보유하고 있는 국내 기업들이 3차원 웹 브라우저나 오피스 제품군 같은 놀라운 제품들을 만들어서 발표하곤 했다. 그런 제품들의 데모를 보고 있노라면 같은 요리사의 입장에서 부러움에 가득 찬 탄성을 지르게 된다. 자바로 저 정도까지 요리해 내려면 얼마나 많은 시행착오를 겪어야만 했을까. 그러나 아직까지는 입맛이 너무 까다로운 고객이라는 이름의 황제들에게는 별로 맛깔스럽지 않은 모양이다. 더욱 큰 문제는 그런 요리사들이 생각보다는 턱없이 부족하다는 것이다.
아니, 이 대목에서 좀 이해가 안 되는 것이 있는데, 자바가 PC 애플리케이션에 적절하지 않다면서, 그리고 뛰어나게 동작시키기가 타언어로 만든 애플리케이션보다 힘들면서, 왜 굳이 PC 애플리케이션을 자바로 만들려고 했을까? 그리고 다른 언어로 만들었으면 훨씬 쉬웠을 것을 괜히 어려운 자바로 만들어 놓고, 고객에게 팔리지도 못했는데도 불구하고 저자는 왜 그런 경우없는 사람들을 칭찬하고 있는가 말이다. 정말 뛰어난 개발자들이구나!하고. 내 생각에는 덜 뛰어난 C++ 개발자가 PC 어플리케이션을 만들도록 내버려두고, 그 뛰어난 자바 개발자는 자바가 잘 하는 일을 찾아서 그걸 개발했어야 한다. 언어는 목적이 다 다르다고 하질 않던가.