NodeJS로 Google GA데이터 얻기

Jeong Woo Ahn

이번에 사내 프로젝트로 주요 GA지표를 시각화하는 작업을 하고 있는데 서버는 NodeJS, 프론트는 ReactJS로 작업을 진행중이다. 오랜만에 풀스택으로 작업을 진행하니 재미도 있지만 여러가지 장애물들이 많았다. 그 중 하나는 NodeJS로 구글 api연동하여 GA 데이터를 얻는 과정이었다. 사실 코드 자체는 단순하기 때문에 어렵지는 않았으나 몇 가지 서비스 설정들이 잘 소개가 안되어있어 삽질을 하느라 시간을 좀 보냈다. 그런 부분 중심으로 소개해본다. 기본 세팅은 nodejs-getting-started/1-hello-world에서 가져와 시작했다.

깃헙에 기본 코드를 올려놓았다.

사용된 패키지들

"dependencies": {
"body-parser": "^1.15.2",
"express": "^4.14.0",
"node-rest-client": "2.0.1",
"node-schedule": "0.1.8",
"googleapis": "^14.1.0",
"q": "^1.4.1",
"urlencode": "1.1.0"
},
"devDependencies": {
"cors": "^2.8.1",
"mocha": "^3.0.2",
"nodejs-repo-tools": "git+https://github.com/GoogleCloudPlatform/nodejs-repo-tools.git#21daa823090c43fb667157c8b5b0c3b7f45a8357",
"supertest": "^2.0.0"
}
  1. body-parser, urlencode : Node.js 바디를 파싱해주는 미들웨어. 클라이언트에서 온 Request의 바디부분을 req.body 프로퍼티안에 파싱해준다.
  2. express : Node.js를 위한 빠르고 개방적인 간결한 웹 프레임워크
  3. node-rest-client : nodejs-getting-started/1-hello-world에 기본으로 들어있는 패키지. HTTP GET요청을 보내고 응답받는 로직을 손쉽게 구현할 수 있다. 여기서는 사용하지 않았지만 매우 유용하다.
  4. node-schedule : 역시 nodejs-getting-started/1-hello-world에 기본으로 들어있는 패키지. 리눅스의 크론잡같은 역할을 하는듯. 여기서는 사용하지 않았지만 매우 유용하다.
  5. googleapis : 구글 공식 지원하는 구글 API Node.js 라이브러리이다.
  6. q : 프로미스 구현을 위한 라이브러리이다.
  7. cors : 브라우저에서 이 서비스를 통해 데이터를 가져가도록 구현하려면 CORS문제를 해결해야할텐데 이를 매우 쉽게 해준다. Express/Connect 어플리케이션 안에서 사용할 수 있는 미들웨어.

나머지 모듈은 구글 클라우드에 배포하거나 테스트하는 모듈인데 아직 사용해보지 않아서 설명을 추가로 달지는 않았다. 하지만 유용할듯하니 남겨둔다.

Installation

1. Google Api Console 서비스 계정(service account) 만들기

Server-to-Server 연동을 위해서는 키파일을 생성해야한다. 구글 API 콘솔 서비스계정에서 할 수 있다.

반드시 비공개 키 제공에 체크표시를 해야한다. 만들기를 누르면 파일이 다운될 것이다. 이 파일은 아래 키파일 변환에서 사용할 것이다.

2. 키파일 변환(key.p12 to key.pem)

다운받은 키를 그대로 사용할 수는 없고, 아래 명령어를 통해 위에서 받은 키파일을 변환하여 사용해야한다. 소스를 오픈할 계획이라면 이런 키파일은 오픈되지 않도록 조심해야한다.

openssl pkcs12 -in key.p12 -nodes -nocerts > key.pem

3. 계정정보 입력

SERVICE_ACCOUNT_EMAIL에는 1번에서 생성된 서비스 계정의 아이디를, SERVICE_ACCOUNT_KEY_FILE에는 1번에서 변환한 key.pem파일의 경로를 입력한다.

//app.js/*Google API Console Service Account ID*/
var SERVICE_ACCOUNT_EMAIL = 'yourservice-000@example.iam.gserviceaccount.com';
/*Google API Console Service Account Key*/
var SERVICE_ACCOUNT_KEY_FILE = __dirname + '/key.pem'

4. Google Analytics 설정

위에서 얻은 SERVICE_ACCOUNT_EMAIL에 데이터 접근 권한을 줘야한다. 우선 Google Analytics에서 관리 > 계정 > 사용자관리 화면으로 이동한 후 하단에 다음 사용자에게 권한 추가 폼을 통해 해당 이메일 계정을 등록해야한다. 위 예시의 경우에는 'yourservice-000@example.iam.gserviceaccount.com' 이 계정을 등록하면 된다는 말.

5. Google Analytics Api 파라미터 설명

//app.jsvar params = {
'auth': authClient,
'ids': 'ga:********',
'metrics': 'ga:sessions',
'start-date': '5daysAgo',
'end-date': 'today',
'dimensions': 'ga:date'
}
  • authClient : 키파일과 얻고자하는 권한 정보가 담겨있는 객체이다.
  • ids : Anaytics view id(한글로 보기 ID)라고 하며 ga: prefix와 함께 쓴다. 구글분석도구 관리페이지에서 찾을 수 있는데 처음에는 찾기 쉽지않다. 계정ID로 착각하기 쉬운데 아니다. 아래 그림을 보면,
  • 위처럼 관리자 화면에서 반드시 계정, 속성, 보기를 잘 선택한 후 설정 보기를 클릭한다. 그러면 아래와 같은 화면을 확인할 수 있을 것이다. 아래 화면에서 보기ID를 카피하면 된다.
  • 더 자세한 안내가 필요하다면 Find your Google Analytics Tracking ID & View ID를 볼것.
  • metrics와 dimensions 속성은 Google Analytics로부터 얻고자하는 데이터의 타입에 대한 정보를 담고 있으며 위 예시에서는 웹사이트의 세션 수를 날짜별(x축)로 얻을 수 있다. 이는 쿼리 탐색기를 통해 테스트해볼 수 있고, 몇 번 해보면 직관적으로 이해가 될 것이다. 이 속성에 어떤 값을 세팅할 수 있는지는 Dimensions & Metrics Explorer를 통해 검색할 수 있다.
  • start-date, end-date : 데이터 쿼리를 보낼때 날짜 범위를 설정한다. 하루 단위를 보고 싶다면 두 속성을 동일한 날짜로 설정하면 된다.

6. 설치

$ npm start

참고

Jeong Woo Ahn

Written by

그림그리는 프로그래머 instagram@you_and_mydrawing | working at habitfactory.co

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade