SlideShare a Scribd company logo
1 of 29
Download to read offline
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

What's hot

프로그레시브 웹앱이란? - Progressive Web Apps
프로그레시브 웹앱이란? - Progressive Web Apps프로그레시브 웹앱이란? - Progressive Web Apps
프로그레시브 웹앱이란? - Progressive Web AppsGihyo Joshua Jang
 
비 개발자를 위한 웹 개발 기초
비 개발자를 위한 웹 개발 기초비 개발자를 위한 웹 개발 기초
비 개발자를 위한 웹 개발 기초Gihyo Joshua Jang
 
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신Sungwoo Choo
 
목적에 맞게 Angular, React, Vue
목적에 맞게 Angular, React, Vue목적에 맞게 Angular, React, Vue
목적에 맞게 Angular, React, VueGunhee Lee
 
[IGC 2016] 아마존 구승모 - 게임 제작을 위한 Amazon의 편리한 도구들 (게임리프트와 럼버야드)
[IGC 2016] 아마존 구승모 - 게임 제작을 위한 Amazon의 편리한 도구들 (게임리프트와 럼버야드)[IGC 2016] 아마존 구승모 - 게임 제작을 위한 Amazon의 편리한 도구들 (게임리프트와 럼버야드)
[IGC 2016] 아마존 구승모 - 게임 제작을 위한 Amazon의 편리한 도구들 (게임리프트와 럼버야드)강 민우
 
2017. 프론트엔드 트랜드
2017. 프론트엔드 트랜드2017. 프론트엔드 트랜드
2017. 프론트엔드 트랜드Tai Hoon KIM
 
Google Firebase로 레고블럭 조립하기 - IO Extended 2016
Google Firebase로 레고블럭 조립하기 - IO Extended 2016Google Firebase로 레고블럭 조립하기 - IO Extended 2016
Google Firebase로 레고블럭 조립하기 - IO Extended 2016Chiung Choi
 
[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔NAVER D2
 
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민NAVER D2
 
Web Framework (웹 프레임워크)
Web Framework (웹 프레임워크)Web Framework (웹 프레임워크)
Web Framework (웹 프레임워크)Junsu Kim
 
PHP Slim Framework with Angular
PHP Slim Framework with AngularPHP Slim Framework with Angular
PHP Slim Framework with AngularJT Jintae Jung
 
구글 인박스 히드라 프로그래밍
구글 인박스 히드라 프로그래밍구글 인박스 히드라 프로그래밍
구글 인박스 히드라 프로그래밍Lee Ji Eun
 
웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁WebFrameworks
 
오늘 당장 시작하는 HTML5
오늘 당장 시작하는 HTML5오늘 당장 시작하는 HTML5
오늘 당장 시작하는 HTML5Taegon Kim
 
How_to_choose_the_right_framework
How_to_choose_the_right_frameworkHow_to_choose_the_right_framework
How_to_choose_the_right_frameworkJT Jintae Jung
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page ApplicationSangmin Yoon
 
K모바일발표 120113 남들보다뛰어난앱만들기_공유용
K모바일발표 120113 남들보다뛰어난앱만들기_공유용K모바일발표 120113 남들보다뛰어난앱만들기_공유용
K모바일발표 120113 남들보다뛰어난앱만들기_공유용jinwook shin
 
하이브리드앱 성능 극복
하이브리드앱 성능 극복하이브리드앱 성능 극복
하이브리드앱 성능 극복sung hwan Park
 
Spring vs. spring boot
Spring vs. spring bootSpring vs. spring boot
Spring vs. spring bootChloeChoi23
 

What's hot (20)

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

Similar to GAE 위에서 DJANGO 사용하기

『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기복연 이
 
구글앱스(Google apps) 소개서
구글앱스(Google apps) 소개서 구글앱스(Google apps) 소개서
구글앱스(Google apps) 소개서 Spike Nam
 
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container DayAmazon Web Services Korea
 
LucideWorks Banana 소개
LucideWorks Banana 소개 LucideWorks Banana 소개
LucideWorks Banana 소개 SuHyun Jeon
 
기업을 위한 Google drive 100% 활용 백서
기업을 위한 Google drive 100% 활용 백서기업을 위한 Google drive 100% 활용 백서
기업을 위한 Google drive 100% 활용 백서CharlyChoi
 
기업을 위한 Google Drive For Work 100% 활용 백서
기업을 위한 Google Drive For Work 100% 활용 백서기업을 위한 Google Drive For Work 100% 활용 백서
기업을 위한 Google Drive For Work 100% 활용 백서Charly Choi
 
[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개HYUN-JOO LEE
 
기업을 위한 Google drive for work 100% 활용 백서
기업을 위한 Google drive for work 100% 활용 백서기업을 위한 Google drive for work 100% 활용 백서
기업을 위한 Google drive for work 100% 활용 백서CharlyChoi
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기JinKwon Lee
 
DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기SeungYong Baek
 
[오픈소스컨설팅]Gradle Basic - How to use Gradle in Java Project
[오픈소스컨설팅]Gradle Basic - How to use Gradle in Java Project[오픈소스컨설팅]Gradle Basic - How to use Gradle in Java Project
[오픈소스컨설팅]Gradle Basic - How to use Gradle in Java ProjectJi-Woong Choi
 
Spring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCodeSpring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCodedpTablo
 
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?주식회사 내일비
 
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?Sang-ho Choi
 
Spring boot와 docker를 이용한 msa
Spring boot와 docker를 이용한 msaSpring boot와 docker를 이용한 msa
Spring boot와 docker를 이용한 msa흥래 김
 
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기Nanha Park
 
Gradle 한번 살펴보기
Gradle 한번 살펴보기Gradle 한번 살펴보기
Gradle 한번 살펴보기Junseo Youn
 
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)TOAST_NHNent
 

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

『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
 
구글앱스(Google apps) 소개서
구글앱스(Google apps) 소개서 구글앱스(Google apps) 소개서
구글앱스(Google apps) 소개서
 
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
 
LucideWorks Banana 소개
LucideWorks Banana 소개 LucideWorks Banana 소개
LucideWorks Banana 소개
 
기업을 위한 Google drive 100% 활용 백서
기업을 위한 Google drive 100% 활용 백서기업을 위한 Google drive 100% 활용 백서
기업을 위한 Google drive 100% 활용 백서
 
기업을 위한 Google Drive For Work 100% 활용 백서
기업을 위한 Google Drive For Work 100% 활용 백서기업을 위한 Google Drive For Work 100% 활용 백서
기업을 위한 Google Drive For Work 100% 활용 백서
 
Angular Library
Angular LibraryAngular Library
Angular Library
 
[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개
 
기업을 위한 Google drive for work 100% 활용 백서
기업을 위한 Google drive for work 100% 활용 백서기업을 위한 Google drive for work 100% 활용 백서
기업을 위한 Google drive for work 100% 활용 백서
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기
 
DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기
 
Gradle 소개
Gradle 소개Gradle 소개
Gradle 소개
 
[오픈소스컨설팅]Gradle Basic - How to use Gradle in Java Project
[오픈소스컨설팅]Gradle Basic - How to use Gradle in Java Project[오픈소스컨설팅]Gradle Basic - How to use Gradle in Java Project
[오픈소스컨설팅]Gradle Basic - How to use Gradle in Java Project
 
Spring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCodeSpring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCode
 
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
 
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
 
Spring boot와 docker를 이용한 msa
Spring boot와 docker를 이용한 msaSpring boot와 docker를 이용한 msa
Spring boot와 docker를 이용한 msa
 
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
 
Gradle 한번 살펴보기
Gradle 한번 살펴보기Gradle 한번 살펴보기
Gradle 한번 살펴보기
 
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
 

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