Best Practice 
for Python Development 
on Google Cloud Platform 
(IMHO) 
by Tae-lim Oh
TABLE OF CONTENTS 
BENEFIT PROBLEM SOLUTION
BENEFIT PROBLEM SOLUTION
BENEFITS OF GOOGLE CLOUD 
무한한 확장성 안정성 강력한 기능 COM경P제O성NENTS 
집중 
구글 클라우드 플랫폼은 구글의 인프라와 기술력을 기반으로 
무한한 확장성과 안정성을 제공합니다. 
강력한 서비스 API는 개발자의 시간을 절약해 줍니다. 
모든 것은 필요한 만큼만 사용하고 과금되므로 
저렴한 비용으로 서비스를 운영할 수 있습니다. 
이 모든 것은 결국 개발자가 비즈니스 로직에 집중할 수 있도록 하기 위함입니다.
BENEFIT PROBLEM SOLUTION
LEARNING CURVE 
새로운 기술을 적용하기 위해선 결국 학습 곡선을 피할 수 없습니다. 
IAAS가 아닌 PAAS인 Google App Engine의 경우 특히 더 그러합니다.
LOCK-IN 
특정 서비스에 종속 되는 것은 두려운 일일 수 있습니다. 
이는 상대가 구글이라도 마찬가지입니다.
BENEFIT PROBLEM SOLUTION
WRAP 
제가 권장하는 방법은 
Google Cloud Platform을 활용하기 위해 사용되는 모든 코드를 
일반적인 코드로 포장하는 것입니다.
GENERALIZE 
그 외의 모든 부분에서는 
일반적인 코드와 구조를 사용합니다.
SKELETON 
그 결과 Google Cloud Platform을 사용할지라도 
어떤 환경에서도 사용할 수 있는 형태의 뼈대를 얻게 됩니다.
MASS PRODUCTION 
이것은 생각보다 간단합니다. 
이 뼈대를 이용한다면 
같은 프레임워크를 공유하는 사용자들 간에 공유가 가능해지며 
그 뒤는 쉽게 웹앱을 양산하는 공장이 될 수 있습니다.
PYTHON 
제가 오늘 공유드릴 뼈대는 
파이썬을 위한 것입니다. 
같은 파이썬 웹 프레임워크인 
DJANGO와 FLASK 모두에게 적용 가능한 내용입니다만 
저는 제가 사용하는 DJANGO를 기준으로 설명 드리겠습니다.
STRUCTURE 
INFRA FILE WRAP
INFRA FILE WRAP
COMPUTE 
Google Cloud Platform 상에서 선택할 수 있는 Computing은 
Google App Engine과 Google Compute Engine이 있습니다. 
저는 주로 Google App Engine을 사용하는데 
샌드박스 환경을 제공해 주기 때문에 
서버 세팅의 번거로움이 현저히 적기 때문입니다.
DATABASE 
Google Cloud Platform 상에서 선택할 수 있는 Database에는 
Cloud SQL와 Cloud Datastore가 있습니다. 
차이는 간단히 말해 전자는 관계형이지만 후자는 아니라는 것입니다. 
각자 용도에 따른 장단점이 있습니다만 
제가 사용하는 웹 프레임워크인 Django의 경우에는 
기본적으로 관계형 DB사용을 전제로 하기 때문에 
저는 Cloud SQL을 연결해 사용합니다. 
참고로 Cloud SQL은 단순히 구글 서버에서 작동하는 MySQL 5.5일 뿐입니다.
STORAGE 
Google Cloud Platform 상에서 선택할 수 있는 Storage는 
Blobstore와 Cloud Storage가 있습니다. 
제가 후자를 선택한 이유는 크게 3가지인데, 
상대적으로 더 저렴하고 UI가 편리하기 때문입니다.
INFRA FILE WRAP
TWO SCOOPS of DJANGO 
저는 일반적인 DJANGO 프로젝트를 위한 TWO SCOOPS of DJANGO 템플릿을 개조해 
GAE를 위한 DJANGO SKELETON을 작성해 사용하고 있습니다. 
https://github.com/gluwa/gae-django-skeleton 
개조 내용은 FLASK 프로젝트에도 동일하게 적용할 수 있으실 것입니다.
BASE 
LOCAL PRODUCTION 
DJANGO SETTINGS 
DJANGO 프로젝트는 전반적인 사항들을 SETTINGS 모듈에서 설정하도록 하고 있습니다. 
SETTINGS는 여러 개의 파일로 나뉘어 
필요에 따라 임의로 상속하여 사용할 수 있습니다. 
주로 개발 환경과 배포 환경을 구분하는데 쓰이는데, 
개발 환경에만 적용 되는 사항들은 LOCAL에 
배포 환경에만 적용 되는 부분들은 PRODUCTION에 정리해 넣습니다. 
그리고 공통 되는 부분은 BASE에 담습니다.
BASE 
LOCAL PRODUCTION 
GAE 
GAE SETTINGS 
하지만 일반적인 SETTINGS는 GAE에선 제대로 작동하지 않습니다. 
GAE는 경우 app.yaml 파일에서 사용할 SETTINGS 모듈의 위치를 지정하도록 되어 있으며 
이는 개발 환경에서도 영향을 미칩니다. 
또한, 배포 환경에 원격으로 접속할 시에는 PRODUCTION의 내용을 써야 할 때도 있습니다. 
해결 방법은 GAE를 위한 파일을 따로 만드는 것입니다. 
GAE파일은 자동으로 개발과 배포 환경을 오가며 
GAE에서만 사용 되는 설정 내용을 담습니다. 
https://github.com/gluwa/gae-django-skeleton/blob/master/project_name/project_name/settings/gae.py
LIBRARIES 
GAE는 샌드박스 환경이기 때문에 
3rd party library들을 배포 환경에 직접 설치할 수가 없습니다. 
이는 SDK에서도 마찬가지이기 때문에 
개발자들은 모든 3rd pary 모듈을 프로젝트 폴더 안에 포함 시켜야 하며 
이는 프로젝트가 커지면 커질 수록 관리를 어렵게 합니다. 
해결 방법은 프로젝트 폴더 밖에 lib 폴더를 따로 두는 것입니다. 
GAE 프로젝트 폴더 안에 lib 폴더 안에 있는 모듈들을 심링크로 포함시키면 
GAE 배포시 SDK는 자동으로 링크 된 파일들을 긁어 와 줍니다.
INFRA FILE WRAP
BASIC 
먼저 GAE에서 기본적으로 제공하는 서비스들을 위한 WRAP이 필요합니다. 
EMAIL, MEMCACHED, STORAGE를 위한 WRAP은 
이미 수 많은 개발자들로부터 오픈소스로 개발되어 왔으며 
아래의 링크는 그중 제가 선별해 놓은 코드들입니다. 
https://github.com/gluwa/gae-django-skeleton/tree/master/project_name/django_gae 
이제 이들을 SETTINGS의 GAE에 연결해 놓기만 하면 됩니다.
CUSTOM 
API PROJECT 
CUSTOM API 
GAE는 다양하고 강력한 기능의 API를 제공하고 있으며 
GAE API 
ALTERNATIVE 
이들을 이용 시 개발자는 더욱 빠르게 강력한 앱을 만들 수 있습니다. 
예를 들어, IMAGES API는 
이미지 파일을 순식간에 리사이징이나 크롭 해주는 강력한 기능을 제공하고 있습니다. 
하지만 이런 API를 직접적으로 적용할 경우 
마이그레이션 시 해당 부분을 모두 변경해 주어야하는 번거로움이 생기며 
이는 LOCK-IN 요소가 됩니다. 
이때 GAE의 API를 CUSTOM API로 간싸 놓아서 쓰면 
GAE에서 마이그레이션 하게 될 경우 
혹은 기능의 customization이 필요할 경우 
동일한 기능을 통일된 API로 개발하여 연결해 쓰면 
PROJECT의 다른 부분을 손대지 않고 손쉽게 변경이 가능합니다.
FORK 
때론 3rd party에서 GAE가 지원하지 않는 기능을 요구하는 경구도 있습니다. 
예를 들어 로컬 파일 시스템을 사용하려 하는 경우 
GAE의 샌드박스 환경에선 권한이 없으므로 작동하지 않습니다. 
이때 CUSTOM API의 경우처럼 부분적인 패치로 해결 할 수 없다면 
과감하게 해당 REPO를 FORK하고 
문제 부분을 수정하는 것을 추천합니다.
SAMPLE 
이 발표에 사용 된 GAE DJANGO SKELETON 샘플 코드는 아래에서 찾으실 수 있습니다. 
https://github.com/gluwa/gae-django-skeleton
QUESTION?

