웹에서 특정 영역 노출수 및 체류 시간 측정
WebAPI 에서 제공되는 Observer 활용
개발이 완료된 웹 컴포넌트들의 사용성 측정을 위해 노출수 및 체류 시간을 측정해야 할 일이 있어서 간단히 구현했다. AI 가 어느 정도 작성해준 코드를 가지고 필요한대로 요리조리 수정해서 나의 코드로 만들었는데 꽤나 잘 동작하는 듯 보인다. 대단한 코드는 없고 IntersectionObserver, MutationObserver 활용했는데 관련하여 찾아본 내용을 올려둔다.
먼저 두 개의 Observer 는 Web API 를 활용하는데 웬만한 최근 버전 브라우저는 이를 지원하기 때문에 사용하는데 지장은 없었다. 5년 전의 legacy code 를 보면 이 API 를 사용하기 위해 polyfill 코드를 불러와서 Observer 를 동작하게 하는게 있던데, 이전엔 브라우저들에서 이를 지원하지 않는 경우가 좀 있지 않았나 추측해본다.
각각의 특징을 살펴보면,
IntersectionObserver- 스크롤하다가 어떤 요소가 화면에 등장하거나 사라질 때를 감지
- lazy loading, 무한 스크롤, 광고 노출 집계 등에 활용
- 장점
- 스크롤 이벤트 직접 처리보다 성능 좋음
- throttle/debounce 필요 없음
- 비동기 방식으로 메인 스레드 부담 적음
- 단점
- iframe 외부에서 내부 관찰은 불가
- 오래된 브라우저(IE) 지원하지 않으면 Polyfill 필요
MutationObserver- DOM 요소의 구조 변화(추가/삭제/속성 변경/텍스트 변경 등)를 비동기적으로 감지
- DOM 요소 추가/삭제, 속성(class, data-* 등) 변경, 텍스트 변경 등
- SPA(React/Vue)에서 DOM 감지 외부 스크립트 삽입 감지
- 광고, 외부 위젯 로드 감지 요소가 언제 삽입되었는지
- 보안/무단 DOM 변경 감지 XSS 탐지 등
- 변화 이벤트가 많으면 부하 클 수 있음, iframe 내부 동일 origin 이면 탐지 가능
그 외에는 아래와 같은 Observer 들도 있다고 한다.
ResizeObserver- 요소의 크기 변화 추적PerformanceObserver- 웹 성능 관련 이벤트 추적ReportingObserver- 브라우저 레포트 (deprecations 등)
프로젝트에서 intersection observer 는 스크롤되는 영역의 조회가 어떻게 일어나는지를 추적하고, mutation observer 는 팝업 내 사용자 입력에 따라 변화하는 영역의 데이터를 추적하려고 한다. 처음엔 아주 간단히 노출수와 체류 시간, 이렇게 두 가지만을 트래킹하여 1회 노출당 평균 체류 시간이 높은 데이터 등을 찾아보는 것이 목적이다. 개발 전 수립한 가설에 맞게 결과가 나오기를 바라며.
This post is licensed under CC BY 4.0 by the author.