IBM®
메인 컨텐츠로 가기
    Korea [국가변경]    이용약관
 
 
   
        제품    서비스 & 솔루션    고객지원 & 다운로드    회원 서비스    
한국 developerWorks   >  dW Interview  > developerworks

“혁신은 끈기와 실천에서 비롯된다”



혁신은 동경의 대상이자 압박의 시작이기도 합니다. 누구나 그 결과의 달콤함을 바라지만 그것이 나오기까지의 과정은 잊기 쉽습니다. 이번 인터뷰에는 혁신을 배양하는 일을 하는 송치형 님을 만나 오픈 소스 경험담과 혁신에 대한 생각을 나눠 보았습니다.

송치형 | 이노무브 그룹 수석 위원


 
  송치형 지난 제9회 JCO 컨퍼런스에서 ‘Functional Programming for Java Programmers’라는 주제로 발표를 하셨는데 어떤 구상으로 기획하셨나요.
JCO에서 요청이 왔습니다. 최근 인기를 얻고 있는 루비나 파이썬, 자바스크립트를 보면 함수형 언어적 요소가 있는데 이러한 내용을 객체지향 프로그래밍에 갇혀있는(?) 자바 개발자들에게 소개하면 좋을 것 같다는 것이었습니다. 그래서 서로 의견을 나누면서 발표를 준비했습니다. 자바 7에서 클로저(closure)를 도입할 예정이라 스펙과 소스 코드를 구해 코드를 짜 보았는데 코드가 너무 번잡스러워지는 문제가 있어서, 예제 자체는 JVM에서 돌아가는 스크립트 언어인 그루비(Groovy)로 준비했습니다. 요즘 개인적으로 루비와 자바스크립트를 많이 쓰는데 둘 다 함수형 언어라 부르기는 힘들겠지만, 이 언어들로 개발을 할 때 함수형 프로그래밍 기법을 자주 사용합니다.

어떤 계기로 관심이 생기셨나요.
지난해까지는 주로 서버 프레임워크를 만드는 일을 했습니다. 예를 들어 결제 프레임워크나 위기 관리 시스템, 엔터프라이즈 프레임워크 등을 자바로 개발했습니다. 그러다 웹 서비스를 개발해 보고 싶었는데 처음부터 끝까지 자바로 하려니 개인적으로 생산성 문제에 부딪히게 됐습니다. 자바를 계속 써왔지만 그 동안 주로 서버 프레임워크만 했으니까요. 웹 개발에서는 생각만큼 능률이 오르지 않았습니다. 2006년 말 루비온레일스를 공부하기 시작하면서 루비란 언어를 알게 됐고 루비가 함수형 언어의 요소를 잘 활용하고 있음을 알았습니다. 또 Ajax 프로그래밍을 위해 자바스크립트를 다루는 일이 많아졌는데 자바스크립트도 함수형 언어적 특성이 많은 언어라 함수형 프로그래밍에 관심이 생겼습니다.

클로저 같은 개념은 꽤 오래 된 것인데 오늘날 다시 논란 거리가 되는 이유는 무엇일까요.
자바 프로그래머 입장에서는 두 가지로 구분해 생각해 보면 좋을 것 같습니다. 하나는 최근에 함수형 언어가 주목 받는 이유이고, 다른 하나는 자바에 클로저를 도입할 것인가의 문제입니다. 전에는 함수형 언어의 성능에 대해 비판이 많았는데 하드웨어 성능 향상, 컴파일러 자체의 최적화 기술 성숙, 분산 병렬 처리에 대해 늘어나는 요구 등이 맞물려 함수형 언어가 떠오르는 것으로 보입니다. 하지만 자바 언어가 이러한 함수형 프로그래밍 요소를 받아 들여야 하는지는 다른 문제인 것 같습니다. 자바의 장점인 하위 호환성을 유지하면서 클로저 같은 함수형 언어의 특징을 받아들이려 하다 보니 그 구현(특히 타입 시스템)이 복잡해지는 문제가 있습니다. 지금 제안된 클로저 스펙을 보면 ‘과연 쓸 수 있을까’ 하는 생각이 들 정도니까요. 현재의 클로저 스펙을 보면 타입의 중복 표기 등이 너무 불편하고, 클로저가 일등 시민이 아니라 1.7~8등 시민 정도 되는 것 같습니다. (웃음)

