본문 바로가기
유용한툴 및 사이트

Google APIs 완전정복 | 클라우드부터 앱까지 활용하는 실전 가이드

by devcomet 2025. 10. 28.
728x90

Google APIs complete guide showing OAuth authentication, REST and gRPC comparison, with Google Cloud Platform services integration for developers
Google APIs 완전정복

 

Google APIs 사용법부터 OAuth 2.0 인증까지, 클라우드 개발자를 위한 실전 가이드로 Google Cloud Platform API, REST API, gRPC 활용법과 클라이언트 라이브러리 설정을 단계별로 안내합니다.


왜 Google APIs인가 이해를 돕기 위한 개발자 예시 이미지

 

Google APIs는 현대 개발자에게 필수적인 도구입니다.

Gmail, Google Drive, Google Maps부터 고급 머신러닝 기능까지,

Google이 제공하는 강력한 API 생태계를 통해 여러분의 애플리케이션에 세계적인 수준의 기능을 손쉽게 통합할 수 있습니다.

이 가이드에서는 Google APIs 사용법의 기초부터 고급 인증 설정까지 실전에서 바로 활용할 수 있는 모든 것을 다룹니다.


Google APIs란 무엇인가

Google APIs 카테고리별 api정리

 

Google APIs는 Google의 다양한 서비스와 플랫폼에 프로그래밍 방식으로 접근할 수 있게 해주는 인터페이스입니다.

개발자는 이러한 API를 통해 자신의 애플리케이션에 Google의 강력한 기능을 통합할 수 있습니다.

2025년 현재 API Gateway의 지역당 생성 가능한 게이트웨이 수가 50개로 증가하는 등 지속적인 업데이트가 이루어지고 있습니다.

Google APIs는 크게 다음과 같은 카테고리로 나뉩니다.

 

Google Cloud Platform API

클라우드 컴퓨팅, 스토리지, 데이터베이스, 머신러닝 등 엔터프라이즈급 인프라 서비스를 제공합니다.

Compute Engine, Cloud Storage, BigQuery 등이 대표적입니다.

 

Google Workspace API

Gmail, Google Drive, Google Calendar, Google Docs 등 생산성 도구에 접근할 수 있습니다.

업무 자동화와 협업 도구 개발에 필수적입니다.

 

Google Maps Platform API

지도, 위치 기반 서비스, 길찾기 등을 제공합니다.

Maps, Routes, Places의 세 가지 주요 카테고리로 구성되어 있으며, 13개 이상의 세부 API를 포함합니다.

 

AI 및 머신러닝 API

Cloud Vision, Natural Language, Translation 등 고급 AI 기능을 제공합니다.

2025년 8월에는 Gemini 2.5 모델 패밀리가 출시되어 더욱 강력한 AI 기능을 제공하고 있습니다.


Google APIs 시작하기 기본 설정

Google Cloud 프로젝트 생성

Google APIs를 사용하려면 먼저 Google Cloud Console에서 프로젝트를 생성해야 합니다.

Google Cloud Console에 접속하여 새 프로젝트를 만듭니다.

 

Google 클라우드 플랫폼

로그인 Google 클라우드 플랫폼으로 이동

accounts.google.com

 

 

 

 

 

프로젝트는 API 사용량 추적, 청구, 권한 관리의 기본 단위입니다.

결제 계정 설정

Google Maps Platform을 사용하려면 청구가 활성화된 Cloud 프로젝트를 생성해야 합니다.

신규 사용자에게는 Google Cloud Platform $300 크레딧과 Google Maps Platform 월 $200 크레딧이 제공됩니다.

대부분의 개발 및 테스트 용도로는 무료 할당량만으로도 충분합니다.

API 활성화

프로젝트를 생성한 후 사용하려는 API를 활성화해야 합니다.

Google Cloud Console의 "APIs & Services" > "Library"로 이동하여 필요한 API를 검색하고 활성화합니다.

API Gateway는 gRPC 지원을 Cloud Run 백엔드 서비스에 제공하고 있습니다.


API 키 생성과 관리

API 키 생성과 관리 대시보드 예시

API 키 생성 방법

API 키는 Google APIs에 접근하기 위한 가장 기본적인 인증 방법입니다.

표준 API 키는 청구 및 할당량 목적으로 프로젝트와 요청을 연결하는 방법을 제공합니다.

 

API 키 생성 단계

  1. Google Cloud Console에서 "APIs & Services" > "Credentials"로 이동합니다
  2. "Create Credentials"를 클릭하고 "API key"를 선택합니다
  3. 생성된 API 키를 안전하게 복사하여 저장합니다
  4. 보안을 위해 API 키에 제한 사항을 설정합니다

