프로그래머로써 걸어온 길을 돌아보며.

 2008년, 한창 게임개발 사업을 진행하고 있었을 때 나는 프로그래머의 길을 버리고 전문 경영인으로써 마케팅을 배우고자 하였다. 2007년 한해동안 나는 거의 개발한 게 없으며 단지 회사의 프로그래머들과 몇몇 기술에 대한 토의만 진행했을 뿐, 정말로 프로그래밍을 버릴 생각까지 했었다.

 그러던 어느날 프로그래머인 내 친구 하나와 네이트온 대화를 하던 도중 친구의 얘기는 내가 프로그래밍을 그렇게 좋아했는데 마케팅이란 것은 제품이 나오기 전에는 단지 이론일 뿐이라는 이야기와 실력이 아까우니 시간 남을때 뭐라도 만들어 보라는 얘기를 들었다. 이 말을 듣는 순간 나는 뒷통수를 한대 세게 얻어맏은 기분도 들었다. 사실 나 자신의 프로그래밍적 실력은 그렇다 하더라도 사업을 하는 사람 입장에서 그동안 어찌 나는 기술하나 모르면서 개발자들과 디자이너들을 조율하려고 들었던 것일까, 참으로 어리석다 생각했다.


프로그래머로의 컴백

 이후 나는 다시 웹 개발로 빠져들었다. 후배들의 과제를 도와주며 Java와 AWT, Swing을 익히고 JSP Model 1,2를 토대로 Tomcat으로 접근했다. 처음에는  JSP와 JDBC를 알아가는 취지에서 시작했는데, 알고보니 기존부터 시간날 때마다 틈틈이 회사에서 유지보수 하고 있던 인트라넷 소스가 나름 Java의 bean모델로 되어 있었다. 심지어 기존에 개발하던 프로그래머는 Eclipse와 workspace를 통째로 주었기 때문에 나름대로 하나의 완성된 소스가 나의 포트폴리오로써 존재할 수 있게 되었다.


 지금이야 모델 1,2를 모두 이해하고 강력한 Spring MVC기반의 엔터프라이즈 자바 개발이 가능하지만 당시에는 심지어 java파일이 컴파일 되서 class파일이 된다는 것조차 몰랐으며, WEB-INF아래 classes폴더를 토대로 Tomcat이 클래스를 구동한다는 자체도 몰랐다. 어쨌든 차츰 나는 자바를 알아가고, 이를 토대로 프로그래밍에 대한 자신감을 얻게 되었다. 약간은 back-end에 관심이 있었다고나 할까.. 


 2008년 말 사업이 종료되고, 휴학생의 신분에서 나는 병특 업체를 구하기 위해 작품을 만들어야 했다. 그런데 나는 관심있는 것을 만들고 싶었고, ASP.NET을 시작으로 Silverlight, C#을 접하면서 RIA에 대한 관심만 키워갔다.


