Onik Lab.

파이썬 연구를 어떻게 할 것인가

December 23, 2019 | 4 Minute Read • 0 Comments

안녕하세요.

최근에 개인적으로 많은 일들이 있었네요. 물론 말 그대로 개인적인 일이라 이 글에서 밝히기는 조금 어려운 상황인 점 양해바랍니다.

한 가지 말씀드릴 수 있는 것은 이 정도가 되겠네요. 원래는 Google Cloud 플랫폼에 Vision API를 사용해서 Django로 웹사이트 하나를 구축하는 것을 계획하고 여러 가지 준비 단계에 들어갔었다가 개인적인 사정으로 인해서 중단했다는 정도가 되겠습니다. 귀찮아서 그만두거나 그런 것은 결코 아니고요.

대신에 다른 근본적인 부분에서부터 하나씩 시작하는 것이 어떻게 보면 더욱 좋을 수도 있다는 생각도 듭니다.

몇 달 전에 책을 한 권 출간했었어요. 무슨 책인지는 이 블로그에 다 나와있기 때문에 추가 설명은 생략하겠고요. 책을 쓰면서 느꼈던 것은 이런 정도입니다. 진짜 단순히 웹 애플리케이션을 구축하는 것 자체에 대한 부분을 중심으로 다루고 있다?

사실 그게 나쁜 것은 아닙니다. 제 책을 보고 도움이 되신 분들도 계실 것이고, Django라는 것에 대해서 조금은 더 가깝게 다가갈 수도 있기 때문이겠죠. 하지만 Python이 단순히 Django로 웹 애플리케이션을 구축하기 위해서만 사용되는 프로그래밍 언어라고 생각하시는 분들은 아마도 아무도 없을 것입니다. Python은 그보다 훨씬 많이 넓고, 광범위하고, 다방면으로 쓰일 수 있기 때문이지요.

Python 연구를 어떻게 할 것인가는 신기술을 공부하려는 사람들에게는 과제일 것입니다. 프로그래밍을 저처럼 20여년 가까이 하셨던 분들도 계실 것이고, 반대로 프로그래밍을 한 번도 접하지 못했던 분들도 계실 것이고. 그럼에도 불구하고 인공지능을 비롯한 여러 가지 기술에 가장 많이 활용되는 언어인 만큼 뭔가 잘 쓰고 싶기는 하고. 저도 그 부분에 대해서는 사실 고민을 많이 해봤습니다. 어디서부터 어떻게 시작하는 것이 좋을 것인가.

그래서 파이썬 연구를 어떻게 할 것인가에 대해서 간단히 느낀 바를 다음과 같이 적어보겠습니다.

1. 기초 문법 공부

사실 이 부분은 굉장히 중요하죠. 뭘 하려고 해도 문법 모르면 아무것도 못할테니까요.

2. Numpy

여기부터가 중요합니다. Numpy는 생각 이상으로 기능이 막강합니다.

컴퓨터 프로그래밍의 근본은 무엇이겠습니까. 0과 1입니다. 그리고 그것을 연산하는 것이 프로그래밍입니다.

Numpy는 Python에서 숫자를 가지고 다루는 모든 데이터를 처리하기 위한 라이브러리입니다. Python에도 기본으로 내장되어있고요. 다른 어떤 언어에서 제공하는 Number 관련 라이브러리보다도 더욱 범용적이고, 확장성도 뛰어나고 그렇습니다. Python을 하는 사람이 Numpy를 모른다. 그것은 말이 안 되는 것 같습니다.

3. 각자의 분야에 맞는 연구를 하라

여기서부터 이제 분야가 나누어질 수 있습니다. Python으로 다루는 분야는 매우 넓기 때문이지요.

  • 머신러닝, 딥러닝을 다룬다면
    • Pandas, Tensorflow, Pytorch, Keras 등
  • 웹 크롤링 등을 다룬다면
    • Requests, Beautifulsoup 등
  • 웹 애플리케이션 프레임워크를 다룬다면
    • Django, Flask 등(사실 4개 정도 더 있습니다)
  • 통계나 그래프 도표 표현 등을 다룬다면
    • Matplotlib, Pyplot 등
  • 텍스트 추출 등을 다룬다면
    • PyTesseract 등

아마도 크게 이 정도로 나누지 않을까 싶습니다. 물론 더 있을 수도 있겠지만요.

위에 쓴 것은 전부 다 Python 라이브러리입니다. 신기술이라는 것이 다른 것이 아니라, 현재 대두되고 있는 기술에 맞는 라이브러리를 가지고 오고, 그 라이브러리를 가지고 공부를 하고 그러면 되는 겁니다. 물론 거기에는 시간이 오래 걸릴 수도 있고, 응용하고 자신만의 것으로 만드는 시간 또한 오래 걸릴 수도 있습니다.