API 키 보안 설정

프로덕션 환경에서는 반드시 API 키를 제한해야 합니다.

API 키 제한 유형은 다음과 같습니다.

 

애플리케이션 제한

  • HTTP 리퍼러 제한 (웹사이트용)
  • IP 주소 제한 (서버용)
  • Android 앱 제한
  • iOS 앱 제한

API 제한

특정 API만 사용할 수 있도록 제한하여 보안을 강화합니다.

iOS 앱의 경우 번들 ID를 지정하여 API 키 사용을 제한할 수 있습니다.


OAuth 2.0 인증 완벽 가이드

OAuth 2.0이란

OAuth 2.0은 사용자 데이터에 접근할 때 사용하는 업계 표준 인증 프로토콜입니다.

Google APIs는 인증 및 권한 부여를 위해 OAuth 2.0 프로토콜을 사용합니다.

API 키와 달리 OAuth 2.0은 사용자를 대신하여 API에 접근할 수 있게 해줍니다.

OAuth 2.0 인증 흐름

기본 인증 프로세스

  1. 애플리케이션이 Google 인증 서버로 사용자를 리디렉션합니다
  2. 사용자가 로그인하고 권한을 승인합니다
  3. Google이 인증 코드를 애플리케이션에 반환합니다
  4. 애플리케이션이 인증 코드를 액세스 토큰으로 교환합니다
  5. 액세스 토큰으로 API 요청을 수행합니다

OAuth 2.0 공식 문서에서 더 자세한 정보를 확인할 수 있습니다.

 

OAuth 2.0을 사용하여 Google API에 액세스하기  |  Authorization  |  Google for Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. 의견 보내기 OAuth 2.0을 사용하여 Google API에 액세스하기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

developers.google.com

OAuth 2.0 클라이언트 ID 생성

OAuth 2.0 클라이언트 ID는 Google의 OAuth 서버에 애플리케이션을 식별하는 데 사용됩니다.

 

생성 단계

  1. Google Cloud Console의 "APIs & Services" > "Credentials"로 이동
  2. "Create Credentials" > "OAuth client ID" 선택
  3. 애플리케이션 유형 선택 (웹, Android, iOS 등)
  4. 승인된 리디렉션 URI 설정

리디렉션 URI는 HTTPS 스키마를 사용해야 하며, localhost는 예외입니다.

동의 화면 구성

OAuth 2.0을 사용하려면 사용자 동의 화면을 구성해야 합니다.

OAuth 동의 화면은 사용자에게 누가 데이터 접근을 요청하는지, 어떤 종류의 데이터에 접근 권한을 부여하는지 알려줍니다.

 

필수 설정 항목

  • 앱 이름
  • 사용자 지원 이메일
  • 승인된 도메인
  • 개발자 연락처 정보

Google REST API 활용 실전

Google REST API 활용 실전 - rest 아키텍처 예시 이미지

REST API 기본 개념

REST (Representational State Transfer)는 웹 서비스 구축을 위한 가장 인기 있는 아키텍처 스타일입니다.

REST API는 HTTP 프로토콜을 사용하여 리소스를 정의하고 표준 HTTP 메서드로 작업을 수행합니다.

 

HTTP 메서드

메서드 용도 예시
GET 리소스 조회 파일 목록 가져오기
POST 리소스 생성 새 문서 만들기
PUT 리소스 전체 수정 파일 내용 업데이트
PATCH 리소스 부분 수정 메타데이터만 변경
DELETE 리소스 삭제 파일 삭제

REST API 호출 예제

Google Drive API로 파일 목록 가져오기

curl -X GET \
  'https://www.googleapis.com/drive/v3/files' \
  -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
  -H 'Accept: application/json'

Google Drive API를 사용하면 Drive 클라우드 스토리지를 활용하는 앱을 만들 수 있으며,

파일 다운로드 및 업로드, 검색 등의 기능을 제공합니다.

 

Google Maps Geocoding API 사용

fetch(`https://maps.googleapis.com/maps/api/geocode/json?address=Seoul&key=YOUR_API_KEY`)
  .then(response => response.json())
  .then(data => console.log(data));

REST vs gRPC 비교 분석

gRPC란 무엇인가

gRPC 통신 예시 이미지

 

gRPC는 HTTP 2.0을 전송 프로토콜로 사용하는 RPC API 구현 기술입니다.

