본문 바로가기
Study/개발자 블로그

직방이 사용자 행동 로그를 관리하는 방법. ZAMS

by 22 김예진 2023. 11. 28.

링크 : https://medium.com/zigbang/%EC%A7%81%EB%B0%A9%EC%9D%B4-%EC%82%AC%EC%9A%A9%EC%9E%90-%ED%96%89%EB%8F%99-%EB%A1%9C%EA%B7%B8%EB%A5%BC-%EA%B4%80%EB%A6%AC%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95-zams-801c49cf0ad1

 

직방이 사용자 행동 로그를 관리하는 방법. ZAMS

사용자 행동 분석 로그 코드의 데이터 오류 및 누락 문제를 해결하기 위해 새로운 시스템을 개발했습니다.

medium.com

 

1. 직방

 직방은 국내 최초로 오프라인의 부동산 매물을 온라인 세계로 이끈 기업입니다. 부동산을 뜻하는 PROPERTY와 기술을 뜻하는 TECHNOLOGY의 합성어인 프롭테크의 선두주자입니다.

 직방은 기본적으로 부동산 매물 검색 서비스를 중심으로 구성된 복합적인 시스템을 가지고 있습니다. 사용자들이 부동산 매물을 찾고 거래하는데 필요한 정보와 도구를 제공합니다. 또한 최근 다양한 기술 연구를 통해 VR기술을 이용한 부동산 소개 기술도 선보이며 성장하고 있습니다.

 

 

2. 사용자 행동 분석 로그

 사용자 행동 분석 로그는 사용자의가 서비스를 사용하는 행동 흐름을 파악하여 분석한 자료로 중요한 비즈니스 지표가 됩니다. 그 예시로 웹사이트 페이지뷰, 스크롤, 클릭이 있습니다. 이를 분석해서 UI/UX 최적화, 마케팅 전략 활용, 이상행동 감지에 사용됩니다. 

 

- 직방의 기존 사용자 로그 작업 방식

 데이터 분석팀은 기능에 포함해야할 사용자 행동로그 리스트를 사진처럼 구글 시트로 FE팀에 전달해주고 FE 개발자는 코드를 작성하여 서비스에 반영하는 방식입니다. 

 

- 기존 업무 방식의 단점

  • 구글 시트의 가독성 문제

: 구글 시트는 양이 많아질수록 가독성을 해칩니다. 또한 수정한 부분만 전달하기도 어렵습니다.

  • 커뮤니케이션 미스

: 구글 시트는 실시간 수정이 가능하기 때문에 개발자가 이미 서비스 코드에 작업을 한 상태라면 해당 부분이 반영이 안될 수 있습니다. 또한 글로만 표현하지 못하는 부분이 있습니다.

  • 로그 관리에 최적화 된 툴의 필요성

: 구글 시트나 위키같은 툴 자체가 사용자 로그 관리에 최적화되어있지 않습니다.

 

3. ZAMS

: Zigbang Analytics Managment System의 약자로, 직방에서 사용하는 사용자 행동 분석 로그를 관리하는 시스템

 

- ZAMS의 작업 방식

1. 데이터 분석팀은 ZAMS에서 제공하는 입력 템플릿에 맞게 쌓아야할 데이터의 형식을 입력합니다. ZAMS는 새롭게 입력된 데이터를 “개발요청” 상태로 설정합니다

2. 입력을 완료한 후 개발자에게 할당하면, 개발자는 ZAMS의 “라이브러리 배포" 버튼을 눌러 npm 라이브러리로 해당 데이터들을 배포합니다. 배포 완료 후 ZAMS는 슬랙 알림으로 배포한 개발자에게 알림을 줍니다.

3. 알림을 받은 개발자는 개발 요청 상태에 해당하는 로그를 확인하고 배포된 모듈 버전을 설치하여 코드를 작성합니다. 이 때 함수 복사(코드 스니펫) 기능을 이용하면 작성해야 할 코드를 간단하게 생성할 수 있습니다. 클립보드에 해당 함수에 필요한 파라미터 값들을 설명과 함께 복사해줍니다.

 

4. 개발자는 해당 함수가 호출되어야하는 곳에 라이브러리를 import 한 후 클립보드를 붙여넣고 동적 파라미터 값을 설정합니다.

클립보드 복사값(좌) — 동적 파라미터 수정(우)

 

 

- ZAMS의 주요 기능

1. 라이브러리 배포

  • 타입스크립트 & Ajv 를 통한 유효성 검사
변경 전 (좌)— 변경 후(우)

 즉, 라이브러리를 통해 배포가 되었기에 그 형식이 정해져 있어서! 

타입스크립트를 통해 빌드타임 동안 정확성을 점검하고 AJV를 통해 런타임 동안 유효성을 점검하여 실수 가능성을 줄일 수 있음!

 

  •  시스템에 반영할 때, 입력해야하는 값 중에 동적으로 설정해야하는 값들은 몇개 없다는 특징이 있다. 따라서 정적인 값은 라이브러리가 입력을 해주고 동적으로 입력해야하는 값만 개발자가 작성하도록 함

 

  • vscode의 IntelliSense를 통해 해당 사용자 로그 함수를 더 상세히 확인 할 수 있게 도와줌
코드 에디터 intelliSense 툴팁

 

2. 로그 그룹핑

 사용자 로그는 대체로 흐름을 가지고 있습니다. 따라서 각 로그를 이벤트 < 스크린 < 페이지 < 그룹 으로 그룹핑하여, 관련있는 로그들끼리 묶어 줄 수 있는 기능을 가지고 있다.

3. 스크린샷 위에 이벤트 표현

 잼스의 특이한 기능은 로그 이벤트의 발생시기를 더 잘 표현할 수 있는 도구로 DnD(Drag and Drop) 을 활용한 것입니다. 개발자는 설명 글 뿐 아니라 이미지위의 마커를 통해 발생 시점을 더 잘 파악할 수 있게 만들었습니다.

4. 로그 상태 관리

로그 상태관리 워크플로우

 잼스는 JIRA의 워크플로우를 기반으로 로그 상태를 관리합니다. 이는 FE개발자와 데이터 분석가 간의 커뮤니케이션 비용을 줄이고, 각 로그들의 현황을 원활히 파악할 수 있습니다. 

또한 각 상태의 변이를 제한하여 작업자의 실수를 방지 할 수 있었습니다. 관계자들은 상태관리 기능으로 아래의 목록 화면에서 작업들이 현재 어떤 상태인지 필터링 할 수 있게 되었습니다.

 

+ 개선해야할 점

  • 다양한 서비스에 대한 대응 : 현재의 ZAMS 버전은 직방 서비스만 고려되어 있기에 또 다른 여러 프로젝트에 적용할 수 있도록 범용성을 높여야함.
  • 코드 스캔 기능 추가 : 로그 발송 코드가 누락되는 것을 방지하기 위해 탑재해야함.
  • Playground : 로그 발송 시스템과 연동하여 ZAMS 페이지에서 직접 로그를 발송해 볼 수 있는 기능으로, 위의 문제를 해결하는 하나의 방법으로 사용될 수 있음.
  • Open source :직방과 같은 고민을 하고 있는 기업에게 도움을 줄 수 있도록 범용성을 더 확대하고 싶음.