[기고] 왜 파이썬(Python)인가?
왜 파이썬(Python)인가?
1. 들어가며
프로그래밍 언어를 배우기 위해 어떠한 목적을 위해 어떠한 언어를 선택하는 것은 매우 중요하다. 위 그림의 관계를 따라가 보면 파이썬(Python)이라는 프로그래밍 언어가 단연 눈에 띈다. 다방면에서 사용되며, 급여 또한 낮지 않다^^ 그럼 지금부터 왜 파이썬(Python)? 인가에 대해 설명하고자 한다.
“빠르게 성장하는 프로그래밍 언어”
세계 최대 온라인 개발자 커뮤니티인 ‘스택오버플로’에서 인기 언어별로 사용자 활동량을 집계한 결과 파이썬(Python)이 지난 5년간 가장 폭발적으로 관심이 증가한 언어로 나타났다. 이런 확신은 데이터에 기반한분석에서 나왔다.
<지난 5년간 프로그래밍 언어별 트래픽 추이>
또 이런 추세라면 커뮤니티 내 활동량 측면에서 자바스크립트, 자바, C#을 포함해 다른 모든 언어를 압도하는 독보적인 위치에 오를 것이란 전망이 나왔다.
<올해 말부터 2019년까지 프로그래밍 언어별 예상 트래픽 추이>
2. 파이썬(Python) 소개
파이썬은(Python)은 한국에 2008년께 한국어 입문서를 통해 소개됐다. 그래서 ‘새롭다’고 느끼는 경우가 많지만, 사실은 그렇지 않다. 파이썬은(Python)은 1990년도 암스테르담의 귀도 반 로섬(Guido Van Rossum)이 개발한 인터프리터 언어다. 1995년의 자바보다 먼저 나온 프로그래밍 언어다.
외국에서는 정말 많이 사용하지만, 국내에서는 사용빈도가 적은 편인 게 사실이다. 하지만 최근 알파고 등으로 말미암은 AI인공지능의 선두주자가 파이썬(Python) 이다. 페이스북 창시자 마크 주커버그도 본인의 집에 자비스를 만들어 IT인프라를 구축하는데 주요하게 쓰인 언어 또한 파이썬(Python) 이다. 이 외 아마존, 유튜브, Dropbox 등 유명 IT업체들도 활용하는 언어다.
3. 파이썬(Python)의 특징
“문법이 쉽고 순서가 영어 구문과 유사하여 빠르게 배울 수 있다.”
- Easy-to-learn : 파이썬은 상대적으로 몇 가지 키워드, 구조가 간단하고, 명확하게 정의된 구문이 있다. 이는 비교적 짧은 시간에 언어를 선택할 수 있다.
- Easy-to-read : 파이썬 코드는 훨씬 더 명확하게 정의되어 있고 눈에 잘 들어온다.
- Easy-tomaintain : 파이썬의 성공은 소스 코드가 상당히 유지 관리가 쉽다는데 있다.
“풍부한 라이브러리로 개발 생산성이 매우 높다.”
- abundant library : 파이썬은 ‘Numpy’, ‘Pandas’, ‘Matplotlib’, ‘Ipython’ 등 데이터 적재, 시각화, 통계, 자연어 처리, 이미지 처리 등에 필요한 라이브러리를 가지고 있다. 또한, 범용 프로그래밍 언어로서 복잡한 그래픽 사용자 인터페이스(GUI)나 ‘Django’, ‘Flask’ 등을 이용한 웹서비스를 만들 수 있다.
“다양한 플랫폼에서 사용 가능”
- A broad standard library : UNIX, Windows 및 Macitosh의 플랫폼 위에서 매우 휴대하기 쉽고 크로스 플랫폼 호환이 되는 라이브러리가 대부분 존재한다.
- Portable : 다양한 하드웨어 플랫폼에서 실행되며, 모든 플랫폼에서 동일한 인터페이스를 가지고 있다.
4. 파이썬(Python)으로 무엇을 할 수 있을까?
“시스템 유틸리티 제작”
파이썬은 운영체제(UNIX, Windows 등)의 시스템 명령어들을 이용할 수 있는 각종 도구를 갖추고 있기 때문에 이를 바탕으로 갖가지 시스템 유틸리티를 만드는 데 유리하다. 실제로 여러분은 시스템에서 사용 중인 서로 다른 유틸리티성 프로그램들을 하나로 뭉쳐서 큰 힘을 발휘하게 하는 프로그램들을 무수히 만들어낼 수 있다.
“GUI 프로그래밍”
GUI(Graphic User Interface) 프로그래밍이란 쉽게 말해 윈도우 창처럼 화면을 보며 마우스나 키보드로 조작할 수 있는 프로그램을 만드는 것이다. 파이썬으로 GUI 프로그램을 만드는 것은 다른 언어를 이용해 만드는 것보다 훨씬 쉽다. 대표적인 예로 파이썬 프로그램을 설치할때 함께 설치되는 기본 모듈인 Tkinter(티케이인터)를 이용해 만드는 GUI 프로그램을 들 수 있다. 실제로 Tkinter를 이용한 파이썬 GUI 프로그램의 소스 코드는 매우 간단하다. Tkinter를 이용하면 단 5줄의 소스 코드만으로도 윈도우 창을 띄울 수 있다. 놀랍지 않은가!
※ 파이썬에는 wxPython, PyQT, PyGTK 등과 같이 Tkinter보다 빠른 속도와 보기 좋은 인터페이스를 자랑하는 것들도 있다.
“C/C++ 와의 결합”
파이썬은 접착(GLUE) 언어라고도 부르는데, 그 이유는 다른 언어들과 잘 어울려 다른 언어와 결합해서 사용할 수 있기 때문이다. C/C++로 만든 프로그램을 파이썬에서 사용할 수 있으며, 파이썬으로 만든 프로그램 역시 C/C++에서 사용할 수 있다.
“웹 프로그래밍”
일반적으로 익스플로러나 크롬, 파이어폭스와 같은 브라우저를 이용해 인터넷을 사용하는데, 누구나 한 번쯤 웹 서핑을 하면서 게시판이나 방명록에 글을 남겨 본 적이 있을 것이다. 그러한 게시판이나 방명록을 바로 웹 프로그램이라고 한다. 파이썬은 웹 프로그램을 만들기에 매우 적합한 도구이며 실제로 파이썬으로 제작된 웹사이트는 셀 수 없을 정도로 많다.
“수치 연산 프로그래밍”
사실 파이썬은 수치 연산 프로그래밍에 적합한 언어는 아니다. 수치가 복잡하고 연산이 많다면 C같은 언어로 하는 것이 더 빠르기 때문이다. 하지만 파이썬에는 Numeric Python이라는 수치 연산 모듈이 제공된다. 이 모듈은 C로 작성되었기 때문에 파이썬에서도 수치 연산을 빠르게 할 수 있다.
“데이터베이스 프로그래밍”
파이썬은 사이베이스(Sybase), 인포믹스(Infomix), 오라클(Oracle), 마이에스큐엘(MySQL), 포스트그레스큐엘(PostgreSQL) 등의 데이터베이스에 접근할 수 있게 해주는 도구들을 제공한다. 또한, 이런 굵직한 데이터베이스를 직접 이용하는 것 외에도 파이썬에는 재미있는 모듈이 하나 더 있다. 바로 피클(pickle)이라는 모듈이다. 피클은 파이썬에서 사용되는 자료들을 변형없이 그대로 파일에 저장하고 불러오는 일들을 맡아 한다. 이 책에서는 외장 함수에서 피클을 어떻게 사용하고 활용하는지에 대해서 알아본다.
“데이터 분석, 사물 인터넷(IoT)"
파이썬으로 만들어진 판다스(Pandas)라는 모듈을 이용하면 데이터 분석을 더 쉽고 효과적으로 할 수 있다. 데이터 분석을 할 때 아직까지는 데이터 분석에 특화된 "R"이라는 언어를 많이 사용하고 있지만, 판다스가 등장한 이후로 파이썬을 이용하는 경우가 점점 증가하고 있다. 사물 인터넷 분야에서도 파이썬은 활용도가 높다. 한 예로 라즈베리파이(Raspberry Pi)는 리눅스 기반의 아주 작은 컴퓨터이다. 라즈베리파이를 이용하면 홈시어터나 아주 작은 게임기 등 여러 가지 재미있는 것들을 만들 수 있는데 파이썬은 이 라즈베리파이를 제어하는 도구로 사용된다. 예를 들어 라즈베리파이에 연결된 모터를 작동시키거나 램프에 불이 들어오게 하는 일들을 파이썬으로 할 수 있다.
5. 파이썬(Python)으로 할 수 없는 일
파이썬은 다양한 분야에서 사용하지만, 다음과 같이 사용할 수 없는 분야도 존재한다.
“시스템과 밀접한 프로그래밍 영역”
파이썬으로 도스나 리눅스 같은 운영체제, 엄청난 횟수의 반복과 연산을 필요로 하는 프로그램 또는 데이터 압축 알고리즘 개발 프로그램 등을 만드는 것은 어렵다. 즉, 대단히 빠른 속도를 요구하거나 하드웨어를 직접 건드려야 하는 프로그램에는 어울리지 않는다.
“모바일 프로그래밍”
파이썬은 구글이 가장 많이 애용하는 언어이지만 파이썬으로 안드로이드 앱(App)을 개발하는 것은 아직 어렵다. 안드로이드에서 파이썬으로 만든 프로그램들이 실행되도록 지원하긴 하지만 이것만으로 앱을 만들기에는 아직 역부족이다. 아이폰 앱을 개발하는 것 역시 파이썬으로는 할 수 없다.
6. 파이썬(Python) 라이브러리
“데이터 분석을 위한 라이브러리”
파이썬은 데이터 분석과 대화형 데이터 조사, 데이터 시각화에 자주 사용되는 ‘SAS’, ‘R’, ‘MATLAB’ 와 같은 오픈소스 혹은 상용도메인 종속 언어나 도구와 비교해도 뒤지지 않는다. 또한 파이썬 라이브러리의 향상으로 데이터 처리에 자주 활용되기도 한다. 물론 ‘SAS’, ‘MATLAB’과 같은 상용프로그래밍 언어인 경우 수치계산이 필요한 과학 및 공학 분야에서 다양하게 사용하고 있지만 개인, 영세기관에서 쓰기엔 licence 비용이 비싸다.
데이터 분석에 필요한 CORE가 되는 파이썬 라이브러리 몇가지를 간략히 적어봤다.
1. NumPy : Numerical Python의 줄임 말로써 고성능의 수치 계산을 하기 위해 만들어진 payhon pakage이다. Numpy에서 가장 강력한 무기로 칭송받고 있는 N차원의 배열 객체를 구현하기 위한 라이브러리라 할 수 있다.
2. SciPy : 과학기술계산용 함수 및 알고리즘을 제공하는 라이브러리이다.
3. Pandas : 데이터 분석을 위해서 기본적으로 필요한 자료구조, 데이터 분석 도구를 제공하는 파이썬 라이브러리이다. 엑셀과 거의 비슷하게 row와 column으로 이뤄진 데이터 객체를 만들 수 있도록 해준다.
자동적으로 혹은 명시적으로 축의 이름에 따라 데이터를 정렬할 수 있는 자료구조
통합된 시계열 기능
시계열 데이터와 비시계열 데이터를 함께 다룰 수 있는 통합 자료구조
누락된 데이터를 유연하게 처리할 수 있는 기능
SQL과 같은 일반 데이터베이스처럼 데이터를 합치고 관계 연산을 수행하는 기능
산술연산과 한 축의 모든 값을 더하는 등의 데이터 축약연산
4. Matplotlib : 자료를 차트(chart)나 플롯(plot)으로 시각화(visulazization)하는 패키지이다. Matplotlib는 다음과 같은 정형화된 차트나 플롯 이외에도 저수준 api를 사용한 다양한 시각화 기능을 제공한다.
라인 플롯(line plot)
스캐터 플롯(scatter plot)
컨투어 플롯(contour plot)
서피스 플롯(surface plot)
바 차트(bar chard)
히스토그램(histogram)
박스 플롯(box plot)
“웹 프로그래밍 프레임워크”
웹 서비스를 하기 위한 언어로는 PHP, Javascript, JSP, ASP, NET, C++, C#, JAVA, GO등 여러 가지 프로그래밍 언어가 있다. 하지만 이들 언어에 비해 쉽고 빠른 개발을 할 수 있다. 또한 문법 및 코드가 간결하여 생산성이 뛰어나다. 파이썬에는 ‘장고(Django)’, ‘플라스크(Flask)’처럼 웹프로그래밍을 할 수 있는 프레임 워크가 존재한다.
“머신러닝/딥 러닝 라이브러리”
최근 우리 주변에서 데이터와 자동화 기술에 관련된 다양한 분야에서 인공지능(AI)을 적용하는 사례가 늘고 있다. 인공지능은 검색 엔진, 이미지 인식, 로보틱스, 금융을 비롯한 다양한 분야에서 널리 사용된다. 이러한 인공지능 기술에 대한 머신러닝/딥러닝 기술의 'Scikit-Leam', 'Theano', 'TensorFlow'등도 파이썬 라이브러리 중 하나다.
7. 마치며
이 글을 통해 무조건 파이썬(Python) 프로그래밍을 사용하라는 것은 아니다. 예로 들어 데이터 분석에는 이미 ‘R’. ‘MATLAB’ 등과 같은 프로그래밍 언어가 존재하기 때문이다. 물론 ‘R’, ‘MATLAB’ 과 파이썬(Python)과의 장/단점은 분명하다. 그렇기 때문에 어떠한 언어를 통한 프로그래밍을 할 것인가는 하고자 하는 목적과 구분에 따라 선택하는 게 맞다.
"Life is too short, You need Python"
하지만 이것은 명확한 듯싶다. 다른 프로그래밍 언어를 다루었던 엔지니어들은 새로운 트랜드의 IT프로그래밍 언어를 다루어 보기에, 또한 처음 프로그래밍언어를 접한 사람들에게는 배우기 쉽고, 여러 분야에서 사용되는 파이썬(Python)은 매력적인 프로그래밍 언어이다.