Google이 2015년에 개발한 고성능 프레임워크로, 마이크로서비스 간 효율적인 통신을 위해 설계되었습니다.

주요 차이점 비교

특성 REST gRPC
프로토콜 HTTP/1.1 HTTP/2
데이터 포맷 JSON, XML Protocol Buffers
성능 보통 매우 빠름
브라우저 지원 완벽 제한적
학습 곡선 낮음 높음
스트리밍 지원 제한적 양방향 스트리밍

 

최근 연구에 따르면 gRPC는 특정 마이크로서비스 아키텍처에서 REST보다 최대 7배 빠른 성능을 보일 수 있습니다.

언제 REST를 사용할까

REST가 적합한 경우

  • 공개 API를 제공할 때
  • 웹 브라우저 클라이언트를 지원해야 할 때
  • 간단한 CRUD 작업이 주를 이룰 때
  • 팀의 학습 곡선을 최소화하고 싶을 때
  • 광범위한 도구와 라이브러리 지원이 필요할 때

REST API는 일반적인 기술과 널리 사용 가능한 도구만으로 클라이언트가 사용하고 서버가 구현할 수 있습니다.

언제 gRPC를 사용할까

gRPC가 적합한 경우

  • 내부 마이크로서비스 통신
  • 실시간 양방향 스트리밍이 필요할 때
  • 다국어 시스템 지원
  • 높은 성능과 낮은 지연시간이 중요할 때
  • 엄격한 타입 정의가 필요할 때

gRPC 서비스는 내부 또는 이른바 "동서" 서비스 간 통신에 인기 있는 선택입니다.


Google Drive API 실전 활용

Google Drive API 설정

Drive API를 사용하면 파일 및 폴더 검색, 복잡한 검색 쿼리 생성, 사용자의 파일 및 폴더 공유를 통한 협업이 가능합니다.

 

API 활성화 및 인증 설정

  1. Google Cloud Console에서 Drive API 활성화
  2. OAuth 2.0 클라이언트 ID 생성
  3. 필요한 스코프 설정 (drive.file, drive.readonly 등)

더 자세한 설정 방법은 Google Drive API 공식 가이드를 참고하세요.

 

Google Drive API 개요  |  Google for Developers

Google Drive API의 기능을 살펴보고 이를 사용하여 앱을 Google Drive 클라우드 스토리지 및 Drive UI와 통합할 수 있습니다.

developers.google.com

 

 

 

 

 

파일 업로드 구현

간단한 업로드 (5MB 이하)

from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload

service = build('drive', 'v3', credentials=creds)

file_metadata = {'name': 'example.txt'}
media = MediaFileUpload('example.txt', mimetype='text/plain')

file = service.files().create(
    body=file_metadata,
    media_body=media,
    fields='id'
).execute()

print(f'File ID: {file.get("id")}')

 

재개 가능한 업로드 (대용량 파일)

대용량 파일의 경우 재개 가능한 업로드를 사용하여 안정적인 전송을 보장합니다.

파일 검색 및 조회

# 특정 MIME 타입의 파일 검색
results = service.files().list(
    q="mimeType='application/pdf'",
    pageSize=10,
    fields="files(id, name, createdTime)"
).execute()

items = results.get('files', [])
for item in items:
    print(f"{item['name']} ({item['id']})")

Google Maps API 통합하기

Maps JavaScript API 시작하기

Google Maps Platform을 시작하려면 청구가 활성화된 Cloud 프로젝트를 만들고 원하는 API 또는 SDK를 활성화해야 합니다.

 

기본 지도 삽입

<!DOCTYPE html>
<html>
<head>
    <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
    <script>
        function initMap() {
            const seoul = { lat: 37.5665, lng: 126.9780 };
            const map = new google.maps.Map(document.getElementById('map'), {
                zoom: 12,
                center: seoul
            });

            new google.maps.Marker({
                position: seoul,
                map: map,
                title: 'Seoul'
            });
        }
    </script>
</head>
<body onload="initMap()">
    <div id="map" style="height: 400px; width: 100%;"></div>
</body>
</html>

Geocoding API 활용

Geocoding API는 주소를 위도/경도 좌표로 변환하며, 역 지오코딩도 지원합니다.

const geocoder = new google.maps.Geocoder();

geocoder.geocode({ 'address': '서울특별시 강남구' }, (results, status) => {
    if (status === 'OK') {
        console.log('위도:', results[0].geometry.location.lat());
        console.log('경도:', results[0].geometry.location.lng());
    }
});

Places API로 장소 검색

const service = new google.maps.places.PlacesService(map);