실무에서의 경험

 우여곡절 끝에 들어간 병특업체인 에이전시 회사에서 RIA에 대한 기술은 전혀 쓸모가 없었다. 다만, 기존에 공부했던 JSP에 대한 기술이 먹혀 들어갔다. 그곳에서 나는 ASP부터 ASP.NET, PHP, JSP는 물론 아마 내 개발 인생의 turning-point였던 Spring 2.0 서비스를 유지보수하게 되었다. ibatis, resin, velocity등을 접하고 특히 그때 알게된 jQuery는 자바스크립트에 대한 나의 고정관념을 바꿔놓기에는 충분했다.


 그리고 이어서 옮긴 SI업체에서는 DB와 통신할 수 있는 웹 프로토콜의 Gateway로 시작했다. 금융쪽이다 보니 다양한 정보를 DB를 통해 전송하게 되었고, 이러한 DB를 연결할 수 있는 수단으로 가장 간단한 부분이 바로 jsp페이지 하나를 만드는 것이었다. 사실 기존에 회사에서 만들어놓은 class모듈이 있어서, 나는 그저 JSP를 통해 parameter를 연결해주고, 이를 XML이나 JSON으로 파싱해서 다시 고객사의 서비스와 연결해 주는 작업만 처리하면 됬다.


 그런 작업을 하면서 틈틈히 나는 회사에서 JSP개발을 요구하곤 했는데, 솔직히 단순 JSP작업은 별로 할 일은 없었다.(그때쯤 내 경력이 2년차쯤 됬었다.) 그러다 투입되게 된 업체의 Spring 3.0 프로젝트에서 나는 또한번 오픈소스를 접했다. tiles와 JSTL로 작업을 하고 때에 따라서는 Beans를 사용하기도 했다. jQuery도 그때는 참 몇개월간 신나게 사용했던 것 같다. 단순 자바스크립트로 되어있는 기존의 회사 소스를 바꿔야 해서 jQuery로 엄청나게 작업했던 것 같다.


 그리고 나서 병특 소집해제가 3개월 남았을 즈음, 나는 회사에 마지막으로 보템이 되고자 그동안 문서화 되어있지 않았던 회사의 문서를 위키화 시키기로 마음먹었다. SM팀 특성상 신규 서비스를 오픈할 때에 기존에 개발해 둔 파일을 디자인만 바꿔서 사용하는게 태반인데, 그러다 보니 너무 문제가 많이 발생하고 이런 상황을 너무 많이 겪다보니 솔직히 꼬이는 게 너무 많았다. DB에도 입력이 이상하게 들어가고 그러다 데이터 한번 꼬이거나 자칫 고객의 돈과 연결된 문제라면 엄청나게 큰 문제가 생기는 것이다.


 이런 상황을 바꾸기 위해 나는 위키시스템을 구축하기로 했다. 사실 이건 내 개인 만족이었는데 위키를 구축하기보다는 일전에 파견나간 회사에서 Redmine이라는 툴을 구축했다고 보는게 맞을 것 같다. 이를 위해서 나는 Ruby on Rails 를 구축하고 Redmine을 설치하고 정말 대대적인 문서화 작업에 나섰다. 2개월간 고생해서 만들었지만 들리는 바에 의하면 지금은 redmine을 돌리던 PC는 바이러스가 걸려서 포멧되었다고 들었다. (정말 Back-up시스템이 중요하긴 하다.)


 위키시스템 구축과 더불어 나는 회사에서 단순히 자기 PC에서만 관리되던 파일들을 subversion을 설치해서 SVN으로 관리하기 시작했고, commit한 Source는 Hudson CI에 물려서 Ants 스크립트를 기반으로 커밋 시 자동으로 테스트 서버에 배포 및 백업이 되도록 구축해 놓았었다. (또한 이러한 커밋 내용을 Redmine에서 볼 수 있게 해서 팀장님이 한눈에 관리하기 편하게 해두었다.)


 언어든 기술이든 구분없이 정리해보면 ASP->ASP.NET 1.1->ASP.NET 3 -> JSP -> Spring 2.0+ibatis+resin+velocity+jQuery -> 이직후 JSP+JSON -> win 2k3+tomcat+apache+oracle 10g -> 다시 jQuery -> Redmine+Hudson CI+Subversion+Ants 


