NERD WORLD

마이크로소프트 멜팅팟 세미나 - "응답하라 Python!!" 본문

일상

마이크로소프트 멜팅팟 세미나 - "응답하라 Python!!"

학부생7년차 2016. 3. 24. 14:37

페이스북 타임라인을 훑어보다가, 마이크로소프트에서 진행하는 멜팅팟(Melting Pot) 세미나에 대한 공고를 봤다 (Melting Pot이란, 인종/문화등이 융화되어 동화되는 현상이라고 한다. 아마 다양한 백그라운드의 사람들에게 지식을 전해주는 목적의 세미나라는 뜻일까...).

마이크로소프트하면 C, C++, C#, .NET 등의 언어와 프레임워크만이 떠올랐는데, 그러한 마이크로소프트에서 Python에 대한 세미나를 진행한다는 소식에 우선 흥미가 동하였다. 그리고 강연자 중 한분이신 Ask Django이진석쌤께서, 피로그래밍 3-4기 교육을 맡아주신 인연이 있었기 때문에 오랜만에 인사를 드릴겸 참여 신청을 하였다.

밤에 페이스북 하다가 공고가 뜨자마자 참여 신청을 하였는데, 다음날 쯤 되니 이미 정원이 꽉 찰 정도로 인기가 많았었다.

(여담이지만, 오늘 온오프믹스를 또 훑어보다가 마이크로소프트에서 개최하는 Communicy Open Camp 2016 의 공고를 확인하고 너무나 참석하고 싶었지만 이미 2개 다 150명 정원이 마감된 상태였다.)

세미나가 열린 장소는 역삼동의 Maru 180 이라는 곳이었다. 몇개의 스타트업들이 입주해있고, 1층 카페는 서로의 아이디어를 공유하기 위한 만남의 장 역할을 하는 듯 했다. 세미나는 지하 1층에서 이뤄졌는데, 넓은 홀이 있는 것으로 보아 이런 스타트업/IT 관련 세미나들이 종종 열리는 듯 하였다.

(마루 180 사진)

우연하게도, 2주전쯤 방문했던 BinaryVR이 입주한 팁스타운(TIPS Town)과 같은 도로에 위치했다. 만남 전에 들렀던 스타벅스 바로 맞은편이었다.


Python의 소개와 Visual Studio Code

첫번째 시간은, 마이크로소프트 코리아에서 에반젤리스트 라는 직책을 맡고 계시는 김병옥님이 해주셨다. Python 이라는 언어에 대해 아주 기초적인 부분부터 특징들을 설명해주시는 시간이었다. 이미 알고 있던 내용들이 대부분이었으나, 부분부분 내가 인지하지 못하고 있던 Python의 특징들에 대해서도 잘 짚어서 설명해주셨다. 사실 Codecademy점프 투 파이썬 같은 입문격의 간단한 코스, 책을 본것이 Python을 학습한 전부이기 때문에 제대로 된 책 한권을 떼야하려나... 싶은 생각이 들었다.

(그러려면 학교에서 책을 빌리는게 좋을텐데....ㅜㅜ 예탁금 10만원을 내고 싶지가 않군)

1) 풍부한 라이브러리가 공유되고, 새롭게 제작되고 있다. 근래에 뜨거운 관심을 받고 있는 머신 러닝을 구현한 모듈을 가장 많이 가지고 있는 언어가 Python 이다. 샌프란시스코에 출장갔을때 현지 스타트업 개발자들이 모두 Python 만 하고 있었다.

2) 오픈소스 프로젝트이다. 비영리의 파이썬 소프트웨어 재단이 관리하고 있는 개방형 공동체 기반 언어이다.

3) 스크립트 기반의 언어이며, 동적 타이핑(실행중에 변수의 자료형을 결정함) 언어이다. 그러므로 빠르게 개발할 수 있지만, 프로젝트가 복잡해지면 알 수 없는 오류가 발생할 수 있다. 그러므로 개발 툴에서 타입을 예측하는 기능이 제공되어야 효율적인 디버깅이 가능하다.

4) 대부분의 플랫폼을 모두 지원한다. Mac OS나 Ubuntu OS의 경우에는 OS안에 내장되어 있을 정도이다. MS도 Python으로 코드를 작성하면 .NET 으로 변환해주는 프로그램을 선보였었으나 큰 호응을 끌지는 못하였다.

5) 가독성이 뛰어나다. C, C++, Java 와 같은 언어에서는 if-else 구문이나 for문 등의 제어문을 사용할 때 본문을 { ... } 의 중괄호로 감싸줘야했다. 그러므로 각자의 코딩 스타일에 따라서 { 을 새로운 줄에 시작하느냐 아니면 끝에 쓰느냐 등으로 갈렸다. 사소한 차이지만, 나와 다른 스타일의 코드를 읽고 이해하는 것에 굉장히 부정적인 영향을 끼쳤다. 이에 반해 Python 에서는 제어문이나 함수/객체를 정의하는 구문의 코드 기술 방식이 완전히 정립되어있다. 필히 들여쓰기를 해야하는 것이다. 

# 함수 정의

def my_class():

return "Hello World."

들여쓰기는 권장되는 사항이 아니라, 들여쓰기를 하지 않을 경우 런타임 에러가 발생한다. 그러므로 Python 언어가 다른 언어에 비해서 가독성이 뛰어나다고 얘기할 수 있다.

6) 3.x 버전부터 유니코드를 기본으로 제공하고 있다. 그러므로 한글을 사용하는데에 제약이나 에러가 없다.

