brunch

You can make anything
by writing

C.S.Lewis

by 조인석 chris Sep 09. 2017

파이콘 한국 2017 발표 후기

"파이썬 vs 자바 " 주제에 대한 생각 및 Q&A 공유

Intro

파이콘 한국 2017 행사가 끝난 지 벌써 한 달이 다 되어 간다. 행사 이후에 참관 후기나 발표자 후기들이 눈에 띄었는데 열심히 찾아서 읽기만 하고 내가 직접 쓸 생각을 못 하고 있었다. 하루는 혹시나 내 발표에 참석한 분이 남긴 후기가 없나 찾아보다가 없는 듯하여 내심 실망하고 있다가 문득 내 발표 후기를 먼저 남기는 것이 먼저라는 생각이 들어 오랜만에 브런치에 글을 쓰기 시작했다.


파이콘은 파이썬 개발자들의 축제다. 전 세계 대부분의 도시에서 파이썬 커뮤니티에 의해 열리는 비영리 콘퍼런스다. 우리나라에는 2014년부터 매년 개최되었고 작년에는 파이콘 APAC 행사까지 열릴정도로 꽤 큰 규모로 열리고 있고, 올해도 어김없이 작년과 같은 장소에서 열렸다. 이틀 동안 발표 위주의 콘퍼런스가 진행되고, 나머지 이틀은 관심 있는 개발자들이 모여서 오픈소스 프로젝트에 기여를 하는 스프린트나 특정 기술에 대한 튜토리얼이 핸즈온 세션 형태로 진행이 된다. 필자는 작년에 처음 참석했고, 올해는 연사로 참석하였다.


언젠가부터 필자는 회사가 아닌 곳에서 회사와는 상관없는 순수한 기술에 대한 발표를 대중 앞에서 하고 싶었다. 이유가 무엇이었을까. 실은 잘 모르겠다. 회사에서 경험한 어떤 것을 알리는 것도 물론 값진 일이지만, 내가 스스로 관심을 가지고 익힌 기술을 '제대로' 배우기 위해서 대중 앞에서 발표할 수 있는 수준이 되어야 하지 않을까 하는 동기 부여가 가장 큰 이유인 듯싶다.


실은 파이썬 책을 집필할 때도 그랬다. 파이썬을 제대로 공부하기 위해서 책을 집필할 수준까지는 되어야 한다는 기준을 스스로 만들었던 것 같다. 그리고 그런 기준은 스스로를 제대로 자극하는 채찍질이 되었고 효과도 만점이었다. 이번 발표도 그런 셈이었다.


발표 주제 선정

파이콘 한국 2017 연사 모집 기간이라는 소식을 접하고 심하게 고민을 하였다. 실은 작년에는 '파이썬 기반 데이터 분석 애플리케이션 개발 시의 조직 운영(?)'과 같은 다소 애매한 주제로 연사 신청을 했다가 거절을 당한 상황이었다. 그리고 발표 당시 필자는 한국 스프링 유저 그룹(KSUG)에서 개최한 스프링 캠프 2017에서 '애자일/린 기반 소프트에어 제품 개발기'를 주제로 발표를 한 뒤 여러 기업에서 강연을 하고 있는 상황이었다. 처음에는 이 주제도 파이콘에서 발표하면 좋을 듯하였으나, 작년의 경험상 이런 주제보다는 조금 더 원천적인 기술 이야기를 하는 것이 좋을 것 같다는 생각이 들었다. 심지어 콘퍼런스 테마가 'Back To The Basic(처음의 마음가짐으로)' 란다.


처음에는 필자가 프로젝트 리더로 참여한 파이썬을 활용한 데이터 분석 애플리케이션 개발과 관련된 이야기를 할까 싶었다. 필자가 기술 스택 및 아키텍처를 잡고 샘플 코드가 만들어서 개발자들과 협업으로 개발한 프로젝트이긴 하였으나, 해당 프로젝트를 떠난 지 기간도 좀 되었고 파이썬 주 개발자는 필자가 아니었기 때문에 해당 주제를 발표하기에는 '자격 미달'이라는 생각이 들었다. 그래서 결국, 조금 더 본질적인 이야기를 하기로 마음먹었다.