service.nearbySearch({
    location: { lat: 37.5665, lng: 126.9780 },
    radius: 500,
    type: 'restaurant'
}, (results, status) => {
    if (status === google.maps.places.PlacesServiceStatus.OK) {
        results.forEach(place => {
            console.log(place.name);
        });
    }
});

클라이언트 라이브러리 활용

공식 클라이언트 라이브러리

Google은 주요 프로그래밍 언어를 위한 공식 클라이언트 라이브러리를 제공합니다.

Google 공식 클라이언트 라이브러리 로고 이미지

 

지원 언어

  • Python
  • Java
  • Node.js
  • PHP
  • .NET
  • Ruby
  • Go

Python 클라이언트 라이브러리

설치

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

 

기본 사용법

from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build

# 인증 정보 로드
creds = Credentials.from_authorized_user_file('token.json', SCOPES)

# API 클라이언트 생성
service = build('gmail', 'v1', credentials=creds)

# API 호출
results = service.users().messages().list(userId='me', maxResults=10).execute()
messages = results.get('messages', [])

Node.js 클라이언트 라이브러리

설치

npm install googleapis

 

사용 예제

const {google} = require('googleapis');

async function listFiles(auth) {
    const drive = google.drive({version: 'v3', auth});

    const res = await drive.files.list({
        pageSize: 10,
        fields: 'files(id, name)',
    });

    const files = res.data.files;
    files.forEach(file => {
        console.log(`${file.name} (${file.id})`);
    });
}

Google APIs Explorer 활용법

APIs Explorer란

Google APIs Explorer는 코드를 작성하지 않고도 Google API 메서드를 테스트할 수 있는 도구입니다.

API를 처음 사용하거나 빠른 프로토타이핑이 필요할 때 매우 유용합니다.

APIs Explorer 사용 방법

기본 사용 단계

  1. APIs Explorer 접속
  2. 사용하려는 API 검색 및 선택
  3. 메서드 선택 (GET, POST 등)
  4. 파라미터 입력
  5. "Execute" 버튼 클릭

APIs Explorer는 자체 자격 증명을 사용하여 요청하므로 사용자 지정 자격 증명을 사용할 수 없습니다.

실시간 API 테스트

Cloud Vision API 테스트 예제

  1. Cloud Vision API 문서 페이지에서 "Try this method" 패널 찾기
  2. 요청 본문에 이미지 URL 또는 Base64 데이터 입력
  3. 필요한 기능 선택 (LABEL_DETECTION, TEXT_DETECTION 등)
  4. Execute 버튼으로 실시간 결과 확인

APIs Explorer를 사용하면 사용 가능한 API를 빠르게 탐색하고,

각 API에 사용 가능한 메서드와 지원하는 파라미터를 인라인 문서와 함께 확인할 수 있습니다.


Google Cloud Platform API 심화

Google Cloud Platform API 심화 내용 정리

Compute Engine API

인스턴스 생성 및 관리

from googleapiclient import discovery
from oauth2client.client import GoogleCredentials

credentials = GoogleCredentials.get_application_default()
compute = discovery.build('compute', 'v1', credentials=credentials)

# 인스턴스 목록 조회
result = compute.instances().list(
    project='your-project-id',
    zone='us-central1-a'
).execute()

Cloud Storage API

버킷 및 객체 관리

from google.cloud import storage

client = storage.Client()

# 버킷 생성
bucket = client.create_bucket('my-bucket-name')

# 파일 업로드
blob = bucket.blob('my-file.txt')
blob.upload_from_filename('local-file.txt')

# 공개 URL 생성
blob.make_public()
print(blob.public_url)

BigQuery API

데이터 쿼리 실행

from google.cloud import bigquery

client = bigquery.Client()

query = """
    SELECT name, COUNT(*) as count
    FROM `bigquery-public-data.usa_names.usa_1910_current`
    WHERE state = 'TX'
    GROUP BY name
    ORDER BY count DESC
    LIMIT 10
"""

results = client.query(query)
for row in results:
    print(f"{row.name}: {row.count}")

인증 및 권한 관리 고급 기법

서비스 계정 활용

서비스 계정은 애플리케이션을 위한 특별한 종류의 Google 계정입니다.

서비스 계정은 최종 사용자가 아닌 애플리케이션에 속하며, 사용자 동의가 필요하지 않습니다.

 

서비스 계정 생성 및 사용

from google.oauth2 import service_account
from googleapiclient.discovery import build

