brunch

매거진 논숙자들

You can make anything
by writing

C.S.Lewis

by 논스 Jan 18. 2019

오픈소스를 통해 훌륭한 코드를 많이 보세요

서광열 코드박스 대표

"논숙자들"은 논스 멤버들이 자신만의 방식으로 세상을 사는 인생 이야기를 전달합니다. 논스 입주하기

    - 논숙자#1. 박민서 중앙대 블록체인 학회장 인터뷰 보기


논숙자들 두 번째 인터뷰에서는 증권형토큰(STO)를 위한 블록체인 엔진을 개발하는 코드박스(Kodebox)를 이끌고 계신 서광열 대표님을 만나 블록체인과 오픈소스에 대한 이야기를 나누었습니다. 



키워드

#블록체인과 오픈소스  #포항공대 컴공 99학번의 전설  #웹킷  #오픈소스만 10년 넘게  



어린시절 어떻게 컴퓨터를 접하게 되었나요?

국민학교 3학년때 동네에 한창 컴퓨터 학원이 생기던 시점이었어요. 컴퓨터 학원에 가면 게임을 공짜로 할 수 있다는 소문이 친구들 사이에서 퍼지기 시작했었죠. 당시에는 컴퓨터가 업무용으로 쓰는 툴이 아니라서 학원에 가면 베이직같은 프로그래밍 언어를 배웠어요. 컴퓨터 학원에 가면 모두가 개발자가 되어야 하는 것이었죠 (ㅎㅎ) 1년 정도 배우면 선생님이 가르칠 것이 없었어요. 고급과정에서는 Lotus 1-2-3, DB2 등을 배웠죠. 당시 게임은 그렇게 좋아하지 않아서 오히려 프로그래밍을 의도치 않게 배우기 시작한 계기가 되었던 겄이죠.


학원에 가면 베이직같은 프로그래밍 언어를 배웠어요.
컴퓨터 학원에 가면 모두가 개발자가 되어야 하는 것이었죠




중, 고등학교 시절에는 어떠셨어요?

중학교 1학년때부터는 C언어를 배웠어요. 당시에는 학교 컴퓨터 동아리에서 소프트웨어 공모전도 나가곤 했어요. 6개월에서 1년 정도 소프트웨어를 만들고 이를 바탕으로 전시도 하고 상도 주고 하던 것이었죠. 이 때 코딩을 많이 했는데 저도 "짜릿한 전기나라"라는 프로젝트를 했어요. 중학교 2학년 교과과정에서 전자기의 원리를 배웠는데 이 내용을 interactive하게 교과내용을 프레젠테이션 하고 퀴즈도 풀고 하는 교육 프로그램이었어요. 당시에는 윈도우즈가 나이고 전이라 MS-DOS에서 GUI 툴을 사용해서 만들었죠. 당시에 한글 지원이 안 되서 '한'이라는 한글 라이브러리도 사용했어요.

고등학교때부터는 컴퓨터를 잠시 접고 입시공부를 했어요. 왜 그랬냐면 잘은 모르겠는데 그냥 공부를 잘 하고 싶었던 것 같아요 (ㅎㅎ) 당시에는 영어와 국어 공부하는 것을 좋아했어요. 대부분의 개발자와 달리 저는 수학 및 과학을 그렇게 좋아하진 않았어요. 컴퓨터를 하고 싶긴 했지만 컴퓨터는 나중에 해야지하고 참고 있었죠. 컴공 혹은 전산을 하고 싶었는데 그게 안된다면 국문과를 가보고 싶기도 했어요. 포항공대 수학과로 입학했는데 생각보다 너무 수학이 많더라구요 (ㅎㅎ) 그래서 중간에 컴공과로 전과했죠.




포항공대 컴공 99학번의 전설(?)과 PLUS 포항공대 해킹 동아리