(Python은 현재 2.x 버전과 3.x 버전이 동시에 제공되고 있다. 두 버전의 차이로 소개된 것은 첫번째로 3.x 버전에서는 print 도 함수로 취급되어 출력하고자 하는 String을 ( ... ) 으로 감싸서 인자로 취급해야 한다는 것, 두번째로 long 자료형이 없어지고 int 자료형으로 통일되었다는 점, 세번째로 int / int 연산의 결과가 float 자료형으로 처리된 다는 점, 네번째로 String이 Unicode 체계가 기본으로 채택되었다는 점이 있다.)

7) 절제되어있으면서도 (들여쓰기를 강제하는 등) 자유도가 은근히 높다. Lisp 라는 함수형 언어를 생각해보면 자유도가 매우 높은 것이 장점이지만 잘 다루지 못하는 사람이 다룰 경우 슬픈 코드가 작성된다는 부작용이 있었다. 이에 반해 Python은 적당히 절제되어있으므로 사용자의 수준이 낮더라도 좋은 코드가 작성될 수 있다.

8) 여러 개발 버전이 있다. 서로 다른 버전의 Python은 서로 다른 언어로 인터프리터가 구현되어있다. 많은 사람들이 사용하는 표준 버전(Python 공식 홈페이지에서 다운받아지는)은 CPython 으로 인터프리터가 C언어로 개발되었다. 자바 가상 머신용 인터프리터로 구현된 Jython도 있다. IronPython은 Microsoft .NET 버전의 파이썬이다. 또한 PyPy 라고 해서 Python 으로 인터프리터를 만든 Python 버전도 있다. CPython에 비해서 인터프리터의 속도를 높이는 것이 개발 목적이었는데 일정부분 달성했다고 한다.

9) 모든것이 오브젝트(Object)이다. Python 에서는 함수도 하나의 오브젝트이다. 그러므로 함수를 하나 정의하고, 인터프리터에 함수의 이름을 입력하면 해당 함수가 메모리 상에 위치한 포인터가 반환된다.

10) 인덱싱슬라이싱을 제공한다. Python 의 기본 자료형 중 하나인 리스트(List)는 배열처럼 인덱스로 접근할 수 있다. 그리고 여러 인덱스의 원소를 동시에 접근하는 슬라이싱도 편리하게 제공해준다.

이외에도 여러 내용들을 설명해주었지만, 메모하던 파일이 컴퓨터 리부팅으로 일부분 날라가버린지라....ㅜㅜ

발표 시간이 살짝 모자란지라 마지막으로 Visual Studio Code에 대해서 간단히 소개함으로써 1부가 마무리 되었다. Eclipse IDE의 핵심 개발 멤버로 참여했던 개발자를 마이크로소프트에서 영입하여 그가 첫번째로 진행한 프로젝트라고 한다. IDE인 Visual Studio와 달리 Editor의 역할을 수행한다. 완벽히 무료라는 점과, Git 과의 연동기능을 주로 어필하였다.

한번 써보고 Sublime Text 3 와 비교해볼 수 있으면 좋을 듯 함.


Python 의 웹 프레임워크 Django, 그리고 MS Azure에서 WebApp으로 배포

잠깐의 쉬는 시간 뒤에는 앞서 언급한 Ask Django의 이진석쌤의 Django를 이용해 사진 블로그를 만드는 라이브 코딩 쇼가 이어졌다. 

1) 빈 에디터에서부터 시작해서 로컬 환경에서 Django 프로젝트를 생성한 뒤,

2) 사진 블로그의 각 기능을 구현하고, 

3) GitHub repository 를 생성한 뒤 push 하고,

4) MS Azure app에서 GItHub repository 와 sync 하여 이를 배포

하는 흐름으로 이뤄졌다.

MS Azure 에서 Web App을 생성하는 과정을 보면서 IaaS (Infrastructure as a Service)PaaS (Platform as a Service)의 차이점에 대해서 좀 더 이해해볼 수 있었다. AWS로 EC2 인스턴스를 구매하여 사용하는 것은 IaaS 였다. 즉, 실제 서버 컴퓨터를 내가 원격으로 제어하는 것이었다. 이에 반해 MS Azure 에서 WebApp 을 배포하는 것은 PaaS 였다. WebApp 내용물은 내 코드가 들어가지만 WebApp 의 기본적인 뼈대를 이루는 웹 서버 / 웹 애플리케이션 서버의 다운로드 및 기본 설정은 내가 하는 것이 아니라 플랫폼이 제공해주었다. 즉, 자유도는 떨어지지만 그만큼 신경 쓸 것이 줄어들고 유저는 백-엔드와 프런트-엔드단의 코드 작성에 집중할 수 있었다. 물론 서버 세팅에 들어갔던 시간이 사라지므로, 배포에 걸리는 시간도 더 적어진다.

MS Azure 에서 WebApp 으로 배포하기 위해서는 django-admin 명령어로 새로운 Django Project를 생성할 때 디폴트 설정과 다른, Azure 배포에 적합한 템플릿(Template)로 만들어줘야 하고, 템플릿을 구성하는 파일들 중에서 템플릿 엔진이 렌더링 할 파일의 확장자(Extension)를 config 파일로 설정해줘야 한다.

워크숍에서 진행된 라이브-코딩에 대한 자세한 설명은 아래의 Ask Django 이진석쌤이 워크숍 후 공유해주신 슬라이드와, GitHub repository 를 참고하면 될 것이다. 또한 django-admin 명령어에 대한 자세한 설명 (특히 --template 와 --extension 옵션)은 공식 홈페이지의 도큐먼트를 참고하자.


Comments