⚠️ 마감일: 2026년 2월 11일 () | 1순위 목표: 기사 정보 관리 + 쿠팡 주정산 + 쿠팡 익일정산

🚀 DPSP 개발 로드맵

Delivery Partner Settlement Platform | AI-Powered Development Sprint

개발 기간
17일
1/26(월) ~ 2/11(수) 포함
개발 인원
4명
기사 수
600+
지사 수
10개

📑 목차

1

팀 구성 및 역할

신예호
주정산 / 익일정산 / 엑셀 처리 담당
  • 쿠팡/배민 주정산 로직 구현
  • 쿠팡/배민 익일정산 로직 구현
  • 엑셀 파일 파싱 및 비밀번호 해제
  • 프로모션 계산 로직
  • 이체 파일 생성
김태민
데이터베이스 스키마 + 기사 DB 담당
  • PostgreSQL 스키마 설계
  • 기사 정보 CRUD API
  • 기사 엑셀 일괄 업로드/다운로드
  • 기사 검색 기능
  • 소속 변경 이력 관리
신은지
관리자 로그인 + 대시보드 담당
  • JWT 기반 인증 시스템
  • 권한 레벨 관리 (본사/지사/기사)
  • 2단계 인증 (2FA)
  • 대시보드 UI 구현
  • 접속 기록 및 수정 이력
김준태
데이터베이스 스키마 + 주정산 담당
  • 정산 데이터 스키마 설계
  • 주정산 API 엔드포인트
  • 프로모션 설정 관리
  • 시간대별 통계 집계
  • 정산 결과 저장 및 조회
2

개발 타임라인

W1
1주차: 기반 구축
2026.01.26 (월) - 02.01 (일) | 7일
🎯 핵심: DB 스키마 + 기사 정보 관리 + 기본 인증
CRITICAL 데이터베이스 스키마 설계 및 구축
김태민 김준태
PostgreSQL 스키마 전체 설계. 기사, 정산, 프로모션, 이력 테이블 포함. 마이그레이션 스크립트 작성 및 초기 데이터 시딩.
  • 기사 정보 테이블 (riders) - PK는 id(SERIAL), 사용자 식별은 unique_id(이름+전화번호)
  • 지사 정보 테이블 (branches) - 배민/쿠팡 지역명 매핑
  • 정산 결과 테이블 (settlements) - 익일/주정산 구분
  • 프로모션 설정 테이블 (promotions) - 지사별 조건
  • 소속 변경 이력 테이블 (rider_branch_history)
  • 접속 로그 테이블 (access_logs)
  • 수정 이력 테이블 (audit_logs)
AI 프롬프트 예시
# 스키마 설계 프롬프트 나는 배달 기사 정산 시스템을 개발 중이야. PostgreSQL 데이터베이스 스키마를 설계해줘. 요구사항: 1. 기사 정보 (600-700명) - 고유 식별자: 이름+전화번호 뒷자리 (예: 이재원7304) - 필수: 계정이름, 전화번호, 배민ID, 예금주, 은행, 계좌번호, 주민번호, 정산주기 - 선택: 실사용자전화번호, 리스정보 2. 한 기사가 여러 플랫폼/지사에 소속 가능 (다대다 관계) 3. 지사별 다른 이름 사용 - 배민: 강남A, 강남B, 서초A - 쿠팡: 강남중앙1, 강남중앙2, 서초서부 4. 정산 데이터 (익일정산/주정산) - 플랫폼별로 다른 계산 로직 - 세금 공제 (고용보험 0.8%, 산재보험 0.9%, 원천세 3.3%) - 프로모션 (지사별 조건 다름) 5. 이력 관리 - 소속 변경 이력 - 정산 수정 이력 생성해야 할 것: - CREATE TABLE 문 - 인덱스 정의 - 외래키 관계 - 마이그레이션 스크립트 (up/down) 출력 형식: SQL 파일로 바로 실행 가능한 형태
CRITICAL 기사 정보 관리 API 구현
김태민
Express.js 기반 RESTful API. 기사 CRUD, 엑셀 업로드/다운로드, 검색 기능.
  • POST /api/riders - 신규 기사 등록
  • GET /api/riders/:id - 기사 정보 조회
  • PUT /api/riders/:id - 기사 정보 수정
  • DELETE /api/riders/:id - 기사 삭제/퇴사 처리
  • POST /api/riders/bulk-upload - 엑셀 일괄 업로드
  • GET /api/riders/export - 엑셀 다운로드
  • GET /api/riders/search - 검색 (이름/전화번호/아이디/지사)