(포항공대 컴공 99학번의 전설 3명 중 1명이시라던데?) 금시초문이에요 (ㅎㅎ) 대학교때 학과 공부 물론 좋아했지만 동아리 활동을 특히 많이 했어요. PLUS(Postech Laboratory for Unix Security)라는 해킹 동아리 소속이었죠. 해킹기법을 많이 공부했어요. 사람마다 의견이 다르긴 한데 저는 단순하게 해킹을 하는 것보다는 이를 막을 수 있는 보안 시스템을 구축하는 것이 중요하다고 생각했어요. 결국에 가치는 새로운 것을 만드는데서 온다고 생각했었죠. 해킹을 막는 도구를 구현함으로써 큰 가치를 전달해줄 수 있다고 생각했어요.

포카전(포항공대 vs 카이스트)이 있었어요. 저희때 해킹대회가 처음 생겼는데 제가 1회 대표로 나갔죠. 주최측이 안철수 연구소였는데 그냥 시스템 하나 던져주고 한 번 뚫어봐라 이랬어요. 솔라리스 X86버전이었나 아무도 쓰지 않는 운영체제였죠. 축제 전날 밤부터 24시간 동안 계속 해킹만 했어요. 밖에서는 공연도 하고 응원도 하는데 저는 결국 아무 축제도 보지 못하고 끝났죠 (ㅠㅠ) 당시에 스타 크래프트가 한창 유행하던 시기라 기숙사 휴게실만 가면 전부 스타 방송만 보던 시기였어요. 임요한, 홍진호 등이 한창 활동하던 시기였죠.

포항공대 출신 분들이 블록체인 업계에도 많이 계세요. 코인원(Coinone)의 차명훈 대표님, 아이콘(ICON)의 이경준 의장님이 PLUS 출신이시고 해시드(Hashed)의 김서준 대표님도 PLUS는 아니지만 포항공대 출신이시죠. 포항공대 출신들이 블록체인 업계에 많이 있다고 하는데 다른 분야에는 진출 못 해서 그런 것 같아요 (ㅎㅎ) 


단순하게 해킹을 하는 것보다는 이를 막을 수 있는 보안 시스템을 구축하는 것이 중요하다고 생각했어요. 결국에 가치는 새로운 것을 만드는데서 온다고 생각했었죠




개발자로서 어떤 일을 하셨나요?

학교를 다니면서 병특으로 디지털 TV 미들웨어를 만드는 알티캐스트라는 곳에서 일했어요. 포항공대 출신 분들이 창업해서 포공 출신분들이 많았죠. 120명 중 거의 60-70명은 포공 출신이었던 것 같아요. 거기서 개발을 3년 정도 배웠어요. 저는 가장 뒷단의 엔진을 맡았어요. JVM(Java Virtual Machine)을 셋탑 박스에 맞게 포팅하고 최적화하는 일을 주로 했었죠. 이후에 노마드 커넥션(Nomad Connection)에서 1년 정도 일했어요. G Streamer라고 오픈소스 미디어 프로세싱 라이브러리를 개발했었죠. 이후에는 컴퍼니원헌드레드(Company100)에서 7년 정도 웹킷(Webkit) 개발을 했죠.


7년 정도 웹킷(Webkit) 개발을 했죠




좋은 코드를 많이 보는 경험이 매우 중요해요 

10년 이상 오픈소스 프로젝트를 진행하면서 전 세계의 뛰어난 개발자들이 짜놓은 코드를 보고 배웠어요. 이게 저의 가장 큰 경쟁력이라고 생각해요. 태어나서 한 번도 명작을 읽지 않고 나 혼자 일기만 써서 글쓰기의 대가가 될 수 있을까요? 우리나라 사람들은 대부분 그렇게 코딩을 해요. 정말 좋은 코드를 읽지 않고 혼자서 코딩하는 경우가 너무 많죠. 문학에도 명작이 있듯이 코드에서 정말 잘 짜여있는 코드들이 있어요. 예를 들어 웹킷이나 리눅스 커널같은 코드들은 전 세계의 뛰어난 개발자들이 10~20년 매우 열심히 짠 결과이기 때문에 이렇게 좋은 코드를 많이 보는 경험이 매우 중요해요. 우리나라에서 잘한다는 개발자들의 경우에도 혼자 잘 하는 경우는 많은데 장기적인 유지보수를 고려하지 않고 코드를 짠 경우가 상당히 많죠.

