서비스
home

구글 클라우드 런 기반 node.js 마이크로서비스로 구글 챗 알림 속도 30% 개선 사례

케이스 요약

법무법인 법승이 기존 앱스 스크립트(Apps Script) 기반으로 운영하던 LG U+ 인터넷 전화 수신 알림 시스템의 지연 시간(Latency) 및 안정성 문제를 해결한 프로젝트입니다. 평균 2초, 최대 16초까지 발생하던 구글 챗 DM 발송 시간을 구글 클라우드 런 (Google Cloud Run) 기반의 Node.js 마이크로 서비스로 전환하여 평균 1.3초, 최대 2.2초 이하로 안정화했습니다. 특히, 데이터 조회 병목 현상을 해결하기 위해 구글 시트 기반 DB를 GCS 기반 JSON 파티션 DB로 전환하고, Secret Manager 대신 Cloud Storage를 활용하여 운영 비용을 최소화했습니다.

클라이언트 소개

법무법인 법승은 전국 11개 사무소를 가진 법무법인으로 형사, 민사, 가사, 회생, 행정 등 다양한 법률 분야에서 전문적인 서비스를 제공하고 있습니다. 특히 형사 사건이 전문 분야이며, 30명 이상의 변호사가 소속되어 있습니다.

개발 니즈 및 목표

법승에 앱스스크립트와 앱시트로 업무 시스템화 프로젝트를 완료한 후 1년 이상 안정적으로 시스템을 운영하고 있었습니다. 최근에 한 가지 요청사항이 들어왔는데, 전화 알림의 속도를 개선하는 것이었습니다.
기존에 개발된 전화 알림 프로세스는 LG U+ 콜백 → PHP 중계 서버 → 앱스 스크립트→ Google Chat DM 발송 순서였습니다. 이 과정에서 평균 2초의 소요 시간이 발생했으며, 특히 앱스 스크립트가 구글 시트에서 대용량의 발신자 DB를 읽어오는 과정에서 병목 현상이 발생하여 최대 16초까지 지연되는 문제가 있었습니다.
클라이언트는 전화벨이 1~2번 울릴 때 즉시 발신자 정보를 파악하기 위해 알림 소요 시간을 평균 1초 대로 안정적으로 줄이는 것을 목표로 했습니다. 또한, 기존 앱스 스크립트 (Apps Script) 시스템이 비용 발생이 제로였기 때문에, 개선 후에도 운영 비용을 최소화하는 것이 핵심 요구사항이었습니다.
주요 개발 목표
목표 1: 발신자 정보를 담은 구글 챗 알림 소요 시간을 평균 1초 대로 안정적으로 유지 (최대 소요 시간 최소화).
목표 2: 시스템 전환 후에도 운영 비용 발생을 최소화하여 경제성 확보.

적용 솔루션