AI 프롬프트 예시
# Express API 생성 프롬프트 Express.js와 PostgreSQL을 사용해서 기사 정보 관리 RESTful API를 만들어줘. 요구사항: 1. 라우터: /api/riders 2. 컨트롤러 패턴 사용 3. 에러 핸들링 미들웨어 4. 입력 검증 (express-validator) 5. 엑셀 처리 (xlsx 라이브러리) API 엔드포인트: - POST /api/riders - 신규 등록 (중복 체크: 이름+전화번호) - GET /api/riders/:id - PUT /api/riders/:id - DELETE /api/riders/:id (soft delete) - POST /api/riders/bulk-upload (엑셀 파일 받아서 일괄 등록) - GET /api/riders/export (현재 기사 목록 엑셀로 다운로드) - GET /api/riders/search?name=&phone=&branch= (검색) 필수 필드 검증: - 계정이름 (필수) - 전화번호 (필수, 10-11자리) - 주민번호 (필수, 암호화 저장) 포함할 것: - 타입스크립트 타입 정의 - API 문서 주석 (JSDoc) - 단위 테스트 예시 (Jest)
CRITICAL 기본 인증 시스템 구현
신은지
JWT 기반 로그인, 권한 관리 (본사 관리자/지사 관리자/기사). 2FA는 배포 직전 최고관리자만 적용.
  • 회원가입 및 로그인 (bcrypt 해싱)
  • JWT 토큰 발급 및 검증 미들웨어
  • 권한 레벨 체크 미들웨어 (RBAC) - 3단계
  • 세션 관리 및 로그아웃
  • 비밀번호 재설정 플로우
  • ⚠️ 2FA(TOTP)는 W3 배포 직전, 최고관리자만 적용
AI 프롬프트 예시
# 인증 시스템 프롬프트 Express.js에서 JWT 기반 인증 시스템을 구축해줘. 권한 레벨: 1. SUPER_ADMIN (본사 최고 관리자) - 모든 기능 접근 - 프로모션 설정 - 정산 툴 사용 2. BRANCH_ADMIN (지사 관리자) - 해당 지사 기사만 조회/수정 - 기사 일차감 설정 - 정산 내역 조회 3. RIDER (기사) - 본인 정산 내역만 조회 기능: - POST /api/auth/register (회원가입) - POST /api/auth/login (로그인 → JWT 발급) - POST /api/auth/2fa/setup (2FA 설정) - POST /api/auth/2fa/verify (2FA 인증) - POST /api/auth/logout - GET /api/auth/me (현재 사용자 정보) 미들웨어: - authenticateToken (JWT 검증) - authorizeRole(['SUPER_ADMIN', 'BRANCH_ADMIN']) (권한 체크) - checkBranchAccess (지사 관리자는 본인 지사만) 보안 요구사항: - 비밀번호 bcrypt 해싱 (salt rounds: 12) - JWT secret은 환경변수 - 토큰 만료: access 15분, refresh 7일 - 2FA는 TOTP 방식 (Google Authenticator 호환)
HIGH React 프론트엔드 기본 구조
신은지
React + React Router + Context API. 로그인 페이지, 대시보드 레이아웃, 라우팅 설정.
  • 프로젝트 초기 설정 (Vite 또는 CRA)
  • 라우팅 구조 (/login, /dashboard, /riders, /settlements)
  • 인증 Context (AuthProvider)
  • Protected Route 컴포넌트
  • 레이아웃 컴포넌트 (사이드바, 헤더)
