SlideShare a Scribd company logo
PHP to Python
Convert 일지
이렇게 하면 변환을 성공
적으로 할 수 있다!
발표자는 누구인가?
대학원 정보과학과 13기!! - 데이터베이스 석사 전공 중(아아 나의 논문은 언제 완성..?)
과학의 대중화가 아닌 대중의 과학화(클래식 음악이 대중화되는 것은 아니지 않
는가?)
담당 기획자 > 아저씨, 책 좀 팔아봐요. 판매가 지지부진해… (여러분 책은 금새
절판됩니다. 절판되기 전에 구매합시다)
PHP to Python 본격 변환 이
야기
뭉글 뭉글…
어느 날 회사를 운영하는 지인이 자꾸 홈페이지
기능에 오류가 있다고 봐달라고 하기에 코드를
뜯어봤다.
그랬더니 …
가만 보니 PHP 4.3까지만 유지되는 PHP
RegisterGlobals 옵션을 사용해서 코딩된 것 같
다.
앞으로도 이 지인이 내게 홈페이지 코드
수정 요청을 할 것 같다. 그에 대비해 내
가 코드를 유지보수하기에 뭐 좋은 방법
없을까?
파이썬 Flask 프레임워크를 사용
하자!
만들다 보니…
1번째 Case
include문이 특정 기능을 담은 한 세트(예를 들면
SMS 발송과 같은)일 때 파이썬으로 어떻게 처리
할까?에 대한 고민을 한다.
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():
….
2번째 Case
모든 화면에 걸쳐 동일한 정보(예를 들면 상단 메모와 같
은..)
메뉴 이동시마다 이 정보를 어떻게 보여줄 것인
가?
2번째 Case
Flask의 context_processor 데코레이터를 사용해 매
HTTP 요청 때마다 DB, 상수 파일로부터 이름을 가져와서
Jinja가 사용할 수 있도록 템플릿 글로벌 변수로 등록
3번째 Case
하나의 변숫값을 가지고 OR 처리 구문을 레거시 그대
로 사용할 것인가?
if ( $a == “00” && $b == “1” || $b == “2”) {
…
}
3번째 케이스
표현식에 발상의 전환
if a == “00” and b in (“1”, “2”):
…
같은 변수에 대해 or 비교를 하는 거라면 표현식을 길게 할 이유
가 없다.
if ( $a == “00” && $b == “1” || $b == “2”) {
…
}
4번째 Case
Excel을 HTML 태그로 내보내지 않는 효과적인 방법을 찾
아라…
기존엔..
4번째 Case
엑셀.. 엑셀.. 그 이름 엑셀..
5번째 Case
제 멋대로 코드와 HTML이 혼재되어 있는 HTML 파
일의 효과적인 정리 방안을 찾아라!
5번째 Case
템플릿 상속을 통해 태그 순서 등이 꼬이지 않는 템플릿
작성
6번째 Case
폼으로부터 검색할 필드와 값을 전달 받았을 때 어떻게 처리
해야 할까?
6번째 Case
SQLAlchemy와 같은 ORM을 사용하면 사용자가 보낸 변수
를 그대로 컬럼명으로 사용할 수 없다!!!
7번째 Case
PHP로 짤 때 아무 생각없이 사용하는 PHP 함수
와 상수값들을 플라스크에 어떻게 녹일까?
7번째 Case
사용자 PHP 함수는 함수의 성격을 살펴서 템플릿 필터 또
는 템플릿 함수로 등록하고, 상수는 하나의 파일로 모아 템
플릿 글로벌 변수로 만듭니다.
템플릿 글로벌 변수와 템플릿 함수의 등록:
context_processor 데코레이터
템플릿 필터의 등록:
template_filter 데코레이터 또는 app_template_filter 메서
드
8번째 Case
특정 기능을 제공하는 사용자 PHP 함수와 어떤
기준으로 템플릿 필터와 템플릿 함수로 나눌 것
인가?
8번째 Case
함수는 사용자 PHP 함수를 살펴봐서 jinja가 제공하는 것
이면 jina에서 그대로 쓰고 그게 아니라면 함수의 성격을
살펴서 단순히 필터링을 통해 해결할 수 있는 문제인지 살
펴 템플릿 필터 또는 템플릿 함수로 만든다.
8번째 Case (이어서…)
9번째 Case
PHP로 된 외부 라이브러리는 어떻게 해야 하는
가?
예를 들어..
업체가 제공한 SMS 전송 라이브러리 - 파이썬
라이브러리용은 없다! 으아악!!
9번째 Case
사이트에서 반드시 사용하는 외부 라이브러리는 파이썬 버
전이 있는지 확인하고 없으면 PHP 소스코드를 살펴 파이썬
으로 변환한다. 이 작업의 결과로 깨달음을 얻음…
---> 내가 잠시 미쳤구나!!
10번째 Case
정적 파일들을 재구성하는 문제는 어떻게 해결해야 할까?
/
- /images/abc.png
- /images/bcd.png
- /board.php
10번째 Case
Flask에겐 url_for 함수가 있다!!!
/images -> /static/images
ref
{{ url_for(‘static’, filename=’images/abc.png’) }}
끝으로…(사실 레거시 코드 변환은 하지마!! 하지마!!)
1. PHP 레거시 코드 작성을 파이썬으로 변환하는 일은 아
직도 ing … 손댄지 몇년째..
2. 여기에 언급하지 못한 자바스크립트와의 전쟁
3. 난 디자인은 못한단 말이다!!! 근데 최소한의 크로스 브라
우징은 만족해야지. 으쌰으쌰
나는 이렇게 말하고 싶다. 이런 변환 프로젝트는 처음 한 번
이 어렵다. 한 번 변환 프로젝트를 수행하고나면 칼빈 소총
에서 K2 소총을 들고 전쟁에서 뛰어다니는 것과 같다. (ps. 총
은 M16만 다룸)
감사합니다!