SCOPES = ['https://www.googleapis.com/auth/drive.readonly']
SERVICE_ACCOUNT_FILE = 'service-account-key.json'

credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE, scopes=SCOPES)

service = build('drive', 'v3', credentials=credentials)

스코프(Scope) 관리

OAuth 2.0 스코프는 애플리케이션이 요청할 수 있는 접근 권한을 정의합니다.

 

주요 스코프 예시

# Gmail 읽기 전용
'https://www.googleapis.com/auth/gmail.readonly'

# Drive 전체 접근
'https://www.googleapis.com/auth/drive'

# Calendar 이벤트 관리
'https://www.googleapis.com/auth/calendar.events'

최소 권한 원칙을 따라 필요한 스코프만 요청하는 것이 보안 모범 사례입니다.

토큰 갱신 및 관리

액세스 토큰을 갱신할 때 기존 속성은 추가, 삭제, 수정될 수 없습니다.

 

리프레시 토큰 사용

from google.auth.transport.requests import Request

if creds and creds.expired and creds.refresh_token:
    creds.refresh(Request())

    # 갱신된 토큰 저장
    with open('token.json', 'w') as token:
        token.write(creds.to_json())

할당량 및 사용량 관리

API 할당량 이해하기

모든 Google API에는 사용량 제한이 있습니다.

 

일반적인 할당량 유형

  • 일일 요청 수: 하루에 보낼 수 있는 총 요청 수
  • 분당 요청 수: 짧은 시간 내 버스트 제한
  • 프로젝트당 할당량: 전체 프로젝트에 적용되는 제한
  • 사용자당 할당량: 개별 사용자에 적용되는 제한

할당량 확인 및 증가 요청

google cloud console에서 할당량 페이지 버튼 누르는 화면api하나의 할당량 수정버튼 누르는 화면
google cloud console api 할당량 조정 화면

Google Cloud Console의 "IAM & Admin" > "Quotas"에서 현재 할당량을 확인할 수 있습니다.

더 높은 할당량이 필요한 경우 증가를 요청할 수 있습니다.

지수 백오프 구현

API 호출 실패 시 재시도 로직을 구현해야 합니다.

import time
import random

def retry_with_backoff(func, max_retries=5):
    for i in range(max_retries):
        try:
            return func()
        except Exception as e:
            if i == max_retries - 1:
                raise
            wait_time = (2 ** i) + random.random()
            time.sleep(wait_time)

보안 모범 사례

API 키 보안

절대 하지 말아야 할 것

  • 공개 리포지토리에 API 키 커밋
  • 클라이언트 측 코드에 API 키 하드코딩
  • 환경 변수를 버전 관리에 포함

권장 사항

  • 환경 변수 또는 시크릿 관리 서비스 사용
  • API 키 제한 설정 (IP, 도메인, 앱 등)
  • 정기적인 키 로테이션
  • 개발/프로덕션 환경별 별도 키 사용

OAuth 2.0 보안

// PKCE (Proof Key for Code Exchange) 사용
const codeVerifier = generateRandomString();
const codeChallenge = await generateCodeChallenge(codeVerifier);

const authUrl = `https://accounts.google.com/o/oauth2/v2/auth?
    client_id=${clientId}&
    redirect_uri=${redirectUri}&
    response_type=code&
    scope=${scope}&
    code_challenge=${codeChallenge}&
    code_challenge_method=S256`;

HTTPS 필수 사용

리디렉션 URI는 HTTPS 스키마를 사용해야 하며, 일반 HTTP는 사용할 수 없습니다. localhost는 이 규칙에서 제외됩니다.

모든 API 통신은 암호화된 연결을 통해 이루어져야 합니다.


에러 처리 및 디버깅

일반적인 HTTP 상태 코드

코드 의미 해결 방법
200 성공 -
400 잘못된 요청 요청 파라미터 확인
401 인증 실패 토큰 또는 API 키 확인
403 권한 없음 스코프 및 권한 확인
404 리소스 없음 URL 및 리소스 ID 확인
429 할당량 초과 요청 빈도 조절
500 서버 오류 재시도 또는 지원팀 문의

상세 에러 로깅

import logging

logging.basicConfig(level=logging.DEBUG)

try:
    response = service.files().list().execute()
except HttpError as error:
    logging.error(f'An error occurred: {error}')
    logging.debug(f'Error details: {error.content}')

디버깅 도구 활용

  • Google Cloud Console 로그 뷰어: API 호출 추적
  • APIs Explorer: 브라우저에서 직접 테스트
  • Postman: REST API 테스트 도구
  • cURL: 커맨드라인 HTTP 클라이언트

