고객 데이터 기반 고객 분석 서비스 (팀: 한살차이)
Holiverse는 통신사의 고객 데이터를 기반으로 고객의 특성을 이해하고 분류하는 과정을 서비스로 구현하는 통합 프로젝트입니다.
고객의 기본 정보와 상담 이력 데이터를 조합하여 고객 성향과 특징을 도출하고, 이를 서비스 화면(고객/관리자) 으로 제공합니다.
또한 CRM/CDP 관점에서 고객 데이터를 분석해 추천, 알림 등 행동(Action) 서비스로 연결함으로써,
단발성 분석이 아니라 고객과의 지속적인 연결(Engagement) 을 지향합니다.
- Next.js (SSR/CSR): 초기 로딩/SEO와 인터랙션을 함께 고려한 렌더링 구조
- TypeScript: 정적 타입 기반 안정적인 UI/데이터 모델링
- Tailwind CSS: 빠른 UI 제작 및 일관된 디자인 시스템
- TanStack Query: 서버 상태 캐싱/동기화, API 호출 표준화
- Zustand: 전역 상태 관리(인증 상태, UI state 등)
- Java 17 / Spring Boot 3.x: 도메인 중심 REST API 구축
- Spring Security + JWT(OAuth2 확장): 인증/인가 및 소셜 로그인 연동
- JPA(Hibernate) + Jooq: 핵심 도메인 CRUD + 복잡한 조회/통계 쿼리
- Spring Batch: 일 단위 고객 세그먼트/캐릭터 산출, 타겟 리스트 생성
- PostgreSQL: 핵심 트랜잭션 데이터(회원/상품/상담/쿠폰/발송이력) 저장
- Docker Compose: 로컬 개발 환경 표준화(Postgres 등)
- GitHub Actions: CI(빌드/테스트/린트/커버리지) 자동화
- 스플래시 페이지
- 대기시간 동안 로딩바가 채워지는 CSS를 적용시킬 예정입니다.
- 로그인 페이지
- 폼 로그인, 소셜 로그인 기능을 제공합니다.
- 비회원은 회원가입 페이지로 이동하여 가입할 수 있습니다.
- 약관 페이지
- 약관 동의를 한 후에 회원가입 페이지로 이동할 수 있습니다.
- 회원가입 페이지
- 기본 정보와 아이디, 비밀번호를 입력받습니다.
- 아이디는 소셜로그인 회원과 형식을 통일하기 위해 이메일로 받을 예정입니다.
- 주소에서 상세주소는 생략하였습니다.
- 사용 패턴 분석 카드를 통해 데이터/통화/문자 사용량을 막대그래프 형태로 제공합니다.
- 예상 요금을 통해 현재 사용 중인 요금제의 가격을 확인할 수 있습니다.
- 하단의 배너를 통해 두가지 페이지로 이동이 가능합니다.
- 고객 유형 캐릭터 페이지
- Holiverse에서는 사용자에게 사용패턴에 맞는 캐릭터를 지정해줍니다.
- 사용자가 어떤 캐릭터인지 보여주는 페이지로 연결됩니다.
- 맞춤 상품 추천 페이지
- 해당 고객이 속한 캐릭터 유형에게 추천되는 상품 페이지로 연결됩니다.
- 해당 페이지는 상품 페이지의 필터링 결과와 동일합니다.
- 고객 유형 캐릭터 페이지
- 요금제 상품을 조회할 수 있는 페이지입니다.
- 상단의 필터링을 통해 분류하여 조회가 가능합니다.
- 전체/추천 필터링: 전체 상품을 조회할 지, 본인의 캐릭터 유형에게 추천되는 상품제를 조회할 지 결정합니다.
- 상품제 카테고리 필터링: 5G/LTE, 태블릿/스마트워치, 부가서비스, IPTV, 인터넷
- 상위 분류 카테고리가 부가서비스인 경우, 추가적인 필터링을 도입할 예정입니다.
- 요금제 상품 카드를 누르면 상세 정보 모달이 등장하며 아래의 기능을 수행할 수 있습니다.
- 요금제 상세 정보 조회
- 현재 요금제와 비교 (가격, 추가혜택 등)
- 요금제 변경
- Holiverse는 사용자의 서비스 이용 정보를 분석하여 고객 유형 캐릭터를 지정해줍니다.
- 사용자는 캐릭터를 통해 본인의 서비스 사용 패턴을 확인할 수 있습니다.
- 캐릭터 이미지 저장 기능을 통해 본인의 캐릭터를 남들과 공유할 수 있도록 할 예정입니다.
- 본인이 사용중인 요금제에서 제공하는 혜택을 확인할 수 있습니다.
- 로그아웃을 할 수 있습니다.
- 쿠폰 페이지로 이동할 수 있습니다.
- 보유한 쿠폰을 조회할 수 있습니다.
- 보유한 쿠폰을 사용할 수 있습니다.
- 검색바, 필터링바를 통해서 조회할 사용자들을 필터링할 수 있습니다.
- 고객 항목을 클릭시 고객 상세 정보를 확인할 수 있습니다.
- 필터링된 고객들에 대한 정보를 차트로 조회할 수 있습니다.
- 등급별 고객 분포
- 월간 데이터 사용량
- 평균 ARPU(가입자당 평균 매출) 및 데이터 사용량을 확인 가능합니다.
- 지도에서 지역을 클릭시 해당 지역의 ARPU 및 데이터 사용량 그래프가 추가적으로 보여지게 되고, 그래프 호버시 각 지역별 정보를 확인 가능합니다.
- 고객 유형별 분포 조회
- 고객 페이지의 고객 유형 캐릭터와 동일한 분류입니다.
- 막대그래프로 조회할 수 있으며 막대그래프를 호버시 해당 유형의 고객들의 사용 요금제 분포 정보를 확인할 수 있습니다.
- 평균 ARPU 및 데이터 사용량 조회: 막대그래프를 클릭시 해당 유형의 ARPU 및 데이터 사용량 그래프가 보여지게 됩니다.
- 상담 키워드 버블 차트
- 상담 내요에서 추출된 주요 키워드를 버블 차트 형식으로 조회할 수 있습니다.
- 빈도 수가 높은 키워드일수록 버블의 크기가 커집니다.
- 차트 하단에서는 각 키워드의 증감 추이를 보여줍니다.
- 상담 트래픽
- 시간대별로 상담 트래픽을 선형 그래프로 조회할 수 있습니다.
- 요일별로 상담 트래픽을 선형 그래프로 조회할 수 있습니다.
- 전체 상담 처리 현황
- 상담 현황을 원형 그래프로 조회할 수 있습니다.
- 상담 현환 종류: 완료, 진행중, 미처리
- 이탈 위험군 고객 목록을 조회할 수 있습니다.
- 이탈 위험군 인원의 증감 추이를 날짜별로 막대 그래프를 통해 조회할 수 있습니다.
- 실시간 이탈 고객 피드를 통해 어떤 고객이 이탈 위험 지수를 높이는 활동을 했는지 조회할 수 있습니다.
- AI가 데이터를 분석하여 보고서 및 제안서 초안을 작성 해줍니다.
- 보고서는 PDF 형식으로 다운로드할 수 있습니다.
- AI가 작성해준 보고서를 참고하여 제안서를 첨삭 및 제출할 수 있습니다.
- 제안서 예시: 새로운 요금제 출시 제안
고객이 보유한 데이터(요금제 종류, 데이터 사용량, 웨어러블 기기 사용 여부, 부가서비스 가입 내역 등)를 분석하여
팀이 정의한 6가지 고객 캐릭터 중 1개를 부여합니다.
부여된 캐릭터를 기준으로 고객에게 가장 적합한 요금제 및 관련 상품을 추천합니다.
입력 데이터 예시
- 요금제 종류(현재 가입 요금제)
- 데이터 사용량(최근 N일/월 사용량)
- 웨어러블 기기 사용 유무
- 부가서비스 가입/이용 내역
- 그외 여러가지 데이터
처리 방식
- 고객 특성(feature)을 생성하고, 규칙/점수 기반으로 6개 캐릭터 중 1개를 매칭
- 캐릭터별 추천 규칙(또는 추천 후보군)을 정의하여 요금제/상품을 추천
화면 제공(UI)
- 고객에게 부여된 캐릭터를 캐릭터 카드/이미지로 시각화
- 캐릭터에 맞춘 추천 요금제/상품 목록 제공
운영 방식(배치)
- 캐릭터 부여는 하루 1회 배치로 실행하며, 고객의 최신 데이터를 반영해 일 단위로 갱신
서비스 이용 고객의 유지(Loyalty) 와 이탈 방지(Churn Prevention) 를 위해,
고객 데이터를 기반으로 알림/쿠폰 발송 대상을 선정하고 맞춤 혜택을 제공합니다.
정량 기준은 운영 정책에 따라 변경 가능한 Rule Config 형태로 설계합니다.
A. 충성 고객(Loyalty)
- 조건 예시
- 가입 기간 ≥ 10년
- 멤버십 VIP 이상 유지(예: VIP/VVIP)
- 최근 90일 상담 0건 또는 상담 만족도/긍정 비율 ≥ 80%
- 혜택 예시
- 데이터 쿠폰(예: 5GB)
- 요금제 1개월 할인 쿠폰(예: 10%)
B. 이탈 위험 고객(Churn Risk)
- 조건 예시(아래 중 2개 이상 충족 시 “이탈 위험”)
- 약정 만료 D-30 이내
- 최근 30일 상담에서 불만/부정 키워드 ≥ 3회
- 욕설 키워드 1회 이상 탐지(즉시 위험 플래그)
- 데이터 사용량 급감: 최근 7일 평균이 직전 4주 평균 대비 30% 이상 감소
- 혜택 예시
- 약정 갱신 유도 쿠폰(할인/추가 데이터/부가서비스 체험 등)
C. 이벤트/기타 캠페인
- 생일 캠페인
- 조건: 생일 당일
- 혜택: 서비스 내 상품/부가서비스 할인 쿠폰
- 사용량 리워드 캠페인
- 조건: 월간 데이터 사용량 상위 1% 또는 Top N명
- 혜택: 데이터 쿠폰(예: 10GB)
- 고객 앱/웹에서 알림 수신 및 쿠폰 확인 화면 제공
관리자 페이지에서 수집·집계된 지표(예: 고객 세그먼트 분포, 이탈 위험 추이, 상담 이슈 키워드, 요금제/상품 이용 패턴 등)를 기반으로
AI를 활용해 향후 비즈니스 방향성을 제안하고, 실행 가능한 인사이트를 도출하는 기능입니다.
목표
- “데이터 조회”를 넘어, 관리자가 바로 의사결정을 내릴 수 있도록
- 현재 상태 요약 → 문제/원인 가설 → 개선 포인트 → 실행 항목(Action Items)까지 자동 생성
- 세그먼트 지표: 고객 유형 분포, 전환/유지율, 세그먼트별 특징 요약
- 이탈/리텐션 지표: 약정 만료 임박 고객 수, 이탈 위험 고객 추이, 쿠폰 캠페인 반응(발송/사용/전환)
- 상담 데이터: 상담 카테고리 TOP, 불만/부정 키워드 빈도, 최근 증가 이슈
- 이용 패턴: 데이터 사용량 분포(상위/급감), 부가서비스 가입률, 요금제 변경 패턴
- 보고서 생성전 UI
-
보고서 생성후 UI
-
AI 분석 리포트 카드/문서
- 핵심 요약(Executive Summary)
- 주요 인사이트 TOP N (근거 지표 포함)
- 리스크/기회 요인
- 권장 액션(우선순위/대상 세그먼트/예상 효과)
-
(미정) 리포트 다운로드(PDF) / 공유 링크 / 저장된 리포트 히스토리
- 관리자 지표를 그대로 넣지 않고, AI가 이해하기 쉬운 형태로 정규화/요약된 컨텍스트로 구성합니다.
- 예: 표/JSON 형태
- 보고서 품질을 위해 “데이터 컨텍스트 + 리포트 템플릿 프롬프트”를 분리합니다.
- 컨텍스트: 수치/분포/추이/키워드(근거 데이터)
- 프롬프트: 보고서 구조(요약→인사이트→액션)와 출력 형식(마크다운/섹션 고정)
기획 단계에서 “어떤 지표를 어떤 포맷으로 정리해 AI에 제공할지”를 우선 정의하고,
Holiverse는 업무 성격이 다른 두 영역을 함께 다룹니다.
- Customer(Core) 영역: 회원/상담/상품 등 트랜잭션 중심 CRUD(OLTP)
- Admin/Analytics/Reco 영역: 집계·분석·랭킹 계산 등 SQL 중심 대량 처리(OLAP/Batch)
따라서 우리는 Core(Customer)에는 JPA, Admin/Analytics에는 jOOQ를 사용해 각각의 강점을 극대화합니다.
- 생산성이 높다: 엔티티 기반으로 CRUD를 빠르게 구현 가능
- 트랜잭션 범위에서 dirty checking이 동작하여 도메인 로직 구현이 편하다
- 연관관계 매핑을 통해 비즈니스 규칙을 코드로 표현하기 좋다(특히 core 도메인)
- 대량 처리/집계/벌크 업데이트에 취약
- 대량 INSERT/UPDATE는 영속성 컨텍스트 관리(flush/clear), batch size 튜닝 등 “JPA식 최적화”가 필요
- 벌크 update는 영속성 컨텍스트와 DB 불일치가 발생해 운영 사고 포인트가 될 수 있음
- CTE/윈도우 함수/복잡 조인처럼 분석형 SQL을 끌고 가기 어렵고, 결국 Native Query 비중이 증가
- N+1, 지연 로딩 등으로 실제 실행 쿼리가 코드만으로는 예측이 어려운 경우가 있음
core스키마: 로그인/인증, 고객 CRUD, 상담 기록, 상품/요금제 카탈로그 등 OLTP 트랜잭션성 CRUD- 관리자 영역도 “CRUD + 단순 통계” 수준이면 JPA로 충분
- SQL을 그대로 작성하면서도 타입 세이프(코드 생성) + IDE 지원이 강함
- 실행 쿼리가 명확해 성능 예측/디버깅/튜닝이 용이
- 분석/집계에서 자주 쓰는 패턴(CTE, 윈도우 함수, upsert, 복잡 조인)을 자연스럽게 표현 가능
- 스키마/권한 기반으로 경계를 강제하는 구조에서 DB 중심 read-model/집계 모델을 만들기 적합
- 엔티티 기반 도메인 모델링(JPA 스타일)에는 부적합 (SQL 중심 접근)
- 코드 생성/스키마 변경 관리(Flyway 연계) 등 초기 셋업 비용이 존재
- 팀의 SQL 숙련도에 따라 러닝커브가 생길 수 있음
analytics스키마: 피처 테이블 생성, 페르소나/리스크 집계, KPI 산출reco스키마: 추천 로그 기반 집계, 랭킹 계산을 위한 조합 조회- 배치/집계 중심 워크로드 전반
데이터 생성/수정/삭제 처리하는 모델과 조회를 처리하는 모델을 분리하여 각자 독립적으로 최적화하는 디자인패턴
-
문제점: 추천 및 분석 작업은 복잡한 데이터 계산이 동반되어 SQL 튜닝이 필수적입니다. 하지만 JPA를 사용할 경우 쿼리가 간접적으로 생성되어 병목 지점을 추적하기 어렵고, 대용량 배치 처리 시 영속성 컨텍스트(flush/clear, fetch 전략, batch size 등 ORM 최적화 러닝 커브 가 커짐) 관리에 따른 러닝 커브가 매우 높습니다.
따라서 쿼리가 명확하고 튜닝 포인트가 분명해야 운영이 가능합니다. -
해결책: 튜닝 포인트가 명확하고 쿼리를 직접 제어할 수 있는 SQL 기반(JOOQ/JDBC) 기술을 집계와 분석 영역에 도입하여 성능과 운영 효율을 극대화합니다.
- 문제점: 초기에는 JPA만 사용하는 것이 생산성이 높아 보이지만, 서비스가 고도화되며 집계 쿼리가 늘어나면 필연적으로
JPA + Native Query가 혼재되어 시스템 복잡도가 급증합니다. - 해결책: 복잡한 조회가 필요한 영역은 처음부터 JOOQ 기술을 통일합니다. 이를 통해 코드의 유지보수성을 높입니다.