Gmail에 추가 기능을 달아보자 (Apps Script)

·2024년 4월 7일
0

회사이야기

목록 보기
112/118

0. 운영팀의 리소스를 아껴보자! 로 시작된 업무

일감을 찾던 중, 운영 리소스 감소를 목표로 하는 업무가 있길래 냉큼 줍어왔다.

해당 일감의 주된 내용은 반복 작업을 최대한 IT 기술을 사용하여 최소화시키는 것이였다.

화주, 선사, 파트너사를 엮어주는 우리의 프로덕트는 서류를 상당히 많이 쓰는 편인데

이것을 운영팀에서는 매번 다운로드받고 어드민에 올려주는 반복 작업의 비중이 매우 크다.

그래서 이러한 작업을 최대한 간소화를 하는 것이 목표였고,

첫 번째 스탭으로는 BL이라는 문서를 자동으로 어드민 툴에 업로드하는 것이였다.

여기서 BL이란 ? (Boys Love 아님. 검색하면 꼭 나오더라)

시작부터 문제에 봉착을 하게 되는데

  1. 메일의 제목에서 BL이 있음을 유추 할 수 없다
  2. 메일의 본문에서 BL이 있음을 유추 할 수 없다
  3. 첨부파일 목록에서 BL이 있음을 유추 할 수 없다
  4. BL의 양식은 통일되어있지 않다.

솔직히 여기서 좀 어쩌라고의 느낌이 강했다.

1. 새로운 도구를 도입하게 된 계기

그래서 어떻게 해야하는걸까 고민을 하다가, 결국 AI + OCR의 힘을 빌려야한다는 결론을 내렸다.

라고 종하님께 보고(?)를 올렸더니 문서가 절대로 잘못 올라가면 안된다며

티켓에 대한 내용을 다시 읽어보라고 하셨는데, 거기에 있던 문장이 있었다.

운영에 드는 시간을 최대한 단축합니다.

즉 완벽한 자동화가 아닌, 반자동화만 되더라도 큰 영향을 줄 수 있다며 조언을 해주셨다.

운영팀이 한명이 아닌 여러명이기에, 한 명당 1분씩만 줄여도 누적되면 수치가 매우 크다는 것

그러면서 구글 워크스페이스에 뭔가 도입할 수 있다는 이야기를 주셔서 그때부터 찾아보길 시작했다.

그리고 서치를 해보니 GmailAdd-ON을 장착할 수 있다는 것을 확인했다.

2. Add-On(Apps Script) 튜토리얼 ~ 제작

막상 시작을 하려고 했더니 자료가 매우매우 모자랐다.

국내 자료는 사실상 전멸급이었고 구글에서 만들어둔 튜토리얼을 해본 후 감을 잡았다.

튜토리얼 페이지(유료다 1달러)

사용할 수 있는 언어는 바닐라 javascript(타입 선언을 못해서 매우 불편했다..)

내부에서 만들어놓은 다양한 빌트인 서비스를 이용하여 Add-On을 만들 수 있었다.

문제는 전역변수가 없고, 이벤트간의 함수에 값을 제대로 할당할 수 없다는 것?

아무튼 뚝딱뚝딱 거리면서 제작을 완료했다.

참고를 정말 많이 했던 공식문서

지메일 앱

메세지 앱(상세)

카드서비스

위를 보면 카드서비스라는 것이 있는데, 화면 한개 한개가 “카드” 라는 것으로 구성되어있다.

그래서 이러한 카드를 여러개 운용하여 화면을 구현 하는 것이 주요 포인트다.

그래서 중요한 것이 시나리오였는데, 이 부분은 글로 먼저 써놓고 작업을 진행하게 됐다.

  1. 어드민 계정으로 로그인을 한다. (카드1)
  2. 의뢰번호를 메일의 제목에서 정규식으로 따온다, 만약 따올 수 없다면 입력을 받는다. (카드2)
  3. 해당 스레드의 첨부파일을 모두 읽어낸다 (카드3)
  4. 2번에서 입력받은 의뢰번호를 기준으로 의뢰를 조회하여 첨부파일을 조회한다.
  5. 3번에서 읽은 첨부파일을 운영팀이 체크한다.
  6. 해당 첨부파일이 어떤 문서구분인지 체크한다.
  7. 파일 업로드 버튼을 누른다.
  8. 성공했다면 성공했다는 카드로 변환해준다(카드4)

이런식으로 적어놓고 작업을 진행했더니 스무스하게 진행이 됐다 :)

3. 배포를 합시댜

맨 처음에 클로즈 베타 테스트를 위해서 손배포를 진행했다.

한분한분 찾아가서 apps script에 진입해서 코드 ctrl + c + v를 반복한 후

바로 고쳐야되는게 생겨서 5명을 고쳐야하는 일이 발생했는데…
잠시만 제가 수정좀 할게요...ㅠㅠ~

이렇게 할빠에 걍 클라우드 배포하고 말지 라는 생각이 들어서 gcp에 연동을 시켰다.

(GCP에 연동되어있는 모습)

  1. 그 후 OAuth 화면을 생성한다.
    • 내부 서비스를 위해 만드는 것이기에 사용자 유형은 내부로 제한해놓았다.

  1. OAuth 화면을 생성했다면 라이브러리에서 필요한 API를 사용 설정을 한다.
    • 필요한 것은 아래 세개 정도
      Google Workspace Marketplace SDK
      Gmail API
      Apps Script API

  2. Google Workspace Marketplace SDK에서 앱 구성을 진행한다.
    • 외부로 공개되면 안되기에 여기도 내부 설정이 중요하다.

  1. 스토어 등록정보에 데이터를 입력한다.
    - 내부앱으로 사용하는 것이기에 적당히 적어도 무관하다.
        
  2. 최종적으로 게시 버튼을 클릭하면 배포가 완료된다!

4. 다 된 줄 알았는데…

로컬에선 잘됐는데 이상하다?

구글 앱 스크립트에서 호출을 하는 것이다보니, 외부 API를 호출 할 때 문제가 발생했다.

그래서 하라는 것들을 이것저것 했는데..

  • 해봤던 다양한 것들
    • 매니페스트에 urlFetchWhitelist 추가하기
      (이건 구버전이라고 하는데, 배포 할 때 이걸 안적으면 배포가 안된다?)
    • openLinkUrlPrefixes 추가하기

잘 안 됐다.

그러다가 와일드카드를 잘못 썼나? 라는 생각이 들어서 다른걸 써봤는데.. 됐다.

https://어쩌구.s3.ap-northeast-2.amazonaws.com/* 를
https://*.s3.ap-northeast-2.amazonaws.com/ 로 고쳤더니 해결됐다.

(이거 고치는데 6시간걸림 자다가 일어나서 고쳤다)

그래서 배포가 진행이 됐고, 현재 일부 운영팀 분들이 사용 중이다.

5. 앞으로?

현재는 키바나의 유저 에이전트를 통하여 호출 횟수를 체크하고 있다.
사용 검색어 | userAgent: Google-Apps-Script and env:"prod"

회사에서 참 다양한 기술로 문제를 해결하고 있는데
이러한 방식으로도 운영팀에 도움을 줄 수 있구나 라는 생각이 들었고
든 시간에 비하여 업무 효율을 많이 올려주게 되어 즐겁게 작업을 했다.

아래는 현재 사용하고 있는 Gmail Add-On의 모습이다.

profile
물류 서비스 Backend Software Developer

0개의 댓글