이미 앱스 스크립트로 개발은 여러 차례에 거쳐 최적화를 해둔 터라서 앱스 스크립트로는 더 이상의 속도 개선을 달성할 수 없었기 때문에 다른 방안을 모색하게 되었습니다.
법승이 이미 구글 클라우드 환경을 사용하고 있었기 때문에, Node.js 기반의 Cloud Run 서비스를 도입하는 것으로 결정했습니다. 클라우드 런 (Cloud Run)은 자동 스케일링을 지원하며 무료 사용 구간이 있어 비용 효율성 측면에서도 유리했습니다.
다음과 같은 여러 기술적 문제들을 해결하며 시스템을 개발했습니다.
1.
클라우드 런 기반 Node.js 마이크로서비스 전환
성능의 안정성과 확장성을 확보하기 위해 앱스 스크립트의 이벤트 기반 환경에서 구글 클라우드 런 (Google Cloud Run) 기반의 컨테이너화된 마이크로 서비스로 시스템을 전환했습니다. Node.js를 사용하여 고속으로 콜백 데이터를 처리하고 Google Chat API를 호출하도록 재설계하여, 시스템 처리 속도와 일관성을 획기적으로 개선했습니다.
2.
OAuth 기반의 인증 및 RAPT 이슈 해결
앱스 스크립트로 구글 챗 DM을 개발할 때에도 기술적 이슈가 되었던 사항으로 서비스 계정으로는 DM을 보낼 수 없다는 구글의 제약사항이 있었습니다. 서비스 계정이 Domain Wide Delegation을 가지고 Impersonate 한다고 해도 DM은 보낼 수 없습니다. DM은 오직 OAuth로 인증한 실제 사람 계정에서만 보내집니다. Node.js 에서도 개발 계정의 OAuth Credential과 Refresh Token을 사용하는 방식을 도입했습니다.
초기 테스트 중, 장시간 서비스 운영 시 Invalid RAPT (Risk-Aware Protection Token) 오류가 발생하여 서비스가 중단되는 문제가 발생했습니다. 이는 민감한 작업 시 구글이 재인증을 요구하는 보안 조치였습니다. 이를 해결하기 위해 구글 클라우드 관리 콘솔에서 개발자 계정의 재인증 정책을 '재인증 필요 없음'으로 변경하여, 24시간 중단 없이 서비스를 지속할 수 있도록 기술적인 우회책을 적용했습니다.
3.
Secret Mananger → Cloud Storage 기반 비용 최적화
초기에 OAuth 인증 정보를 구글 클라우드의 Secret Manager에 저장하고 주기적으로 갱신하는 방식으로 개발을 완료했으나, 테스트 기간 동안 Secret Manager의 호출 빈도에 따른 비용 (월 약 15,000원 예상)이 예상보다 높게 발생했습니다.
클라이언트는 Zero-Cost 운영을 강력히 희망했기 때문에, 인증 정보 저장소를 GCS (Google Cloud Storage)로 옮기기로 결정했습니다. GCS에 Credential과 Token 파일을 저장하고, Token 갱신 시 기존 파일을 백업 폴더로 옮기고 새로운 Token을 루트 폴더에 생성하는 방식을 적용하여 Secret Manager 사용료를 완전히 제거하고 비용을 최소화했습니다.
4.
GCS 기반의 최적화된 발신자 DB 캐싱 전략 도입
앱스 스크립트로 개발된 코드에서 병목 현상은 구글 시트에 액세스해서 데이터를 가져오는 과정에서 있었습니다. 수신자 DB는 비교적 데이터의 양이 적기 때문에 캐시에 넣어두고 빠르게 사용할 수 있었지만, 발신자 DB는 앱스 스크립트에서 허용하는 캐시의 용량을 벗어났기 때문에 (4만 건 이상의 데이터) 그때 그때 액세스해야했습니다. 그 때문에 최대 16초까지나 지연이 발생하고 있었던 것이죠.
기존 시스템의 주된 병목 현상이었던 구글 시트 액세스 문제를 해결하기 위해 발신자/수신자 DB를 JSON 파일로 변환하여 GCS에 저장하고 활용하는 방식을 채택했습니다.
특히, 대용량인 발신자 DB에 대해서는 전화번호 앞자리(Prefix)를 기준으로 JSON 파일을 분할(Partitioning)하여 저장했습니다. 이를 통해 전화 수신 시 해당 Prefix에 해당하는 최소한의 데이터만 GCS에서 신속하게 불러와서 조회할 수 있게 되었고, DB 접근 지연 시간(Latency)을 획기적으로 단축하여 성능을 안정화하는 결정적인 역할을 했습니다.
5.
빅쿼리 로깅 구현
모든 인바운드 트랜잭션 정보를 발신자, 수신자 정보 및 DM 발송 소요시간과 함께 빅쿼리(BigQuery)에 로깅하는 기능을 구현했습니다. 이를 통해 시스템의 성능 변화를 지속적으로 모니터링하고 추후 발생하는 잠재적인 지연 문제에 대해 선제적으로 대응할 수 있는 기반을 마련했습니다.

결과 및 효과

앱스 스크립트에서 구글 클라우드 런 기반의 마이크로 서비스로 전환한 결과, 가장 큰 문제였던 시스템의 안정성을 확보했습니다. 평균 DM 발송 시간은 2.0초에서 1.3초로 감소했으며, 무엇보다 최대 소요 시간이 16초에서 2.2초로 대폭 안정화되어 실질적인 업무 환경이 개선되었습니다. 클라이언트는 전화 수신 시점과 거의 동시에 발신자 정보를 챗 알림으로 받아볼 수 있게 되었으며, Zero-Cost에 가까운 운영 비용을 유지할 수 있었습니다.

핵심 성과

실시간 알림 안정성 확보: Google Chat DM 발송의 최대 지연 시간을 16초에서 2.2초 이하로 안정화. 평균 속도 2.0초 ⇒ 1.3초로 30% 감소.
비용 효율적 마이크로 서비스 운영: 클라우드 런 무료 티어 및 GCS 활용을 통해 고성능 클라우드 환경으로 전환했음에도 불구하고 Zero-Cost에 가까운 운영 비용 유지.
데이터 접근 병목 현상 해소: 발신자/수신자 DB를 구글 시트에서 GCS 기반의 전화번호 파티션 JSON DB로 전환하여 시스템 성능의 근본적인 문제 해결.

개발 노하우

GAS → Cloud Run 성능 마이그레이션 전략: 비용 효율성이 높은 컨테이너 환경(Cloud Run)을 선택하여 앱스 스크립트의 한계를 극복하고 고성능, 고가용성 실시간 서비스를 구축.
보안 토큰 자동화 및 RAPT 대응: 장기 실행 서비스의 OAuth 인증 문제(RAPT)를 구글 클라우드 보안 정책 변경을 통해 해결하고, GCS 기반의 안전하고 비용 효율적인 토큰 갱신 시스템 구현.
데이터 조회 최적화 아키텍처: 대용량 발신자 DB를 GCS 파티션 JSON으로 구성하여 필요한 데이터만 초고속으로 조회하는 인덱싱 없는 DB 접근 전략 구현.

업무 효율성 200% 올리기, with autooffice

업무 시스템 및 자동화 개발 문의는 구글폼을 이용해주세요!