코드박스는 기본적으로 오픈소스로 개발하는 회사이다 보니 개발과정을 모두 공개하고 있어요. 왠만하면 토의도 gitter에서 하는 등 개발에 관련된 토론들도 모두 공개된 채널을 통해 하도록 하고 있죠. 특히 블록체인 같은 경우 한국만이 아니라 전 세계 다양한 개발자들의 참여가 필요하기 때문에 written communications의 경우 영어로 쓰도록 하고 있어요. 심지어는 내부 토론 내용도 글로 쓸 때에는 영어로 작성하고 있어요


태어나서 한 번도 명작을 읽지 않고 나 혼자 일기만 써서 글쓰기의
대가가 될 수 있을까요? 우리나라 사람들은 대부분 그렇게 코딩을 해요.




Haskell 커뮤니티도 운영하셨는데?

컴퓨터 프로그래밍을 잘한다는 것의 의미에는 두 개의 축이 있다고 생각해요. 첫 번째는 흔히 Algorithmic Wizardry라고 하는 특정 문제가 주어졌을때 그에 맞는 알고리즘을 사용하여 문제를 해결하는 능력이죠. 이것이 기본적인 능력이지만 이 역량만 가지고는 좋은 제품이 나오기 힘들다고 생각해요. 크고 복잡한 소프트웨어를 오랜 시간동안 성공적으로 발전시키고 유지보수하기 위해서는 조직화 능력이 필요하다고 생각해요. 이 부분에 대해서는 여러가지 방법론이 있겠지만 제가 가장 중요하게 생각하는 부분은 추상화(Abstraction) 능력이에요. 적절한 추상화는 더 크고 복잡한 시스템을 만들기 위한 핵심이라고 생각해요. 추상화를 포기한다는 것은 조그만 프로그램을 만들겠다는 것 밖에 안된다고 생각해요.

그래서 자연스럽게 추상화를 위한 다양한 도구들도 관심을 갖게 되었죠. 다양한 high-level 언어가 추상화를 위한 매우 좋은 도구라고 생각을 하구요. 특히 구조화 및 추상화 부분에서 가장 cutting-edge에 있는 도구가 함수형 언어(Functional Language)라고 생각했어요. 그래서 Haskell 커뮤니티도 시작하게 되었죠. 물론 코드박스 창업 후에는 시간이 없어서 활동을 못하지만요. 함수형 언어에는 깔끔한 쾌감이 있던 것 같아요. 추상화를 극단으로 추구하면 어디까지 갈 수 있는가를 보여준다고 생각해요. '전혀 달라 보이는 것들이 실제로는 똑같은 것이네'하는 묘한 쾌감도 있죠. 


적절한 추상화는 더 크고 복잡한 시스템을 만들기 위한 핵심이라고 생각하고 추상화를 포기한다는 것은 조그만 프로그램을 만들겠다는 것 밖에 안된다고 생각해요



코드박스에서 특별히 Rust를 사용하시는 이유는 무엇인가요?

코드박스를 시작하면서 세 가지 언어를 검토했어요. C++, Go, Rust. C++의 경우 코드박스에 있는 많은 분들이 웹킷을 같이 개발하신 분들이기 때문에 가장 친숙한 언어였죠. 저도 커리어의 반 이상을 C++을 썼던 것 같아요. 하지만 오히려 가장 친숙했기 때문에 쓰기 싫었어요. 디버깅도 복잡하고. 그 대안으로 생각했던 것이 Go였죠. 서버 프로그래밍에도 많이 사용하고 있고 또 쉽게 배울 수 있으며 생태계도 많이 커졌기 때문에 검토해보았어요. 하지만 아무래도 저희가 Haskell 커뮤니티에서 만났기 때문에 최신언어가 주는 기능을 제거하고 단순성(simplicity)에 초점을 둔 Go 언어는 저희가 원하던 trade-off는 아니었어요. 