W2
2주차: 핵심 기능 개발
2026.02.02 (월) - 02.08 (일) | 7일
🎯 핵심: 쿠팡 주정산 + 쿠팡 익일정산 (1순위 목표)
CRITICAL 쿠팡 주정산 로직 구현
신예호 김준태
쿠팡 주정산서 파싱, 세금 계산, 프로모션 적용, 이체 파일 생성, 톡방 이미지 생성.
  • 엑셀 파일 업로드 및 비밀번호 해제 (사업자번호)
  • 시트 파싱: 을지_협력사 소속 라이더, 관리비, 추가배달료, 프로모션, 시간제보험
  • 총정산금액에서 고용보험(0.8%), 산재보험(0.9%), 시간제보험 차감
  • 원천세(3.3%) 계산 및 차감
  • 지사 프로모션 계산 (조건: 150건 이상 시 건당 1000원 등)
  • 팀 미션 계산 (성공 여부 수기 입력)
  • 익일정산자: 지사프로모션+팀미션만 지급
  • 주정산자: 전체 정산 처리
  • 은행 이체 파일 생성 (txt/csv)
  • 톡방 이미지 생성 (기사명, 정산액, 건수, 공제내역)
AI 프롬프트 예시
# 쿠팡 주정산 로직 프롬프트 Node.js에서 쿠팡 주정산 엑셀 파일을 처리하는 함수를 만들어줘. 입력: - 엑셀 파일 (비밀번호: 사업자번호) - 지사 프로모션 설정 (DB에서 조회) - 팀 미션 성공 여부 (사용자 입력) 처리 과정: 1. xlsx 라이브러리로 파일 열기 2. 비밀번호 해제: msoffice-crypt 또는 node-office-encryptor 3. 시트 읽기: - 을지_협력사 소속 라이더 정산 확인용 - 시간제보험 시트 4. 각 기사별로: - AC열 '총정산금액' 추출 - 고용보험 = 총정산금액 × 0.008 - 산재보험 = 총정산금액 × 0.009 - 시간제보험료 = 시간제보험 시트에서 조회 (음수) - 원천세 = 총정산금액 × 0.033 - 실지급액 = 총정산금액 - 고용보험 - 산재보험 + 시간제보험료 - 원천세 5. 지사 프로모션 계산: - 조건 예: 150건 이상 시 (151건부터) 건당 1000원 - 프로모션액에 원천세 3.3% 차감 6. 팀 미션 계산: - 조건 충족 시 지급액 - 원천세 3.3% 차감 출력: - JSON 배열 (각 기사별 정산 결과) - 은행 이체 파일 (txt): 은행명|계좌번호|금액|예금주 - 톡방 이미지 데이터 (HTML → Canvas → PNG) 라이브러리: - xlsx - msoffice-crypt (엑셀 비밀번호 해제) - canvas (이미지 생성)
CRITICAL 쿠팡 익일정산 로직 구현
신예호
쿠팡 익일정산서 파싱, 세금 계산, 익일정산 수수료 차감, 이체 파일 생성.
  • 엑셀 파일 업로드 및 비밀번호 해제 (사업자번호)
  • 시트 파싱: 종합, 오더별 상세, 지원금, 차감내역, 시간제보험
  • D열 삭제 후 C~AB열 복붙 + 시간제보험료 AG열
  • 고용보험(0.8%), 산재보험(0.9%), 원천세(3.3%) 차감
  • 시간제보험료 반영 (음수)
  • 익일정산 수수료 차감 (지사별 설정값, 예: 건당 77원)
  • 정산예정금액 = 총정산금액 - 세금 + 시간제보험료 - 수수료
  • 은행 이체 파일 생성
  • 톡방 이미지 생성 (추가지원금, 차감내역, 시간제보험 포함)
