구글애널리틱스 IQ 시험 후기

스타트업에 있다보니 지표 측정이 중요하다. 아무래도 경력이 있다보니 어깨너머로 들은 지식들은 있지만 지표측정에 대해 정확히 안다고 이야기할 수는 없었다. 그렇다고 요즘 유행하는 강의를 듣기에는 비용부담이 만만하지 않았다.

GA 강사들의 프로필을 보다보니 Google 애널리틱스 공인 전문가 자격증(GAIQ)이 빠지지 않는다는 것을 알게 되었다. 아직은 회사규모가 지표만 분석하는 사람을 뽑기에는 어려움이 있어서 내가 공부하고 적용해보기로 마음먹었다.

그렇지 않아도 GA 와는 인연이 있다. 예전 KTH 에 입사해 처음 작업한 일이 바로 이벤트 측정 코드를 곳곳에 심는 일이었다. 그렇게 대략 200개 정도의 이벤트 코드를 꽂았다. 그런 이유로 GA SDK 레퍼런스도 꽤 여러번 봤었다.

시험 준비는 구글의 가이드 대로 Google Analytics Academy 의 Digital Analytics Fundamentals 강의를 보았다. (개편 후에 Google Analytics Platform Principles 까지 포함되었다고 알고 있다. )그리고 “구글 애널리틱스” 책을 한 번 다 읽었다. 강의는 영어로 되어 있지만 PDF 파일이 지원되고, 자막을 켜고 보아서 많은 도움이 되었다.

처음부터 끝까지 3번 정도 영상을 봤는데 주로 웹분석의 프로세스와 구글 애널리틱스의 기초적인 사용법에 대해 강의한다. 더 자세한 특색에 대해서는 구글 애널리틱스 도움말을 한 번 살펴본 것이 더 좋았다.

마침 사이트 런칭 직전이라 야근이 꽤 많았기 때문에 주말에만 시간이 조금 나서 대략 2개월정도 소요되었다. 동영상을 두번 보고 나서 구글의 테스트 센터에 가서 50달러를 결제하고 영어로 시험을 쳤다.

첫 시험은 사실 간만 본다는 마음으로 쳤다. 오픈북이 가능하지만 시험범위 등을 알아보는게 목적이어서 열어보지 않고 테스트를 봤고 예상대로 떨어졌다. 구글 애널리틱스의 도움말을 자세히 살펴봐야 한다는 것을 알게 됐다.

점수는 예상보다는 나쁘지 않았다. 70문제 80% 통과인데 74%로 아쉽게 탈락했다. 재시험은 2주 후에 가능했기 때문에 그 때까지 공부를 더 해야겠다고 생각했다. GAIQ첫시험 결과 74%로 불합격

어찌어찌 시간이 지나고 2주가 지났는데 짬이 안돼 1달만에 시험을 봤다.

그런데 구글 애널리틱스 시험이 기존 테스트센터에서 사라져서 당황했다. 아직 재시험을 볼 수 없게 된 것인지 싶었다. 그래서 다른 개인 계정으로 시험센터에 재접속해보니 그냥 시험이 테스트 센터에서 사라진 것이었다.

이제 GAIQ 시험 방식이 변경되어서 이제 시험을 무료로 볼 수 있다. 시험은 http://partners.google.com 에서 볼 수 있으며 이제는 한글 시험도 제공된다.

재시험을 준비하면서 이전에 공부했던 내용에 비해 조금씩 추가된 내용이 있는 것 같다는 느낌을 받았는데 아마도 이번 개편과 관련된 것으로 보인다. 물론 문제도 처음 시험볼 때 봤던 문제들이 많이 출제되었지만 못 풀어서 기억에 남았던 문제중 하나는 사라졌고, 처음보는 문제들도 추가되는 등 조금 달라졌다. 무엇보다 무료로 풀린게 속이 쓰렸다.