그래서 고민하다가 Rust를 사용하기로 했죠. Rust는 저희가 그 전부터 보고 있던 언어인데 블록체인에는 쓸만한 언어라는 생각이 들었어요. Compile time에 많은 버그를 잡는 type safety퍼포먼스 두 마리 토끼를 한꺼번에 잡을 수 있기에 좋았지만 생태계가 작다는 것이 걱정이었어요. 하지만 블록체인 프로그래밍의 경우 라이브러리를 직접 만들어야 하는 경우가 많고 third party 라이브러리를 사용해야 할 경우가 적기 때문에 괜찮다고 생각했죠. 똑똑한 개발자는 언어가 무엇이든 다 잘한다고 생각했기도 하구요.

Rust를 실제로 사용한 후 대부분 만족해하고 있어요. Haskell의 경우 추상화가 너무 강해서 새로운 라이브러리를 사용하기 위해서는 페이퍼 2~3개를 읽어야 하는 경우도 있었는데 Rust의 경우는 추상화가 적절한 수준인 것 같아서 좋아요. Rust의 기본철학인 추상화의 performance penalty가 0이 되어야 한다는 것인데 이로 인해서 라이브러리가 상당히 실용적인 점들도 좋아요. 이 또한 Haskell의 경우 퍼포먼스와 time complexity가 불확실한 것과는 대조적이죠. 생각보다 쓰기 어렵지도 않아요 (ㅎㅎ)


(Rust의 경우) Compile time에 많은 버그를 잡는 type safety와 퍼포먼스 두 마리 토끼를 한꺼번에 잡을 수 있기에 좋았지만 생태계가 작다는 것이 걱정이었어요




어떻게 개발실력을 늘릴 수 있을까요?

많은 사람들이 개발을 배울때 튜토리얼에서 대부분 끝내요. 특히 Rust같이 해당 언어를 사용하는 프로젝트가 적은 경우에는 더 그렇죠. 프로그래밍 언어를 배울때는 세 단계가 있어요. 첫 번째 단계는 문법(syntax)을 배우고 두 번째는 그 문법의 의미(semantics)를 배우죠. 문제는 여기서 끝난다는 데 있어요. 의미 이후에는 언어를 어떻게 사용해야 하는지에 대한 idiom을 배워야 해요. 이것은 프로젝트를 직접 하면서만 배울 수 있죠. 예를 들어 Rust는 시스템 개발자를 위한 언어에요. 그리고 이러한 요구사항 때문에 이 특성을 살리는 디자인 패턴들이나오게 되죠. 프로젝트를 직접 하면서 어떠한 패턴으로 해당 언어를 사용하는지 best practices를 최대한 많이 보고 익혀야 하죠. 영어도 비슷하지 않나요? 한국에서는 문법만 많이 가르치는데 실제로 써봐야 늘죠 (ㅎㅎ)

(Rust를 배우려면 어떻게 해야하죠?) 코드박스에 입사해서 같이 개발하다보면 자연스럽게 배울 수 있을 거에요 (ㅎㅎ) 결국에는 좋은 코드를 많이 읽어야 하고 봐주는 사람들이 있어야 해요. 좋은 피드백을 주는 사람들이 있어야 하는 것이죠. 이러한 환경을 제공해줄 수 있는 회사로 가는 것이 좋아요 :)


프로젝트를 직접 하면서 어떠한 패턴으로 해당 언어를 사용하는지
best practices를 최대한 많이 보고 익혀야 하죠



비즈니스 모델과 오픈소스

