Post

사용자 클릭 분석하기: Django와 JavaScript로 클릭 트래커 구축하기

Click Event 를 트래킹해보자


우리 사이트에서 사용자들이 어떤 곳을 많이 클릭하는지 확인해보고 싶었다. 사실 어떤 페이지에 들어갔는지는 쉽게 파악이 되지만 어디를 클릭했는지는 확인하고 있지 않았다. 따라서 tracker 를 하나 만들어서 넣기로 했다.

tracker.js django 로 띄우기


우리 서비스와는 아예 별개로 만들어서 우리 서비스 이외에도 사용 할 수 있게 만들고 싶었다. django 로 띄우고 js 도 cdn 처럼 다른 곳에서 import 할 수 있도록 하려고 한다.

가장 기본적인 js코드는 다음과 같다. 사용자의화면 사이즈도 알고 싶어서 width, height 를 넣었고 width 에 따라 click 은 달라질수있기에 어느 element 를 눌렀는지도 추가하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function getElementSelector(element) {
	if (!(element instanceof Element)) return '';
	const tag = element.tagName.toLowerCase();
	const id = element.id ? `#${element.id}` : '';
	const classes = Array.from(element.classList).map(cls => `.${cls}`).join('');
	return `${tag}${id}${classes}`;
}

window.document.addEventListener("click", (position) => {
	// django 로 request 보내도록
	sendReport("click", {
		payload: {
			width: window.innerwidth,
			height: window.innerHeight,
			x: position.pageX,
			y: position.pageY,
			el: getElementSelector(position.target)
		}
	})
})

그럼 django에서 이렇게 request 를 받는다

1
2
3
4
5
6
7
8
@router.post("/click")
async def add(request: Request):
	json_data = await request.json()
	new_row = Click(date=datetime.now(), **json_data)
	# width,height,x,y,el이 들어간 Model이다
	with db.session() as session:
		session.add(new_row)

이 django 띄우고 우리 사이트에서

1
<script nonce="$cspNonce" data-group="qna" src="https://{django}/static/tracker.js"></script>

하여 사용하면 된다! 아주 잘 동작하고 사용자들이 사용하지 않는 기능을 쉽게 알아 챌 수 있다!!

This post is licensed under CC BY 4.0 by the author.

© 병욱. Some rights reserved.