회사를 다니면서 해왔던 개인개발

 사실 웹개발을 하다보면 일이 없을 때는 한없이 없다가도 일이 한번 생기면 일정이 너무 촉박하여 다른 일을 할 시간이 없다. 나 또한 그랬는데, 정말 일이 없으면 너무 없어서 하루에 메일 한,두개 보내면서 하루가 지나갈 때도 있었다. 


 그래서일까, 나는 개인개발을, 아니 보다 정확히 말하면 개인 공부라고 하는게 맞겠다. 2009년 병특회사에서 나는 컨설팅에 관심이 많았다. 여러 웹기반 기술을 다루다보니 마치 내가 그 기술을 다 아는 것처럼 착각을 한 것 같다. 나의 역량을 고민하다보니 나는 언어를 뭐하나 특출나게 잘하는 것도 아니라고 생각해서 컨설팅이 매력적으로 느껴졌다. IBM이나 Accenture에서 하는 업무가 매력적이었다.


 하지만 그런 생각도 오래가지 않았다. 사실 컨설팅이란게 제안서 아닌가. PT노가다는 기본에 정말 많은 부분을 알고 있어야 한다. 그런데 이런것들, 너무 비즈니스 적이다. 비즈니스를 하다가 접고 실무로 돌아온 입장에서, 컨설팅은 바닥부터 시작하고자 하는 나의 프로그래머적 마인드와는 너무나도 안어울렸다. 


 그러다 위에서도 언급했지만 Spring 2.0으로 작업을 하다가 우연히 Flex에 대해 접해볼 기회가 있었는데 여기서 또 한번 나는 충격적인 경험을 한다. 병특을 시작하기 전에도 Silverlight개발이 프로그래밍으로 이뤄질 수 있다는 사실에 매우 흥분하였었다. 왜냐면 2000년 초에 플래시가 매우 유행했었는데 나는 시대의 흐름을 타지 못하고 C를 공부했었기 때문이다. 그래서 플래시를 못다루는 나는 디자인을 못할거라고 생각했다. 그런데 그런 다이나믹한 디자인을 프로그래밍으로 가능하다니, 정말 획기적이지 않을 수가 없었다. 


 그래서 Flex부터 해서 원래 자바를 좋아라 했으니 JavaFX에 조금 빠져들었다가 후에 JavaFX가 도대체 어떻게 사용해야 하는지 몰라서 Flex를 공부했었다. 그러다가 Adobe Air를 알게 되고 나는 매시업 경진대회 라는 곳에 Air로 작품을 만들어 출품했었다.(2010/01/25 – [메튜장의 예전 프로그래밍/RIA&DOM] – 제이크의 여행 친구 ‘다리(bridge)’ Adobe Air 프로그램 메뉴얼 ) 이를 통해 나는 Flex UI 는 물론 다양한 Open API와 XML, 무엇보다도 API호출을 위한 callback 함수 호출에 대한 기본적인 개념을 알게된 것이 가장 큰 경험이었다고 생각한다.

 이어 정말 다이나믹한 시간을 보내다가 2010년 말에 이직한 회사의 업무가 잠잠해졌을 시점에 나는 구글 앱 엔진과 Adobe Flex를 접하게 되었다. 처음에는 이클립스를 통해 웹 개발을 어떻게 쉽게 할 수 있을까? 라는 의문에서 구글 웹 엔진에 관심을 가지게 되었는데 구글 웹 엔진의 Datastore는 기존에 내가 알고있던 관계형 DB가 아니라 객체형 DB라서 매우 흥미로웠다. Sorting이나 Search에 있어서의 그 번거로움으로 인해 공부를 그만두긴 했지만 이 경험은 이 다음에 개발하게 되었던 다니길 개발에 큰 영향을 끼쳤었다.

 특히 당시에는 Adobe Flash Catalyst에서 만든 다이나믹한 디자인이 그대로 Flex프로그래밍 언어로 동작한다는 것을 알고 매우 흥분했었다. 이어서 나는 네이버 소셜앱 경진대회에 나가게 되고, 그곳에 Flex로 만든 작품을 출품했었다.(“다니길, 추억의 조각을 모으다”를 소개합니다.이 작품을 만들면서 특히 나는 서버와의 통신을 위한 고민을 많이 하다가 URL의 Parameter로 전달되는 통신은 해킹의 위험이라든가, 그리고 솔직히 파싱 속도도 느리고 해서 Servlet/POST 방식도 생각했다.


 결국 나는 구글 앱 엔진에서 배운 RDB와 Flex에서의 Class와의 Entity매칭(어떤 용어를 들어 설명하기가 힘들지만 대충 보면 Entity라고 만든 Class가 Model이 되고 List<Entity> 형태의 객체가 실제 DB상에서의 데이터들이 되는 구조.) 을 어떻게 하면 할 수 있을까를 생각하다가 Spring Framework와 BlazeDS와의 통합으로 이를 구현하게 되었다. (당연 속도도 매우 빨랐다.)


 이후에는 HTML5에 관심을 가지고 관련 기술 문서들을 번역하는 과정에 있었는데, 글쎄.. 한국HTML5사용자모임 을 만들고 병특 시절에는 정말 잘 운영한다 싶었는데, 지금은 솔직히 잘 모르겠다. 다니길 이후 나는 아무래도 회사에서의 업무 이외에는 딱히 혼자 공부하는 것들이 없다 시피 한 것 같다.


실무에서 떠나온 그후,

 학교로 돌아온 이후, 솔직히 프로그래밍 자체는 어렵지 않았다. 자바나 C++로 개발하는 UI기반의 것들은 말이다. 물론, 최근의 운영체제 수업에서의 Redhat Linux상에서의 NachOS에서 Thread의 관리와 Deadlock, Starvation의 해소를 위한 프로그래밍은 솔직히 이론을 응용하는 자체에서 막혀버려서 제대로 완성시키지도 못했다.


 하지만 결론적으로 나는 학교 수업에서 나오는 프로그래밍은 재미가 없었다. 개인적으로 나는 “일반인들의 눈에 보이는 개발을 하자” 는 주의이다. 그리고 실제로도 이렇게 눈에 보이는 것들에 대한 개발이 일반인을 비롯, 실제 프로그래밍 세계에서도 많이 인정을 받는다. 서두에서 언급했던 프로그래머 친구는 고교 시절 실력이 얼마나 뛰어난지는 같은 프로그래머 입장에서는 의문이었지만, 포토샵을 잘 다루고, UI를 잘 만들고, 각종 논문에서 언급된 알고리즘 등을 프로그래밍에 잘 응용하고, 다양한 오픈소스를 잘 퍼오고 자신만의 것으로 잘 꾸미고.. 그래서 당시에는 꽤나 잘나갔다.(지금도 물론 사업을 하며 잘나간다.) 그런 프로그래머가 있는가 하면, 학교에서의 프로그래머 지망생 혹은 교수님들은 미적인 것에는 너무나도 취약하다. 


 결론적으로는 지금도 나는 학과 공부에는 크게 만족하지 못하고 있지만, 그래도 성적에 너무 치우치지 않게, 편안하지만 학생답게는 공부해 보려고 한다. 기초적인 것들, 그런것들이 학부때 아니면 언제 또 공부를 해보겠는가.


나의 역량 발견하기

 이렇게 정리하고 보니 정말 나는 실무에서 많은 경험을 한 것 같다. 짧은 병특 시간이었지만, 실무에서 얻은 것은 그간 내가 혼자서 공부했던 것보다 100배는 더 가치있는 것 같다. 덕분에 나는 이런 정리를 토대로 내가 정말로 좋아했던 것이 무엇인가를 다시금 느끼게 된다. Back-end쪽 개발과 UI와 관련된 부분이다.


 사실 HTML5에 관심있는 이유도 이와 비슷하다. HTML5는 어떤 기술이라기보다는 표준이고, UI적인 부분이다. 웹이라는 자체가 벌써 사람에게 보여주는 기술이기 때문에 나는 그중에서도 HTML5와 이와 연관이 있는 기술들이나 오픈소스들에 대해 관심이 더욱 더 큰 것 같다.


 나는 포토샵을 켜고, 거기서 나온 UI를 토대로 프로그래밍을 사용해서 보다 더 강력한 효과를 만들었을 때, 비로서 나는 쾌감을 느끼곤 한다. 거기다 요즘 나오는 UI관련 오픈소스들은 혼합을 할수록 더욱 강력하다. 최근 작업중인 사이트도 jquery의 isotope와 zurb, carouFredSel, royalslider 등 한두개의 오픈소스가 사용된 것이 아니다. 이를 토대로 정말 interactive한 웹사이트가 제작되는 것 같다.




 그런 의미에서 나는 나의 역량을 여러모로 고민해 봤는데, 결론적으로는 hard한 프로그래머 보다는 융합을 기본으로 하는 UI/UX디자이너가 맞는 것 같다. 디자이너이긴 하지만 디자인이 주가 아닌 프로그래밍이 주인 디자이너 말이다.


 점차 웹에서의 UI는 오프라인을 그대로 끌어오는 것 같다. 최근 너무나도 유행인 웹 사이트의 디자인 기법은 pinterest의 약간은 매거진 스러운 방식이다. 어쩌면 Flipboard와도 비슷한, 그러한 레이아웃 구성이 너무나도 인기이다. 이런것이 왜 인기일까? 일단 기본적으로 따지고 보면 “예뻐서” 가 기본이다. 어떤 컨텐츠를 눈에 보기 쉽게, 그리고 이쁘게 보면 아무리 컨텐츠가 구려도 보기좋은 떡이 먹기도 좋다는 것을 대변이라도 하듯이 그냥 보기에도 좋다.


 웹에서는 지속적으로 아날로그적인 감성이 가미되고 있다. 그럼 과연 지금처럼 정적으로 보는 2D화면의 컨텐츠가 얼마나 더 갈 수 있을까? 나는 이러한 부분에 의문을 제기하고, 새로운 인터페이스 혁명이 도래할 것이라는 생각을 하고 있다. 그 중심에 있는 나의 생각이 바로 3D 인터페이스다. 물론 예전에도 3D인터페이스야 당연히 있었지만 이는 플래시나 여러 VR 툴을 사용한 것들이다. 이는 결국 웹의 감성을 활용하지는 않고 다만 현실 세계를 그대로 웹상에다 옮기려는 노력에서 비춰진 결과이다. 그러니 당연히 어떠한 아날로그적인 “감성”이 느껴지지 않는 것이다.


 허나 더 나아가서 과연 이러한 내가 발견한 나의 역량이 연구주제가 될 수 있느냐는 것이다. 아마 이와 관련된 의문은 앞으로의 포스팅에서도 계속될 것 같다. 이번 글을 통해서는 나는 나를 깊게 고찰해 봤다. 짧지만 그날, 2008년부터 지금까지 내가 경험하던 기술들을 살펴보며, 나 자신의 관심사가 어느 방향으로 흘러갔는지 볼 수 있었다. 1996년 처음 홈페이지를 만들었을 때, CGI를 퍼와다가 카운터를 달았을 때의 그 쾌감은 잊을 수가 없다. 그것이 어떠한 기술이든, 그 속에 내포된 그 로직보다는 어떻게 하면 역동적이고 이쁘게 만들어 질 수 있느냐가 내겐 더 중요하다.


 그렇게 미적으로 아름다운 웹을 꿈꾼다. 그리고 그것이 나는 내 연구 방향이요, 내 사명이라고 생각한다.