2020년대 들어 최신 IT 비즈니스 환경에서는 고객 물류/영업 데이터가 더 이상 개인의 로컬 PC 엑셀 파일이나 외장 USB에 조잡하게 담겨 파일로 전달되지 않습니다. 대다수의 애자일한 스타트업과 주요 빅테크 기업들은 기획팀 실시간 협업을 위해 구글 스프레드시트(Google Sheets)를 메인 장부로 삼고 있으며, 막대한 기가바이트(GB) 이상의 서버 로그 데이터 레이크를 보관하기 위해 초대형 인프라인 구글 클라우드의 빅쿼리(BigQuery) 데이터 웨어하우스를 핵심망으로 활용하고 있습니다.
다행스럽고 경이롭게도 우리의 통계 툴 R은 구글의 이 거대한 클라우드 데이터 API 생태계와 서버 측에서 직통 고속도로로 다이렉트 연결되는 검증된 공식 패키지 라이브러리를 완벽하게 지원합니다. 복잡한 OAuth 권한 토큰 인증부터 굳이 타 언어 데이터베이스 쿼리(SQL)를 쓰지 않고 평소 배운 R(dplyr) 문법 그대로 데이터를 투명하게 당겨오는 마법 같은 연결 최신 프로세스를 알아봅니다.
1. 구글 스프레드시트의 라이브 실시간 API 연동: googlesheets4
다른 팀원이 동시 편집하고 있는 구글 시트를 CSV 엑셀 파일로 매번 일일이 다운로드해서 로컬 바탕화면에 저장하고, 파일명 뒤에 “_최종_진짜최종”을 적어 다시 R로 지저분하게 불러오는 번거로운 수동 다운로드 작업은 그만! 퍼블릭 웹 브라우저 URL 단 하나만 복사해서 붙여넣으면, R 엔진이 구글 드라이브망의 실시간 최신 라이브 데이터를 다이렉트 컨테이너로 빨아들여 끌어옵니다.
# install.packages("googlesheets4")
library(googlesheets4)
# 1. 대상 구글 시트의 웹 공유 긴 URL 주소를 그대로 문자 변수에 복붙하여 집어넣기
sheet_url <- "https://docs.google.com/spreadsheets/d/1U6Cf_qEOhiR9AZqTqS3mbMF3zt2db48ZP-어쩌구저쩌구"
# 2. R로 구글 시트 라이브 불러오기 (특정 하단 시트 탭 이름과 셀 범위를 엑셀 패키지처럼 조준 지정 가능)
my_g_sheet <- read_sheet(
sheet_url,
sheet = "Asia", # 시트 내 다중 탭중 이 탭만 콕 찝어라
range = "C1:F17" # 불필요한 테두리 다 빼고 이 알맹이 셀 박스 범위만 가져와라
)
> ✔ Reading from "데이터수집장부"
> ✔ Range 'Asia!C1:F17'
> # A tibble: 16 × 4
> ...
처음 이 read_sheet() 코드를 R 스튜디오에서 엔터를 쳐 돌리면, 갑자기 R 콘솔이 멈추고 팝업이 뜨면서 여러분의 기본 모바일/인터넷 웹 브라우저 창이 열리며 “해당 앱이 구글 계정에 접근을 요청합니다” 동의 인증 허가 화면이 뜹니다. 보안 권한을 “허용” 체크 클릭 한 번만 해주시면 곧바로 R 콘솔 창에 최신 상태의 tibble 프레임 데이터가 안착하여 뿌려집니다.
2. 기가바이트(GB)/테라급(TB) 슈퍼 빅데이터, 클라우드 구글 빅쿼리(BigQuery) 연결망 개통
마케팅 로그 이벤트 데이터 1년 치가 수백만, 수천만 줄을 가볍게 넘어가는 순간 여러분의 개인 PC 메모리나 엑셀, 심지어 일반 로컬 R 프로그램도 메모리(RAM) 부족 에러를 뿜으며 완전히 퍼져버립니다. 데이터를 내 컴퓨터로 다운받는 대신 분석 통신 파이프라인만 살짝 연결해두고 연산은 구글의 슈퍼컴퓨터 서버에서 처리하도록 GCP BigQuery 와 R을 브릿지로 연결해 봅시다.
# 클라우드 데이터베이스망(DB) 필수 패키지 삼총사 엔진 세팅 빌드
# install.packages(c("DBI", "bigrquery", "dbplyr"))
library(DBI)
library(bigrquery)
library(dbplyr)
# 1. 팝업을 띄워 구글 클라우드 접근용 내 이메일 계정을 선 인증 통과 창 띄우기
bq_auth(email = "my_email@gmail.com")
# 2. 구글 클라우드 슈퍼서버와 내 초라한 R 스튜디오 사이에 양방향 터널 '통신 파이프라인' 개통하기 설치!
bq_con <- dbConnect(
bigrquery::bigquery(),
project = "my-gcp-project-name", # 회사 GCP 마스터 프로젝트 아이디(ID)
dataset = "sales_database", # 타겟하는 빅쿼리 내의 데이터셋(거대폴더) 이름
billing = "my-gcp-project-name" # 과금 대상이 될 결제 카드 프로젝트 바인딩
)
3. 데이터베이스 쿼리어(SQL)를 하나도 몰라도 된다고? R 코드가 100% 자동 번역되는 dbplyr 마법 엔진
성공적으로 빅쿼리와 접속 통신 파이프라인 인터페이스(bq_con)가 뚫렸습니다. 놀랍게도 이 시스템 체계에서는 SELECT * FROM WHERE LIMIT 같은 어지러운 데이터베이스 랭귀지(SQL)를 서버 측에 1줄도 적어 보낼 필요가 없습니다. 내 로컬에 데이터가 다운로드 된 적도 없지만 마치 내 로컬 메모리에 있는 것처럼 사기를 쳐서 코딩하면 알아서 번역됩니다!
# 데이터베이스 서버 공간 안에 대체 어떤 테이블 파일(엑셀 시트 같은 것)들이 있는지 원격 목록 보기 탐지
dbListTables(bq_con)
> [1] "user_order_info" "sales_2023_log" "event_catalog"
# 목표 테이블 하나를 원격 타겟팅 포인터 걸기! (★★★ 중요: 이 순간에도 내 컴퓨터로 기가바이트 데이터가 실제 다운로드 구동 당겨온게 아니라 주소록 포인터 홀딩만 잡은 가상 상태입니다!)
target_table <- tbl(bq_con, "user_order_info")
# 평소 하던대로 그저 단순무식하게 R dplyr 패키지 파이프(|>) 동사 코드를 로컬처럼 쭉쭉 타이핑 씁니다.
target_table |>
filter(결제액 > 50000) |>
select(회원번호, 결제액) |>
head(5)
> # Source: SQL [5 x 2]
> # Database: BigQueryConnection (GCP Cloud)
> 회원번호 결제액
> <chr> <dbl>
> 1 USER-001 150000
> 2 USER-002 85000
> 3 USER-024 662000
> 4 USER-098 98000
> 5 USER-119 50500
출력 헤더에 Source: SQL 이라고 찍힌 증거 꼬리표가 보이시나요? tbl()로 가짜(가상) 테이블 타겟을 잡고 dplyr 문법 코드 함수들을 쓰면, 기특한 dbplyr 생태계가 내부적으로 백그라운드 엔진에서 “알아서 제일 문법이 완벽히 최적화된 똑똑한 SQL 쿼리문으로 영문 번역(Translation)”하여 구글 빅쿼리 서버 슈퍼컴에 인터넷으로 쏘아 던지는 구조입니다.
즉 계산 과부하 부담은 구글의 무적 서버가 전부 몸빵해서 지고, 처리된 순수 결과인 딱 5동강의 행들(겨우 2KB)만 우리 화면에 결과물로 보내줍니다. 저장 용량과 처리 성능이 무제한에 가까운 클라우드 컴퓨팅 파워를 단일 R 스크립트 도화지 안에서 평소 dplyr 언어만으로 마음껏 마에스트로처럼 지휘해보세요!
당신이 좋아할 만한 콘텐츠
by Google Adsense