2016 py con2016_lightingtalk_php to python

36
PHP to Python Convert 일일 일일일 일일 일일일 일일일일일 일 일 일일 !

Upload: jiho-lee

Post on 15-Apr-2017

701 views

Category:

Science


0 download

TRANSCRIPT

Page 1: 2016 py con2016_lightingtalk_php to python

PHP to Python Convert

일지이렇게 하면 변환을

성공적으로 할 수 있다 !

Page 2: 2016 py con2016_lightingtalk_php to python

발표자는 누구인가 ?

대학원 정보과학과 13 기 !! - 데이터베이스 석사 전공 중 ( 아아 나의 논문은 언제완성 ..?)

과학의 대중화가 아닌 대중의 과학화 ( 클래식 음악이 대중화되는 것은 아니지않는가 ?)

Page 3: 2016 py con2016_lightingtalk_php to python
Page 4: 2016 py con2016_lightingtalk_php to python

담당 기획자 > 아저씨 , 책 좀 팔아봐요 . … 판매가 지지부진해 ( 여러분 책은 금새 절판됩니다 . 절판되기 전에 구매합시다 )

Page 5: 2016 py con2016_lightingtalk_php to python

PHP to Python 본격 변환 이야기

Page 6: 2016 py con2016_lightingtalk_php to python

뭉글 뭉글…

어느 날 회사를 운영하는 지인이 자꾸 홈페이지 기능에 오류가 있다고 봐달라고 하기에 코드를 뜯어봤다 .그랬더니 …

Page 7: 2016 py con2016_lightingtalk_php to python
Page 8: 2016 py con2016_lightingtalk_php to python
Page 9: 2016 py con2016_lightingtalk_php to python

가만 보니 PHP 4.3 까지만 유지되는 PHP RegisterGlobals 옵션을 사용해서 코딩된 것같다 .

Page 10: 2016 py con2016_lightingtalk_php to python

앞으로도 이 지인이 내게 홈페이지 코드 수정 요청을 할 것 같다 . 그에 대비해 내가 코드를 유지보수하기에 뭐 좋은 방법 없을까 ?

Page 11: 2016 py con2016_lightingtalk_php to python
Page 12: 2016 py con2016_lightingtalk_php to python

파이썬 Flask 프레임워크를사용하자 !

Page 13: 2016 py con2016_lightingtalk_php to python

…만들다 보니

Page 14: 2016 py con2016_lightingtalk_php to python

1 번째 Case

include 문이 특정 기능을 담은 한 세트 ( 예를 들면 SMS 발송과 같은 ) 일 때 파이썬으로

어떻게 처리할까 ? 에 대한 고민을 한다 .

Page 15: 2016 py con2016_lightingtalk_php to python

1 번째 Case

파일을 분해해서 디자인은 jinja 템플릿 파일로 만들고 기능은 ajax 로 보내도록 수정

<div id=”sms_send”><input type=”text” name=”phone”><textarea name=”content”></textarea></div>

@page.route(“/sms”, methods=[‘POST’])def sms_send(): ….

Page 16: 2016 py con2016_lightingtalk_php to python

2 번째 Case

모든 화면에 걸쳐 동일한 정보 ( 예를 들면 상단 메모와같은 ..)

메뉴 이동시마다 이 정보를 어떻게 보여줄것인가 ?

Page 17: 2016 py con2016_lightingtalk_php to python

2 번째 Case

Flask 의 context_processor 데코레이터를 사용해 매HTTP 요청 때마다 DB, 상수 파일로부터 이름을

가져와서 Jinja 가 사용할 수 있도록 템플릿 글로벌 변수로등록

Page 18: 2016 py con2016_lightingtalk_php to python

3 번째 Case

하나의 변숫값을 가지고 OR 처리 구문을 레거시 그대로 사용할 것인가 ?

if ( $a == “00” && $b == “1” || $b == “2”) { …}

Page 19: 2016 py con2016_lightingtalk_php to python

3 번째 케이스

표현식에 발상의 전환

if a == “00” and b in (“1”, “2”): …

같은 변수에 대해 or 비교를 하는 거라면 표현식을 길게 할 이유가 없다 .

if ( $a == “00” && $b == “1” || $b == “2”) { …}

Page 20: 2016 py con2016_lightingtalk_php to python

4 번째 Case

Excel 을 HTML 태그로 내보내지 않는 효과적인 방법을…찾아라

기존엔 ..

Page 21: 2016 py con2016_lightingtalk_php to python