More Related Content

Viewers also liked

Django e il Rap Elia Contini
Django e il Rap Elia ContiniDjango e il Rap Elia Contini
Django e il Rap Elia Contini
WEBdeBS
 

Viewers also liked (20)

Bottle - Python Web Microframework
Bottle - Python Web MicroframeworkBottle - Python Web Microframework
Bottle - Python Web Microframework
 
Django - The Web framework for perfectionists with deadlines
Django - The Web framework for perfectionists with deadlinesDjango - The Web framework for perfectionists with deadlines
Django - The Web framework for perfectionists with deadlines
 
Django - The Web framework for perfectionists with deadlines
Django - The Web framework  for perfectionists with deadlinesDjango - The Web framework  for perfectionists with deadlines
Django - The Web framework for perfectionists with deadlines
 
Super Advanced Python –act1
Super Advanced Python –act1Super Advanced Python –act1
Super Advanced Python –act1
 
Html5 History-API
Html5 History-APIHtml5 History-API
Html5 History-API
 
NoSql Day - Chiusura
NoSql Day - ChiusuraNoSql Day - Chiusura
NoSql Day - Chiusura
 
Load testing
Load testingLoad testing
Load testing
 
Authentication & Authorization in ASPdotNet MVC
Authentication & Authorization in ASPdotNet MVCAuthentication & Authorization in ASPdotNet MVC
Authentication & Authorization in ASPdotNet MVC
 
User-centered open source
User-centered open sourceUser-centered open source
User-centered open source
 
2007 - 应用系统脆弱性概论
2007 - 应用系统脆弱性概论 2007 - 应用系统脆弱性概论
2007 - 应用系统脆弱性概论
 
PyClab.__init__(self)
PyClab.__init__(self)PyClab.__init__(self)
PyClab.__init__(self)
 
The Django Book, Chapter 16: django.contrib
The Django Book, Chapter 16: django.contribThe Django Book, Chapter 16: django.contrib
The Django Book, Chapter 16: django.contrib
 
Django e il Rap Elia Contini
Django e il Rap Elia ContiniDjango e il Rap Elia Contini
Django e il Rap Elia Contini
 
Rabbitmq & Postgresql
Rabbitmq & PostgresqlRabbitmq & Postgresql
Rabbitmq & Postgresql
 
