분석 데이터 기반 작성 · 2026-04-28
| F-ID | 기능명 | 설명 | Phase | 우선순위 |
|---|---|---|---|---|
| F-01 | 로그인 | 텔레그램 OTP 2FA + IP 기반 접근 제어 + Staff JWT 발급 | 1 | P0 |
| F-02 | 통합 대시보드 | 카드 결제 일/월 KPI(승인/취소/정산), 가상계좌 일/월 KPI(입금건수/금액), 본사 수익금, 미처리 알람 카운트 | 1 | P0 |
| F-03 | 본사 직원 관리 | 직원 목록 조회 + 등급/권한 표시 + 마지막 로그인 이력 (Phase 1: 조회만) | 1 | P1 |
| F-04 | 파트너 계정 관리 | 파트너 목록(4건+) + 가맹점/단말기 정보 조회 (생성/수정/삭제는 Phase 2) | 1 | P1 |
| F-05 | 가맹점 통합 조회 | 카드+가상 가맹점 통합(178+), 페이지네이션+검색+필터, 상세(수수료율/한도/정산주기/PG 매핑) | 1 | P0 |
| F-06 | 에이전트 통합 조회 | 3단계 계층(지사→대리점→영업), 55개 에이전트, 수수료율 표시 | 1 | P0 |
| F-07 | 단말기 변경 이력 | 단말기 변경 로그 조회 | 1 | P2 |
| F-08 | 거래내역 통합 조회 | 카드 결제(97/일, 2,599/월) + 가상계좌 입금, 카드사/PG/상태별 필터, 일/월 통계 | 1 | P0 |
| F-09 | 결제 취소 내역 | 취소 처리된 거래 조회 | 1 | P1 |
| F-10 | 보류 거래 | 보류 상태 거래 조회 | 1 | P1 |
| F-11 | 단말기 결제 실패 | 단말기 채널 결제 실패 조회 | 1 | P1 |
| F-12 | 수기 결제 실패 | 수기 결제 실패 조회 | 1 | P1 |
| F-13 | PG사별 입금 현황 | 윈글로벌, 와이디페이, 씨엘페이, 페이시스, MJ페이 5개 PG의 입금 합계 조회 | 1 | P1 |
| F-14 | 정산 캘린더 | 정산 이력(목록+캘린더), 가맹점/에이전트별 정산금, 본사 수익금(월 1,200만원+) | 1 | P0 |
| F-15 | 정산 계좌 관리 | 본사 마스터 계좌(다우데이타-케이뱅크) + 잔액 추적 | 1 | P1 |
| F-16 | PG 코드 관리 | 274개 PG 코드 조회 + PG별 수수료율(1.98% 등) | 1 | P1 |
| F-17 | 가맹점-PG 매핑 조회 | 가맹점별 PG 매핑 정보 조회 | 1 | P1 |
| F-18 | 게시판 관리 | 공지사항(notice-list) / FAQ(faq-list) / 팝업(popup-list) / 무이자할부(inst-list) | 1 | P2 |
| F-19 | 알람 통합 | 미읽은 알람 카운트 + 알람 목록 + 읽음 처리 | 1 | P1 |
| F-20 | SMS 발송 이력 | SMS 발송 이력 조회 | 1 | P2 |
| F-21 | 카드 BIN 조회 | 3,923개 BIN 조회 (CRUD는 Phase 2) | 1 | P2 |
| F-22 | 마이페이지 | 본사 직원 본인 정보 + 비밀번호 변경 | 1 | P1 |
| 분류 | Method | Path | 인증 | 설명 |
|---|---|---|---|---|
| Staff/Auth | POST | /api/staff/free/auth_tele_chk | 비인증 | 텔레그램 OTP 검증 |
| Staff/Auth | POST | /api/staff/free/login | 비인증 | 1차 로그인 (ID/PW 검증) |
| Staff/Auth | POST | /api/staff/login | OTP 후 | 2차 로그인 (JWT 발급) |
| Staff/Auth | POST | /api/staff/logout | JWT | 로그아웃 |
| Staff/Auth | POST | /api/staff/passModChk | JWT | 비밀번호 변경 |
| Member | GET | /api/member/select_staff_list | JWT (ROLE_SUPER) | 본사 직원 목록 |
| Member | GET | /api/member/select_staff_detail | JWT | 직원 상세 |
| Member | GET | /api/member/select_partner_list | JWT | 파트너 목록 |
| Member | GET | /api/member/select_partner_detail | JWT | 파트너 상세 |
| Member | GET | /api/member/select_login_history | JWT | 로그인 이력 |
| Agent | GET | /api/agent/select_agent_pagination | JWT | 에이전트 페이지네이션 |
| Agent | GET | /api/agent/select_agent_list | JWT | 에이전트 전체 목록 |
| Agent | GET | /api/agent/select_agent_detail | JWT | 에이전트 상세 (계층 포함) |
| Customer | GET | /api/customer/select_customer_pagination | JWT | 가맹점 페이지네이션 |
| Customer | GET | /api/customer/select_customer_list | JWT | 가맹점 전체 목록 |
| Customer | GET | /api/customer/select_customer_detail | JWT | 가맹점 상세 |
| Customer | GET | /api/customer/select_terminal_history | JWT | 단말기 변경 이력 |
| Payment | GET | /api/payment/select_payment_pagination | JWT | 결제 거래 페이지네이션 |
| Payment | GET | /api/payment/select_payment_statistics | JWT | 결제 일/월 통계 |
| Payment | GET | /api/payment/select_payment_sum | JWT | 결제 합계 |
| Payment | GET | /api/payment/select_payment_list | JWT | 결제 거래 목록 |
| Payment | GET | /api/payment/select_payment_fail_pagination | JWT | 결제 실패 페이지네이션 |
| Payment | GET | /api/payment/select_payment_fail_list | JWT | 결제 실패 목록 |
| Payment | GET | /api/payment/select_real_account_pagination | JWT | 가상계좌 입금 페이지네이션 |
| Payment | GET | /api/payment/select_real_account_list | JWT | 가상계좌 입금 목록 |
| Payment | GET | /api/payment/select_real_account_sum | JWT | 가상계좌 입금 합계 |
| Payment | GET | /api/payment/select_day_calc_list | JWT | 일별 정산 목록 |
| Payment | GET | /api/payment/select_day_deposit | JWT | 일별 입금 |
| Payment | GET | /api/payment/select_day_withdraw | JWT | 일별 출금 |
| Payment | GET | /api/payment/select_month_revenue | JWT | 월별 본사 수익 |
| Payment | GET | /api/payment/select_payment_history_list | JWT | 결제 이력 목록 |
| Payment | GET | /api/payment/select_cancel_list | JWT | 취소 거래 목록 |
| PG | GET | /api/pg/select_pg_pagination | JWT | PG 코드 페이지네이션 |
| PG | GET | /api/pg/select_pg_list | JWT | PG 코드 전체 |
| PG | GET | /api/pg/select_pg_deposit | JWT | PG별 입금 현황 |
| PG | GET | /api/pg/select_pg_customer_mapping | JWT | 가맹점-PG 매핑 |
| Schedule | GET | /api/schedule/select_schedule_list | JWT | 정산 스케줄 목록 |
| Schedule | GET | /api/schedule/select_schedule_calendar | JWT | 정산 캘린더 뷰 |
| Account | GET | /api/account/select_master_account | JWT | 본사 마스터 계좌 |
| Account | GET | /api/account/select_balance | JWT | 잔액 조회 |
| Account | GET | /api/account/select_balance_history | JWT | 잔액 이력 |
| Board | GET | /api/board/notice_list | JWT | 공지사항 |
| Board | GET | /api/board/faq_list | JWT | FAQ |
| Board | GET | /api/board/popup_list | JWT | 팝업 |
| Board | GET | /api/board/inst_list | JWT | 무이자 할부 |
| Board | GET | /api/board/bin_list | JWT | 카드 BIN |
| Alarm | GET | /api/alarm/unread_count | JWT | 미읽 알람 카운트 |
| Alarm | GET | /api/alarm/list | JWT | 알람 목록 |
| Alarm | POST | /api/alarm/mark_read | JWT | 읽음 처리 |
| Alarm | POST | /api/alarm/mark_all_read | JWT | 전체 읽음 처리 |
| SMS | GET | /api/sms/history_pagination | JWT | SMS 발송 이력 페이지네이션 |
| SMS | GET | /api/sms/history_list | JWT | SMS 발송 이력 목록 |
| 엔티티 | 컬럼 | 타입 | 제약 | 설명 |
|---|---|---|---|---|
| staff | staff_id | BIGINT | PK, AUTO | 직원 ID |
| staff | staff_name | VARCHAR(50) | NOT NULL | 직원명 |
| staff | staff_pw | VARCHAR(60) | NOT NULL | 비밀번호 (bcrypt cost ≥ 12) |
| staff | role | VARCHAR(20) | NOT NULL | ROLE_SUPER / ROLE_ADMIN |
| staff | tele_chat_id | VARCHAR(50) | NULL | 텔레그램 chat_id (OTP) |
| staff | last_login_at | DATETIME | NULL | 마지막 로그인 일시 |
| staff | last_login_ip | VARCHAR(45) | NULL | 마지막 로그인 IP |
| staff | created_at | DATETIME | DEFAULT NOW() | 생성일시 |
| members_partner | partner_id | BIGINT | PK, AUTO | 파트너 ID |
| members_partner | partner_name | VARCHAR(100) | NOT NULL | 파트너명 |
| members_partner | partner_type | VARCHAR(20) | NOT NULL | CARD / VIRTUAL |
| members_partner | biz_no | VARCHAR(20) | UNIQUE | 사업자번호 |
| members_partner | status | VARCHAR(20) | NOT NULL | ACTIVE / SUSPENDED |
| members_partner | created_at | DATETIME | DEFAULT NOW() | 생성일시 |
| agents | agent_id | BIGINT | PK, AUTO | 에이전트 ID |
| agents | agent_name | VARCHAR(100) | NOT NULL | 에이전트명 |
| agents | parent_aid | BIGINT | FK → agents.agent_id | 상위 에이전트 (자기참조) |
| agents | level | TINYINT | NOT NULL | 1=지사 / 2=대리점 / 3=영업 |
| agents | ji_aid | BIGINT | FK → agents | 지사 ID |
| agents | ch_aid | BIGINT | FK → agents | 대리점 ID |
| agents | ag_aid | BIGINT | FK → agents | 영업 ID |
| agents | fee_rate | DECIMAL(5,4) | NOT NULL | 수수료율 |
| agents | settle_account | VARCHAR(50) | NULL | 정산 계좌 |
| agents | created_at | DATETIME | DEFAULT NOW() | 생성일시 |
| customers | customer_id | BIGINT | PK, AUTO | 가맹점 ID |
| customers | customer_name | VARCHAR(100) | NOT NULL | 가맹점명 |
| customers | biz_no | VARCHAR(20) | UNIQUE | 사업자번호 |
| customers | ji_aid | BIGINT | FK → agents | 지사 ID |
| customers | ch_aid | BIGINT | FK → agents | 대리점 ID |
| customers | ag_aid | BIGINT | FK → agents | 영업 ID |
| customers | fee_rate | DECIMAL(5,4) | NOT NULL | 수수료율 |
| customers | daily_limit | BIGINT | DEFAULT 0 | 일 한도 |
| customers | monthly_limit | BIGINT | DEFAULT 0 | 월 한도 |
| customers | settle_cycle | VARCHAR(20) | NOT NULL | 정산 주기 (D+1, D+2 등) |
| customers | settle_account | VARCHAR(50) | NULL | 정산 계좌 |
| customers | pg_id | BIGINT | FK → pgs | PG 매핑 |
| customers | status | VARCHAR(20) | NOT NULL | ACTIVE / SUSPENDED |
| customers | created_at | DATETIME | DEFAULT NOW() | 생성일시 |
| payments | payment_id | BIGINT | PK, AUTO | 결제 ID |
| payments | customer_id | BIGINT | FK → customers | 가맹점 ID |
| payments | pg_id | BIGINT | FK → pgs | PG ID |
| payments | card_no_enc | VARBINARY(255) | NOT NULL | 카드번호 (AES-256) |
| payments | card_no_mask | VARCHAR(20) | NOT NULL | 카드번호 마스킹 (앞6+뒤4) |
| payments | amount | BIGINT | NOT NULL | 결제 금액 |
| payments | fee | BIGINT | NOT NULL | 수수료 |
| payments | net_amount | BIGINT | NOT NULL | 정산 금액 |
| payments | status | VARCHAR(20) | NOT NULL | APPROVED/CANCELED/HOLD/FAIL |
| payments | channel | VARCHAR(20) | NOT NULL | TERMINAL / MANUAL |
| payments | created_at | DATETIME | DEFAULT NOW() | 결제일시 |
| payments | canceled_at | DATETIME | NULL | 취소일시 |
| real_accounts | real_account_id | BIGINT | PK, AUTO | 가상계좌 입금 ID |
| real_accounts | customer_id | BIGINT | FK → customers | 가맹점 ID |
| real_accounts | virtual_account_no | VARCHAR(30) | NOT NULL | 가상계좌 번호 |
| real_accounts | bank_code | VARCHAR(10) | NOT NULL | 은행 코드 |
| real_accounts | depositor_name | VARCHAR(50) | NULL | 입금자명 |
| real_accounts | amount | BIGINT | NOT NULL | 입금액 |
| real_accounts | deposited_at | DATETIME | NOT NULL | 입금일시 |
| real_accounts | status | VARCHAR(20) | NOT NULL | DEPOSITED / SETTLED |
| pgs | pg_id | BIGINT | PK, AUTO | PG ID |
| pgs | pg_code | VARCHAR(20) | UNIQUE | PG 코드 |
| pgs | pg_name | VARCHAR(100) | NOT NULL | PG 명 (윈글로벌, 와이디페이 등) |
| pgs | fee_rate | DECIMAL(5,4) | NOT NULL | 수수료율 (1.98% 등) |
| pgs | settle_cycle | VARCHAR(20) | NOT NULL | 정산 주기 |
| pgs | master_account | VARCHAR(50) | NULL | PG 마스터 계좌 |
| pgs | status | VARCHAR(20) | NOT NULL | ACTIVE / INACTIVE |
| pg_customer_mapping | mapping_id | BIGINT | PK, AUTO | 매핑 ID |
| pg_customer_mapping | pg_id | BIGINT | FK → pgs | PG |
| pg_customer_mapping | customer_id | BIGINT | FK → customers | 가맹점 |
| pg_customer_mapping | fee_rate | DECIMAL(5,4) | NOT NULL | 매핑별 수수료율 |
| pg_customer_mapping | is_primary | BOOLEAN | DEFAULT FALSE | 주 매핑 여부 |
| schedules | schedule_id | BIGINT | PK, AUTO | 정산 스케줄 ID |
| schedules | customer_id | BIGINT | FK → customers | 가맹점 |
| schedules | agent_id | BIGINT | FK → agents | 에이전트 |
| schedules | pg_id | BIGINT | FK → pgs | PG |
| schedules | settle_date | DATE | NOT NULL | 정산일 |
| schedules | settle_amount | BIGINT | NOT NULL | 정산 총액 |
| schedules | customer_amount | BIGINT | NOT NULL | 가맹점 정산금 |
| schedules | agent_amount | BIGINT | NOT NULL | 에이전트 정산금 |
| schedules | hq_amount | BIGINT | NOT NULL | 본사 수익금 |
| schedules | status | VARCHAR(20) | NOT NULL | PENDING / EXECUTED |
| schedules | executed_at | DATETIME | NULL | 실행일시 |
| card_bins | bin_id | BIGINT | PK, AUTO | BIN ID |
| card_bins | bin_code | VARCHAR(8) | UNIQUE | BIN 코드 (앞 6~8자리) |
| card_bins | card_company | VARCHAR(50) | NOT NULL | 카드사 |
| card_bins | card_type | VARCHAR(20) | NOT NULL | CREDIT / CHECK / GIFT |
| card_bins | card_brand | VARCHAR(20) | NULL | VISA / MASTER / 국내 |
| alarms | alarm_id | BIGINT | PK, AUTO | 알람 ID |
| alarms | staff_id | BIGINT | FK → staff | 수신자 |
| alarms | type | VARCHAR(30) | NOT NULL | 알람 타입 |
| alarms | title | VARCHAR(200) | NOT NULL | 제목 |
| alarms | body | TEXT | NULL | 본문 |
| alarms | is_read | BOOLEAN | DEFAULT FALSE | 읽음 여부 |
| alarms | created_at | DATETIME | DEFAULT NOW() | 생성일시 |
| boards | board_id | BIGINT | PK, AUTO | 게시판 ID |
| boards | category | VARCHAR(20) | NOT NULL | NOTICE / FAQ / POPUP / INST |
| boards | title | VARCHAR(200) | NOT NULL | 제목 |
| boards | body | TEXT | NULL | 본문 |
| boards | is_visible | BOOLEAN | DEFAULT TRUE | 노출 여부 |
| boards | created_at | DATETIME | DEFAULT NOW() | 생성일시 |
| complaints | complaint_id | BIGINT | PK, AUTO | 민원 ID (Phase 2) |
| complaints | (상세 컬럼) | — | — | Phase 2 별도 견적 |
| 구분 | 항목 | 요구 수준 | 검증 방법 |
|---|---|---|---|
| NFR | 응답시간 (일반 페이지) | < 2초 | Lighthouse / k6 부하 테스트 |
| NFR | 응답시간 (통계 페이지) | < 5초 | k6 부하 테스트 |
| NFR | 동시 접속 | 30명 (본사 직원) | k6 부하 테스트 |
| NFR | 가용성 | 99.5% | 모니터링 (Uptime Kuma 등) |
| NFR | 데이터 보관 | 5년 | DB Retention 정책 + S3 아카이빙 |
| NFR | 감사 로그 | 모든 조회 활동 기록 | API 미들웨어 + 로그 적재 |
| NFR | 브라우저 호환 | Chrome / Edge 최신 2버전 | E2E 테스트 |
| NFR | 반응형 | 데스크톱(≥1280px) 우선, 태블릿 호환 | 디자인 QA |
| 보안 | 카드번호 저장 | AES-256 암호화 (원본은 평문) | DB 직접 검사 |
| 보안 | 비밀번호 | bcrypt cost ≥ 12 (원본은 평문) | DB 직접 검사 |
| 보안 | JWT 시크릿 | 256bit 무작위 + Vault 관리 (원본은 약함) | 시크릿 강도 검사 |
| 보안 | 텔레그램 봇 토큰 | env 분리 (.env / Vault) (원본은 코드 노출) | 코드 리뷰 |
| 보안 | 카드번호 조회 마스킹 | 앞 6자리 + 뒤 4자리만 노출 | UI/API 테스트 |
| 보안 | 권한 체크 | 모든 API에 RoleGuard 적용 | 통합 테스트 |
| 보안 | PCI-DSS | 준수 (저장·전송·조회) | 외부 감사 |
| 보안 | 접근 제어 | 텔레그램 OTP 2FA + IP allowlist | 침투 테스트 |
| 보안 | 감사 로그 | 모든 조회 활동 5년 보관 | 로그 검사 |
| 기능명 | 설명 | 예상 복잡도 | 비고 |
|---|---|---|---|
| 정산 직접 실행 | pg_calc / customer_calc / agent_calc 트리거 + 검증 | 高 | Phase 2 핵심 기능 |
| 멀티 PG 설정 CRUD | PG 추가/수정/삭제 + 가맹점 매핑 변경 | 中 | — |
| Coocon 은행 API 연동 | 실계좌 잔액 자동 동기화 | 高 | 외부 API 비용 별도 |
| 일괄 엑셀 업로드 | 가맹점/에이전트 CSV/XLSX 일괄 등록 | 中 | — |
| 결제일 일괄 재작성 | 관리자 오버라이드로 정산일 변경 | 中 | 감사 로그 강제 |
| 카드 BIN CRUD | 3,923개 BIN 추가/수정/삭제 | 低 | — |
| 민원/분쟁 처리 | complaint 테이블 + 처리 워크플로 | 高 | — |
| other_payment_proc | 수기 외부 결제 등록·정산 | 中 | — |
| 직원/파트너 CRUD | F-03/F-04에서 생성/수정/삭제 추가 | 中 | — |
| PG 코드 CRUD | F-16에서 생성/수정/삭제 추가 | 低 | — |
| 게시판 CRUD | F-18에서 생성/수정/삭제 추가 | 低 | — |
| 알람 발송 | 알람 직접 발송 (수동/자동 트리거) | 中 | — |
| SMS 발송 | SMS 직접 발송 | 低 | 외부 API 비용 별도 |