그리고 결과는 92% 합격이었다. GAIQ 인증서 시험을 보다보니 영어로 공부한 내용을 한글로 시험을 보려니 용어 등에서 어려움이 있었다. 강의자료들이 영어로 되어 있으니 되도록 그냥 영어로 시험을 보는 것을 추천한다.

이제 기본준비는 다 되었다. 하지만 이제야 대략 틀을 잡은 것 뿐이고 공부할 것이 무척 많다는 것도 알게 되었다. 웹분석은 전문분야는 아니어서 한계는 있겠지만 조금 더 관심을 가지고 알아보려고 한다.

VirtualBox – Vagrant Disk IO 성능개선 방법

  • VirtualBox 에서 제공하는 공유폴더 기능은 심각한 퍼포먼스 저하가 있다. 따라서 다른 방법으로 파일을 공유하는 것이 성능에 훨씬 유리하다.

    • 참고: Vagrant 개발자인 Mitchell Hashimoto 의 VM 내 파일시스템 성능비교 https://mitchellh.com/comparing-filesystem-performance-in-virtual-machines

    • 해결법 – shared folder 를 NFS 로 공유하기 또는 Rsync 로 공유하기 (Rsync는 Vagrant 1.5 이상에서 동작)

      • NFS 로 만드는 방법 간단요약 – 참고: https://coderwall.com/p/uaohzg https://docs.vagrantup.com/v2/synced-folders/nfs.html

        • Host only Adapter 추가 – Virtualbox > VM

        • private_network 행 추가 – Vagrantfile

        • shared_folder 에 type: nfs 추가 – Vagrantfile

      • Host OS 의 /etc/exports (NFS 설정 파일) 에 Vagrant 가 자동으로 행을 추가하기 때문에 vagrant up 도중 sudoer 패스워드 물어봄

    • Rsync 는 일반적인 Rsync 와 동일하게 동작한다. Guest 와 Host 양쪽에 rsync 명령어가 있으면 활용이 가능하다. 윈도우에서도 msysgit, MinGw, Cygwin 에서 Rsync 기능 제공 중

      • 다른 shared folder 타입들과 달리 rsync 명령어를 활용하기 때문에 Rsync 는 vagrant up 때 한번 싱크. 따라서 자동으로 파일 변화를 감지해 싱크를 맞춰주는 vagrant rsync-auto 를 사용해야 함.

램디스크로 더 빠른 개발환경 구축하기

최근에 한 웹앱 프로젝트를 완료했다. 이 프로젝트를 진행하면서 램디스크를 오랫만에 사용해보게 됐다.

웹앱은 특히 HTML템플릿을 많이 사용했는데 그 특성상 처음 퍼블리싱된 파일이 너댓개 템플릿으로 분리되는 것이 예사였다. 파일이 많아지면서 프로젝트 내에서 파일이름을 검색해 여는 단순한 작업도 은근히 느려지는 것을 느꼈다. 그리고 파일 내부 검색에도 시간이 오래걸렸다.

처음에는 SSD 로 업그레이드를 해야하는가 고민했지만 마침 얼마전 램을 16GB로 업그레이드 하면서 평소 메모리 사용량이 꽤 많이 남게 되어서 활용하기로 했다.

램드라이브를 사용하게 되면서 파일이름을 검색하든 파일 내부를 검색하든 버벅거림이 전혀 없고 아주 만족하며 사용중이다. 파일을 이용하는 모든 작업이 매우 빨라졌다. git 이 속도가 빠른 이유는 로컬에 저장하기 때문인데 램디스크를 사용하면 브랜치 이동 등이 더 빨라진다.

스크립트 소개

아래 스크립트는 OSX 에서만 동작한다. 램디스크를 만들고, 어플리케이션을 실행하는 부분들이 특히 그렇다. 소스는 http://github.com/elegantcoder/ramdisk 에 있다.