EuroDjangoCon 2009 - Ein Rückblick
EuroDjangoCon 2009 - Ein RückblickEuroDjangoCon 2009 - Ein Rückblick
EuroDjangoCon 2009 - Ein Rückblick
 
Digesting jQuery
Digesting jQueryDigesting jQuery
Digesting jQuery
 
Overview of Testing Talks at Pycon
Overview of Testing Talks at PyconOverview of Testing Talks at Pycon
Overview of Testing Talks at Pycon
 
The Django Book Chapter 9 - Django Workshop - Taipei.py
The Django Book Chapter 9 - Django Workshop - Taipei.pyThe Django Book Chapter 9 - Django Workshop - Taipei.py
The Django Book Chapter 9 - Django Workshop - Taipei.py
 
Website optimization
Website optimizationWebsite optimization
Website optimization
 
PythonBrasil[8] closing
PythonBrasil[8] closingPythonBrasil[8] closing
PythonBrasil[8] closing
 

Similar to 2016 py con2016_lightingtalk_php to python

『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기
복연 이
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임
codenavy
 
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
복연 이
 

Similar to 2016 py con2016_lightingtalk_php to python (20)

검색엔진에 적용된 ChatGPT
검색엔진에 적용된 ChatGPT검색엔진에 적용된 ChatGPT
검색엔진에 적용된 ChatGPT
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
파이콘 2017 그만퇴근합시다_이지호
파이콘 2017 그만퇴근합시다_이지호파이콘 2017 그만퇴근합시다_이지호
파이콘 2017 그만퇴근합시다_이지호
 
​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기
 
Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)
 
『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기
 
7 8 1
7 8 17 8 1
7 8 1
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임
 
티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법
 
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
 
인생은 짧아요, 엑셀 대신 파이썬
인생은 짧아요, 엑셀 대신 파이썬인생은 짧아요, 엑셀 대신 파이썬
인생은 짧아요, 엑셀 대신 파이썬
 
알고리즘 시각화 라이브러리 ipytracer 개발기
알고리즘 시각화 라이브러리 ipytracer 개발기알고리즘 시각화 라이브러리 ipytracer 개발기
알고리즘 시각화 라이브러리 ipytracer 개발기
 
타입스크립트 잘 사용하기
타입스크립트 잘 사용하기타입스크립트 잘 사용하기
타입스크립트 잘 사용하기
 
Showroom 2019-react
Showroom 2019-reactShowroom 2019-react
Showroom 2019-react
 
쇼핑검색 React 전환 경험 공유
쇼핑검색 React 전환 경험 공유쇼핑검색 React 전환 경험 공유
쇼핑검색 React 전환 경험 공유
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
 
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
 
Log4j
Log4jLog4j
Log4j
 
문돌이가 가르치는 서버사이드 PHP
문돌이가 가르치는 서버사이드 PHP문돌이가 가르치는 서버사이드 PHP
문돌이가 가르치는 서버사이드 PHP
 
[부스트캠프 Tech Talk] 김동현_리팩터링을 통한 내실 다지기
[부스트캠프 Tech Talk] 김동현_리팩터링을 통한 내실 다지기[부스트캠프 Tech Talk] 김동현_리팩터링을 통한 내실 다지기
[부스트캠프 Tech Talk] 김동현_리팩터링을 통한 내실 다지기
 

More from Jiho Lee

More from Jiho Lee (13)

Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링
Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링
Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링
 
게임으로 배우는 코딩 - 마인크래프를 중심으로
게임으로 배우는 코딩 - 마인크래프를 중심으로게임으로 배우는 코딩 - 마인크래프를 중심으로
게임으로 배우는 코딩 - 마인크래프를 중심으로
 
개발자, 그 이상 그리고 그 이하
개발자, 그 이상 그리고 그 이하개발자, 그 이상 그리고 그 이하
개발자, 그 이상 그리고 그 이하
 
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
 
PostgreSQL로 배우는 SQL 기초
PostgreSQL로 배우는 SQL 기초PostgreSQL로 배우는 SQL 기초
PostgreSQL로 배우는 SQL 기초
 
