이번 글에서는 Python을 사용하여 Google Sheets에 액세스하고 데이터를 편집하는 방법에 대한 예제를 소개한다. 이를 위해 다음과 같은 과정을 따른다: 새 프로젝트 생성, Google Sheets API 활성화, 서비스 계정 생성 및 키 파일 다운로드, Google Sheets 문서에 대한 액세스 권한 부여, Python을 사용한 Google Sheets 액세스 및 데이터 편집.
회사의 성장을 위해 업무 자동화에 많은 노력을 기울여왔다. 보통의 애플리케이션은 데이터를 주고 받는 데에 DBMS를 사용한다. 그러나 업무 자동화를 위해서는 DBMS에 작성한 데이터를 즉각적으로 처리하기 어려운 경우가 있다. 이때 구글 시트를 활용하면 현업 직원들도 데이터에 쉽게 엑세스하여 작업을 수행할 수 있어 업무 자동화에 매우 효과적이다.
특히, 개발 리소스가 제한된 회사에서는 웹 UI 개발이 어려울 수 있다. 이럴 때 데이터의 흐름과 포매팅을 자동화하고 현업 직원들이 언제든지 조회하고 원하는대로 편집할 수 있는 방법은 업무 생산성 향상에 매우 효과적인 해결책이 될 수 있다.
그래서 이번 예제에서는 Python을 사용하여 Google Sheets에 액세스하고 데이터를 편집하는 방법을 상세히 설명한다. 이를 통해 업무 자동화를 위한 데이터 관리의 중요성과 구글 시트의 활용 가능성에 대해 알아보도록 한다.
이 예제에서는 Google Cloud Console을 사용하여 새 프로젝트를 생성하고 Google Sheets API를 활성화한다.
먼저, Google Cloud Console에 접속한다. (URL: https://console.cloud.google.com/)
새 프로젝트를 생성한다. 프로젝트 이름을 선택하고 "프로젝트 만들기" 버튼을 클릭한다.
생성한 프로젝트로 이동한 후, "API 및 서비스" 메뉴로 이동한다.
"API 및 서비스 사용 설정" 페이지에서 "Google Sheets API"를 검색하고 활성화한다.
"사용자 인증 정보" 메뉴로 이동하여 "사용자 인증 정보 만들기" 를 눌러 서비스 계정을 생성한다. 필요한 정보를 입력하고 "프로젝트 역할"을 선택한다. 이후 "만들기" 버튼을 클릭한다. (간단하게 소유자로진행)
생성한 서비스 계정의 링크를 눌러 이동한 페이지에서 키 탭을 선택해서 키 파일을 생성(키 추가>새 기 만들기>json선택>만들기)하면 "비공개 키가 컴퓨터에 저장됨" 화면이 보이고 json파일이 자동 다운로드된다. 이 파일은 Python 코드에서 인증에 사용한다.
자세한 내용은 아래 페이지를 참고하기 바란다:
이 예제에서는 Google Sheets 문서에 대한 액세스 권한을 부여한다. 액세스 권한을 부여함으로써 Python 코드에서 Google Sheets 문서에 데이터를 읽고 쓸 수 있다.
Google Sheets 문서에 접속한다. (URL: https://sheets.google.com/)
문서를 열고 "공유" 버튼을 클릭한다.
액세스를 부여할 이메일 주소를 입력하고 권한을 선택한다. 필요한 경우 편집 권한을 설정할 수 있다.
"저장" 버튼을 클릭하여 액세스 권한을 부여한다.
자세한 내용은 아래 페이지를 참고하기 바란다:
이 예제에서는 Python을 사용하여 Google Sheets에 액세스하고 데이터를 편집하는 방법을 보여준다. 예제에서는 필요한 라이브러리를 설치하고 인증 설정을 진행한 후, 데이터를 읽고 쓰는 방법을 안내한다.
필요한 라이브러리를 설치한다. 다음 명령어를 사용한다:
pip install gspread oauth2client
Python 코드에서 구글 시트에 액세스하고 데이터를 편집할 수 있는 인증 정보를 설정한다. 이를 위해 앞서 생성한 서비스 계정의 키 파일이 필요한다.
인증 정보를 사용하여 Google Sheets에 연결하고 데이터를 읽고 쓰는 코드를 작성한다. 예제 코드는 아래 페이지에서 확인할 수 있다.
자세한 내용은 아래 페이지를 참고하기 바란다:
이 예제에서는 Python을 사용하여 Google Sheets에서 데이터의 CRUD(Create, Read, Update, Delete) 작업을 수행하는 방법을 보여준다.
gspread 라이브러리를 사용하여 Google Sheets에 연결한다. 아래 코드를 참고하자.
import gspread
from oauth2client.service_account import ServiceAccountCredentials
# 인증 정보 로드
scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
creds = ServiceAccountCredentials.from_json_keyfile_name('credentials.json', scope)
client = gspread.authorize(creds)
# Google Sheets 문서 열기
sheet = client.open('시트_이름').sheet1
데이터 생성(Create): append_row 메서드를 사용하여 새로운 데이터를 시트에 추가한다. 예를 들어, 아래 코드는 새로운 행을 추가하는 방법을 보여준다.
data = ['John', 'Doe', 25]
sheet.append_row(data)
데이터 읽기(Read): get_all_records 메서드를 사용하여 시트의 모든 데이터를 읽다. 예를 들어, 아래 코드는 시트의 모든 데이터를 출력하는 방법을 보여준다.
python
records = sheet.get_all_records()
for record in records:
print(record)
데이터 업데이트(Update): update_cell 메서드를 사용하여 특정 셀의 값을 업데이트한다. 예를 들어, 아래 코드는 A1 셀의 값을 'New Value'로 업데이트하는 방법을 보여준다.
sheet.update_cell(1, 1, 'New Value')
데이터 삭제(Delete): delete_row 메서드를 사용하여 특정 행을 삭제한다. 예를 들어, 아래 코드는 첫 번째 행을 삭제하는 방법을 보여준다.
sheet.delete_row(1)
자세한 내용은 아래 페이지를 참고하기 바란다:
이렇게 예제 4에서는 Python을 사용하여 Google Sheets에서 데이터의 CRUD 작업을 수행하는 방법을 소개하였다. 필요에 따라 데이터를 생성, 읽기, 업데이트, 삭제하는 방법을 익히실 수 있을 것이다.
업무 자동화를 위해 구글 시트를 사용하는 경우, 때로는 구글 시트와의 연결 문제가 발생할 수 있다. 또한, 초당 오퍼레이션 수에 제한이 있는 경우에도 처리에 어려움을 겪을 수 있다. 이러한 문제들을 해결하기 위해 다음과 같은 접근 방법을 사용할 수 있다.
연결 문제 해결: 구글 시트에 연결하는 과정에서 연결 문제가 발생할 수 있다. 이를 해결하기 위해 재시도 로직을 구현하여 연결이 실패한 경우 일정 횟수만큼 재시도한다.
import time
import gspread
from oauth2client.service_account import ServiceAccountCredentials
scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
creds = ServiceAccountCredentials.from_json_keyfile_name('credentials.json', scope)
connected = False
retry_count = 0
while not connected and retry_count < 3:
try:
client = gspread.authorize(creds)
connected = True
except Exception as e:
print(f"연결 실패: {e}")
retry_count += 1
time.sleep(3) # 3초간 대기 후 재시도
if connected:
# 구글 시트 작업 수행
sheet = client.open('시트_이름').sheet1
# 데이터 생성, 수정, 삭제 등의 작업 수행
# ...
초당 오퍼레이션 수 제한 문제 해결: 구글 시트 API는 초당 오퍼레이션 수에 제한을 가지고 있다. 초과하는 경우, API 호출이 거부될 수 있다. 이를 해결하기 위해 호출 간격을 조절하거나 배치 작업을 사용하여 한 번에 많은 양의 데이터를 처리할 수 있다.
import time
import gspread
from oauth2client.service_account import ServiceAccountCredentials
scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
creds = ServiceAccountCredentials.from_json_keyfile_name('credentials.json', scope)
# 구글 시트 연결
client = gspread.authorize(creds)
sheet = client.open('시트_이름').sheet1
# 초당 오퍼레이션 수 제한을 고려하여 호출 간격 조절
def process_data(data):
# 데이터 처리 로직
# ...
# API 호출 후 대기 시간 추가
time.sleep(0.5) # 0.5초 대기
# 데이터 생성(Create): 초당 오퍼레이션 수 제한을 고려하여 호출 간격을 조절하며 데이터 추가
data = [
['John', 'Doe', 25],
['Jane', 'Smith', 30],
['Michael', 'Johnson', 35]
]
for row in data:
sheet.append_row(row)
process_data(row)
이렇게 구글 시트 연결 문제와 초당 오퍼레이션 수 제한 문제를 고려한 코드를 작성함으로써 안정적으로 데이터를 처리할 수 있다. 이 예제 코드를 통해 업무 자동화에 활용할 수 있는 방법을 보여주었다.
이번 블로그 글에서는 Python을 사용하여 Google Sheets와의 상호작용에 대한 예제 코드를 소개했다. 우리는 업무 자동화를 위해 구글 시트를 활용하는 이유와 구글 시트에 접근하고 데이터를 편집하는 방법을 살펴보았다. 또한, 구글 시트 연결 문제와 초당 오퍼레이션 수 제한 문제에 대한 해결책을 제시하고 해당 코드 예제를 소개했다.
구글 시트는 데이터 관리와 협업에 매우 유용한 도구이다. 특히 업무 자동화를 통해 시트의 데이터를 다루고 처리하는 경우, 현업 직원들에게 데이터에 쉽게 접근하고 편집할 수 있는 편리함을 제공할 수 있다. 또한, 연결 문제나 제한된 오퍼레이션 수와 같은 문제에 직면했을 때도 적절한 해결책을 사용하여 안정적으로 작업을 진행할 수 있다.
앞으로도 Python과 구글 시트외에도 엑셀을 활용한 데이터 관리와 업무 자동화에 대한 다양한 주제를 다루어볼 기회가 있을 것 같다.