스크립트는 Makefile 로 되어있다. 쉘스크립트를 사용할 수도 있었겠지만 arguments 로 분리하는 것을 해본적이 없어서 섹션을 쉽게 나눌 수 있는 Makefile 을 사용했다.

타겟

start
램디스크를 만들고 하드디스크의 프로젝트 파일을 램디스크로 카피해둔다.
stop
make copy 를 실행하고 램디스크를 제거한다.
sync
주기적으로 make copy 를 실행한다.
apps
작업을 시작하면서 필요한 어플리케이션들을 실행하도록 했다. 나의 경우는 터미널, Sublime Text 와 Source Tree 를 실행하도록 했다.
copy
램디스크의 파일을 하드디스크에 복사하는 작업을 한다. rsync 를 사용해보기도 했는데 잠시 생성했다 지운 파일도 복사되는 경우가 있어서 파일을 삭제하고 다시 넣도록 했다. 특히 git 브랜치 이동시에 문제가 발생하는 경우가 많다. 그리고 새로운 이름으로 복사 후 이름을 바꿔주는 편이 안전하다고 생각해 그렇게 구현했다.

변수

새로 작성시에 변수의 마지막 슬래시에 특히 주의해야 한다.

srcPath
하드디스크 내의 소스디렉토리 이다. ex) ~/Development/project
volumeName
만들어질 램 디스크의 볼륨이름이다. 띄어쓰기 금지
targetPath
램디스크가 위치할 볼륨 디렉토리이다. 수정금지.
projectPath
램디스크내 프로젝트가 위치할 디렉토리이다. 램디스크의 root 디렉토리에는 시스템 파일등이 위치하게 되므로 파일을 복사하기가 좋지 않아 볼륨의 루트에서 한단계 아래 디렉토리에 프로젝트를 위치시켰다.
size
만들어질 램디스크의 크기이다. 단위는 섹터 수이다. 섹터는 512byte 단위이므로 아래 공식을 사용하면된다. (1GB*1024byte^3)/512byte.
syncInterval
초단위로 싱크할 주기를 넣는다. 1200 이라면 20분에 한번꼴이다.
tempDir
파일 복사에 사용할 임시디렉토리이다. 현재 시간의 md5 해시 스트링을 사용하도록 해서 무작위로 생성되도록 했다. 굳이 수정할 필요는 없다.

참고

웹호스팅환경에서 git push 때 자동으로 pull 하기

ssh, bare repository, post-receive hook 을 사용해 로컬저장소에서 push 하면 호스팅 서버에서 자동으로 pull 받을 수 있는 환경을 꾸며봅니다.

Bitbucket 에서 private 저장소를 만들어 버전관리를 하고 있는 프로젝트가 있다. 웹 프로젝트이고 이 프로젝트의 결과물은 Cafe24 에 월 500원짜리 웹호스팅에서 서비스된다.

처음엔 remote origin 을 Bitbucket 으로 두고, 이 저장소를 통해 로컬과 호스팅 서버간의 통신을 했다. 소스를 고치고 push 하고, 호스팅서버의 커맨드라인에서 pull 을 해야했으니 매우 불편했다. ftp 때는 저장만 하면 자동으로 ftp 로 올려주는 프로그램도 있었는데, 더 좋은 도구를 쓰는데 해야할 일은 더 많아졌다.

물론 이럴 때 쓰기 위해 hook 이 존재하는 것이다. 호스팅서버에서 커맨드라인으로 git을 지원하므로 호스팅 서버에 베어 저장소를 만들어 hook 을 걸었다.

아래는 그 과정이다.

호스팅서버에서 git bare 저장소를 만든다.

[email protected] $ git init --bare ~/myproject.git

git bare 저장소의 .git/hooks/post-receive.sample 파일을 편집해 post-receive 로 다시 저장한다. 나의 경우는 아래 처럼 했다. 아래 내용은 getting “fatal: not a git repository: ‘.’” when using post-update hook to execute ‘git pull’ on another repo 에서 참고했다.

