포근펫 정기배송 운영 관리 콘솔
쇼핑몰 MVP 이후 필요한 정기배송 회차 관리, 결제 실패 재처리, 맞춤 태그 검수, 직무별 권한과 변경 이력, 처리 현황 대시보드를 담은 관리자 콘솔을 구현하는 확장 프로젝트입니다.
프로젝트 개요
쇼핑몰 MVP 이후 필요한 정기배송 회차 관리, 결제 실패 재처리, 맞춤 태그 검수, 직무별 권한과 변경 이력, 처리 현황 대시보드를 담은 관리자 콘솔을 구현하는 확장 프로젝트입니다. MVP와 같은 스택에 Redis와 작업 큐를 더해 설계합니다.
작업 범위
- 처리 현황 대시보드: 처리 대기 주문, 정기배송 예정 건, 결제 실패 건을 한 화면에서 확인하고 해당 목록으로 바로 이동합니다
- 정기배송 회차·결제 실패 재처리: 정기배송 회차별 상태를 목록에서 고르면 우측에서 결제 시도 이력을 보고 재시도·건너뛰기·대체 상품 지정을 처리합니다
- 맞춤 태그 검수: 표준 맞춤 해시태그 사전을 관리하고, 상품별 태그 누락·과다·오류를 검수 목록에서 바로 고칠 수 있습니다
- 직무 권한·변경 이력: 최고 관리자·상품·주문·물류·고객센터·입양 심사 직무별 권한을 설정하고, 가격·할인·적립 변경 이력을 추적합니다
주요 업무
- 처리 현황 대시보드 화면: 직무별 위젯 구성 + 집계 뷰 + 이벤트 지표 화면
- 정기배송 회차·결제 실패 재처리 화면: 스케줄러 + 빌링 키 결제 + 재시도 큐 + 중복 실행 방지
- 맞춤 태그 검수 화면: 태그 사전 관리 + 검수 규칙 + 일괄 수정
- 직무 권한·변경 이력 화면: 직무 권한 매트릭스 + 서버 단위 권한 확인 + 변경 이력 기록



프로젝트 핵심 과제
스케줄러가 재시작되거나 중복 실행될 때 같은 회차가 두 번 결제되지 않
멱등 키와 락을 함께 설계해야 합니다
결제 실패 사유별로 재시도 가능 여부가 달라 상태 전이 규칙과 수동 재처리 경계를 명확히 정의해야 합니다
태그 사전을 바꿀 때 연결된 상품 수가 많아도 검수 목록이 일관되게 갱신되는 일괄 반영 구조가 필요합니다
직무별 권한이 화면·API·응답 필드 세 층에서 어긋나지 않
권한 정의를 한 곳에서 관리하는 구조가 필요합니다
핵심 기능 상세
처리 현황 대시보드
처리 대기 주문, 정기배송 예정 건, 결제 실패 건을 한 화면에서 확인하고 해당 목록으로 바로 이동합니다. 직무별 위젯 구성 + 집계 뷰 + 이벤트 지표 화면.
- PostgreSQL Materialized View로 처리 대기·예정·실패 건수를 집계하고 주기 갱신 구조 설계
- 로그인한 직무에 따라 노출 위젯을 서버에서 결정하는 대시보드 구성 API 구현
- GA4 이벤트 명세를 정의하고 프로필 등록·초대 가입 같은 지표를 조회하는 화면 구현
직무별로 보이는 위젯을 서버 단위로 결정해 권한이 없는 지표가 응답에 포함되지 않도록 설계합니다.


정기배송 회차·결제 실패 재처리
정기배송 회차별 상태를 목록에서 고르면 우측에서 결제 시도 이력을 보고 재시도·건너뛰기·대체 상품 지정을 처리합니다. 스케줄러 + 빌링 키 결제 + 재시도 큐 + 중복 실행 방지.
- Bull Queue와 Redis 락으로 회차별 자동 결제 작업을 한 번만 실행하는 중복 방지 구조 구현
- 결제 실패 사유별 재시도 간격 정책을 설정 테이블로 분리하고 최대 시도 횟수 초과 시 수동 재처리 큐로 이동
- 일시정지·재개·해지·회차 건너뛰기 상태 전이를 상태 머신 모듈로 정의
회차 단위 멱등 키로 결제 요청을 보내 같은 회차가 두 번 청구되지 않도록 하고, 모든 상태 변경을 이력 테이블에 남기도록 설계합니다.


맞춤 태그 검수
표준 맞춤 해시태그 사전을 관리하고, 상품별 태그 누락·과다·오류를 검수 목록에서 바로 고칠 수 있습니다. 태그 사전 관리 + 검수 규칙 + 일괄 수정.
- 표준 태그 사전과 상품 태그 연결 테이블을 분리해 사전 변경이 상품에 일괄 반영되는 구조 설계
- 누락·과다·오류 검수 규칙을 규칙 객체로 정의하고 상품 목록에 대해 일괄 평가하는 검수 모듈 구현
- 엑셀 일괄 업로드 시 행 단위 검증 결과를 반환하는 업로드 API 구현
검수 규칙을 코드와 분리된 설정으로 두어 규칙 추가 시 화면 수정 없이 검수 목록에 반영되도록 설계합니다.


직무 권한·변경 이력
최고 관리자·상품·주문·물류·고객센터·입양 심사 직무별 권한을 설정하고, 가격·할인·적립 변경 이력을 추적합니다. 직무 권한 매트릭스 + 서버 단위 권한 확인 + 변경 이력 기록.
- 직무×기능 권한 매트릭스를 DB로 관리하고 Express 미들웨어에서 요청마다 서버 단위로 확인
- Prisma 미들웨어로 가격·할인·적립 변경 전후 값을 이력 테이블에 자동 기록
- 이력 목록에 변경자·시각·항목 필터를 제공하는 감사 로그 조회 API 구현
화면에서 메뉴를 숨기는 데서 끝나지 않고 API 단계에서 직무 권한을 확인하며, 변경 이력은 수정·삭제할 수 없는 추가 전용 구조로 설계합니다.


프로젝트 진행 단계
직무 권한 모델·이력 구조 설계 · 2026.10
직무×기능 권한 매트릭스와 추가 전용 변경 이력 테이블을 Prisma로 설계합니다
회차 스케줄러·재시도 큐 구현 · 2026.10
Bull Queue와 Redis 락 기반 회차 결제 작업, 실패 사유별 재시도 정책을 구현합니다
태그 사전·검수 모듈 개발 · 2026.10
표준 태그 사전, 검수 규칙 평가기, 일괄 업로드 검증 API를 구현합니다
마스터-디테일 콘솔 UI 구현 · 2026.10
목록 레일과 상세 패널 중심의 운영 화면, 직무별 대시보드 위젯을 구현합니다
개발 결과
기술적 주안점
- 직무별로 보이는 위젯을 서버 단위로 결정해 권한이 없는 지표가 응답에 포함되지 않도록 설계합니다
- 회차 단위 멱등 키로 결제 요청을 보내 같은 회차가 두 번 청구되지 않도록 하고, 모든 상태 변경을 이력 테이블에 남기도록 설계합니다
- 검수 규칙을 코드와 분리된 설정으로 두어 규칙 추가 시 화면 수정 없이 검수 목록에 반영되도록 설계합니다