자바 개발자에게는 어떤 득실이 있을까요.
자바만 사용한다면 클로저 같은 것이 큰 이점은 없을 것 같습니다. 대신 디자인에 대한 감을 얻거나 사이드 이펙트가 없는 것이 동시 병렬 처리에 어떻게 좋은지, 불변 클래스가 무엇에 좋은지에 대한 영감을 얻을 수는 있겠습니다. 반면 자바를 언어가 아닌 플랫폼으로 보고 그 위에서 동작하는 언어, 예를 들어 JRuby, 그루비, 스칼라(Scala http://www.scala-lang.org/)처럼 함수형 언어의 기능을 활용하는 언어를 제대로 사용하려면 학습이 필요할 것입니다. 그렇게 되면 생산성 향상에도 도움이 되고, 디자인에도 많은 영향을 미치리라 봅니다.

그와 같은 변화가 ‘C++적 회귀’라는 비판도 있던데…
죠슈아 블로흐가 한 컨퍼런스에서 “자바가 대학 1~2학년 교과 과정에서 밀려나는 건 자바가 복잡해지고 있다는 증거다”라고 말했는데 복잡해지고 있는 게 사실입니다. 저 역시 자바가 복잡해지는 것에 대해 반대하는 편입니다. 제네릭이나 템플릿은 이미 도입했고 장점이 어느 정도 인정되지만 클로저에 대해서는 아직 잘 모르겠습니다. 기존 시스템에 억지로 넣다 보면 이상한 문법이 나올 수밖에 없으니까요. 자바는 지금처럼 비교적 단순한 언어로 남으면서 그 자체를 플랫폼으로 활용하는 전략이 어떨까 하는 생각을 합니다. ‘언어로서의 자바와 플랫폼으로서의 자바(Java as a Language, Java as a Platform)’를 구분해야겠지요.

프로젝트에 많은 오픈 소스를 도입, 활용했다고 하셨는데 어떤 방법을 쓰셨는지 궁금합니다.
평소에 RSS를 구독한다든지 그 외 여러 정보를 찾아보면서 기술 경향을 조사하고 도입하고 싶은 오픈 소스 목록을 만들어 둡니다. 프로젝트가 생기면 그 목록 중에서 일부를 골라 도입 전에 사전 점검을 합니다. 커뮤니티의 활발함이나 안정성을 확인하고 테스트 케이스도 만들어 봅니다. 그리고 나서 문제가 없겠다는 판단이 들면 도입을 하고 결과가 좋으면 그 이후에는 그 오픈 소스를 자유롭게 쓸 수 있게 되고 그 다음에는 다른 오픈 소스를 얹어 시도해 보는 방식이었습니다. 무리하지 않고 한 번에 하나씩 계획을 잡고 점진적으로 시도했죠. 이때 개인적으로 활용해 보고 싶다는 개발자적인 욕심보다는 회사 입장에서 안정성, 유지보수성을 생각해야 한다고 봅니다.

동료들의 동의는 어떻게 구했나요.
주로 ‘담배 공작’을 했습니다. 쓰고 싶은 소프트웨어가 생기고 검증이 어느 정도 되면 담배 피우러 나갈 때마다 은근 슬쩍 이야기를 꺼냅니다. 처음에는 “요즘에 ~(이)라는 게 있다던대요”로 시작해 그 다음에는 “~의 이러저러한 점들이 좋던대요” 하는 식으로 천천히 물밑 작업을 해 나중에는 제안서를 냈습니다. 아무리 좋은 소프트웨어라도 그냥 말 한 마디로 설득을 할 수는 없으니까요.

그간의 경험을 돌아봤을 때 학습과 성과의 균형이 이뤄졌다고 보시나요.
항상 업무가 학습에 연결될 수 있도록 노력하고 있습니다. 하지만 일과 학습의 균형점을 찾기란 늘 어려운 것 같습니다. 일에 치이는 때도 있고 공부를 많이 할 때도 있고요. 학습과 성과를 50 대 50으로 수적으로 정확히 맞추기는 어렵겠지만 마치 시소를 타듯 전체적으로 봤을 때 균형이 맞는 게 중요하지 않을까 합니다.

가장 인상 깊었던 코드는 무엇인가요.
강규영 님이 전에 인터뷰에서 소개했던 Functional JavaScript가 최근 인상 깊었는데 이미 소개되었으니 jQuery와 레일스를 들겠습니다. jQuery는 코드가 간결하고 API 디자인과 관련해 배울 점이 많았습니다. 레일스는 메타 프로그래밍 등 루비의 여러 특징을 잘 살려 만든 웹 개발에 특화된 DSL의 ‘향연’이라는 느낌이 들었습니다.

둘 다 만만치 않은 컴퓨터공학과 경제학을 복수 전공하신 동기는 무엇인가요.
특별한 건 없었습니다. 대학에 갓 입학했을 때 경제 관념이 없다는 생각이 들어 경제학을 공부하면 되지 않을까 하는 소박한 마음으로 시작했습니다.(웃음) 그런데 막상 미시•거시 경제학, 화폐 금융론 같은 과목을 배우고 보니 제가 생각했던 ‘경제 관념’과는 다르더군요. 재미있기는 했는데 실용적이지는 않아 보였습니다. 그러다 병역특례를 마치고 복학 후에 게임 이론, 인센티브의 경제학과 같은, 경제학적 사고로 문제를 풀어내는 과목을 배워보니 공부하기를 잘 했다는 생각이 들었습니다.

소프트웨어 개발과도 연관되는 부분이 있었나요.
경제학에서 배우는 것 중 메커니즘 디자인이라는 것이 있습니다. 사실 사회 현상에 답이 있는 것이 아니기 때문에 현상을 잘 모델링 해 경제학적으로 설명하는 것이 중요한데요. 이런 사고 훈련을 한 것이 프로그래밍을 할 때도 간접적으로 영향을 준 것 같습니다. 결국 디자인을 어떻게 하느냐 하는 관점에 관한 것이니까요. 또 하나는 보는 폭이 넓어진 것 같습니다. 경제학이란 것이 아무래도 사회 과학이다 보니 주변의 여러 상황도 고려하게 됩니다. 그래서 항상 엔지니어의 관점뿐만 아니라 회사 전체 혹은 마케팅 관점에서도 생각해 보려 노력합니다. 예를 들어, 전 직장에서 위험 관리 시스템이란 것을 개발한 적이 있습니다. 당시에 휴대전화로 불법 결제를 하는 사용자들이 있었는데 업계에서는 이에 대한 대처 방안을 내지 못하던 상황이었습니다. 기술적으로도 재미있을 것 같았지만, 회사 입장에서 이러한 솔루션이 있다면 수익이나 마케팅 측면에서 좋을 것 같다는 생각이 더 컸습니다. 그래서 ‘물밑 작업’을 거쳐 위험 관리 시스템을 제안하고 개발해 특허까지 받게 됐습니다. 그 성과가 정말 경제학의 도움인지는 확실하지는 않지만 다시 공부하겠느냐는 질문을 받는다면 “하겠다”라고 답할 수 있을 것 같습니다.

프로젝트를 직접 제안하고 구현까지 특별한 경험이었겠군요.
제 경쟁력이 기술에 있다고 보지는 않습니다. 기술적으로 저보다 뛰어난 개발자들은 얼마든지 있으니까요. 어느 회사에 들어갔을 때 그 안에서 필요한 것이 무엇인지 개발자 관점이 아닌 다른 시각에서 보고 기술적으로 풀어가는 법을 찾는 과정이 재미있습니다. 또 그게 생각이나 말로 끝나는 게 아니라 ‘기술’이라는 도구로 실행에 옮길 수 있다는 점이 좋고요.

새로운 아이디어를 연구하고 실현하는 일을 하시는 중인데 혁신 외에 ‘실패’에 대해서도 공부하시나요.
소프트웨어 개발에도 패턴과 안티 패턴이 있고 안티 패턴에서 배울 점이 많지만 결국 교과서는 패턴이 아닐까 합니다. 그리고 패턴 자체가 중요한 것이 아니라 내재된 원리가 어떤 상황과 맞물려 발현되는 것에 주목해야 한다고 봅니다. 원리는 쉽게 변하지 않지만 실천은 상황에 따라 변하니까요. 개인적인 결론을 낸다면 열정과 끈기 같습니다. 나머지는 그 두 가지가 있다면 부딪혀 해결해 나갈 수 있겠고요.

흔히 ‘혁신’ 하면 ‘대박’을 떠올리는데 본질 측면에서 놓치지 말아야 할 중요한 점은 무엇일까요.
아이디어 자체도 중요하지만 그것이 실행으로 옮겨지지 않는다면 허황된 구호나 공허한 이미지, 언어 인플레이션으로 남게 됩니다. 아이디어를 조직 내에서 실현해 나가고 성공이든 실패든 결과를 만들어 내는 과정이 역동적일 것 같지만 의외로 지루한 과정이기도 합니다. ‘대박’이라는 결과나 아이디어만 보는 게 아니라 그런 어려운 실행 과정을 꼭 염두에 두어야 할 것 같습니다. 그리고 지속 가능한 ‘중(中)박’을 꾸준히 만들어 내는 것 역시 중요하다고 봅니다.

앞으로 해보고 싶은 일이 있다면…
1~2년 간은 웹 개발 분야에 더 깊이 들어가 보고 싶습니다. 예전에는 웹 개발을 생산적이지도 못하고 기술적인 도전 가치도 별로 없다고 생각했는데 웹 개발을 시작하고 보니 기술적으로 깊이도 있어야 하고 해야 할 일도 많음을 깨달았습니다. 2년 후에 어떻게 될지 모르겠지만 돌아보았을 때 ‘왜 그 때 좀 더 노력하지 않았을까’ 하는 후회가 없도록 노력하는 삶을 살아가고 싶습니다.

   소셜 북마크

   mar.gar.in mar.gar.in
    digg Digg
    del.icio.us del.icio.us
    Slashdot Slashdot



[송치형 소개] 서울대에서 컴퓨터 공학과 경제학을 공부했고 현재는 이노무브 그룹의 수석 위원으로 근무하고 있다. 데이터마이닝 엔진, 결제 프레임워크, 엔터프라이즈 프레임워크 등을 만들었으며 최근에는 혁신을 주제로 한 웹 서비스들을 개발하고 있다. 옮긴 책으로는 "자바 퍼즐러", "실용주의 디자인 패턴", "리팩터링 워크북" 등이 있다.

[지난 인터뷰 보기]



위로


뉴스레터
  
자바스크립트가 작동이 중지되었습니다. 이 기능을 수행하시려면 브라우저에서 자바스크립스트를 작동시켜 주시거나 이곳을 클릭해주세요.

사이트 여행

dW 커뮤니티
포럼 | 블로그 | Spaces
dW Student Community

로컬 컨텐츠

행사 및 세미나

기획 기사

개발자 입문

튜토리얼 및 교육

TOP 10 인기자료

SW 다운로드

RSS 피드

Special offers
IBM SOA Sandbox 시험판
dW Student Community
로보코드
코드 트레이닝


    IBM 소개 개인정보 보호정책 문의