암호화폐로 시작하는 블록체인 이야기 - 2018년 10월의 하늘. 목포어린이도서관
암호화폐로 시작하는 블록체인 이야기 - 2018년 10월의 하늘. 목포어린이도서관암호화폐로 시작하는 블록체인 이야기 - 2018년 10월의 하늘. 목포어린이도서관
암호화폐로 시작하는 블록체인 이야기 - 2018년 10월의 하늘. 목포어린이도서관
 
사물 인터넷과 인공지능이 만나는 세계
사물 인터넷과 인공지능이 만나는 세계사물 인터넷과 인공지능이 만나는 세계
사물 인터넷과 인공지능이 만나는 세계
 
인간이 아이에게 줄 수 있는 가장 최선의 것
인간이 아이에게 줄 수 있는 가장 최선의 것인간이 아이에게 줄 수 있는 가장 최선의 것
인간이 아이에게 줄 수 있는 가장 최선의 것
 
소물 2017 네트워크로 감성 나누기
소물 2017 네트워크로 감성 나누기소물 2017 네트워크로 감성 나누기
소물 2017 네트워크로 감성 나누기
 
10월의 하늘_2016_진도 공공도서관_이지호
10월의 하늘_2016_진도 공공도서관_이지호10월의 하늘_2016_진도 공공도서관_이지호
10월의 하늘_2016_진도 공공도서관_이지호
 
생각과 프로그램 개발 - 10월, 소프트웨어에 물들다
생각과 프로그램 개발 - 10월, 소프트웨어에 물들다생각과 프로그램 개발 - 10월, 소프트웨어에 물들다
생각과 프로그램 개발 - 10월, 소프트웨어에 물들다
 
