개발 slecs

파트너 정산 현황을 관리자 대시보드 첫 화면에 올렸다

목차

파트너 정산 카드, 결국 첫 화면에 다 박았음

이번 작업은 관리자 대시보드 첫 화면에 파트너 정산/매출 현황 카드를 붙이는 일이었음. 원래 정산 정보는 메뉴 두세 단계 들어가야 보이는 구조였는데, 운영팀이 매일 아침마다 그 깊은 화면을 새로고침하고 있다는 얘기 듣고 한숨 나옴. "왜 첫 화면 아님?" 한마디로 시작됨.

카드에 뭘 올릴지 추리는 게 절반

처음엔 욕심이 많았음. 일/주/월 추이 그래프, 정산 대기, 미수금, 환불, 파트너 랭킹… 다 넣고 싶었는데 와이어프레임 그려보니 손바닥만 한 카드 영역이 너무 빽빽함. 결국 "아침에 딱 보고 끝낼 정보"만 추림.

카드 핵심 지표 갱신 주기
오늘의 정산 확정 / 대기 금액 5분
파트너 매출 TOP5 매출액 / 전일 대비 1시간
미정산 알림 D+3 초과 건수 5분

전일 대비 증감률은 숫자 대신 색 한 칸으로만 표현. 숫자보다 색이 훨씬 빨리 읽힘.

시간 다 잡아먹은 건 쿼리였음

진짜 잡아먹은 건 화면이 아니라 집계 쿼리. 정산 대기 건은 결제대행사별로 정산 시점이 달라서, 카드 결제는 D+3, 가상계좌는 D+0~+2 식으로 케이스가 갈림.

  • 단일 쿼리로 다 합치니 → 인덱스 안 타고 풀스캔
  • 상태별로 쪼개서 PENDING/CONFIRMED/CANCELLED 따로 뽑고 합산
  • 5분 캐시 한 번 입히니 1초 → 80ms
-- 의사 코드
SELECT status, SUM(amount)
FROM 정산내역
WHERE 정산예정일 = :today
GROUP BY status;

상태별 합산만 캐시하고 카드 렌더는 캐시 키만 바꿔치움. 운영팀이 새로고침 연타해도 DB가 비명 안 지르게 함.

CSS 한 줄에 30분 날아감

카드 그림자가 다크모드에서 까맣게 죽어버림. 디자인 시스템 변수 안 쓰고 하드코딩된 색이 한 줄 박혀 있었음. 변수로 바꾸고 끝. 별거 아닌데 30분 사라짐.

회고

  • 운영팀의 "매일 아침 새로고침" = 가장 정확한 우선순위 신호였음
  • 카드는 욕심내면 망함. 빼는 게 디자인
  • 집계 쿼리는 처음부터 캐시 가능 단위로 쪼갤 것
  • 다크모드는 변수 안 쓰면 어디선가 무조건 터짐
  • 첫 화면에 올라오는 한 줄이 메뉴 깊숙한 페이지 열 개보다 가치 있음

다음

댓글 0

첫 댓글 달아줘.