필자는 올해로 14년 차 엔지니어다. 소프트웨어 개발일을 쭉 해왔고, 지금도 기획 반, 개발 반 정도 하고 있다. 대학을 졸업하고 한 10년 동안 대부분의 프로젝트에서 자바를 사용했다. 주니어 시절에는 웹 화면 개발도 일부 하긴 했지만 대부분 백엔드 시스템 개발을 해왔고, 연차가 많아질수록 프레임워크, 아키텍처 관련된 업무로 영역이 확장되었다. 개발 환경을 미리 정의하여 개발자에게 가이드를 하기도 하고, 사내 프레임워크를 설계/개발하여 현장에 적용하면서 수많은 트러블슈팅 과정에 참여하기도 하였다. 그러면서 필자는 다음과 같은 생각을 자연스럽게 해왔다.


어떻게 하면 개발자들이 쉽게 품질이 높은 소프트웨어를 만들 수 있을까


파이썬은 2014년 초에 회사를 옮기면서 관심을 가지게 되었다. 대부분 수백 명 개발자들과 대규모 프로젝트를 하던 필자에게 새로운 회사의 업무는 무척 달랐다. 소프트웨어 제품 크기는 무척 작았다. 하지만 비즈니스 도메인에 대한 깊이가 무척 중요한 것들이었다. 그 깊이에는 복잡한 알고리즘과 로직 등이 채워야 하는 것들이었다. 그러다 보니 고민을 하게 되는 영역이 달라지기 시작했다. 그리고 질문은 이렇게 바뀌게 되었다.


어떻게 하면 '개발자가 아닌 사람들'도 쉽게 품질이 높은 소프트웨어를 만들 수 있을까


그리고 소프트웨어 개발자들로만 이루어진 팀에서 데이터 분석과 관련이 깊은 알고리즘을 구현할 필요성이 생겼다. 소프트웨어만 개발하던 친구들이 '회귀분석'이니 'k-NN'이니 하는 분석 기법들을 배워서 애플리케이션으로 바꿔야 하는 것도 큰 숙제였다. 그래서 또 하나의 질문이 생겼다.


어떻게 하면 '개발자'들이 쉽게 알고리즘을 구현할 수 있을까


대부분 자바에 익숙했기에 자바로도 충분히 이 문제들을 풀 수 있을 것이라고 생각했다. 하지만 생각보다 자바의 데이터 분석 관련 라이브러리들은 성숙도가 낮았고 우리가 사용하려고 하는 용도와는 조금 달랐다. 그때 필자를 포함한 팀은 '파이썬'에 관심을 가지게 되었다. 아니, 관심을 가질 수밖에 없었다. 파이썬 자체만으로도 자바와는 비교도 되지 않게 간결한 소스 코드로 데이터를 다룰 수 있었고, 넘파이, 판다스, 사이킷런, 쥬피터 노트북 등을 알면 알 수록 신세계가 열리기 시작했다. 그리고 심지어 성숙도도 굉장히 높았고, 개발자가 아닌 엔지니어들도 쉽게 배워서 사용하고 있었다.


필자는 이 경험을 파이콘에서 발표하고 싶었다. 물론 나보다 훨씬 훌륭하고 기술력이 높은 개발자들도 많지만, 필자가 경험한 아주 기본적인 지식들이 어느 누군가에게는 큰 의미로 다가올 수도 있을 것이라는 생각이 들었다. 그래서 정한 제목이 바로 이 것이다.


파이썬 vs 자바


어느 것이 더 좋다는 것이 골자가 아니다. 두 언어에 대한 기초적인 차이점을 살펴보고 상황에 맞는 언어를 선택하면 좋겠다는 의미에서 진행한 발표였다. 실은 주제 선정을 하고 장표를 만들면서 내용이 너무 쉽지 않을까 걱정을 했다. 머 그래도 '초급'으로 발표 난이도를 세팅하였으니 무리 없을 것이라고 생각했다. 팀 동료에게 자료 리뷰를 요청했는데 역시나 내용이 너무 쉽지 않을까 걱정을 하였다. 하지만 우리가 생각하고 느꼈던 파이썬의 장점들이 잘 전달되면 좋겠다는 피드백을 받았다.