More Related Content

PDF
Gae와cloud sql을이용한 전자결재 개발
PPTX
Google App Engine의 이해
PDF
Google app engine
PPTX
구글앱엔진 스터디
PDF
구글 앱 엔진의 이해(Google App Engine) 1부
PDF
구글 앱 엔진의 활용(Google App Engine) 2부
PDF
왜 레진코믹스는 구글앱엔진을 선택했나
PDF
프로그레시브 웹앱(Pwa)
Gae와cloud sql을이용한 전자결재 개발
Google App Engine의 이해
Google app engine
구글앱엔진 스터디
구글 앱 엔진의 이해(Google App Engine) 1부
구글 앱 엔진의 활용(Google App Engine) 2부
왜 레진코믹스는 구글앱엔진을 선택했나
프로그레시브 웹앱(Pwa)

What's hot (20)

PDF
현실적 PWA
PDF
프로그레시브 웹앱이란? - Progressive Web Apps
PDF
비 개발자를 위한 웹 개발 기초
PDF
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
PDF
목적에 맞게 Angular, React, Vue
PDF
[IGC 2016] 아마존 구승모 - 게임 제작을 위한 Amazon의 편리한 도구들 (게임리프트와 럼버야드)
PDF
2017. 프론트엔드 트랜드
PDF
Google Firebase로 레고블럭 조립하기 - IO Extended 2016
PPTX
[124] 하이브리드 앱 개발기 김한솔
PPTX
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
PDF
Web Framework (웹 프레임워크)
PPTX
PHP Slim Framework with Angular
PDF
구글 인박스 히드라 프로그래밍
PPTX
웹-프론트엔드 프레임워크를 고르기 위한 팁
PDF
오늘 당장 시작하는 HTML5
PPTX
How_to_choose_the_right_framework
PPTX
Single-page Application
PDF
K모바일발표 120113 남들보다뛰어난앱만들기_공유용
PDF
하이브리드앱 성능 극복
PDF
Spring vs. spring boot
현실적 PWA
프로그레시브 웹앱이란? - Progressive Web Apps
비 개발자를 위한 웹 개발 기초
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
목적에 맞게 Angular, React, Vue
[IGC 2016] 아마존 구승모 - 게임 제작을 위한 Amazon의 편리한 도구들 (게임리프트와 럼버야드)
2017. 프론트엔드 트랜드
Google Firebase로 레고블럭 조립하기 - IO Extended 2016
[124] 하이브리드 앱 개발기 김한솔
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
Web Framework (웹 프레임워크)
PHP Slim Framework with Angular
구글 인박스 히드라 프로그래밍
웹-프론트엔드 프레임워크를 고르기 위한 팁
오늘 당장 시작하는 HTML5
How_to_choose_the_right_framework
Single-page Application
K모바일발표 120113 남들보다뛰어난앱만들기_공유용
하이브리드앱 성능 극복
Spring vs. spring boot
Ad