성능 최적화 전략

배치 요청 사용

여러 API 호출을 하나의 HTTP 요청으로 묶어 네트워크 오버헤드를 줄입니다.

from googleapiclient.http import BatchHttpRequest

batch = service.new_batch_http_request()

for file_id in file_ids:
    batch.add(service.files().get(fileId=file_id))

batch.execute()

부분 응답 요청

필요한 필드만 요청하여 데이터 전송량을 최소화합니다.

# 전체 응답
service.files().list().execute()

# 부분 응답 (필요한 필드만)
service.files().list(
    fields='files(id, name, mimeType)'
).execute()

캐싱 전략

from functools import lru_cache
import time

@lru_cache(maxsize=128)
def get_file_metadata(file_id):
    return service.files().get(fileId=file_id).execute()

# TTL이 있는 캐시
class TTLCache:
    def __init__(self, ttl=3600):
        self.cache = {}
        self.ttl = ttl

    def get(self, key):
        if key in self.cache:
            value, timestamp = self.cache[key]
            if time.time() - timestamp < self.ttl:
                return value
        return None

    def set(self, key, value):
        self.cache[key] = (value, time.time())

실전 프로젝트 예제

google apis 활용한 실전 프로젝트 예제 순서정리

자동 백업 시스템

Google Drive API를 활용한 로컬 파일 자동 백업 시스템입니다.

import os
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload

def backup_file(service, local_path, drive_folder_id):
    """로컬 파일을 Google Drive에 백업"""
    file_name = os.path.basename(local_path)

    file_metadata = {
        'name': file_name,
        'parents': [drive_folder_id]
    }

    media = MediaFileUpload(
        local_path,
        resumable=True
    )

    file = service.files().create(
        body=file_metadata,
        media_body=media,
        fields='id, name, webViewLink'
    ).execute()

    print(f'Backed up: {file.get("name")} - {file.get("webViewLink")}')
    return file

def main():
    service = build('drive', 'v3', credentials=creds)
    backup_folder_id = 'your-folder-id'

    # 백업할 파일 목록
    files_to_backup = [
        '/path/to/important-doc.pdf',
        '/path/to/config.json'
    ]

    for file_path in files_to_backup:
        if os.path.exists(file_path):
            backup_file(service, file_path, backup_folder_id)

지도 기반 매장 찾기 앱

class StoreLocator {
    constructor(apiKey) {
        this.apiKey = apiKey;
        this.map = null;
        this.markers = [];
    }

    initMap(center) {
        this.map = new google.maps.Map(document.getElementById('map'), {
            zoom: 13,
            center: center
        });
    }

    findNearbyStores(location, radius) {
        const service = new google.maps.places.PlacesService(this.map);

        const request = {
            location: location,
            radius: radius,
            type: 'store'
        };

        service.nearbySearch(request, (results, status) => {
            if (status === google.maps.places.PlacesServiceStatus.OK) {
                this.displayStores(results);
            }
        });
    }

    displayStores(stores) {
        // 기존 마커 제거
        this.markers.forEach(marker => marker.setMap(null));
        this.markers = [];

        stores.forEach(store => {
            const marker = new google.maps.Marker({
                position: store.geometry.location,
                map: this.map,
                title: store.name
            });

            this.markers.push(marker);
        });
    }
}

Gmail 자동 응답 봇

from googleapiclient.discovery import build
from email.mime.text import MIMEText
import base64

def create_message(sender, to, subject, message_text):
    """이메일 메시지 생성"""
    message = MIMEText(message_text)
    message['to'] = to
    message['from'] = sender
    message['subject'] = subject

    raw = base64.urlsafe_b64encode(message.as_bytes()).decode()
    return {'raw': raw}

def send_message(service, user_id, message):
    """메시지 전송"""
    try:
        message = service.users().messages().send(
            userId=user_id,
            body=message
        ).execute()
        print(f'Message Id: {message["id"]}')
        return message
    except Exception as error:
        print(f'An error occurred: {error}')

def auto_reply_bot(service):
    """특정 키워드가 포함된 이메일에 자동 응답"""
    results = service.users().messages().list(
        userId='me',
        q='is:unread subject:지원',
        maxResults=10
    ).execute()

    messages = results.get('messages', [])

    for msg in messages:
        message = service.users().messages().get(
            userId='me',
            id=msg['id']
        ).execute()

        # 자동 응답 전송
        reply = create_message(
            'me',
            message['payload']['headers'][0]['value'],
            'Re: 자동 응답',
            '문의해 주셔서 감사합니다. 빠른 시일 내에 답변드리겠습니다.'
        )

        send_message(service, 'me', reply)