파이콘 홈페이지 등록 정보 (https://www.pycon.kr/2017/program/175)


드디어 발표!!!

드디어 발표날! 앞 세션의 난이도가 '초급'이어서 분위기도 살필 겸 일찌감치 들어가서 세션을 들었다. 그런데 솔직히 세션이 너무 어려웠다. 어떻게 이걸 '초급'이라고 할 수 있는 걸까. 내가 너무 수준을 낮게 잡았나 하는 걱정이 들었다. 뭐 그래도 발표 내용을 바꿀 수는 없었다. 계획대로 발표를 하기로 마음먹었다. 그리고 발표 시작 전..

발표 시작 직전


항상 발표를 시작하기 전에는 긴장이 된다. 벌써 물 반통을 들이켜고는 한숨을 들이켰다. 가슴이 뛰었지만 시작하면 곧 괜찮아질 것이라 믿고 뒤에 있던 스태프의 시작 싸인을 기다리고 있었다. 원래 나는 조금 움직이면서 말을 해야 긴장이 빨리 풀리는데 이번 발표는 좁은 강단 위에서 하는 발표였다. 핀 조명까지 나를 비추고 있어서 더욱 부담이 되기도 하였다. 하지만 잘할 수 있을 것이라 스스로 용기를 주었다.


강연장 분위기는 좋았다. 젊은 친구들이 많이 모여 있었고 강단 앞쪽 청중들은 정말 적극적으로 강연에 임해주고 있었다. 난이도가 너무 쉬울 것 같다는 기우는 아래 질문에 대한 답을 듣고 바로 사라지게 되었다.


보통 파이썬과 자바 중 무엇이 더 빨리 실행되죠?


필자는 당연히 '자바'라고들 할지 알았다. 하지만 들리는 대답이 모두 '파이썬'이었다. 솔직히 당황했었다. 필자의 발표는 '자바'라는 답을 듣고 고정관념을 깨는 형태로 구상을 했는데 파이콘이어서 그랬는지 모르겠지만 청중들은 '파이썬'이 더 빠르다고 하고 있었다. 물론, '자바'라고 용기 있게 말하지 못한 사람도 있었을 것이다.


이 발표의 흐름은 '파이썬'과 '자바'의 프로그래밍 언어 차원의 차이점, 즉 인터프리터 언어와 컴파일 언어의 차이점을 살펴보고 '실행 속도' 뿐만이 아니라 '개발 생산성'에 대한 속도를 함께 생각해보자는 것이었다. '자바'는 컴파일 후 생성된 바이너리 파일을 JVM내의 번역기가 실행시키는 구조로 되어 있다. 컴파일은 개발 과정에서 일어나며, 컴파일된 바이너리 파일이 실행 환경에 배포되어 실행이 된다. 하지만' 파이썬'은 실행되는 시점에 컴퓨터가 알아듣게 '해석'이 된다. 그렇기 때문에 실행 속도 차원에서 봤을 때 컴파일된 바이너리 파일을 실행하는 '자바'가 더 빠를 수밖에 없다. 하지만 개발 생산성 측면에서 보면 소스가 수정될 때마다 컴파일을 해야 하는 '자바'는 반드시 '컴파일 시간'이 필요하고 문법적으로 보았을 때도 자바의 소스 코드가 더 많을 수 있기 때문에 시간은 더 오래 걸린다.

파이썬과 자바의 실행 과정 비교



그리고 개인차는 있겠지만 러닝 커브, 즉 배우는데도 상대적으로 더 많은 시간이 소요된다.

파이썬으로 구현한 Hello, World!!
자바로 구현한 Hello, World!!


결론

물론, 만들고자 하는 소프트웨어 제품에 따라 자바 혹은 C, C++과 같은 언어로 반드시 개발해야 하는 것도 있다. 하지만 생각보다 그렇지 않은 제품들도 엄청나게 많다. 그리고 요즘처럼 세상이 무시무시한 속도로 바뀌고 있는 상황에서 어렵고 배우기 힘든 기술을 배우느라 시간을 뺏기기보다는 하루라도 빨리 제품을 만들어서 완벽하지는 않지만 시장의 반응을 통해 제품 컨셉을 증명하는 것이 더 중요하다. 아무도 사용하지 않을 소프트웨어 제품을 만드느라 더 어려운 기술을 긴 시간 동안 배울 필요는 없지 않은가?


그리고 파이썬이 실행 속도에 약점이 있긴 하지만 그렇다고 '부족'한 것이 아니다. 파이썬으로 구현된 제품의 실행 속도가 자바보다 늦다 하더라도 '충분'할 수 있으며, 개발이 완료된 이후에 성능을 높이는 방법은 수없이 많다. 아래 도구들을 살펴보면 아주 쉽게 성능 튜닝을 할 수 있다.

https://pypy.org/

https://numba.pydata.org/

https://github.com/python/cpython

https://dask.pydata.org/en/latest/


위 3개는 자바와 비슷한 방식을 취한다 미리 컴파일을 해서 특수 번역기에 의해 실행을 빨리 돕는다. 마지막 dask는 자바 하둡의 맵리듀스와 같이 태스크를 병렬 수행할 수 있게 도와준다. 심지어 파이썬을 개발한 것을 자바로 마이그레이션을 한다고 해도, 파이썬으로 먼저 컨셉을 증명하는 것이 중요하다고 생각한다. 우리 팀도 같은 경험을 했다. 파이썬으로 배치 4개를 만들었고 충분히 컨셉은 증명되었으나 실행 속도가 느려서 2개는 자바 배치로 바꾸었다.

발표 결론 - 일단 만들어라 그리고 튜닝하라


Q & A

마지막으로 발표장에서 받은 질문과 답을 정리하고 마무리하겠다.


Q1. 파이썬을 쓰다가 자바를 도입한 경우는 있지만, 자바를 쓰다가 파이썬을 도입한 경우가 있는가?

자바를 파이썬으로 바꾼 적은 없지만, 자바를 주로 쓰는 프로젝트에 파이썬을 도입한 경우는 있었다. 필자가 참여한 프로젝트에서는 데이터 수집은 .Net, 데이터 모델링 및 학습은 파이썬, 데이터 전처리 및 시각화는 자바로 하고 있다.


Q2. 파이썬 개발자보다 자바 개발자가 더 대우가 좋은 것 같은데, 연사의 생각에는 자바를 반드시 배워야 하나?

꼭 그렇지 않다. 이 부분은 언어의 차이라기보다는 시장 때문에 그런 것 같다. 국내는 SI 시장 규모가 크고 대부분 자바/스프링 기반의 프로젝트이기 때문에 자바 개발자를 찾는 것이 많다. 파이썬을 주로 사용하는 회사도 많다. 스타트업에서는 오히려 파이썬을 더 많이 사용하는 것 같다.


Q3. 소프트웨어 회사 소속이 아닌데 어떻게 파이썬을 활용하고 있고 어려움은 없었나?

오히려 소프트웨어 회사 소속이 아니기 때문에 파이썬을 더 사용하게 된 것 같다. 지금 회사는 How 보다는 What에 더 관심이 많다. What이 정해지면 기술 스택을 선정하는 것은 팀에게 있다. 크게 어렵지 않았다.


Q4. C++는 필드에서 사용하지 않나? 배울 필요가 없는 건가?

필드에서 많이 사용하고 있다. 실행 속도에 굉장히 민감하거나 하드웨어 리소스가 한정되어 있는 임베디드를 포함한 곳에서는 안 쓸 수가 없다. 그렇다고 해서 파이썬으로 개발을 못하는 것도 아니다. 게임 엔진도 파이썬으로 만드는 발표를 본적이 있다. 상황에 맞춰서 필요한 기술을 배우는 것이 중요해 보인다.


Q5. (남자 두 분이 오셔서 질문을 주셨는데 내용이 기억이 안 납니다...ㅜ.ㅜ)

(혹시 질문 주신분이 이 글을 읽는다면 댓글로 질문 좀 알려주시면 고맙겠습니다...)


마무리

쓰다 보니 길어졌다. 간단하게 발표 후기를 쓰려고 하였는데, 후기가 아닌 것 같기도 하다. ㅡㅡㅋ


파이콘에서의 발표는 필자 개인적으로 의미가 크다. 대중 앞에서 필자가 평상시에 고민하던 것을 공유하는 자리였고 필자에게도 큰 공부가 되었다. 앞으로 여러 가지 주제로 발표하는 기회를 가지도록 노력해야겠다.


- 후기 끝-


발표 자료 : https://www.slideshare.net/ChrisCho2/python-vs-java-pycon-korea-2017

발표 동영상 : https://youtu.be/MmIxahj9vnY

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