AI 프롬프트 예시
# 쿠팡 익일정산 로직 프롬프트 쿠팡 익일정산 엑셀 처리 함수를 만들어줘. 파일 구조: - 시트: 종합, 오더별 상세 내역서, 지원금, 추가지원금, 차감내역, 시간제보험 처리 과정: 1. '종합' 시트에서 D열 삭제 2. C~AB열 (성함~과세항목) 데이터 추출 3. '시간제보험' 시트에서 AG열 (시간제보험료) 추출 4. 각 기사별: - 총 정산금액 = 시트의 기본값 - 고용보험료 = 총금액 × 0.008 - 산재보험료 = 총금액 × 0.009 - 원천세 = 총금액 × 0.033 - 시간제보험료 = 시트에서 조회 (음수) - 익일정산 수수료 = 건수 × 지사별 설정 (예: 77원) - 정산예정금액 = 총금액 - 고용보험료 - 산재보험료 + 시간제보험료 - 원천세 - 수수료 추가 데이터: - '추가지원금', '차감내역' 시트 정보를 톡방 이미지에 포함 수수료 설정: - 지사별로 다른 수수료 (DB에서 조회) - 환경설정에서 변경 가능하도록 출력: - 정산 결과 JSON - 은행 이체 파일 - 톡방 이미지 (추가지원금/차감내역 포함)
HIGH 프로모션 설정 관리 시스템
김준태
지사별 프로모션 조건 설정 UI 및 API. 다단계 조건 지원 (150건, 250건, 350건 등).
  • 프로모션 설정 테이블 스키마
  • API: POST/PUT/DELETE /api/promotions
  • 조건 타입: threshold (건수 기준), range (범위), etc.
  • 지사별로 다른 조건 설정 가능
  • React UI: 프로모션 설정 페이지
HIGH 기사 정보 관리 UI
신은지
React로 기사 목록, 상세, 등록/수정 폼, 엑셀 업로드/다운로드 UI 구현.
  • 기사 목록 페이지 (테이블, 페이지네이션, 검색)
  • 기사 상세/수정 모달
  • 신규 등록 폼
  • 엑셀 업로드 버튼 (drag & drop)
  • 엑셀 다운로드 버튼
  • 권한별 UI 제어 (지사 관리자는 본인 지사만)
W3
3주차: 마무리 및 테스트
2026.02.09 (월) - 02.11 (수) | 3일
🎯 핵심: 통합 테스트 + 버그 수정 + 배포 (배민은 2차 옵션)
MEDIUM 배민 주정산 로직 구현 (2차 옵션)
신예호
⚠️ 마감 불변 시 2차 출시로 이동 가능
배민 주정산서 파싱, 팀 프로모션 자동 포함, 지사 프로모션만 추가 계산.
  • 엑셀 파일 파싱 (시트: 을지, 관리비, 추가배달료, 프로모션, 고용보험소급정산)
  • 팀 프로모션은 이미 계산되어 있음 (원천세만 차감)
  • 지사 프로모션 계산 후 추가
  • 익일정산자: 지사프로모션 + 팀프로모션
  • 주정산자: 전체 정산
MEDIUM 배민 익일정산 로직 구현 (2차 옵션)
신예호
⚠️ 마감 불변 시 2차 출시로 이동 가능
배민 익일정산서 파싱, 비밀번호는 계정 ID.
  • 엑셀 파일 업로드 시 계정 ID 입력 받기
  • K열 배민ID, L열 라이더명, AH열 배달처리비 추출
  • 세금 계산 (고용보험, 산재보험, 원천세)
  • 익일정산 수수료 차감
  • 시간제보험료 처리 (가입자만)
MEDIUM 정산 결과 조회 UI
신은지
정산 이력 조회, 필터링, 이체 파일 다운로드, 톡방 이미지 확인.
  • 정산 이력 목록 (날짜, 플랫폼, 지사, 정산 유형)
  • 상세 페이지 (기사별 정산 내역)
  • 이체 파일 다운로드 버튼
  • 톡방 이미지 미리보기 및 다운로드
  • 권한별 조회 제한 (지사 관리자, 기사)
HIGH 2FA 적용 (최고관리자만)
신은지
본사 최고 관리자 계정에만 2단계 인증(TOTP) 적용. 배포 직전에 구현.
  • speakeasy 라이브러리로 TOTP 구현
  • QR 코드 생성 (Google Authenticator 호환)
  • 로그인 시 OTP 검증 추가
  • 최고관리자 계정만 2FA 필수 설정