예를 들자면 Django로 웹 사이트를 구축하고 실습해 보는 것만 가지고 저는 책을 한 권으로 다루었습니다. 심지어 다른 책에서는 두 권으로 다룬 책도 있을 정도고요. 그리고 그것에서 끝나는 것도 아닙니다. 제 책에서 다루지는 않았지만 웹 전송과 관련해서는 DjangoRestFramework와 같은 라이브러리까지도 다룰 수도 있습니다. 즉 위에 언급된 라이브리러는 말 그대로 분야 별 기초 라이브러리일 뿐, 더욱 깊게 파고드려면 추가적인 라이브러리도 알아야 합니다.

그리고 이론 공부 또한 중요한 부분이 될 수 있습니다. 머신러닝, 딥러닝 등에 사용되는 라이브러리를 위와 같이 언급했지만, 사실 이 학문은 기본적인 이론 공부가 우선시되어야 합니다. 그냥 막 갖다 쓰고 예제만 실행한다고 바로 아는게 아닙니다. 이론을 먼저 어느 정도 터득하고, 이를 실습할 때에 라이브러리가 사용되는 개념입니다.

그렇다면 연구 방향은 이제 명확해 집니다.

  • Python 문법과 Numpy 정도는 기본적으로 알고 들어가야 한다.
  • 자신이 하고자 하는 연구와 관련된 기본 이론 및 상식은 별도로 공부해야 한다.
  • 무엇을 만들려고 할 것인가? 그리고 거기에 어떤 라이브러리가 사용되는가?
  • 해당 라이브러리를 가지고 어떻게 활용할 수 있는 지에 대한 학습과 연구가 필요하다.
  • 이제 어느 정도 이론과 라이브러리 사용이 숙달되었으면, 그것을 가지고 설계도 하고 개발도 한다.

이런 순서로 이루어져야 합니다.

고급 레스토랑에서 정말 만들기 어려울 요리를 제공해야 할 때가 있습니다. 이러한 요리를 만들려면 어떻게 해야 할까요.

먼저 재료를 구해야 되겠죠? 그리고 레시피도 알아야 합니다. 하지만 요리를 하기 위한 장소. 고급 레스토랑도 필요하고, 요리를 하기 위한 도구나 연장 등도 당연히 필요하며, 이들을 어떻게 쓸 것인가도 알아야 합니다. 이제 그 것을 Python 연구에 비교해 볼까요.

  • 재료는 데이터(Data)라고 볼 수 있습니다. 무언가를 만들기 위해서는 데이터가 있어야 되겠죠? 하다 못해 아주 간단한 프로그램인 print(“Hello World”)가 있으면, Hello World 자체가 데이터가 됩니다. 데이터가 없는 프로그래밍이란 애당초 존재하지 않습니다.
  • 레시피는 Python 문법과 Numpy 정도로 볼 수 있습니다. 대부분의 프로그래밍은 문법에 의거해서 모든 산출물이 나오기 때문에, 요리의 레시피와 같다 볼 수 있겠죠.
  • 요리 장소는 쉽게 말하자면 인프라에 해당됩니다. 웹 환경이 될 수도 있고, 아니면 localhost가 될 수도 있습니다.
  • 요리 도구 및 연장은 무엇일까요. 가장 기본적인 Numpy를 포함하여 Pandas, Matplotlib 등 외부 라이브러리가 그 연장에 해당된다고 생각해 봤습니다. 뭔가 만들려고 해도, 만들만한 도구나 연장이 없으면 아무 것도 못하겠죠?
  • 그렇다면 요리 도구 및 연장 사용 방법은 당연하게도 라이브러리 메뉴얼이 될 수가 있겠죠. 메뉴얼에는 함수, 클래스, 변수 등 다양한 기능을 제공하고 있으며, 이들을 사용하는 방법 자체가 요리 도구나 연장을 사용하는 방법으로 볼 수 있을 것입니다. 거기에 위에서 언급한 기본 이론 공부 역시 이에 해당될 수 있습니다. 라이브러리 사용이 별 다른 것이 아니라, 이론을 바탕으로 구현된 함수를 사용하는 것이라는 점에서 같은 범주로 놓고 보는 것이 맞을 것 같습니다.

결국 위에서 언급한 다섯 가지. 재료 - 레시피 - 요리 장소 - 도구 및 연장 - 도구/연장 사용법. 이런 것이 어우러져서 요리가 나오듯이, 프로그래밍 또한 이와 같은 과정으로 나온다고 생각합니다.

이제 여러분들은 어떤 것을 학습하고 연구하시겠습니까. 결국 본인의 선택입니다. 하지만 일정한 순서를 가지고 진행한다면 차근차근 하나씩 해 나갈 수 있겠죠?

글 마치겠습니다.