저에게 가장 힘들었던 일 중 하나는 외주 프로젝트에 참가했을때였어요. SI 계약의 근본적인 문제점은 인센티브의 불일치였어요. 일단 계약을 성사시키는 데까지만해도 수개월이 걸리지만 문제는 그 이후에 더 심하죠. 일단 계약이 성사되면 대기업들은 자신들에게 할당된 인력들로부터 최대한의 결과물을 만들어 내야 하기 때문에 수시로 전화가 와요. 이슈의 우선순위도 '긴급, 초긴급, 당일처리, 1시간내 처리' 이런 식으로 되어있어요. 그래서 외주 프로젝트에 좋은 인력들이 잘 안 가게 되죠.

저는 당시에 저는 Compnay 100에서는 웹킷 솔루션을 제공했는데 대기업들과 일을 많이 했어요. CTO로서 저는 훌륭한 친구들을 가르치면서 엔지니어링 팀을 꾸려나갔죠. 열심히 교육을 하고 팀을 만들었는데 결국에는 이들이 계속 있을 수 있게 만드는 비즈니스 모델(BM)이 없었어요. 그렇게 흩어지는 것이 너무 아쉬었죠. 물론 인텔, 아마존, 구글 너무 좋은 곳으로 갔기 때문에 잡지도 못했어요 (ㅎㅎ) 눈이 높아져 있어서 국내가 아닌 해외로 많이 갔죠.

웹킷이 워낙 유명한 오픈소스 프로젝트이다보니 웹킷에 contribute했다는 사실 자체가 취직할때 매우 좋은 reference가 되요. 마이크로소프트와 같은 기업에 취직을 할때에도 카이스트 출신이라는 것보다는 웹킷 커미터였다라는 사실을 훨씬 더 높게 쳐주죠. 커미터 혹은 컨트리뷰터가 됐다는 사실이 이미 프로그래밍 실력커뮤니케이션 능력이 어느 정도 증명이 된 것이기 때문이죠. 저는 개발자가 되고 싶은 대학생분들에게 오픈소스 프로젝트를 많이 하라고 추천하고 싶어요.


열심히 교육을 하고 팀을 만들었는데 결국에는 이들이 계속 있을 수 있게 만드는
비즈니스 모델(BM)이 없었어요. 그렇게 흩어지는 것이 너무 아쉬었죠



블록체인과 오픈소스 비즈니스 모델

블록체인은 어쩔 수 없이 오픈소스일 수밖에 없어요. 저는 블록체인이 오픈소스 프로젝트의 새로운 비즈니스 모델을 만들었다는 측면에서 매우 큰 변화를 일으키고 있다고 생각해요. 이더리움만 보더라도 매우 성공적인 펀딩을 진행했잖아요. 옛날 같으면 누가 오픈소스 프로젝트에 그렇게 많은 돈을 펀딩해주겠어요 (ㅎㅎ) 토큰 이코노미를 만들고 이를 바탕으로 네트워크를 구축하는 것이잖아요. 그리고 사용자들은 네트워크를 사용한 대가로 사용료를 지불하는 것이고요. 


블록체인이 오픈소스 프로젝트의 새로운 비즈니스 모델을 만들었다는
측면에서 매우 큰 변화를 일으키고 있다고 생각해요





논스는 아래 세 가지 핵심가치를 바탕으로 자신만의 방식으로 세상을 사는 사람들이 서로의 꿈을 응원하고 인생을 공유할 수 있는 커뮤니티입니다. 논스 입주하기

1. 도전정신(Challenging the Status Quo): 현실에 타협하지 않고 세상을 더 나은 곳으로 바꾸고자 하는 의지

2. 다양성(Diversity): 나와 다른 삶의 방식을 진심을 다해 이해하고자 하는 의지

3. 공유(Sharing): 나의 자원을 공유함으로써 함께 더 멀리 갈 수 있다는 믿음

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari