웹 서비스

구글 스프레드시트를 이용한 구글앱엔진 웹페이지 데이터 갱신

&+&& 2017. 6. 7. 23:25

   별 도움 안 되는 글이 될 것 같긴한데, 구글 api 설치 및 연동과 관련된 작업 흐름만 간소하게 정리해서 올려본다.

  현재 시가총액순위 페이지가 구현된 환경은 [구글앱엔진 + django(파이썬2.7) + MySQL]인데, 최초 데이터는 django에서 모델을 생성해 주고 수동으로 입력을 해준 상태이다. 

  이번에 작업한 내용은 자동화 적용 1단계(2, 3단계가 있을지는 잘 모르겠다.)로 구글 스프레드시트에 정리된 데이터를 가져와서 MySQL DB의 데이터를 갱신하고 이를 통해 웹 페이지의 시가총액 순위 정보가 자동 갱신되도록 만드는 작업이다.


1. 구글 스프레드시트(Google Spreadsheet) 관련 api 설치  

 > pip install --upgrade google-api-python-client

  명령어를 실행하면 위와 같이 google-api-python-client와 관련 의존 패키지들이 설치된다.(사용자 인증과 관련된 oauth2client 등이 포함)


2. Google API 활성화  

 - 구글 API 설정 마법사 접속 : https://console.developers.google.com/start/api?id=sheets.googleapis.com

 - 애플리케이션 선택 또는 프로젝트 만들기 -> 계속

 - 사용자 인증 정보로 이동

 - OAuth 동의 화면 : 이메일 주소 / 제품 이름 등 입력 후 저장

 - 사용자 인증 정보 -> 사용자 인증 정보 만들기 -> OAuth 클라이언트 ID 선택

 - 애플리케이션 유형 : 기타 -> 이름 입력 후 생성 




 위와 같은 작업이 완료된 후에 클라이언트 ID와 클라이언트 보안 비밀번호가 화면에 표시된다. 혹시 나중에 쓰일 곳이 있을지 모르니 잘 보관해 놓자.

 


  그 다음엔 사용자 인증 정보 페이지에 좀전에 작업한 내용을 반영한 OAuth 2.0 클라이언트 ID가 생성되어 있을텐데 가장 우측의 다운로드 버튼을 눌루서 JSON 파일을 다운로드 받는다. 일단 Google 예제에서는 JSON파일명을 client_secret.json이라 명명한다.


3. 예제 파일을 이용한 테스트

 - 예제 코드 :  https://developers.google.com/sheets/api/quickstart/python

 - 위 예제 코드 페이지의 Step3에 보면 quickstart.py의 예제 코드가 있다.

 - 예제코드 내용을 반영한 python(.py) 파일과 앞서 다운로드한 JSON파일을 같은 폴더에 놓고 실행(python quickstart.py)해 보면 브라우저 상에서 동의 절차가 진행된다.

 - 동의 절차가 이상없이 완료된 경우 샘플 Spreadsheet의 내용이 출력된다.

  위의 1, 2, 3단계 절차가 이상없이 진행되었다면 위와 같은 quickstart.py파일의 출력 결과를 볼 수 있다.


4. 데이터 갱신 작업 반영

 - 위의 절차가 이상 없이 진행되었다면 그 다음은 필요한 부분만 예제코드 파일을 변경하여 적용한다.

 - urls.py를 변경하여 quickstart.py를 콜할 수 있도록 한다.(귀찮아서 파일명도 변경 안 하고 그냥 했음)

 - 예제 코드의 spreadsheetId를 실제 데이터를 읽어올 spreadsheetId로 변경

 - 예제 코드의 rangeName을 적절한 범위로 변경

 - 데이터를 정상적으로 읽어오는 게 확인되면 

  [데이터모델명].objects.update_or_create() /  

  [데이터모델명].objects.filter().update() 함수를 이용하여 DB 업데이트 

 - 적절한 값으로 갱신되었는지 웹 페이지 출력 결과 확인

 웹 페이지 최종 확인 결과 위와 같이 데이터 갱신이 잘 이루어졌다.


  다음은 작업하면서 대부분의 시간을 허비한 오류 부분이다. 근데 알고 나니 그냥 내가 바보라는 생각만 드는 듯.

 - 위의 작업 후 gcloud app deploy 시 정상적으로 웹 페이지가 서비스 되지 않았다.

 - 구글 클라우드 플랫폼 콘솔 상에서 계속적으로 오류를 보여주는데 예제코드의 import 부분에 대해서 계속 오류 발생(분명 로컬 환경에서는 이상이 없었다.)

 - 찾아보니 app deploy를 통해서 업로드하는 경로의 lib폴더에 import할 파일들이 존재해야 함. 이걸 해결하려고 엎치락뒤치락.....

 - 결론은 가상환경의 lib 파일들의 위치에서 필요한 폴더들을 복사해서 deploy할 경로의 lib폴더에 복사 후 deploy 실행 ==> 성공

 - 가상서버 환경(EC2 또는 Compute Engine)에서 작업을 한다면 발생하지 않을 문제인데, app engine에서는 이런 부분들이 익숙하지 않아 문제가 생긴다. 암튼 해결되어서 다행.!!


작업완료된 웹페이지 : 세계 시가 총액 순위