4 번째 Case

엑셀 .. 엑셀 .. 그 이름 엑셀 ..

Page 22: 2016 py con2016_lightingtalk_php to python

5 번째 Case

제 멋대로 코드와 HTML 이 혼재되어 있는 HTML 파일의 효과적인 정리 방안을 찾아라 !

Page 23: 2016 py con2016_lightingtalk_php to python

5 번째 Case

템플릿 상속을 통해 태그 순서 등이 꼬이지 않는 템플릿작성

Page 24: 2016 py con2016_lightingtalk_php to python

6 번째 Case

폼으로부터 검색할 필드와 값을 전달 받았을 때 어떻게 처리해야 할까 ?

Page 25: 2016 py con2016_lightingtalk_php to python

6 번째 Case

SQLAlchemy 와 같은 ORM 을 사용하면 사용자가 보낸 변수를 그대로 컬럼명으로 사용할 수 없다 !!!

Page 26: 2016 py con2016_lightingtalk_php to python

7 번째 Case

PHP 로 짤 때 아무 생각없이 사용하는 PHP 함수와 상수값들을 플라스크에 어떻게 녹일까 ?

Page 27: 2016 py con2016_lightingtalk_php to python

7 번째 Case

사용자 PHP 함수는 함수의 성격을 살펴서 템플릿 필터 또는 템플릿 함수로 등록하고 , 상수는 하나의 파일로 모아 템플릿 글로벌 변수로 만듭니다 .

템플릿 글로벌 변수와 템플릿 함수의 등록 : context_processor 데코레이터

템플릿 필터의 등록 : template_filter 데코레이터 또는 app_template_filter 메서드

Page 28: 2016 py con2016_lightingtalk_php to python

8 번째 Case

특정 기능을 제공하는 사용자 PHP 함수와 어떤 기준으로 템플릿 필터와 템플릿 함수로 나눌

것인가 ?

Page 29: 2016 py con2016_lightingtalk_php to python

8 번째 Case

함수는 사용자 PHP 함수를 살펴봐서 jinja 가 제공하는 것이면 jina 에서 그대로 쓰고 그게 아니라면 함수의 성격을 살펴서 단순히 필터링을 통해 해결할 수 있는

문제인지 살펴 템플릿 필터 또는 템플릿 함수로 만든다 .

Page 30: 2016 py con2016_lightingtalk_php to python

8 번째 Case ( …이어서 )

Page 31: 2016 py con2016_lightingtalk_php to python

9 번째 Case

PHP 로 된 외부 라이브러리는 어떻게 해야하는가 ?

예를 들어 ..

업체가 제공한 SMS 전송 라이브러리 - 파이썬 라이브러리용은 없다 ! 으아악 !!

Page 32: 2016 py con2016_lightingtalk_php to python

9 번째 Case

사이트에서 반드시 사용하는 외부 라이브러리는 파이썬 버전이 있는지 확인하고 없으면 PHP 소스코드를 살펴

파이썬으로 변환한다 . …이 작업의 결과로 깨달음을 얻음

---> 내가 잠시 미쳤구나 !!

Page 33: 2016 py con2016_lightingtalk_php to python

10 번째 Case

정적 파일들을 재구성하는 문제는 어떻게 해결해야 할까 ?

/- /images/abc.png- /images/bcd.png- /board.php

Page 34: 2016 py con2016_lightingtalk_php to python

10 번째 Case

Flask 에겐 url_for 함수가 있다 !!!

/images -> /static/images

ref{{ url_for(‘static’, filename=’images/abc.png’) }}

Page 35: 2016 py con2016_lightingtalk_php to python

…끝으로 ( 사실 레거시 코드 변환은 하지마 !! 하지마 !!)

1. PHP 레거시 코드 작성을 파이썬으로 변환하는 일은 아직도 ing … 손댄지 몇년째 ..

2. 여기에 언급하지 못한 자바스크립트와의 전쟁3. 난 디자인은 못한단 말이다 !!! 근데 최소한의 크로스

브라우징은 만족해야지 . 으쌰으쌰

나는 이렇게 말하고 싶다 . 이런 변환 프로젝트는 처음 한 번이 어렵다 . 한 번 변환 프로젝트를 수행하고나면 칼빈

소총에서 K2 소총을 들고 전쟁에서 뛰어다니는 것과 같다 . (ps. 총은 M16 만 다룸 )

Page 36: 2016 py con2016_lightingtalk_php to python

감사합니다 !