망개떡같은 생각

나의 사랑, 나의 툴 - (2) Google Apps Script 본문

study/marketing

나의 사랑, 나의 툴 - (2) Google Apps Script

고독한망개떡 2019. 9. 18. 20:36

줄이면 gas가 되는 것인가..

초보입니다.

구글 앱스 스크립트를 처음 접하게 된 계기는 데이터를 처음 다룰 때인데, 그 때 당시 matlab과 R만을 다룰 수 있었고,
MySQL에 아주 조금, 자바스크립트에 대한 지식은 거의 전무했었습니다.

이런 상황에서 데이터를 받아, 영업팀에게 시각적으로 보여주는 업무를 하고 있었는데, 막상 데이터를 다룬다고 말은 해놓고 다룰 데이터를 스스로 획득하지 못했던 때여서 (어디에 어떻게 쌓이는지 알 수 없었습니다.) 매번 서버개발자분께 데이터 요청과 갱신을 부탁드렸었습니다.

그러다보니 서버개발자분이 휴가를 가신 날에는 손가락만 빨고 있는 상황이 연출되었습니다. ( 데이터 달라고 눈치를 봐야하는 상황까지.. )
이윽고 그 분께서 안되겠다고 생각이 드셨는지, 구글 스프레드시트로 데이터를 주시기 시작했었습니다.
참조 : Google apps script - JDBC

그 당시 사용하던 툴은 R이였고, 해당 데이터를 시각화하기 위해서는 구글 스프레드시트와 R간의 연결이 필요했었죠.
(그 당시 HTTP 통신이 무엇인지, auth가 왜 필요한지 전혀 몰랐습니다.)

R 에서 구글 라이브러리를 설치하고, R에서 가공 후에 csv로 저장하고, 다시 구글 스프레드시트로 업로드하고.. 확인하고..
이 루틴이 굉장히 귀찮았습니다.

또한 그 분이 만들어 놓은 스프레드시트 파일은 가장 메인인 거래데이터 table 한 개만 주셨어서, join이나 이런 걸 하려면, 다시 R 에서 merge 라는 함수를 사용했어야 했었습니다.

필요에 의해..

그래서 그 분이 만들어 놓으신 google apps script 를 뜯어보기 시작했습니다. 앱스 스크립트 가이드문서

위 코드는 MySQL에서 데이터를 가져올 때, 사용하는 예시입니다.
이 코드에서 쿼리만 바꿔가며 반년 정도 사용했던 것 같습니다.
(나중에 커넥션 문제로 수정을 했습니다.)

받아온 데이터 혹은 기록되어 있는 데이터로 무언갈 할 때

위의 코드로 받아온 데이터를 다루거나, 구글 스프레드시트에 입력된 데이터로 무언가 작업을 하려한다면,

까지가 기본 모양입니다.

위에 첨부한 가이드 문서를 볼 때, 참고하면 좋은 3가지는

  1. 각각의 큰 기능(SpreadsheetApp, Gmail 등등 구글에서 제공하는 다양한 서비스들)은 그 안에 여러 개의 class(사람)를 가지고 있습니다.
  2. class 마다 할 수 있는 method(일) 이 정해져 있는데, 이 사람(class)이 무슨 일(method)를 할 수 있는지 생각하면서 만들어보시면 이해가 빠를 것 같습니다.
  3. class 뒤에 . 을 찍으면 뒤에 자동완성으로 무슨 method 를 사용할 수 있는지 알려줘서 잘 모를 때 쓰기에 좋습니다.

그래서 위의 기본 모양을 예로 설명을 하자면,

  1. SpreadsheetApp 이라는 사람은, getActivateSpreadsheet( ) 라는 일을 할 수 있습니다.
    • SpreadsheetApp 에서 활성화된 스프레드시트를 알려줘.
    • 활성화된 스프레드시트를 ss에 저장합니다.
  2. ss 라는 사람(=활성화된 스프레드시트)은 getSheetByName( 시트 이름 ) 라는 일을 할 수 있습니다.
    • 시트 이름 을 가진 시트를 알려줘
    • 알려준 시트를 sheet에 저장합니다.
  3. sheet 라는 사람은 getRange( 범위 ) 라는 일을 할 수 있습니다.
    • 범위 에 해당하는 시트의 범위를 알려줘
    • 알려준 범위를 range 에 저장합니다.
  4. range 라는 사람은 getValues( ) 라는 일을 할 수 있습니다.
    • 해당 범위에 쓰인 데이터를 가져와줘
    • 가져온 데이터를 data 에 저장합니다.

이런 식입니다.
이제 data 라는 녀석으로 무엇인가를 하면 되겠죠? (

사실 무엇인가가 이 글의 본체였던 것

) 보통은 가이드문서나 스택오버플로우의 예제 코드를 복사해와서 입맛에 맞게 바꾸면 작동은 합니다..
(스택오버플로우에서 가져올 때, 질문에 있는 코드를 복사하지 마세요. 그건 작동이 안되서 올라오는 거니까요.. ;ㅂ;)

사용하면서 느꼈던 장점

여기까지 하시면 다른 것과 무엇이 다르냐 라고 하실 수도 있는데,
구글 앱스 스크립트에서는 cron 이나 윈도우 스케쥴러처럼 주기적으로 작업을 실행시키는 트리거 기능(좌상단에 시계모양)이 있습니다.
트리거는 크게 3가지의 기준이 있습니다.

  1. 스프레드시트 기준 : 열릴 때, 수정 될 때, 변경 될 때, 양식이 제출 되었을 때
  2. 시간 기준 : 저희가 생각하는 그 시간 기준이 맞습니다.
  3. 캘린더 기준 : (캘린더 소유주의) 캘린더가 업데이트 될 때

해당 트리거는 데이터 갱신 시 - 시간기준, 데이터 전처리 시 - 수정될 때 를 사용하면 좋습니다.

그래서 저는 데이터를 갱신하는 코드를 작성하고, 하루에 한 두번씩 실행하여 별다른 요청 없이도 데이터를 받을 수 있고 전처리까지 할 수 있었습니다. (지금도 굉장히 유용하게 잘 쓰고 있습니다.)

위의 두 가지를 조합해서 잘 사용하면, 데이터 갱신과 전처리 하러 다시 들어 올 필요가 없어지게 됩니다. (4차 산업혁명을 몸소 느끼게 됩니다.)

실제로 사용하는 모습을 보여드리고 싶었는데, 너무 기본적인 것만 설명 한 것 같아 다음 글에서 마저 이어 써보겠습니다.

Comments