이번 인터뷰에서는 개성 있는 파일 전송 서비스인 픽짜를 개발 중인 전성진 님을 만나보았습니다. 픽짜가 개발되기 전 시제품 개발기와 다양한 개발 플랫폼에서 아이디어를 찾고 적용하는 이야기를 들어보았습니다.
전성진 | 엠비안 CTO
오픈픽짜를 공개하기로 결정하신 건 언제였나요. 공개하자는 이야기가 나온 건 아마 지난해 연말쯤이었던 것 같습니다. 처음에는 회사 서비스 시제품(prototype) 테스트를 위해 만들었던 것이라 공개할 정도로 다듬지는 않은 상태였는데 공개 이야기가 나와 그 때부터 정리를 해 공개했습니다.
현재 서비스 중인 픽짜의 원형이었나요. 오픈픽짜는 스몰토크 기반 웹 프레임워크인 시사이드(Seaside)로 만들었는데 http로 파일을 올리고 링크를 생성해 다른 사람에게 전달하는 기능만 있었습니다. 본격적으로 서비스를 하려면 무리가 좀 있었습니다. 또 그 동안 주로 아파치나 펄 등의 기술로 서비스를 개발해 와서 시사이드에 대한 경험이 부족하기도 했고 개발자들이 스몰토크를 잘 모르기 때문에 픽짜는 기존에 쓰던 기술로 다시 개발을 했습니다.
오픈 소스로 공개할 때는 많이 사용하는 언어로 개발하는 게 보통인데 스몰토크를 계속 쓰신 이유는 무엇인가요. 일단 여러 운영체제에서 다 실행되기를 바랐습니다. 펄을 써도 되기는 하지만 패키징이 좀 어려웠습니다. 오픈픽짜에서 쓰는 시사이드 프레임워크는 스퀵(Squeak)에 올라가 있는데 스퀵 VM이 맥 OS, 리눅스, 윈도우용으로 다 나와 있고 패키징도 VM과 이미지만 넣으면 되므로 쉬웠습니다. 사실 패키지처럼 포장되어 있기는 하지만 실제로는 파일 업로드를 받아주고 다운로드 링크를 생성하는 웹 애플리케이션입니다.
RoR(Ruby on Rails)에 비해 덜 알려지기는 했지만 시사이드도 상당히 독특한 프레임워크라는 생각이 듭니다. 시사이드의 장점이 발휘될 수 있는 건 처리 과정에 분기가 많고 어떤 분기로 빠졌다가 다시 원래대로 돌아와야 하는 상황이 많은 애플리케이션을 들 수 있습니다. 그게 아니라 데이터베이스에서 데이터를 가져와 화면에 뿌리는 게 위주이고 한 화면에서 작업이 대부분 끝난다면 RoR이 더 편한 것 같습니다. 오픈픽짜에는 시사이드의 장점이 활용되지는 않았지만 제가 했던 다른 프로젝트에는 시사이드의 강점을 적용하려고 했습니다.
오픈픽짜 프로젝트를 진행하면서 어려웠던 점은 무엇인가요. 2주 간의 프로젝트라서 아주 어려운 점은 없었지만 한두 가지 문제는 있었습니다. 시사이드의 원래 문제인지, 스퀵에 들어 있는 웹 서버 문제인지 아직 알아내지 못했는데 파일을 업로드할 때 파일 데이터 전체를 스퀵 이미지가 쓰는 메모리에 다 올려버리는 문제가 있었습니다. 특히 파일이 500MB 이상일 때 문제가 생겼는데 그 부분을 패치해야 했습니다. 그 부분에 약간 시간이 걸렸고 나머지는 편하게 개발했습니다.
오픈픽짜 외에도 사내 애플리케이션을 몇 가지 만드셨다고 하던데 사내 애플리케이션 개발과 고객용 애플리케이션 개발의 차이점이 있다면... 사내 애플리케이션은 환경이 미리 정해져 있어서 본래 기능에 충실하면 되는데 외부에 솔루션 형태로 판매하는 애플리케이션은 변하는 환경에 적응할 수 있도록 만들어야 해서 아무래도 일손이 많이 갑니다.
보통 사내 애플리케이션과 외부에 판매되는 제품은 별로 연관이 없다고 생각하는 경우가 있는데 어떻게 생각하시나요. 꼭 그렇지는 않습니다. 회사에서 개발한 메일 솔루션은 원래 내부에서 쓰던 솔루션입니다. 먼저 저희가 개발하고 쓰고 수정해 그게 일반적으로 적용될 만했을 때 고객에게 제공하는 식이었습니다. 주로 안에서 만든 애플리케이션들이 일반적인 기능을 하는 것도 있지만 그렇지 않은 것들도 있었습니다. 예를 들어 전에 P2P에 관심이 있었을 때 공유기 펀칭(punching)을 해야 했는데 꼭 그렇게 할 필요는 없었지만 P2P끼리 시간을 동기화하는 애플리케이션을 만들었습니다. 원래 그 기술을 배우고 어느 정도까지 가능한지만 알아보려고 한 작업들이었는데 이렇게 배우고 검증한 기술들을 엮고 재조합해 외부에 판매할 솔루션이나 제공할 서비스에 적용할 수 있다고 생각합니다.
내부에서 잘 쓰여야 밖에서도 잘 될 가능성이 크겠군요. 그렇다고 볼 수 있습니다. 저희가 썼을 때 실용적이지 못하면 그것을 밖에 서비스하기란 힘들지 않을까 싶습니다.
그 동안 만드셨던 사내 애플리케이션이나 개인적인 소프트웨어 중에서 가장 기억에 남는 것은 무엇인가요. 몇 개 되지는 않습니다만 기억에 남는 것 중 하나는 사내에서 웹 하드 비슷하게 파일 서비스를 하려고 만든 애플리케이션이 있었는데 나중에 다른 사이트에도 적용을 했습니다. 그 파일 서비스를 위해 개발했던 클라이언트가, 제가 맥 사용자라서 처음에는 맥용이었는데 나중에 회사에 저 외에도 맥 사용자들이 생기면서 쓰기 시작했고 그 서비스를 쓰는 고객 중에서도 맥 사용자들이 있어서 제공했습니다. 또 하나는 GTD(Get Things Done)를 적용해 쓸 수 있는 NXT라는 애플리케이션을 만들었는데 지금까지 계속 개발해 나가며 쓰고 있습니다.
그 중 가장 아쉬웠던 것은 무엇인가요. NXT입니다. 사내 다른 사람들도 GTD에 관심을 갖고 쓰지 않을까 했는데 그다지 인기를 얻지는 못했습니다. (웃음) 아무래도 GTD 방법론이 와 닿지 않으면 기존 아웃룩 등에서 일정이나 할 일 목록을 관리하는 걸 더 편하게 여기는 것 같습니다.
오픈픽짜와 NXT 둘 다 오픈 소스 프로젝트로 진행 중인데 시간은 어떻게 내시나요. 대체로 초기에 집중이 많이 필요할 때는 주말이나 다른 시간을 정해 놓고 개발하고 그 외 버그 수정이나 간단한 기능 추가는 잠깐 짬이 날 때를 이용해 합니다.
필요한 프로그램을 스스로 구상해 직접 개발하는 게 개발자에게 어떤 의미가 있을까요. 갓 취직해 처음 프로그램을 만들 때는 무엇을 만들 것인가보다는 구현 자체가 목적이었습니다. 시간이 지나 여유가 생기면서 스스로 필요하다고 느끼면 직접 만들어 쓸 수 있는 게 프로그래머의 장점이라는 생각이 들었고 이제는 꼭 돈이 되지 않더라도 필요하면 취미로 만들어 쓰는 과정에 있는 것 같습니다. 개발자가 배우는 단계가 어느 정도 지났다면 자신이 컴퓨팅하는 데 필요한 것(이를테면 개발 도구든지 일상에 필요한 것이든지)에 대해 자신의 욕구를 읽어내 스스로 해결해 보는 게 중요하다고 생각합니다. 예전에 김창준 님이 프로그래밍을 끊임없는 수련의 관점에서 쓴 글을 본 적이 있는데 자신의 문제나 아쉬운 것을 푸는 노력을 계속 해야 스스로 계발도 되고 그 과정에서 실용적인 도구도 나올 수 있어 도움이 되리라 봅니다.
시사이드 기반의 오픈픽짜 외에도 잘 쓰이지 않은 언어나 플랫폼에서 실무 개발 경험을 하셨는데 어떤 인연이 있었나요. 학교에 있을 때 항공기 개념 설계에 관련 프로그램을 만드는 데 오브젝티브-C를 쓴 적이 있습니다. 당시에는 실용적인 이유로 그 언어를 선택했습니다. 그 때 요구사항이 여러 유닉스에서 돌아가야 하고 분산 객체를 지원하는 것이었는데 코바(CORBA)와 자바 RMI 등이 후보에 올랐다가 오픈 소스 프로젝트인 GNUstep의 GNU 분산 객체 라이브러리가 필요에 딱 맞아 오브젝티브-C를 배웠습니다. 스몰토크는 친구가 추천해 알았습니다. 한동안은 C나 C++만 쓰다가 석사에 들어가면서 시간이 나서 스몰토크 구현인 스퀵을 처음 보기 시작했고 ‘이런 식으로 프로그래밍이 가능하구나’하는 걸 깨달았습니다. 스퀵에서 눈에 띄었던 점은 디스크와 메모리가 구별이 없는 것처럼 보이는 싱글 레벨 스토리지였습니다. 스퀵 안에서 뭔가를 만들면 그 대상을 항상 만지듯이 프로그래밍을 할 수 있다는 점이 신선했습니다. 그 후로 실용적인 문제 때문에 한참 스퀵을 쓰지 않다가 시사이드가 나온 후 스퀵을 다시 보고 있습니다. 그 외에 다른 분들의 소개로 얼랭 등을 공부했는데 새로운 언어를 공부하다 보면 그 언어를 실무에 쓰지는 않더라도 원래 쓰던 언어를 새로운 시각으로 볼 수 있는 경험을 몇 번 했습니다. 그래서 될 수 있으면 패러다임이 다른 언어를 경험해 보려는 중입니다.
구체적으로 어떤 도움을 받으셨나요. 리스프의 예를 들면 코드 형태 자체를 패턴으로 사용할 수 있다는 점이 신기했는데 그 때 배운 것을 스몰토크에 메타프로그래밍 비슷하게 시도해 본 적이 있는데 데이터와 속성만 주어지면 디스플레이는 자동으로 되게 하는 것이었습니다. 얼랭에서 배운 것들은 클러스터링에서 공유 상태를 관리하는 변수에 관한 문제를 줄이는 데 시도해 봤는데 얼랭을 알기 전과 그 후는 그 문제에 관해 프로그래밍하는 방식이 많이 달라졌습니다.
그 동안 본 코드 중에서 가장 영감을 받았던 코드는 무엇인가요. 상당히 많아서 하나를 집어내기가 어려운데 우선 GNUstep 코드를 들고 싶습니다. C를 써서 객체지향처럼 하는 것에 관한 아이디어는 GTK+에서 많이 배웠습니다. 구조체에 대해서도 달리 보게 됐고요. 스퀵이나 시사이드에서도 배울 만한 점이 많은데 스퀵이나 시사이드 개발자들이 좋은 개념을 개발하는 데 중점을 더 두기 때문인지 다른 프로그램에서 보기 드문 아이디어가 많습니다. 예를 들어 시사이드를 통해 컨티뉴에이션과 그 용도에 대해 이해하게 됐습니다. 그 외에 마그리트(Magritte)라는 프레임워크에서 메타 프로그래밍을 어떻게 활용할 수 있는지에 대해 좀 더 배웠습니다.
시간이 충분히 주어진다면 현재 쓰는 개발 도구나 환경을 어떻게 개선해 보고 싶으신가요. 능력이 된다면 환경 자체를 바꾸는 일을 해보고 싶습니다. 지금 같은 파일 시스템이 아니라 싱글 레벨 스토리지를 쓰는 환경을 구현해 보고 싶습니다. 어찌 보면 별 차이가 없을지도 모르지만 지금과 같은 파일 시스템 기반 애플리케이션과 싱글 레벨 스토리지 기반 애플리케이션은 사용자 경험이 다를 것 같습니다. 저는 싱글 레벨 스토리지 쪽이 더 좋다고 보고 제프 라스킨(Jef Raskin)의 캐논 캣(Canon Cat) 같은 형태의 컴퓨터여야 하지 않을까 생각합니다. 어찌 보면 컴퓨터를 처음 사용하는 사람에게는 애플리케이션을 열고 글을 써야 한다는 게 이상한 일입니다. 그 전에는 그냥 종이를 꺼내 글을 쓰기만 하면 됐거든요. 그런데 지금 컴퓨터는 그런 것들이 모드나 상태로 다 분리되어 있어 불합리한 면이 있습니다. 물론 고치지 못하는 걸 보면 쉽지 않은 작업이긴 한데 시간과 능력이 된다면 그런 쪽으로 도전해 보고 싶습니다.
앞으로 계획이 있다면... 사람들이 가지고 있는 정보를 잘 연결하고 공유해 건설적인 일을 할 수 있는 버스 같은 애플리케이션을 만들어 보고 싶습니다. 기왕이면 스몰토크를 써서 개발하고 싶고요.
[전성진 소개] 픽짜를 서비스하는 엠비안에서 개발자로 일하며 효과적으로 주어진 문제를 해결하는 일에 가장 큰 관심을 두고 살고 있다.