cd ~/myproject || exit
unset GIT_DIR
git pull origin master

호스팅 서버에 서비스 디렉토리를 만들고 bare 저장소를 clone 해둔다.

[email protected] $ git clone ~/myproject.git ./myproject

이미 존재하고 있는 로컬 저장소에서 새로운 git bare 저장소를 origin 으로 설정하고, push 한다. 기존의 Bitbucket 프로젝트는 bb 라는 이름으로 다시 저장했다. (이미 origin 이 존재한 경우만 아래와 같이 한다. origin 이 없었던 경우에는 clone 으로 한다.)

[email protected] $ git remote rename origin bb
[email protected] $ git remote add origin [email protected]:~/myproject.git
[email protected] $ git push origin master

로컬저장소에서 내용을 변경해 push 해 테스트한다.

[email protected] $ git commit -am "hook test"
[email protected] $ git push origin master

처음부터 hook 을 사용할 것을 생각하지 않아 remote origin을 지우고 다시 넣고 하긴 했지만, 작업을 진행하면서 계속 머리속을 맴도는 질문이 있었다.’이런 작업을 svn 에서는 어떻게 처리했지?’

서버를 떼어다 옮기거나 리모트 스크립트를 호출하지 않으면 중앙집중식에서는 이와 같은 방법으로는 처리할 수가 없다. 이것이 바로 중앙집중저장소와 분산저장소의 차이가 된다. 여러 서버 저장소를 두고 선택적으로 push 할 수 있다는 점. 이것이 분산 버전관리의 장점이라고 생각한다.

p.s

  • cafe24 의 git 을 활용하면 월 500원짜리 private git 저장소를 만들어 사용하는 것도 가능하다.
  • 호스팅 서버에 Bitbucket 저장소도 remote 로 추가하고 hook 에서 git push bitbucket 이라는 라인도 추가해놓으면 push 한번에 bitbucket 과 호스팅 서버에 동시 저장도 가능하겠다.

Facebook Comment 를 Disqus 로 내보내는 FB2Disqus

페이스북의 Social comment 를 잘 사용하고 있었지만, Disqus 로 옮기고 싶었다.

페이스북 사용자가 아니면 댓글을 달기 어려운 면이 있기 때문에 좀 더 확장하고 싶었다. 그리고 더 큰 이유는 디자인 이었다.

블로그를 새로 꾸미면서 블로그 글 영역을 가변폭으로 만들었는데 Facebook 의 social comment 는 고정폭 만 지원하고 있다. 그리고 페이스북의 댓글창보다는 Disqus 의 디자인이 더 아름다워 보이고 내 블로그에 더 잘 어울린다는 생각이 들었다.

Exporter 쯤은 있겠지 생각만 하고 있다 검색해보니 나오질 않아서 하나 만들게 되었다.

우선은 요즘 주로 사용하고 있는 Coffeescript 로 만들려고 했다. 마이그레이션은 필요한 데이터를 모으고 재구성해서 다시 API를 호출해야 하는 과정인데, 이 과정을 비동기식으로 작성하려니 괜히 헷갈리고 코드 모양은 안나니 기분이 좀 상했다. 그 덕에 Promise 공부만 더 하게 됐다.

그래서 오랫만에 PHP로 작업했다. 두 서비스 모두 PHP SDK 를 지원하고 있어서 어렵지 않게 구현할 수 있었다.

Disqus 에서 작성자의 프로필 사진을 강제로 넣을 수가 없어 프로필 사진은 이전하지 못했지만 우선은 만족. Github 에 올렸다. FB2Disqus on Github

테스트가 없는 것과 FQL 을 쓰면 좀 더 나을 뻔 했는데, 뭐 그건 문제가 생기면 작성하기로 하고..

그나저나 댓글창도 바뀌었는데 댓글 하나 달아주지 않으시렵니까? 🙂

Facebook social comment export to Disqus

FB2Disqus on Github