최신 트렌드 및 업데이트

google apis 최신 트렌드 및 업데이트 정리

2025년 주요 변화

Google Photos API는 2025년 3월 31일부터 주요 변경사항이 적용되어,

Library API는 앱이 생성한 콘텐츠 관리로 제한되고 새로운 Picker API가 도입되었습니다.

 

API Gateway 개선사항

2025년 7월 23일, API Gateway는 TLS v1.2+ 프로토콜 적용을 강화했으며, 이전 버전 사용 시 옵트아웃이 필요합니다.

 

Gemini API 통합

2025년 8월 18일, Gemini API용 URL 컨텍스트 도구가 정식 출시되어 PDF와 이미지를 URL에서 직접 처리할 수 있게 되었습니다.

AI 및 머신러닝 API 확장

Gemini 2.5 Pro는 "Deep Think" 모드를 도입하여 응답 전 여러 가설을 고려함으로써

복잡한 코딩 및 수학 작업에서 성능이 크게 향상되었습니다.

Apigee API 관리

Google은 2025년 Gartner Magic Quadrant API Management에서 리더로 선정되었으며,

실행 능력에서 가장 높은 평가를 받았습니다.


문제 해결 가이드

인증 오류 해결

401 Unauthorized 에러

  • 액세스 토큰이 만료되었는지 확인
  • API 키가 올바른지 검증
  • OAuth 스코프가 충분한지 확인

403 Forbidden 에러

  • API가 프로젝트에서 활성화되었는지 확인
  • 서비스 계정에 적절한 IAM 역할이 부여되었는지 확인
  • API 키 제한 설정을 검토

할당량 초과 대응

429 Too Many Requests

import time
from googleapiclient.errors import HttpError

def api_call_with_retry(func, max_retries=3):
    for i in range(max_retries):
        try:
            return func()
        except HttpError as e:
            if e.resp.status == 429:
                wait_time = 2 ** i
                print(f'Rate limited. Waiting {wait_time}s...')
                time.sleep(wait_time)
            else:
                raise
    raise Exception('Max retries exceeded')

네트워크 문제 해결

  • 타임아웃 설정 조정
  • 프록시 설정 확인
  • 방화벽 규칙 검토
  • DNS 해석 문제 확인

비용 최적화 전략

무료 티어 활용

대부분의 Google APIs는 관대한 무료 사용 한도를 제공합니다.

 

 

 

 

 

 

주요 무료 할당량

  • Google Maps Platform: 월 $200 크레딧
  • Cloud Vision: 월 1,000건 무료
  • Cloud Translation: 월 500,000자 무료
  • Drive API: 무료 (스토리지는 별도)

불필요한 API 호출 줄이기

# 나쁜 예: 매번 새로 조회
def get_file_info(file_id):
    return service.files().get(fileId=file_id).execute()

# 좋은 예: 캐싱 활용
from functools import lru_cache

@lru_cache(maxsize=100)
def get_file_info_cached(file_id):
    return service.files().get(fileId=file_id).execute()

배치 처리로 비용 절감

개별 API 호출 대신 배치 요청을 사용하여 네트워크 비용을 줄입니다.


마이그레이션 가이드

API 버전 업그레이드

Drive API v2를 사용하는 경우 대부분의 v3 가이드 내용이 v2에도 적용되며, 버전별 차이점이 문서화되어 있습니다.

 

주요 변경사항 확인

  1. API 체인지로그 검토
  2. deprecated 메서드 식별
  3. 새로운 권장 방식 확인
  4. 테스트 환경에서 검증

레거시 인증 마이그레이션

OAuth 1.0에서 OAuth 2.0으로

# OAuth 2.0 플로우
from google_auth_oauthlib.flow import Flow

flow = Flow.from_client_secrets_file(
    'client_secrets.json',
    scopes=['https://www.googleapis.com/auth/drive'],
    redirect_uri='http://localhost:8080'
)

auth_url, _ = flow.authorization_url(prompt='consent')
print('Please visit:', auth_url)

커뮤니티 및 리소스

공식 문서 및 가이드

개발자 커뮤니티

  • Stack Overflow의 google-api 태그
  • Google Cloud Community
  • GitHub의 googleapis 조직

학습 리소스

  • Google Cloud Skills Boost
  • Coursera Google Cloud 과정
  • YouTube Google Developers 채널

결론

Google APIs는 현대 애플리케이션 개발의 핵심 도구입니다.

