대시보드 서비스 기능 명세
공통 헤더
번호 | 컴포넌트 | 행위 | 상세 | 비고 |
0 | 화면 접근 | 모든 페이지에서 헤더를 포함
로그인 되지 않은 사용자와 로그인 된 사용자를 구분하여 기능 분리 | ||
1 | [로고] | 클릭 | 로그인 되지 않은 사용자: 메인 페이지로 이동
로그인 된 사용자: 대시보드 페이지로 이동 | 메인 페이지 - 0
대시보드 페이지 - 0 |
2 | [로그인] | 클릭 | 로그인 되지 않은 사용자: 메인 페이지로 이동
로그인 된 사용자: 표시하지 않음 | 로그인 페이지 - 0 |
3 | [로그아웃] | 클릭 | 로그인 되지 않은 사용자: 표시하지 않음
로그인 된 사용자: 로그아웃 후 메인페이지로 이동 | 메인 페이지 - 0 |
4 | [프로필] | 클릭 | 로그인 되지 않은 사용자: 표시하지 않음
로그인 된 사용자: 회원정보 페이지로 이동 | 회원정보 페이지 - 0 |
사이드바
번호 | 컴포넌트 | 기능 | 상세 | 비고 |
0 | 화면 접근 | 대시보드 페이지에서 사이드바를 포함 | ||
1 | [헤더] | 컴포넌트 | 공통 헤더 - 0 | |
2 | [서비스 목록] | X | 사용자의 서비스 목록을 나열하는 컨테이너
API 호출을 통해 사용자의 서비스 목록을 받아냄 | |
3 | [서비스] | 클릭 | 해당 서비스의 대시보드 페이지를 화면에 나타냄 | |
4 | [서비스 설정] | 클릭 | 해당 서비스의 설정 페이지를 화면에 나타냄 |
메인 페이지
번호 | 컴포넌트 | 기능 | 상세 | 비고 |
0 | 화면 접근 | 로그인 되지 않은 회원 | ||
1 | [로그인] | 클릭 | 로그인 페이지로 이동 | 로그인 페이지 - 0 |
회원가입 페이지
번호 | 컴포넌트 | 행위 | 상세 | 비고 |
0 | 화면 접근 | 로그인 페이지의 회원 가입 버튼
로그인이 되지 않은 사용자에 한해 접근 가능 | ||
1 | [헤더] | 컴포넌트 | 공통 헤더 - 0 | |
2 | [이메일 주소] | 입력 | 사용자가 가입하고자 하는 이메일 입력
regex로 유효한 이메일 형식인지 검증 | |
3 | [비밀번호] | 입력 | 사용자가 사용할 계정 비밀번호 입력
비밀번호는 4~10자의 숫자 혹은 소문자를 포함
regex로 유요한 비밀번호 형식인지 검즘 | |
4 | [비밀번호 확인] | 입력 | [비밀번호]의 입력값과 일치하는지 확인
양방향 바인딩 | |
5 | [이름] | 입력 | 사용자의 이름 입력 | |
6 | [가입] | 클릭 | 회원가입 API 호출 |
로그인 페이지
번호 | 컴포넌트 | 행위 | 상세 | 비고 |
0 | 화면 접근 | 메인 페이지의 로그인 버튼
로그인 되지 않은 상태만 유효 | ||
1 | [헤더] | 컴포넌트 | 공통 헤더 - 0 | |
2 | [회원 가입] | 클릭 | 회원가입 페이지로 이동 | 회원가입 페이지 - 0 |
3 | [이메일 주소] | 입력 | 사용자의 이메일 주소 입력 | |
4 | [비밀번호] | 입력 | 사용자의 비밀번호 입력 | |
5 | [로그인] | 클릭 | 이메일 주소, 비밀번호와 함께 로그인 API 호출
로그인 성공 시 accessToken을 sessionStorage에 저장로그인 실패 시 에러 메시지 출력 |
대시보드 페이지
번호 | 컴포넌트 | 기능 | 상세 | 비고 |
0 | 화면 접근 | 로그인 된 사용자만 접근 가능 | ||
1 | [헤더] | 컴포넌트 | 공통 헤더 - 0 | |
2 | [사이드바] | 컴포넌트 | 사이드바 - 0 | |
3 | [컴포넌트 별 통계] | |||
서비스 설정 페이지
번호 | 컴포넌트 | 기능 | 상세 | 비고 |
0 | 화면 접근 | 로그인 된 사용자만 접근 가능 | ||
1 | [헤더] | 컴포넌트 | 공통 헤더 - 0 | |
2 | [사이드바] | 컴포넌트 | 사이드바 - 0 | |
3 | [스크립트 발급] | 텍스트 | 사용자의 설정을 반영한 JS 스크립트의 CDN 링크를 나타냄
해당 링크를 통해 사용자는 스크립트를 웹서비스에 주입할 수 있음
API를 통해 스크립트의 링크를 받을 수 있음 | 커스텀 이벤트
tag List |
4 | [서비스 관리] | X | 서비스 전체 설정 관리
하나의 설정 그룹만 존재 | |
5 | [서비스 경로] | 입력 | 서비스 도메인 경로를 설정 | |
6 | [서비스 화면 이미지] | 파일 업로드 | 화면 이미지를 업로드 | 구현 X |
7 | [SPA 여부] | 체크박스 | SPA인지 아닌지 설정 | |
8 | [이벤트 관리] | X | 관리할 이벤트를 추가, 삭제
여러개의 이벤트 설정들을 포함 | |
9 | [이벤트 이름] | 입력 | 커스텀 이벤트 이름 | [이벤트 관리]에 속함 |
10 | [이벤트 조건] | 입력 | 이벤트가 발생 될 조건 정의
두가지의 설정을 포함해야 함
이벤트가 발생될 태그id, class
이벤트가 기반하는 DOM 이벤트
예) id가 login인 요소에서 click이벤트가 발생할 때: login 커스텀 이벤트 정의 | [이벤트 관리]에 속함 |
11 | [태그 관리] | X | 관리할 태그를 추가, 삭제
여러개의 태그 설정들을 포함 | |
12 | [수집 이벤트 설정] | 체크박스 | 추적하여 수집 할 컴포넌트에서 발생하는 이벤트를 설정
앞서 정의한 커스텀 이벤트도 포함 | [태그 관리]에 속함 |
13 | [태그 ID] | 입력 | 추적할 컴포넌트의 ID를 설정 | [태그 관리]에 속함 |
14 | [태그 class] | 입력 | 추적할 컴포넌트의 클래스명을 설정
한가지 이상의 클래스를 설정할 수 있음 | [태그 관리]에 속함 |
15 | [태그 추가] | 클릭 | 사용자가 설정한 태그를 추가할 수 있음 | [태그 관리]에 속함 |
16 | [태그 수정] | 클릭 | 사용자의 설정을 수정할 수 있음 | [태그 관리]에 속함 |
17 | [태그 삭제] | 클릭 | 사용자의 설정을 삭제할 수 있음 | [태그 관리]에 속함 |
18 | [타겟 페이지 설정] | 입력 | 사용자의 타겟페이지 설정, 저장 가능 | |
19 | [설정 저장] | 클릭 | 작성한 사용자의 설정이 저장됨
설정 정보들과 함꼐 API를 통해 스크립트를 수정할 수 있음
스크립트 링크는 바뀌지 않음 |
서비스 기능 명세
1.
백엔드, 정보 주고 받고 (B2B 기준)
번호 | 기능 | 상세 | 비고 | |
1 | 회원가입 | 아이디 중복 체크 및 아이디 비밀번호 유효성 검증을 한 후 결과를 리턴한다. | ||
2 | 로그인 | mysql에 있는 정보와 비교 후, 맞다면 redis에 리프레시 토큰을 저장하고 유저에게는 엑세스 토큰을 발급한다. | ||
3 | 서비스 등록 | 관리할 페이지와 원하는 서비스(추적하길 원하는 태그 등등)을 입력 받는다. | 서비스 설정은 다른곳에서… | |
4 | 서비스에 필요한 코드 제공 | 입력받은 정보를 기반으로 유저가 관리하는 서비스에 이식할 js 코드를 제공한다. | ||
5 | 등록한 서비스 목록 조회 | 등록한 서비스들의 목록을 보여준다. | ||
6 | 여정 그래프 조회 | 하이브에 집계된 데이터를 기반으로 해당 url에서 어디로 주로 넘어가는지 빈도를 나타내는 그래프를 그릴수 있도록 데이터를 보낸다. | ||
7 | 당일 조회수 조회 | 최소 단위로 집계한 데이터를 기반으로 오늘 몇명 들어왔는지 정보를 제공한다. | 도메인 | |
8 | 고객수 그래프 조회 | 하이브에 집계된 데이터를 기반으로 고객이 몇명 들어왔는지 원하는 단위에 따라 그래프를 그릴수 있도록 데이터를 보낸다. | 세부 페이지 | |
9 | 유입 경로 차트 조회 | 하이브에 집계된 데이터를 기반으로 해당 서비스가 어디에서 유입됐는지 그래프를 그릴수 있도록 데이터를 보낸다. | 레퍼러 | |
10 | 추적하는 태그 정보 조회 | 하이브에 집계된 데이터를 기반으로 클라이언트가 관심있어 하는 태그에 대한 데이터를 보낸다. | ||
11 | 전환률, 이탈률 | 시작지점부터 타겟 페이지까지 도달한 비율이 전환률, 도달하지 않고 이탈한 비율이 이탈률 | 이벤트 기반 | |
부1 | User Agent 헤더를 통한 사용자 접속 기기 통계 | 추가기능 | ||
부2 | 사용자의 성별, 나이 등 쿠키를 통해 받는 정보 | 추가기능 | ||
부3 | 사용자 클릭 히트맵 | 사용자가 클릭한 위치를 히트맵으로 보여줌 | 추가기능 |
2.
ETL
번호 | 동작위치 | 기능 | 상세 | 비고 |
1 | 웹 페이지 | 로그 발생 및 전달 | 발생한 로그를 모아(페이지 이동, 페이지 닫음) 우리 서버로 보낸다. | api 호출 |
2 | springboot | 로그 검증 | 우리 서비스에 등록된 웹 페이지에서 생성된 로그인지 발급한 토큰 기반으로 확인한다. | enterprise 토큰 검사
api 호출 제한 |
3 | springboot to kafka | 로그 전달 | 검증된 로그들을 이벤트 단위로 나누어 해당 토픽으로 카프카에 넣는다. | 클릭, 페이지이동, 컴포넌트 등등…
Kafka의 사용은 우리 서버에서
Enterprise용은 Kafka 빼고 |
4 | kafka to cassandra process (spark) | 로그 역직렬화 | 카프카에 저장된 로그를 가져와 역직렬화를 하여 카산드라에 저장한다. | 로그의 일부 손실을 감수하고 카프카를 뺄 수도 있음. |
5 | cassandra to hive
process (spark) | 로그 집계 | 최소 단위의 집계를 하여 hive에 저장한다. | 해보고 키스페이스 구조 결정 |
6 | cassandra | 로그 삭제 | 오래된 로그들을 삭제하여 여유 공간을 확보한다. | |
7 | hive | 최종 집계 | 최소 단위로 집계한 데이터들을 보기 쉽도록 다시 집계한다. | 카파, 람다 아키텍처 고려 가능하다면 10초 단위로 값을 업데이트 할수 있도록 제공
표현할 단위 종류별로 집계(5분, 1시간, 1일 등등) |
8 | springboot | 데이터 호출 | 집계된 데이터를 조회한다. |