Similar to GAE 위에서 DJANGO 사용하기 (20)

PDF
NRISE 개발스택
PDF
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
PDF
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
PPTX
Open stack 세미나자료_장현정
PDF
Bon voyage Docker_Kubernetes
PDF
장고로 웹서비스 만들기 기초
PDF
Slipp 발표 자료 20151212
PDF
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
PDF
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
PDF
Google Cloud NEXT'17 정리
PPTX
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
PDF
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
PDF
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
PDF
Tdc2013 선배들에게 배우는 server scalability
PDF
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
PDF
커뮤니티와 함께한 예비개발자 성장기- 조성수님
PDF
서버학개론(백엔드 서버 개발자를 위한)
PDF
1st-BE-sideproject-GDGonCampus_KyungHee_Univ.pdf
PDF
월간 리드잇(beta) 2018년 10월호
PPTX
구글앱엔진+스프링+스프링datajpa+메이븐
NRISE 개발스택
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
Open stack 세미나자료_장현정
Bon voyage Docker_Kubernetes
장고로 웹서비스 만들기 기초
Slipp 발표 자료 20151212
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
Google Cloud NEXT'17 정리
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
Tdc2013 선배들에게 배우는 server scalability
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
커뮤니티와 함께한 예비개발자 성장기- 조성수님
서버학개론(백엔드 서버 개발자를 위한)
1st-BE-sideproject-GDGonCampus_KyungHee_Univ.pdf
월간 리드잇(beta) 2018년 10월호
구글앱엔진+스프링+스프링datajpa+메이븐
Ad