이 가이드에서 다룬 내용을 바탕으로 Google Cloud Platform API부터 Google Maps API, Google Drive API까지 다양한 서비스를 효과적으로 활용할 수 있습니다.

OAuth 2.0 인증과 API 키 생성부터 REST API와 gRPC의 차이점, 클라이언트 라이브러리 활용법까지 실전에서 필요한 모든 지식을 습득하셨습니다.

Google APIs Explorer를 통해 빠른 프로토타이핑을 수행하고, 보안 모범 사례를 준수하며, 성능을 최적화하여 견고한 애플리케이션을 구축하세요.

지금 바로 Google Cloud Console에서 첫 프로젝트를 시작해보세요!


자주 묻는 질문 (FAQ)

Q: Google APIs를 사용하려면 비용이 드나요?

A: 대부분의 Google APIs는 관대한 무료 티어를 제공합니다.

예를 들어 Google Maps Platform은 월 $200 크레딧을 제공하며, 많은 API가 일정 사용량까지 무료입니다.

 

Q: API 키와 OAuth 2.0의 차이점은 무엇인가요?

A: API 키는 프로젝트를 식별하는 간단한 인증 방법이고,

OAuth 2.0은 사용자를 대신하여 데이터에 접근할 때 사용하는 보안 프로토콜입니다.

사용자 데이터가 필요한 경우 OAuth 2.0을 사용해야 합니다.

 

Q: REST와 gRPC 중 어떤 것을 선택해야 하나요?

A: 공개 API나 웹 브라우저 지원이 필요한 경우 REST를, 내부 마이크로서비스 통신이나 고성능이 필요한 경우 gRPC를 선택하세요.

 

Q: API 할당량을 초과하면 어떻게 되나요?

A: 429 에러가 반환되며,

지수 백오프를 사용한 재시도 로직을 구현하거나 Google Cloud Console에서 할당량 증가를 요청할 수 있습니다.

 

Q: 서비스 계정은 언제 사용하나요?

A: 사용자 상호작용 없이 서버 간 통신이나 백그라운드 작업을 수행할 때 서비스 계정을 사용합니다.

예를 들어 정기적인 데이터 동기화나 자동화된 백업 작업에 적합합니다.


같이 보면 좋은 글

 

구글맵 API 완전정복 | 지도부터 경로·장소까지 실전 활용 가이드

구글맵 API는 웹과 모바일 앱에 지도, 경로 탐색, 장소 정보를 통합할 수 있는 강력한 플랫폼으로, 2025년 3월부터 무료 월간 사용량과 자동 볼륨 할인으로 더욱 합리적인 가격 정책을 제공합니다.

notavoid.tistory.com

 

Cloudflare 가격 완전정복 | 무료부터 엔터프라이즈까지 요금제 비교 및 비용절감 팁

Cloudflare 가격은 무료 플랜부터 월 $25 Pro, $250 Business, 맞춤형 Enterprise까지 4단계로 구성되며, 사용량 기반 요금제와 연간 결제 할인으로 최대 20% 비용을 절감할 수 있는 글로벌 CDN 및 보안 솔루션

notavoid.tistory.com

 

메가존클라우드 완전가이드 | 클라우드, AI 인프라 구축부터 운영까지 전략적 접근법

메가존클라우드는 AWS 프리미어 파트너이자 국내 1위 MSP 기업으로, 클라우드 전환 컨설팅부터 AI 인프라 구축, 멀티클라우드 관리까지 엔드투엔드 서비스를 제공하며 7000여 고객사의 디지털 혁신

notavoid.tistory.com

 

구글 G Suite 완전 정복 | Google Workspace로 팀 생산성 올리고 협업 혁신하는 방법

Google Workspace는 Gmail, Drive, Docs, Meet 등 클라우드 기반 협업 도구를 통합한 기업용 생산성 솔루션으로, 팀 협업 효율을 극대화하고 보안성을 강화하는 올인원 플랫폼입니다. 현대 기업 환경에서 원

notavoid.tistory.com

 

Google AI Studio 사용법 & 실전팁 | Gemini API로 멀티모달 AI 앱 구축하기

Google AI Studio는 Gemini API를 활용한 멀티모달 AI 애플리케이션 개발을 위한 무료 웹 기반 플랫폼으로, 프롬프트 실험부터 API 키 발급, 코드 내보내기까지 프로토타입 제작의 전 과정을 지원하는 개

notavoid.tistory.com

728x90
반응형
home 기피말고깊이 tnals1569@gmail.com