책을 쓰기 위한 환경과 책을 잘 쓰기 위한 도구(이렇게 책쓰면 성공...
책을 쓰기 위한 환경과 책을 잘 쓰기 위한 도구(이렇게 책쓰면 성공...책을 쓰기 위한 환경과 책을 잘 쓰기 위한 도구(이렇게 책쓰면 성공...
책을 쓰기 위한 환경과 책을 잘 쓰기 위한 도구(이렇게 책쓰면 성공...
 
Django와 flask
Django와 flaskDjango와 flask
Django와 flask
 

2016 py con2016_lightingtalk_php to python

  • 1. PHP to Python Convert 일지 이렇게 하면 변환을 성공 적으로 할 수 있다!
  • 2. 발표자는 누구인가? 대학원 정보과학과 13기!! - 데이터베이스 석사 전공 중(아아 나의 논문은 언제 완성..?) 과학의 대중화가 아닌 대중의 과학화(클래식 음악이 대중화되는 것은 아니지 않 는가?)
  • 3.
  • 4. 담당 기획자 > 아저씨, 책 좀 팔아봐요. 판매가 지지부진해… (여러분 책은 금새 절판됩니다. 절판되기 전에 구매합시다)
  • 5. PHP to Python 본격 변환 이 야기
  • 6. 뭉글 뭉글… 어느 날 회사를 운영하는 지인이 자꾸 홈페이지 기능에 오류가 있다고 봐달라고 하기에 코드를 뜯어봤다. 그랬더니 …
  • 7.
  • 8.
  • 9. 가만 보니 PHP 4.3까지만 유지되는 PHP RegisterGlobals 옵션을 사용해서 코딩된 것 같 다.
  • 10. 앞으로도 이 지인이 내게 홈페이지 코드 수정 요청을 할 것 같다. 그에 대비해 내 가 코드를 유지보수하기에 뭐 좋은 방법 없을까?
  • 11.
  • 14. 1번째 Case include문이 특정 기능을 담은 한 세트(예를 들면 SMS 발송과 같은)일 때 파이썬으로 어떻게 처리 할까?에 대한 고민을 한다.
  • 15. 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(): ….
  • 16. 2번째 Case 모든 화면에 걸쳐 동일한 정보(예를 들면 상단 메모와 같 은..) 메뉴 이동시마다 이 정보를 어떻게 보여줄 것인 가?
  • 17. 2번째 Case Flask의 context_processor 데코레이터를 사용해 매 HTTP 요청 때마다 DB, 상수 파일로부터 이름을 가져와서 Jinja가 사용할 수 있도록 템플릿 글로벌 변수로 등록
  • 18. 3번째 Case 하나의 변숫값을 가지고 OR 처리 구문을 레거시 그대 로 사용할 것인가? if ( $a == “00” && $b == “1” || $b == “2”) { … }
  • 19. 3번째 케이스 표현식에 발상의 전환 if a == “00” and b in (“1”, “2”): … 같은 변수에 대해 or 비교를 하는 거라면 표현식을 길게 할 이유 가 없다. if ( $a == “00” && $b == “1” || $b == “2”) { … }
  • 20. 4번째 Case Excel을 HTML 태그로 내보내지 않는 효과적인 방법을 찾 아라… 기존엔..
  • 21. 4번째 Case 엑셀.. 엑셀.. 그 이름 엑셀..
  • 22. 5번째 Case 제 멋대로 코드와 HTML이 혼재되어 있는 HTML 파 일의 효과적인 정리 방안을 찾아라!
  • 23. 5번째 Case 템플릿 상속을 통해 태그 순서 등이 꼬이지 않는 템플릿 작성
  • 24. 6번째 Case 폼으로부터 검색할 필드와 값을 전달 받았을 때 어떻게 처리 해야 할까?
  • 25. 6번째 Case SQLAlchemy와 같은 ORM을 사용하면 사용자가 보낸 변수 를 그대로 컬럼명으로 사용할 수 없다!!!
  • 26. 7번째 Case PHP로 짤 때 아무 생각없이 사용하는 PHP 함수 와 상수값들을 플라스크에 어떻게 녹일까?
  • 27. 7번째 Case 사용자 PHP 함수는 함수의 성격을 살펴서 템플릿 필터 또 는 템플릿 함수로 등록하고, 상수는 하나의 파일로 모아 템 플릿 글로벌 변수로 만듭니다. 템플릿 글로벌 변수와 템플릿 함수의 등록: context_processor 데코레이터 템플릿 필터의 등록: template_filter 데코레이터 또는 app_template_filter 메서 드
  • 28. 8번째 Case 특정 기능을 제공하는 사용자 PHP 함수와 어떤 기준으로 템플릿 필터와 템플릿 함수로 나눌 것 인가?
  • 29. 8번째 Case 함수는 사용자 PHP 함수를 살펴봐서 jinja가 제공하는 것 이면 jina에서 그대로 쓰고 그게 아니라면 함수의 성격을 살펴서 단순히 필터링을 통해 해결할 수 있는 문제인지 살 펴 템플릿 필터 또는 템플릿 함수로 만든다.
  • 31. 9번째 Case PHP로 된 외부 라이브러리는 어떻게 해야 하는 가? 예를 들어.. 업체가 제공한 SMS 전송 라이브러리 - 파이썬 라이브러리용은 없다! 으아악!!
  • 32. 9번째 Case 사이트에서 반드시 사용하는 외부 라이브러리는 파이썬 버 전이 있는지 확인하고 없으면 PHP 소스코드를 살펴 파이썬 으로 변환한다. 이 작업의 결과로 깨달음을 얻음… ---> 내가 잠시 미쳤구나!!
  • 33. 10번째 Case 정적 파일들을 재구성하는 문제는 어떻게 해결해야 할까? / - /images/abc.png - /images/bcd.png - /board.php
  • 34. 10번째 Case Flask에겐 url_for 함수가 있다!!! /images -> /static/images ref {{ url_for(‘static’, filename=’images/abc.png’) }}
  • 35. 끝으로…(사실 레거시 코드 변환은 하지마!! 하지마!!) 1. PHP 레거시 코드 작성을 파이썬으로 변환하는 일은 아 직도 ing … 손댄지 몇년째.. 2. 여기에 언급하지 못한 자바스크립트와의 전쟁 3. 난 디자인은 못한단 말이다!!! 근데 최소한의 크로스 브라 우징은 만족해야지. 으쌰으쌰 나는 이렇게 말하고 싶다. 이런 변환 프로젝트는 처음 한 번 이 어렵다. 한 번 변환 프로젝트를 수행하고나면 칼빈 소총 에서 K2 소총을 들고 전쟁에서 뛰어다니는 것과 같다. (ps. 총 은 M16만 다룸)