GAE 위에서 DJANGO 사용하기

  • 1. Best Practice for Python Development on Google Cloud Platform (IMHO) by Tae-lim Oh
  • 2. TABLE OF CONTENTS BENEFIT PROBLEM SOLUTION
  • 4. BENEFITS OF GOOGLE CLOUD 무한한 확장성 안정성 강력한 기능 COM경P제O성NENTS 집중 구글 클라우드 플랫폼은 구글의 인프라와 기술력을 기반으로 무한한 확장성과 안정성을 제공합니다. 강력한 서비스 API는 개발자의 시간을 절약해 줍니다. 모든 것은 필요한 만큼만 사용하고 과금되므로 저렴한 비용으로 서비스를 운영할 수 있습니다. 이 모든 것은 결국 개발자가 비즈니스 로직에 집중할 수 있도록 하기 위함입니다.
  • 6. LEARNING CURVE 새로운 기술을 적용하기 위해선 결국 학습 곡선을 피할 수 없습니다. IAAS가 아닌 PAAS인 Google App Engine의 경우 특히 더 그러합니다.
  • 7. LOCK-IN 특정 서비스에 종속 되는 것은 두려운 일일 수 있습니다. 이는 상대가 구글이라도 마찬가지입니다.
  • 9. WRAP 제가 권장하는 방법은 Google Cloud Platform을 활용하기 위해 사용되는 모든 코드를 일반적인 코드로 포장하는 것입니다.
  • 10. GENERALIZE 그 외의 모든 부분에서는 일반적인 코드와 구조를 사용합니다.
  • 11. SKELETON 그 결과 Google Cloud Platform을 사용할지라도 어떤 환경에서도 사용할 수 있는 형태의 뼈대를 얻게 됩니다.
  • 12. MASS PRODUCTION 이것은 생각보다 간단합니다. 이 뼈대를 이용한다면 같은 프레임워크를 공유하는 사용자들 간에 공유가 가능해지며 그 뒤는 쉽게 웹앱을 양산하는 공장이 될 수 있습니다.
  • 13. PYTHON 제가 오늘 공유드릴 뼈대는 파이썬을 위한 것입니다. 같은 파이썬 웹 프레임워크인 DJANGO와 FLASK 모두에게 적용 가능한 내용입니다만 저는 제가 사용하는 DJANGO를 기준으로 설명 드리겠습니다.
  • 16. COMPUTE Google Cloud Platform 상에서 선택할 수 있는 Computing은 Google App Engine과 Google Compute Engine이 있습니다. 저는 주로 Google App Engine을 사용하는데 샌드박스 환경을 제공해 주기 때문에 서버 세팅의 번거로움이 현저히 적기 때문입니다.
  • 17. DATABASE Google Cloud Platform 상에서 선택할 수 있는 Database에는 Cloud SQL와 Cloud Datastore가 있습니다. 차이는 간단히 말해 전자는 관계형이지만 후자는 아니라는 것입니다. 각자 용도에 따른 장단점이 있습니다만 제가 사용하는 웹 프레임워크인 Django의 경우에는 기본적으로 관계형 DB사용을 전제로 하기 때문에 저는 Cloud SQL을 연결해 사용합니다. 참고로 Cloud SQL은 단순히 구글 서버에서 작동하는 MySQL 5.5일 뿐입니다.
  • 18. STORAGE Google Cloud Platform 상에서 선택할 수 있는 Storage는 Blobstore와 Cloud Storage가 있습니다. 제가 후자를 선택한 이유는 크게 3가지인데, 상대적으로 더 저렴하고 UI가 편리하기 때문입니다.
  • 20. TWO SCOOPS of DJANGO 저는 일반적인 DJANGO 프로젝트를 위한 TWO SCOOPS of DJANGO 템플릿을 개조해 GAE를 위한 DJANGO SKELETON을 작성해 사용하고 있습니다. https://github.com/gluwa/gae-django-skeleton 개조 내용은 FLASK 프로젝트에도 동일하게 적용할 수 있으실 것입니다.
  • 21. BASE LOCAL PRODUCTION DJANGO SETTINGS DJANGO 프로젝트는 전반적인 사항들을 SETTINGS 모듈에서 설정하도록 하고 있습니다. SETTINGS는 여러 개의 파일로 나뉘어 필요에 따라 임의로 상속하여 사용할 수 있습니다. 주로 개발 환경과 배포 환경을 구분하는데 쓰이는데, 개발 환경에만 적용 되는 사항들은 LOCAL에 배포 환경에만 적용 되는 부분들은 PRODUCTION에 정리해 넣습니다. 그리고 공통 되는 부분은 BASE에 담습니다.
  • 22. BASE LOCAL PRODUCTION GAE GAE SETTINGS 하지만 일반적인 SETTINGS는 GAE에선 제대로 작동하지 않습니다. GAE는 경우 app.yaml 파일에서 사용할 SETTINGS 모듈의 위치를 지정하도록 되어 있으며 이는 개발 환경에서도 영향을 미칩니다. 또한, 배포 환경에 원격으로 접속할 시에는 PRODUCTION의 내용을 써야 할 때도 있습니다. 해결 방법은 GAE를 위한 파일을 따로 만드는 것입니다. GAE파일은 자동으로 개발과 배포 환경을 오가며 GAE에서만 사용 되는 설정 내용을 담습니다. https://github.com/gluwa/gae-django-skeleton/blob/master/project_name/project_name/settings/gae.py
  • 23. LIBRARIES GAE는 샌드박스 환경이기 때문에 3rd party library들을 배포 환경에 직접 설치할 수가 없습니다. 이는 SDK에서도 마찬가지이기 때문에 개발자들은 모든 3rd pary 모듈을 프로젝트 폴더 안에 포함 시켜야 하며 이는 프로젝트가 커지면 커질 수록 관리를 어렵게 합니다. 해결 방법은 프로젝트 폴더 밖에 lib 폴더를 따로 두는 것입니다. GAE 프로젝트 폴더 안에 lib 폴더 안에 있는 모듈들을 심링크로 포함시키면 GAE 배포시 SDK는 자동으로 링크 된 파일들을 긁어 와 줍니다.
  • 25. BASIC 먼저 GAE에서 기본적으로 제공하는 서비스들을 위한 WRAP이 필요합니다. EMAIL, MEMCACHED, STORAGE를 위한 WRAP은 이미 수 많은 개발자들로부터 오픈소스로 개발되어 왔으며 아래의 링크는 그중 제가 선별해 놓은 코드들입니다. https://github.com/gluwa/gae-django-skeleton/tree/master/project_name/django_gae 이제 이들을 SETTINGS의 GAE에 연결해 놓기만 하면 됩니다.
  • 26. CUSTOM API PROJECT CUSTOM API GAE는 다양하고 강력한 기능의 API를 제공하고 있으며 GAE API ALTERNATIVE 이들을 이용 시 개발자는 더욱 빠르게 강력한 앱을 만들 수 있습니다. 예를 들어, IMAGES API는 이미지 파일을 순식간에 리사이징이나 크롭 해주는 강력한 기능을 제공하고 있습니다. 하지만 이런 API를 직접적으로 적용할 경우 마이그레이션 시 해당 부분을 모두 변경해 주어야하는 번거로움이 생기며 이는 LOCK-IN 요소가 됩니다. 이때 GAE의 API를 CUSTOM API로 간싸 놓아서 쓰면 GAE에서 마이그레이션 하게 될 경우 혹은 기능의 customization이 필요할 경우 동일한 기능을 통일된 API로 개발하여 연결해 쓰면 PROJECT의 다른 부분을 손대지 않고 손쉽게 변경이 가능합니다.
  • 27. FORK 때론 3rd party에서 GAE가 지원하지 않는 기능을 요구하는 경구도 있습니다. 예를 들어 로컬 파일 시스템을 사용하려 하는 경우 GAE의 샌드박스 환경에선 권한이 없으므로 작동하지 않습니다. 이때 CUSTOM API의 경우처럼 부분적인 패치로 해결 할 수 없다면 과감하게 해당 REPO를 FORK하고 문제 부분을 수정하는 것을 추천합니다.
  • 28. SAMPLE 이 발표에 사용 된 GAE DJANGO SKELETON 샘플 코드는 아래에서 찾으실 수 있습니다. https://github.com/gluwa/gae-django-skeleton