HIGH 톡방 전송 기능 (1차: 수동 다운로드)
신예호
1차 출시: 이미지 다운로드 → 수동 업로드
2차 출시: Teams/Slack 웹훅 자동 전송 (옵션)
  • 정산 완료 시 톡방 이미지 자동 생성
  • 이미지 다운로드 버튼 제공
  • 파일명: {지사명}_{날짜}_{플랫폼}.png
  • ⚠️ 자동 전송은 2차 출시로 분리 (0.5일 추가 소요)
CRITICAL 통합 테스트 및 버그 수정
전원
실제 데이터로 테스트, 엣지 케이스 처리, 성능 최적화.
  • 실제 쿠팡/배민 엑셀 파일로 정산 테스트
  • 600명 기사 데이터 입력 및 조회 성능 테스트
  • 권한별 접근 제어 테스트
  • 엑셀 파일 오류 처리 (비밀번호 오류, 시트 없음 등)
  • 동시 접속 테스트 (15명)
  • 데이터 백업 및 복구 절차
HIGH 배포 및 문서화
김태민
프로덕션 배포, 환경 설정, 사용자 매뉴얼 작성.
  • Docker 컨테이너화
  • 환경변수 설정 (DB, JWT secret 등)
  • Nginx 리버스 프록시 설정
  • SSL 인증서 적용 (Let's Encrypt)
  • PM2로 프로세스 관리
  • 관리자 매뉴얼 작성 (Notion)
  • API 문서 (Swagger)
3

데이터베이스 스키마

참고 스키마 구현 시 고려사항
  • ENUM vs TEXT + CHECK: PostgreSQL ENUM은 깔끔하지만 나중에 값 추가/변경이 어려움. 운영 유연성이 필요하면 TEXT + CHECK 제약 고려
  • settlements 중복 방지: UNIQUE 제약 추가 필요 - UNIQUE (rider_id, branch_id, platform, type, settlement_date)
  • 인덱스 전략: 조회가 많은 컬럼에 인덱스 추가 (settlement_date, created_at, status 등)
riders (기사 정보)
id SERIAL PRIMARY KEY
unique_id VARCHAR(50) UNIQUE ⚠️
account_name VARCHAR(100) NOT NULL
phone_number VARCHAR(20) NOT NULL
baemin_id VARCHAR(100)
bank_name VARCHAR(50)
account_number VARCHAR(50)
account_holder VARCHAR(100)
resident_number TEXT (AES-256 암호화) 🔒
settlement_cycle ENUM (daily, weekly)
daily_deduction BIGINT
commission BIGINT
status ENUM (active, inactive)
created_at TIMESTAMP
branches (지사)
id SERIAL PRIMARY KEY
platform ENUM (baemin, coupang)
name VARCHAR(100) NOT NULL
code VARCHAR(50)
daily_settlement_fee BIGINT
business_number VARCHAR(20)
rider_branches (소속)
id SERIAL PRIMARY KEY
rider_id INTEGER REFERENCES riders
branch_id INTEGER REFERENCES branches
start_date DATE
end_date DATE
is_active BOOLEAN
settlements (정산)
id SERIAL PRIMARY KEY
rider_id INTEGER REFERENCES riders
branch_id INTEGER REFERENCES branches
platform ENUM (baemin, coupang)
type ENUM (daily, weekly)
settlement_date DATE
delivery_count INTEGER
base_amount BIGINT
employment_insurance BIGINT
industrial_insurance BIGINT
withholding_tax BIGINT
time_insurance BIGINT
branch_promotion BIGINT
team_mission BIGINT
final_amount BIGINT
created_at TIMESTAMP
promotions (프로모션)
id SERIAL PRIMARY KEY
branch_id INTEGER REFERENCES branches
name VARCHAR(100)
type ENUM (branch, team)
conditions JSONB
start_date DATE
end_date DATE
is_active BOOLEAN
users (사용자)
id SERIAL PRIMARY KEY
username VARCHAR(50) UNIQUE
password_hash TEXT
role ENUM (super, branch, rider)
branch_id INTEGER REFERENCES branches
totp_secret TEXT (2FA)
last_login TIMESTAMP
audit_logs (수정 이력)
id SERIAL PRIMARY KEY
user_id INTEGER REFERENCES users
action VARCHAR(50)
table_name VARCHAR(50)
record_id INTEGER
old_value JSONB
new_value JSONB
created_at TIMESTAMP
access_logs (접속 기록)
id SERIAL PRIMARY KEY
user_id INTEGER REFERENCES users
ip_address VARCHAR(50)
user_agent TEXT
created_at TIMESTAMP
4

⚠️ 주요 위험 사항 및 대응

CRITICAL 엑셀 비밀번호 해제 안정성
위험: 라이브러리 호환 이슈로 실제 파일이 안 열릴 수 있음
대응: Week 1에 실제 파일 3종(배민 일정산, 쿠팡 일정산, 쿠팡 주정산)으로 검증 필수
  • msoffice-crypt, node-office-encryptor 둘 다 테스트
  • 실패 시 Python(openpyxl) 백업 플랜
  • 비밀번호 오류 시 명확한 에러 메시지
CRITICAL 주민번호 보안 (법적 리스크 최상급)
최소 보안 요구사항:
  • 암호화: AES-256 암호화 저장
  • 키 관리 (핵심): 환경변수만으로는 부족. AWS KMS, Google Cloud KMS, HashiCorp Vault 등 전용 키 관리 서비스 권장
  • 키 회전: 최소 분기 1회 키 교체 정책
  • 접근 통제: 암호화 키 접근은 최고관리자 + 시스템 계정만
  • 조회 시 마스킹: 900101-1****** 형태로만 출력
  • 접근 권한: 최고관리자만 원본 조회 가능
  • 감사 로그: 주민번호 조회 시 (누가, 언제, 어떤 기사) 기록
  • 로그 보안: 로그에 실제 주민번호 저장 금지
  • API 응답: 기본적으로 제외, 명시적 요청 시만 포함
  • 1차 출시: 환경변수 키 관리 (개발 속도 우선)
  • 2차 출시: KMS 도입 (운영 안정화 후)
HIGH unique_id 충돌 가능성
위험: 이름+전화번호 뒷자리(예: 이재원7304)는 충돌 가능
대응: DB 진짜 유니크 제약은 (이름, 전화번호 전체) 복합키로
  • unique_id는 표시용/로그인용으로만 사용
  • UNIQUE INDEX (account_name, phone_number) 추가
  • 충돌 발생 시 자동으로 suffix 추가 (예: 이재원7304_2)
HIGH 은행 이체 파일 포맷
위험: 은행별 포맷이 다르면 여기서 크게 흔들림
대응: 1차는 1개 은행 포맷만 지원 (실제 샘플 기준)
  • Week 1에 클라이언트에게 주로 사용하는 은행 확인
  • 해당 은행의 실제 이체 파일 샘플 받기
  • 1차는 해당 포맷만 정확히 구현
  • 다른 은행은 2차 출시로 분리
MEDIUM 대용량 엑셀 파싱 성능
위험: 600명 기사 데이터 + 주 7일치 = 메모리/속도 이슈
대응: 스트리밍 파싱 고려
  • xlsx-stream-reader 또는 exceljs (streaming 모드)
  • Node.js 메모리 제한 늘리기 (--max-old-space-size=4096)
  • 파일 크기 제한 (20MB 이상 시 경고)
5

📦 단계별 출시 계획

1차 출시 (2월 11일 마감)
핵심 기능만 포함 - 납기 불변
  • ✅ 기사 정보 관리 (CRUD, 엑셀 업로드/다운로드, 검색)
  • ✅ 쿠팡 주정산 (세금 계산, 프로모션, 이체 파일, 톡방 이미지)
  • ✅ 쿠팡 익일정산 (세금 계산, 수수료, 이체 파일)
  • ✅ 기본 인증 (JWT, 3단계 권한)
  • ✅ 정산 결과 조회 UI
  • ✅ 톡방 이미지 다운로드 (수동 업로드)
  • ⚠️ 2FA는 최고관리자만
1.5차 출시 (여유 있으면)
  • 배민 주정산
  • 배민 익일정산
2차 출시 (2월 중순 이후)
  • 데이터 분석 대시보드 (시간대별 통계)
  • 지사별/기사별 리포트
  • 톡방 자동 전송 (Teams/Slack 웹훅)
  • 2FA 전체 계정 확대
  • 추가 은행 이체 포맷 지원
6

주요 마일스톤

M1: 데이터베이스 및 기본 인증 완료

2월 1일 (일) 목표
예정

M2: 기사 정보 관리 완료

2월 4일 (수) 목표
예정

M3: 쿠팡 주정산 + 쿠팡 익일정산 완료 (1순위)

2월 8일 (일) 목표
핵심

M4: 배민 정산 완료 (2차 옵션)

2월 10일 (화) 목표
옵션

M5: 통합 테스트 및 배포

2월 11일 (수) - 최종 마감
마감
7

AI 프롬프트 라이브러리

엑셀 비밀번호 해제 프롬프트
# Node.js에서 엑셀 파일 비밀번호 해제 ⚠️ 중요: Week 1에 실제 파일 3종으로 라이브러리 검증 필수! - 배민 일정산 파일 (비밀번호: 계정 ID) - 쿠팡 일정산 파일 (비밀번호: 사업자번호) - 쿠팡 주정산 파일 (비밀번호: 사업자번호) 나는 비밀번호로 보호된 엑셀 파일(.xlsx)을 처리해야 해. 요구사항: 1. 업로드된 파일의 비밀번호를 해제 2. 배민 일정산: 비밀번호 = 계정 ID (사용자 입력 받음) 3. 쿠팡 파일: 비밀번호 = 사업자번호 (DB에 저장되어 있음) 추천 라이브러리: - msoffice-crypt - node-office-encryptor - 백업: Python openpyxl (msoffice-crypt 실패 시) 코드 예시: const officecrypto = require('msoffice-crypt'); async function decryptExcel(encryptedBuffer, password) { const decrypted = await officecrypto.decrypt(encryptedBuffer, { password }); return decrypted; } 에러 처리: - 비밀번호 오류 시 사용자에게 명확한 메시지 - 파일 형식 오류 처리 - 메모리 제한 고려 (대용량 파일)
톡방 이미지 생성 프롬프트
# Canvas로 정산 결과 이미지 생성 Node.js에서 HTML Canvas를 사용해서 톡방 공유용 이미지를 생성해줘. 데이터: - 기사명 - 정산예정금액 (실지급액) - 배달건수 - 오더 상세 내역 - 총 정산금액 - 공제내역 (고용보험, 산재보험, 원천세, 시간제보험) - 프로모션 (있는 경우) 디자인 요구사항: - 세로형 이미지 (1080 x 1920px 또는 적절한 세로 비율) - 깔끔하고 가독성 높은 디자인 - 금액은 천 단위 콤마 표시 - 공제 항목은 붉은색, 지급액은 파란색 - 회사 로고 포함 (선택) 라이브러리: - canvas (node-canvas) - sharp (이미지 최적화) 출력: - PNG 파일 Buffer - S3 업로드 또는 로컬 저장 - 파일명: {기사명}_{정산일자}.png
은행 이체 파일 생성 프롬프트
# 은행 이체용 파일 생성 ⚠️ 중요: Week 1에 클라이언트에게 주로 사용하는 은행 확인 필수! 실제 샘플 파일 받아서 정확한 포맷 파악 후 개발 정산 결과를 은행 이체 파일로 변환하는 함수를 만들어줘. 입력 데이터: [ { riderId: 1, riderName: "홍길동", bankName: "국민은행", accountNumber: "123-456-789012", accountHolder: "홍길동", amount: 1234500 }, // ... ] 출력 형식: 1. TXT 파일 (구분자: | 또는 탭) 은행명|계좌번호|금액|예금주 국민은행|123-456-789012|1234500|홍길동 2. CSV 파일 은행명,계좌번호,금액,예금주 국민은행,123-456-789012,1234500,홍길동 1차 출시: 1개 은행 포맷만 지원 (실제 샘플 기준) 2차 출시: 추가 은행 포맷 확장 검증: - 계좌번호 형식 검증 - 금액 0원 이하 체크 - 예금주명 매칭 (기사명 vs 계좌 예금주)
시간대별 통계 집계 프롬프트
# 시간대별 배달 건수 집계 (배민/쿠팡) 배달 수행 데이터를 시간대별로 집계하는 SQL 쿼리를 만들어줘. 시간대 정의: 배민 평일: - 아침논피크: 06:00 ~ 10:59 - 점심피크: 11:00 ~ 12:59 - 오후논피크: 13:00 ~ 16:59 - 저녁피크: 17:00 ~ 19:59 - 야간논피크: 20:00 ~ 02:59 배민 주말: - 점심피크: 11:00 ~ 13:59 - 오후논피크: 14:00 ~ 16:59 - 나머지는 평일과 동일 쿠팡 평일: - 아침: 06:00 ~ 10:54 - 점심피크: 10:55 ~ 12:59 - 점심논피크: 13:00 ~ 16:54 - 저녁피크: 16:55 ~ 19:59 - 저녁논피크: 20:00 ~ 02:59 쿠팡 주말: - 점심피크: 10:55 ~ 13:59 - 점심논피크: 14:00 ~ 16:54 - 나머지는 평일과 동일 쿼리 요구사항: 1. 기사별, 일별, 시간대별 배달 건수 2. 주차별 집계 (수요일~화요일) 3. 피크시간 건수 우선 정렬 4. 지사별 통계 출력 형식: 기사명 | 날짜 | 아침논피크 | 점심피크 | 오후논피크 | 저녁피크 | 야간논피크 | 합계
8

주요 기술 스택 및 라이브러리

백엔드
  • Node.js + Express.js - RESTful API 서버
  • PostgreSQL - 메인 데이터베이스
  • pg - PostgreSQL 클라이언트
  • jsonwebtoken - JWT 인증
  • bcrypt - 비밀번호 해싱
  • speakeasy - 2FA (TOTP)
  • qrcode - 2FA QR 코드 생성
  • express-validator - 입력 검증
  • multer - 파일 업로드
  • xlsx 또는 exceljs - 엑셀 파일 처리
  • msoffice-crypt - 엑셀 비밀번호 해제
  • canvas - 이미지 생성
  • sharp - 이미지 최적화
  • winston - 로깅
  • helmet - 보안 헤더
  • cors - CORS 설정
프론트엔드
  • React 18 - UI 라이브러리
  • React Router - 라우팅
  • Axios - HTTP 클라이언트
  • React Query - 서버 상태 관리 (추천)
  • Context API - 클라이언트 상태 관리
  • TailwindCSS 또는 MUI - UI 프레임워크
  • react-dropzone - 파일 업로드 UI
  • react-table 또는 AG Grid - 테이블
  • recharts 또는 Chart.js - 그래프
  • date-fns - 날짜 처리
  • react-toastify - 알림 메시지
DevOps
  • Docker - 컨테이너화
  • Docker Compose - 멀티 컨테이너 관리
  • Nginx - 리버스 프록시
  • PM2 - 프로세스 관리
  • Let's Encrypt - SSL 인증서
  • GitHub Actions - CI/CD (선택)
9

일일 체크리스트

매일 해야 할 것
  • 스탠드업 미팅 (오전 10시, 15분) - 어제 한 일, 오늘 할 일, 블로커
  • 코드 리뷰 - PR은 4시간 이내 리뷰
  • Git 커밋 - 의미 있는 단위로 자주 커밋
  • 테스트 - 작성한 코드는 즉시 테스트
  • 문서화 - API 변경사항 즉시 문서화
  • 진행 상황 업데이트 - Notion 또는 프로젝트 관리 툴에 기록
  • AI 활용 - 막히는 부분은 AI에게 물어보기
  • 팀원 도움 - 블로커가 있으면 즉시 공유