2026-01-16
🖨️ PRINTER
Counter POS + Server
Counter POS 영수증 프린터 연동
NICE VAN 프린터 연동
-
registerPrinter(port, baudRate) JS Interface 추가
- SZ102(포트) + SZ103(통신속도) 파라미터
- 영수증 출력 시 프린터 설정 자동 전송
- ANDNVCAT 시스템 연동 성공
서버 안정성 강화
- Neon DB 연결 끊김 에러 핸들링
- Pool
on('error') 이벤트로 자동 재연결
- 유휴 연결 종료 시 크래시 방지
Counter POS 버전
- v2.0.9: 프린터 연동 + URL 수정
- 시작 URL:
/pos/setup → /pos 복원
- APK 서명: Generate Signed APK 필수
2026-01-16
🔒 SECURITY
Server + Auth
HQ Admin 보안 강화
Cross-Tenant 보안
-
assertSameHq() 헬퍼 함수 도입
- 타 본사 리소스 접근 시 403 Forbidden
-
validateStoreAccess 미들웨어 적용
- 사용자 관리 라우트에 HQ 검증 추가
마스터 비밀번호 관리
- Customer Table: 오프라인 키오스크 해제용 유지
- 하드코딩 비밀번호 제거
- 매장별 DB 저장 방식으로 전환
디바이스 계정 보안
- 계정 생성 시 매장 소속 검증
- HQ Admin 비밀번호 자동 리셋 방지
2026-01-15~16
🏢 STRUCTURE
Super + HQ + Store Admin
본사-매장 계층 구조 완성
매장 코드 시스템
- 신규 매장 생성 시 6자리 코드 자동 생성
- 형식: 영문3자리 + 숫자3자리 (예:
PDG718)
- HQ/매장 관리 화면에 코드 표시
- 코드 클릭 시 클립보드 복사
대표자명 필드 추가
-
owner_name 컬럼 추가
- 매장설정에서 대표자명 입력 가능
- HQ Admin 매장 목록에 표시
본사 할당 시스템
- 슈퍼관리자가 매장을 본사에 할당
-
hq_id 외래키로 연결
- 본사관리자는 소속 매장만 조회
본사명 표시
- HQ Admin 페이지 헤더에 본사명 표시
- 브라우저 타이틀에 본사명 포함
- 매장관리자 헤더에 매장코드 표시
2026-01-15
⭐ SUPER ADMIN
Dashboard
슈퍼관리자 대시보드 개선
통합 현황판
- 본사 수 / 매장 수 통계
- 사용자 계정 역할별 분류
- 등록된 태블릿 현황
관리 기능
- 신규 본사 생성
- 본사관리자 계정 생성
- 매장-본사 할당 변경
- 모든 본사/매장 조회
향후 계획 섹션
- 개발 예정 기능 로드맵 표시
- 완료/진행중/예정 상태 구분
2026-01-15
📚 DOCS
DevOps
데이터베이스 마이그레이션 가이드
Replit 자동 동기화
- 스키마 변경(CREATE TABLE): Publish 시 자동 적용
- 데이터 변경(INSERT/UPDATE): 수동 SQL 필요
마이그레이션 템플릿
- 위치:
/scripts/migrations/
- 형식:
YYYYMMDD_description.sql
- 섹션: PRE-CHECK → MAIN → VERIFICATION → ROLLBACK
주의사항
- Replit 콘솔: 여러 SQL문 동시 실행 불가
- 한 문장씩 개별 실행 필수
2026-01-15
🖼️ IMAGE
Store Admin + Customer
메뉴 이미지 썸네일 최적화 시스템
자동 썸네일 생성
- 200x200px 정사각형 썸네일 자동 생성
- 메뉴 이미지 업로드 시 즉시 생성
- 로컬 서버 저장 + Object Storage 동시 저장
- 고객 테이블 로딩 속도 대폭 개선
일괄 썸네일 생성 기능
- 매장관리자 → 메뉴관리 → "🖼️ 전체 썸네일 생성"
- 실시간 진행률 표시 (n/total)
- 취소 버튼으로 중단 가능
- 기존 썸네일 있으면 자동 스킵
고객 테이블 최적화
- 썸네일 우선 → 원본 폴백 로딩
- 네트워크 트래픽 90% 감소
- 저사양 태블릿 메모리 절약
2026-01-15
✨ UI/UX
POS + Customer + Kitchen
터치 인터페이스 최적화 및 UI 개선
hover 효과 제거
- 카운터 POS: 테이블 카드 hover 효과 제거
- 터치 기반 인터페이스에 불필요한 hover 제거
- 터치 시 깜빡임 현상 해결
주방 모니터 색상 개선
- 직원호출 알림카드: 녹색 → 파란색
- 조리완료 카드와 명확히 구분
- 시인성 대폭 개선
고객 테이블 UI 개선
- 긴 메뉴명 2줄 표시 (줄바꿈)
- 메뉴설명 ↔ 가격 여백 축소
- 카테고리명 자동 텍스트 크기 조절
- 주문내역에서 주문상태 표시 제거
2026-01-15
🐛 BUG FIX
Store Admin + Customer
인기/추천 메뉴 드래그 순서 버그 수정
문제 현상
- 드래그로 순서 변경 후 즉시 원래대로 복원
- 서버에는 저장되지만 UI에 반영 안됨
원인 분석
-
featured_order로 정렬 후 display_order로 재정렬
-
renderMenuList()가 정렬 덮어쓰기
수정 내용
- 매장관리자: 인기/추천 → display_order 재정렬 스킵
- 고객테이블: featured_order로 정렬 추가
- 드래그 즉시 반영 + 새로고침 후에도 순서 유지
2026-01-15
🌍 i18n
Customer Table
고객 테이블 다국어 지원 대폭 개선
언어 전환 UX
- 언어 변경 시 로딩 인디케이터 표시
- 🇰🇷🇺🇸🇨🇳🇯🇵 국기 + 약어 표시
- 선택 언어 localStorage 저장 (세션 유지)
번역 적용 범위
- 메뉴명/설명 DB 번역 테이블 조회
- 카테고리명 다국어 지원
- 빠른 문구 (직원호출 등) 번역
- 장바구니/결제/주문내역 UI 텍스트
- 메뉴 로드 후 번역 재적용
캐시 관리
- 번역 파일 캐시 버스팅 (?v= 파라미터)
-
/api/menu/localized?locale=en API
2026-01-14
🌐 TRANSLATION
Store Admin
다국어 번역 관리 시스템
카테고리 번역
- 카테고리 수정 시 "다국어 번역" 버튼
- 한국어/영어/중국어/일본어 개별 입력
-
category_translations 테이블 저장
빠른 문구 번역
- 직원호출 문구 다국어 지원
- 버튼 라벨 + 문구 내용 분리 번역
- 매장설정 → 고객용 문구 관리
매장 설정 개선
- 다국어 지원 ON/OFF 토글
- 사용할 언어 체크박스 선택
- 설정 페이지 레이아웃 재구성
2026-01-14
🧾 RECEIPT
Kitchen + Server
신규/추가 주문 구분 및 영수증 개선
신규/추가 주문 자동 구분
- [신규]: 손님이 테이블에 앉아 처음 주문 → 물, 물티슈, 수저 서빙 필요
- [추가]: 이미 주문한 적 있는 테이블 → 조리 메뉴만 서빙
- 세션 기반 판단: 해당 세션의 첫 주문 ID와 비교
- 다른 알림포인트로 간 주문도 고려 (대행 출력 시나리오 대응)
영수증 형식 개선
- 테이블번호 40px로 확대, 위아래 공백 축소
- 주문시간 맨 아래로 이동
- 알림포인트명 표시:
[신규 - 주방 주문서]
영수증 미리보기 디버그 모달
-
PRINTER_DEBUG_MODE = true 시 출력 전 미리보기
- 실제 프린터 연동 전 레이아웃 확인 가능
- 확인 버튼 클릭 후 실제 출력 진행
2026-01-14
UX FIX
Store Admin
메뉴 관리 스크롤 위치 유지
문제 해결
- 기존: 메뉴 수정 후 리스트가 맨 위로 스크롤 초기화
- 수정: 저장 후 스크롤 위치 유지
-
scrollTop 저장 → loadMenu() → 복원
2026-01-13
🖨️ PRINTER
Kitchen Monitor
네트워크 영수증 프린터 연동
알림포인트 타입 분리
- monitor_printer: 화면 표시 + 프린터 출력
- printer_only: 프린터 출력만 (화면 없음)
- 대행 출력: monitor_printer가 printer_only 대신 출력
메뉴 필터링 시스템
- 각 알림포인트별 연결된 메뉴만 영수증에 출력
-
/api/notification-points/:id/menus API
- 대행 출력 시 해당 프린터에 연결된 메뉴만 필터링
Kitchen Monitor 앱 기능
- 네트워크 프린터 IP/Port 설정
- TCP 소켓 연결 테스트
-
window.Android.printOrderReceipt() JS Interface
2026-01-13
🔓 MAINTENANCE
All Android Apps
Device Owner 해제 기능
유지보수용 해제 명령
- ADB 명령어 한 줄로 Device Owner 해제:
adb shell am start -n com.orderbox.<app>/.MainActivity --ez clear_device_owner true
- 적용 앱: customer-table, counter-pos, kitchen-monitor
키오스크 모드 유연성
- 운영 시: Device Owner로 키오스크 잠금
- 유지보수 시: 명령어로 해제 후 설정 변경
- 해제 후 재설정:
dpm set-device-owner
2026-01-12
⭐ ARCHITECTURE
Server + Auth
3단계 관리자 계층 구조 완성
관리자 계층 구조
- 슈퍼관리자 (superadmin): 플랫폼 전체 관리, 여러 본사 통합 관리
- 본사관리자 (hqadmin): 본사 단위 매장/직원/APK/미디어 관리
- 매장관리자 (store_admin): 개별 매장 메뉴/테이블/알림 관리
역할별 URL 및 테마
-
/login/super-admin → /super-admin (Dark Indigo 테마, ⭐ 아이콘)
-
/login/hq-admin → /hq-admin (Purple 테마, 👑 아이콘)
-
/login/admin → /admin (Blue-Cyan 테마)
권한 체계
- 슈퍼관리자: 모든 페이지 접근 가능 (본사/매장/기기 페이지 포함)
- 본사관리자: 매장관리자 이하 접근 가능
- 계정 필터링: 하위 관리자에게 상위 계정 숨김 (보안)
계정 ID 규칙 개선
- 언더바(_) 허용: 매장별 구분 가능
pcg_gangnam, bonga_jeju
- 허용 문자: 소문자 + 숫자 + 언더바 (정규식:
^[a-z0-9_]+$)
- 테스트 계정:
orderboxadmin(슈퍼), testhqadmin(본사), pcgis(매장)
구현 파일
-
server/pages/super-admin.ts - 슈퍼관리자 페이지
-
server/pages/hq-admin.ts - 본사관리자 페이지
-
server/auth.ts - getRoleHierarchy(), requirePageAuth()
2026-01-12
🚀 MAJOR
Server + Android
자체 OTA 자동 업데이트 시스템
본사관리자 APK 관리
- APK 업로드: 버전명, 버전코드, 릴리즈노트 입력
- 버전 이력: 활성화/다운로드/삭제 + 릴리즈노트 표시
- 롤백: 이전 버전 즉시 활성화 가능
- 경로 보기: 짧은 URL, 최신 버전 URL, 전체 URL 복사
서버 API
-
android_app_versions 테이블: 앱별 버전 관리
- Object Storage 저장:
.private/android-apks/
- SHA-256 체크섬 자동 계산 및 저장
- 서버 프록시 다운로드: Object Storage 서명 URL 제약 해결
짧은 URL 서비스
-
/apk/ct/2.6.6 → customer-table v2.6.6
-
/apk/cp/latest → counter-pos 최신
-
/apk/km/latest → kitchen-monitor 최신
- ADB 설치:
curl -L -o app.apk .../apk/ct/latest && adb install -r app.apk
Android UpdateManager
- 30분 주기 자동 업데이트 체크 (최초 실행 시 즉시)
- 백그라운드 코루틴으로 다운로드
- SHA-256 검증: 파일 무결성 확인
- Device Owner 모드: 사용자 확인 없이 자동 설치
- InstallReceiver: 설치 완료 후 앱 자동 재실행
운영 편의성
- 본사관리자에서 APK 업로드 → 1-2초 내 전체 태블릿 자동 업데이트
- Play Store/구글 계정 불필요 (Device Owner 모드)
- 버전 규칙: 2.6.6 → 266 (각 자리 0~9)
2026-01-11
🔥 HOT FIX
Counter POS
영수증 시스템 완성 및 버그 수정
영수증 재출력 기능
- 전체 재출력: 주문내역 + "(재출력)" 라벨 표시
- 결제정보만 출력: 좌석/메뉴 제외, 결제 정보만
-
showReceiptReprintOptions() 모달 추가
재출력 결제방법 버그 수정
- 기존: 카드 결제도 "현금"으로 표시
- 수정: /api/payments/session/:id API로 결제정보 별도 조회
- camelCase/snake_case 필드명 둘 다 지원
한자→한글 자동 변환
- 문제: 감열 프린터 한자 출력 불가
- 해결:
hanjaToHangul() 함수 구현
- 中→중, 大→대, 小→소, 上→상, 下→하, 特→특 등 40여개 변환
영수증 컬럼 정렬 개선
- 헤더: 상품명(25) + 단가(7) + 수량(2) + 금액(7)
- "금액" 컬럼 10→7칸 축소 (간격 3칸 감소)
- 47자 고정폭 레이아웃 유지
2026-01-10~11
🖨️ PRINT
Counter POS + VAN
PLUS-VCAT 영수증 출력 시스템
ESC/POS 명령어 구현
-
\x1D\x21\x11 2배 확대, \x1D\x21\x01 2배 높이
-
\x1B\x45\x01/00 굵게 ON/OFF
-
\x1B\x61\x01/00 중앙/좌측 정렬
-
\x1D\x56\x00 자동 절단
영수증 구성
- 매장 정보: 상호명(2배), 사업자번호, 대표자, 주소, 전화
- 주문 내역: 상품명, 단가, 수량, 금액 (컬럼 정렬)
- 합계: 공급가액, 부가세, 총액 (한국 세법 준수)
- 결제 정보: 카드사, 카드번호(마스킹), 승인번호, 가맹점번호
한글 폭 계산 시스템
-
getDisplayWidth(): 한글/한자/전각=2칸, 영문/숫자=1칸
-
padRight() / padLeft(): 고정폭 정렬
- 47자 고정폭 레이아웃
VAN 연동
- PLUS-VCAT SZ100 필드에 ESC/POS 전송
- VAN 단말기가 그대로 프린터 출력
- 디버그 팝업/로그 제거로 운영 환경 최적화
2026-01-10
v2.4.0 NEW
Customer Table
Google Play 인앱 업데이트 (OTA)
Play Core 라이브러리
- AppUpdateManager로 자동 업데이트 감지
- IMMEDIATE 업데이트 - 키오스크 모드 자동 설치
- 다운로드 후 5초 뒤 자동 설치
- 실패 시 30초 후 재시도
자동화 기능
-
onCreate() 앱 시작 시 업데이트 확인
-
onResume() 중단된 업데이트 자동 재개
-
InstallStateUpdatedListener 상태 모니터링
배포 방법
- Google Play Console 비공개 테스트 트랙에 AAB 업로드
- 테스터 이메일 등록 후 Play Store에서 설치
- 이후 업데이트는 자동 감지 및 설치
2026-01-10
SECURITY
Server
API 보안 및 인증 강화
인증 미들웨어 개선
- 공개 엔드포인트 허용 목록 관리
-
/tablets/heartbeat 세션 없이 허용
- device_id 기반 인증으로 모니터링 유지
XSS 방지
- 모든 서버 렌더링 페이지에 입력값 이스케이프 적용
- customer-login, pos, kitchen 등 전체 적용
태블릿 모니터링 안정화
- 세션 만료 후에도 태블릿 상태 모니터링 유지
- 오프라인 표시 오류 방지
2026-01-09
NEW
Admin / Kitchen
주방 모니터 관리 시스템
태블릿 설정 페이지
- 주방 모니터 섹션 추가 (고객 테이블과 분리)
- 알림 포인트 선택 및 디바이스 할당
- 디바이스별 상태 모니터링 표시
원격 제어 모달
- 새로고침, 화면 ON/OFF, 앱 재시작
- 종료, 재부팅 명령
- 잠금 화면에서도 앱 표시
자동 등록
- 주방 모니터 앱 실행 시 자동 디바이스 등록
- 플랫폼 정보 파싱 및 표시
2026-01-09
v1.5.0
Kitchen Monitor
주방 모니터 영업시간 자동 화면 제어
하트비트 기반 자동 제어
- 30초 간격 영업시간 체크
- 영업시간 중: 화면 자동 ON
- 영업시간 외: 화면 자동 OFF
- 서버
business_hours JSON 파싱
HeartbeatService 개선
-
checkBusinessHoursAndControlScreen()
- 백그라운드 서비스에서 독립 실행
- 화면 상태 중복 변경 방지
2026-01-09
FIX
Counter POS
테이블 상태 즉시 반영
문제 해결
- 기존: 이용시작/이용종료/계산완료 후 10~20초 후 반영
- 수정: 즉시 테이블 목록에 반영
기술적 개선
-
updateSingleTable() 함수 개선
- 개별 테이블 + 세션 정보 병렬 조회
- 로컬 캐시 업데이트 후 데이터 재조회 없이 렌더링
-
renderTables(false, skipDataFetch=true) 옵션 추가
2026-01-09
NEW
Counter POS
테이블 이용종료 기능
주문 없는 테이블 처리
- 테이블 상세에 "이용종료" 버튼 추가
- 주문이 있는 테이블에서는 숨김
- 결제 완료와 동일한 처리 로직 적용
병렬 처리
- 세션 완료
/api/sessions/:id/complete
- 테이블 상태 → available
- 일행 해제 (있을 경우)
2026-01-09
UI/UX
Counter POS
결제 확인 모달 디자인 개선
결제 내역 섹션 (하늘색)
- 상품 금액 - 장바구니 아이콘
- 메뉴/추가 할인 - 주황색 강조
- 최종 금액 - 파란 그라데이션 + 노란 금액
레이아웃 최적화
- ? 아이콘 → 제목 옆으로 이동 (세로 공간 절약)
- 패딩 축소: p-8 → p-6
- 중복 질문 문구 제거
2026-01-09
UI
Admin
UI 스케일 슬라이더 스타일
커스텀 CSS 적용
- 글로벌 스케일: 녹색 테마 정사각 핸들
- 개별 디바이스: 기존 스타일 유지
- 투명 배경 + 8px 트랙 높이
- 28px 핸들 + 흰색 테두리
2026-01-07
v1.9.6 NEW
Counter POS
고객용 보조 디스플레이 (듀얼 스크린)
Android Presentation API
- 화면 복제 상태에서도 별도 화면 표시 가능
- 1024x600 저사양 디스플레이 지원
- 앱 시작 시 자동 감지 및 연결
대기화면
- "{매장명}을 방문해주셔서 감사합니다"
- 매장명 노란색, 나머지 흰색 스타일링
- 실시간 시계 + 날짜 표시 (분 단위 갱신)
- 저사양 기기 최적화: 60초 간격 업데이트
결제 진행 화면
- 주문 내역: 메뉴명, 수량, 금액 표시
- 할인 금액 빨간색 강조 (있을 때만)
- 결제 대기 → 진행 중 → 완료/실패 상태 표시
- 결제 모달 닫으면 자동 대기화면 복귀
JavaScript Interface
isCustomerDisplayAvailable() - 사용 가능 여부
showCustomerWelcomeWithStoreName()
showCustomerOrderItems(JSON) - 주문 내역
showCustomerPayment...() - Ready/Processing/Complete/Failed
2026-01-07
v2.5.0
UI/UX
POS 및 고객화면 UI 개선
고객 테이블 화면
- 다양한 화면 크기 대응 (카트 표시 문제 해결)
- 레이아웃 반응형 개선
POS 화면
- 테이블 표시 세션/일행 동기화 개선
- 결제 아이템 열 정렬 수정
- 헤더/스크롤바 패딩 조정
2026-01-07
Cleanup
코드 정리 및 문서화
불필요 코드 삭제
- 중복 함수
loadStoreSettings() 제거
- 디버그 오버레이
debugInfo TextView 제거
-
initPosParallel()에서 통합 처리
replit.md 문서화
- Android zip 패키징 주의사항 추가
- 필수 파일 목록:
build.gradle, settings.gradle 등
- 제외 패턴 실수 방지:
-x "*.gradle*" → -x "*/.gradle/*"
- 버전 표시 구현법:
packageManager.getPackageInfo()
2026-01-05
v2.4.0
Android OTA
태블릿 자동화면제어 및 OTA 업데이트 준비
영업시간 기반 자동화
- 영업시작 시간에 화면 자동 ON
- 영업종료 시간에 화면 자동 OFF
- 영업시작 5분 내 앱 자동 재시작 (하루 1회)
- SharedPreferences로 재시작 상태 영구 저장
OTA 업데이트 전략
- Google Play 비공개 트랙 권장 ($25 일회성)
- 영업시작 앱 재시작 → OTA 업데이트 자동 적용
- 대규모 운영: TeamViewer OEM/MDM 고려
영업시간 저장 오류 수정
- API snake_case → camelCase 변환 추가
-
business_open_time → businessOpenTime
2026-01-05
v2.3.2
POS 개선
결제 취소 및 UI 개선
VAN 카드 취소 버그 수정
- 테스트 모드 취소 시 VAN_TEST_CARD_AMOUNT(1004원) 사용
- 기존: 원래 금액으로 취소 요청 → "취소불가 승인내역확인요" 오류
- 수정: 승인 금액과 동일한 테스트 금액으로 취소 요청
결제 상세 표시 개선
- 취소된 결제 한 줄 통합: 결제시간 + 취소시간
- 음수 금액 레코드 숨김: 중복 표시 제거
- 표시 형식:
결제: 01.04 오후 07:49 취소: 01.05 오전 01:53
결제내역 초기 로딩 개선
- 기존: "날짜를 선택하고 조회를 클릭하세요"
- 수정: 스피너 + "결제 내역을 조회하고 있습니다..."
- 자동 오늘 날짜 조회 시 로딩 상태 명확히 표시
2026-01-04
v2.3.4
Android
고객 테이블 앱 리다이렉트 개선
화면보호기 종료 후 리다이렉트
- 빈자리/착석 모두 /customer 페이지로 리다이렉트
- 웹 페이지에서 세션 상태 기반 UI 전환 처리
- 무한 리다이렉트 루프 문제 해결
API 필드명 정규화
- snake_case 통일:
table_number
- camelCase 제거: tableNumber
- 테이블 표시 정상화 (예: "VIP룸")
2026-01-04
v1.8.0
Screensaver v2
화면보호기 완전 개선
ExoPlayer 전환
- VideoView → ExoPlayer: 10초 끊김 문제 해결
- 재생 버튼 깜박임 제거: useController = false
- 비디오 음소거: volume = 0f
- CENTER_CROP 스케일링 (화면 가득 채우기)
이미지 최적화
- 가로 맞춤 스케일링: FIT_CENTER
- 이미지 프리로딩: 다음 이미지 미리 로드
- 메모리 관리: inSampleSize 최적화
버그 수정
- 비디오 블랙스크린 해결: fadeOut 후 alpha 복원
- 테이블 상태 동기화: 이용중→빈자리 전환 시 화면보호기 갱신
- 빈테이블 타임아웃 수정: screensaverSettings 로드 추가
- 백그라운드 실행 방지: 앱 실행 중에만 동작
디스플레이 설정
- 화면 밝기 85% 고정
- 버전 오버레이 개선: 반투명 배경
2026-01-04
v1.8.1
Global Settings
화면보호기 타임아웃 중앙 관리
본사관리자 전역 설정
- 화면보호기 비활성 타임아웃 전역 설정
- 옵션: 10초 ~ 5분 (10초/30초/1분/2분/3분/5분)
- tablet_media_global_settings 테이블에 저장
매장별 설정 제거
- 매장 관리자 페이지에서 타임아웃 설정 UI 제거
- 우선순위: 전역설정 > 매장설정 > 기본값(60초)
- 앱 수정 불필요: 서버 반환값 자동 적용
2026-01-04
v1.8.2
App Icons
앱 아이콘 업데이트
오더박스 공식 아이콘 적용
- 고객 테이블 앱: 새 아이콘 적용
- 카운터 POS 앱: 새 아이콘 적용
- 주방 모니터 앱: 새 아이콘 적용
- 모든 해상도(hdpi~xxxhdpi) 지원
2026-01-03
v1.7.0
Chunked Upload
청크 업로드 시스템
대용량 파일 분할 업로드
- 파일을 5MB 청크로 분할하여 순차 업로드
- Replit 프로덕션 프록시 제한 우회
- 업로드 완료 후 서버에서 GCS로 전송
API 엔드포인트
POST /api/chunked-upload/init - 세션 시작
POST /api/chunked-upload/chunk - 청크 전송
POST /api/chunked-upload/complete - 완료 및 GCS 전송
DELETE /api/chunked-upload/:sessionId - 취소
세션 관리
- 세션 만료: 1시간 후 자동 정리
- 임시 저장: /tmp/uploads 폴더
2026-01-01
v2.1.0
Sales Analytics
매출 분석 시스템
일별 매출 통계
- 일별 매출 차트 시각화
- 카드/현금 결제 금액 구분
- 할인 금액 추적: 메뉴별 할인 내역
월별 매출 통계
- 최근 12개월 트렌드 차트
- 월 선택 필터 기능
- 월 평균 매출 비교
메뉴별 매출 분석
- 전체 메뉴 목록 매출 순위
- 메뉴별 매출액, 판매수량 표시
- 할인 비례 배분: 공유 메뉴 할인액 정확 분배
2026-01-02
v2.0.0
CSS Optimization
Admin 페이지 CSS 최적화
로딩 속도 대폭 개선
- 기존: Tailwind CSS CDN (3MB+ 다운로드)
- 수정: 로컬 빌드 CSS (54KB)
- 용량 약 50배 감소
2025-12-30
v1.9.1
Menu Options
메뉴 옵션 시스템
옵션 그룹 관리
- 메뉴별 옵션 그룹 추가 (예: 맵기 선택, 토핑)
- 그룹당 옵션 항목 관리 (예: 순한맛, 매운맛)
- 추가 금액 설정 가능 (price_delta)
고객 주문 화면
- 옵션 메뉴 클릭 시 전체화면 모달
- 그룹당 1개 필수 선택
- 터치 친화적 UI (min-height 52px)
장바구니 및 주문 표시
- 장바구니에 선택 옵션 표시
- POS/주방: 보라색 텍스트로 옵션 표시
- 주문 시 옵션 스냅샷 저장
2026-01-03
v1.6.0
Media Cache
태블릿 미디어 캐싱 시스템
로컬 미디어 캐싱
- 화면보호기 미디어를 로컬에 저장
- 버전 기반 동기화: 변경된 파일만 재다운로드
- 네트워크 트래픽 최소화
- 서버 버전 체크 → 매니페스트 비교 → 증분 다운로드
네이티브 화면보호기
- 착석 테이블: 이미지 10초, 동영상 끝까지 (최대 5개 로테이션)
- 빈 테이블: 고정 이미지 1개 (배터리 절약)
- 터치 시 즉시 종료
파일 크기 제한
- 이미지: 최대 10MB
- 동영상: 최대 100MB
- 권장 해상도: 3200x2000px (16:10)
JavaScript Interface
startScreensaver(tableStatus) - 화면보호기 시작
syncMedia(storeId) - 미디어 동기화
getCachedMediaVersion() - 캐시 버전 조회
clearMediaCache() - 캐시 삭제
2026-01-03
v1.5.5
HQ Media
본사 미디어 관리 시스템
본사(HQ) 미디어 업로드
- 화면보호기 미디어 최대 5개
- 빈테이블 이미지 최대 1개
- 대상 매장 선택: 전체 또는 특정 매장
전역 강제 적용
- 전체 매장 강제 적용 토글
- 활성화 시 매장 자체 미디어 무시
- 우선순위: 본사 강제 > 매장별 강제 > 병합
매장별 미디어 모니터링
- 전체 매장 미디어 현황 조회
- 매장 미디어 원격 삭제
- 착석/빈테이블 미디어 구분 표시
2026-01-03
v1.5.0
Payment VAN
NICE VAN 카드결제 연동
ANDNVCAT 단말기 연동
- 카드 승인 (transactionType: 0200)
- 카드 취소 (transactionType: 0420)
- 승인번호, 카드정보, 발급사/매입사 저장
- JavaScript Interface 통신
현금영수증
- 현금결제 시 소득공제/지출증빙 선택
- 휴대폰 번호 / 사업자번호 입력
- VAN 승인 후 영수증번호 저장
2026-01-03
v1.4.5
Party Payment
일행/분할/합산 결제 시스템
일행 결제 (Party Payment)
- 여러 테이블 하나의 결제로 처리
- 테이블 추가/제거로 일행 구성
- 합산 / 개별 승인 모드 선택
분할 결제 (Split Payment)
- 현금 + 카드 혼합 결제
- 금액 직접 입력 또는 잔액 자동 계산
- 결제 취소 시 부분/전체 취소
합산 결제 재시도
- 합산 결제 실패 시 자동 재시도 지원
- 동일 금액으로 새 결제 그룹 생성
- 취소된 그룹 추적 및 복구
2026-01-03
v1.4.0
Staff Call
스탭호출 시스템
고객 호출 기능
- 고객 태블릿에서 직원 호출 버튼
- 호출 사유 선택 (주문, 리필, 계산 등)
- 호출 이력 저장 및 조회
POS/주방 알림
- 실시간 알림 (WebSocket)
- 사운드 알림
- 호출 확인 처리
- 주방 모니터 가로 스크롤 지원
스팸 방지
- pending 상태 호출 있으면 추가 호출 차단
- 테이블별 중복 호출 방지
- 캐시 버스팅으로 최신 데이터 보장
2026-01-03
v1.3.5
Kitchen Monitor
주방모니터 개선
알림포인트 변경
- 주방모니터에서 알림포인트 변경 버튼
- 주방/숯방 등 포인트 전환
시간 표시 개선
- 초 단위 시간 표시 추가
- 가독성 향상 (폰트 크기 조정)
2026-01-03
v1.3.0
Tablet Auto
태블릿 자동 설정
밝기/볼륨 자동 조절
- 앱 실행 시 화면 밝기 85% 자동 설정
- 미디어 볼륨 50% 자동 설정
- Android 시스템 설정 권한 활용
복수 태블릿 관리
- 하나의 테이블에 여러 태블릿 지원
- 태블릿별 개별 명령 전송
- 그리드 형태로 태블릿 표시
2026-01-03
v1.2.5
Customer UI
고객 화면 개선
웰컴 화면
- 테이블 번호 크게 표시
- 직원 호출 버튼 추가
- 터치 영역 확대
- 프리미엄 디자인 적용
빈테이블 화면
- 비밀 메뉴 접근 (로고 5회 탭)
- 빈테이블에서도 직원 호출 가능
- 화면 레이아웃 최적화
2026-01-02
v2.3.1
Kitchen & Kiosk
주방모니터 관리 및 비밀 메뉴 시스템
주방모니터 관리 UI
- 수정: updateTabletCounts() null 오류로 섹션 미표시 문제
- 레이아웃 변경: 세로 리스트 → 컴팩트 그리드
- 알림포인트별 그룹핑: 주방, 숯방
- 전체 새로고침 버튼: 주방모니터 일괄 명령
Android 앱 비밀 메뉴 (좌측 상단 5회 탭)
- 진입: 화면 좌측 상단 10% 영역 5회 터치
- 비밀번호 인증 후 메뉴 표시
- 앱 목록: 키오스크 해제 후 홈화면
- 키오스크 모드 종료
- 설정 페이지로 이동
웹페이지 비밀 메뉴 (인원수 영역 5회 탭)
- 진입: 인원수 표시 영역 5회 터치
- 비밀번호 인증 모달 표시
- 테이블 변경: mode=change로 자동 리다이렉트 방지
- 로그아웃
테이블 자동 할당 시스템
- device_id 기반 태블릿-테이블 자동 매칭
- 앱 재시작 시 저장된 테이블로 자동 복귀
- 수정: 테이블 변경 시 자동 리다이렉트 버그
- URL 파라미터
mode=change 추가
2026-01-01
v2.3.0
Remote Monitoring
원격 태블릿 모니터링 및 제어 시스템
태블릿 원격 모니터링
- 매장관리자 → 태블릿 관리 탭 추가
- 하트비트 기반 온라인/오프라인 실시간 추적 (30초 주기)
- 배터리 잔량 및 충전 상태 표시
- 마지막 접속 시간 상대적 표시 (예: "2분 전")
- 90초 타임아웃 기반 오프라인 판정
원격 명령 시스템
- 새로고침, 앱재시작, 화면켜기/끄기 원격 제어
- 명령 큐잉:
queued → sent → acked
- 전체 태블릿 일괄 명령 지원
화면 켜기/끄기 원격 제어
- SCREEN_OFF: 화면만 끄기 (앱은 백그라운드 동작)
- SCREEN_ON: WakeLock으로 화면 깨우기
- Android Accessibility Service 활용
영업시간 기반 자동 스케줄링
- 마감 시간 → 자동 화면 끄기
- 시작 시간 → 자동 화면 켜기
- 배터리 절약 야간 자동 관리
태블릿-테이블 연결 관리
- 할당된 태블릿: 연결해제 버튼
- 미할당 태블릿: 드롭다운 선택 후 연결
- 중복 연결 방지 (이미 연결된 테이블 제외)
Database & API
-
tablet_devices: device_id, is_online, battery_pct
-
tablet_commands: command_type, status
- HeartbeatService.kt, ScreenControlService.kt
2025-12-31
v2.2.2
UX & Performance
POS 시계/새로고침 버튼 및 저사양 Android 최적화
POS 헤더 실시간 시계
- AM/PM 12시간 형식 (초 단위까지 표시)
- 앱 먹통 감지용 - 시계 멈추면 문제 인지
- AM/PM 흰색 / 시간 노란색
POS 새로고침 버튼
- 앱 재시작 없이 데이터 새로고침
- 회전 애니메이션으로 로딩 상태 표시
저사양 Android 기기 최적화
- Tailwind CDN 3MB+ → 로컬 89KB
- 터치 피드백: 0.03s 즉각 반응
- GPU 가속: will-change, backface-visibility
- 대상: Cortex-A55 4코어, 2GB RAM
2025-12-30
v2.2.1
Bug Fix
메뉴 순서변경 버그 수정 및 레거시 정리
메뉴 순서변경 버그 수정
- 문제: 드래그 순서변경 시 SQL 오류
- 원인: Express 라우트 순서 문제
- 해결: reorder 엔드포인트 우선순위 수정
레거시 기능 제거
- POS 즐겨찾기 버튼설정 섹션 삭제
- 관련 JavaScript 코드 정리
2025-12-30
v2.2.0
VAN Integration
VAN 연결 상태 표시 및 ANDNVCAT 연동
POS 헤더 VAN 연결 상태
- 녹색: VAN 연결됨
- 노란색: VCAT 미설치 (Mock)
- 파란색: 브라우저 Mock 모드
ANDNVCAT 연동
- 패키지명:
kr.co.nicevan.androidnvcat
- Android 11+ 패키지 가시성 설정
- 180도 회전 지원 (sensorLandscape)
고객 테이블 키오스크 모드
- Lock Task Mode: 홈/최근앱 버튼 비활성화
- 관리자 탈출: 우측 상단 5회 탭
- 기본 비밀번호:
1234
2025-12-13
v2.1.3
Android Apps
안드로이드 앱 프로젝트 3종
고객 테이블
com.orderbox.customertable
카운터 POS
com.orderbox.counterpos
주방 모니터
com.orderbox.kitchenmonitor
공통 기능
- 전체 화면 모드 (상태바/네비바 숨김)
- Doze 모드 대응 (자동 갱신)
- Gradle 8.5, Kotlin 1.9.20, SDK 34
2025-12-13
v2.1.2
Bug Fix
합산 결제 재결제 버그 수정
- 문제: 합산 결제 취소 후 개별 재결제 가능했음
- 해결: 서브 세션 재결제 버튼 비활성화
- 모달 z-index 충돌 수정 (
z-[9999])
2025-12-10
v2.1.1
Split Payment
분할 결제 (나눠서 결제하기)
분할 결제 모달 UI
- 총액 / 결제됨 / 남은금액 표시
- 프리셋 버튼: 1/2 1/3 1/4 전액
- 현금/카드 선택 + 현금영수증 옵션
2025-12-10
v2.1.0
Payment
합산 결제 취소 후 재결제
- 합산 재승인: 전체 금액 1건 VAN 승인
- 개별 재승인: 테이블별 개별 VAN 승인
- 마스터 레코드 생성 실패 시 VAN 자동 취소
2025-12-09
v2.0.5
VAN Integration
NICE ANDNVCAT VAN 결제 시스템
일행 결제 카드 승인 모드
- 1건으로 합산: 전체 카드금액 단일 승인
- 테이블별 개별: 각 테이블 별도 승인
현금영수증 VAN 발급
- 미발급
- 소득공제 (휴대폰 번호)
- 지출증빙 (사업자번호)
2025-12-08
v2.0.4
Android APK
ANDNVCAT VAN 연동 앱 패키징
- APK: Signed_ANDNVCAT_Release.apk
- WebView ↔ Native 브릿지
- NICE 연동 문서 포함
2025-12-08
v2.0.3
Documentation
사용자 매뉴얼 페이지
- /manual 별도 페이지 분리
- 좌측 사이드바 네비게이션 (8개 섹션)
- 다크 테마 적용 (#333 / #ffcc00)
2025-12-07
v2.0.2
Backend
전체 API 및 스토리지 레이어 완성
- 스토리지 인터페이스 100% 구현
- PostgreSQL/Drizzle ORM 연동
- 주문 관리 API 완성
- 결제 시스템 (현금/카드/모바일)
2025-12-06
v2.0.1
Frontend
역할별 화면 템플릿 마이그레이션
2025-12-05
v2.0.0
Major Release
Cloudflare → Replit 완전 마이그레이션
이전
- Cloudflare Workers
- SQLite (D1)
- Hono Framework
이후
- Replit (PostgreSQL)
- Express.js
- Drizzle ORM
- 34개 테이블 스키마 이전
- 30+ API 엔드포인트 재구현
2025-12-03
v1.9.18~42
UI/UX
카운터POS UI/UX 완전 개편 & 일행 기능
POS 메뉴 그리드
- 반응형 레이아웃 (백분율 기반)
- 카테고리 탭 모던 디자인
- 스크롤바 제거, 고정 높이
일행 기능 완성
- 계산 완료/이용종료 시 자동 해제
- 합산 금액 직접 계산
- 모달 즉시 표시 (0.1초)
- 중복 클릭 방지
2025-12-02
v1.9.13~17
Kitchen
주방 디스플레이 고도화
- DB 스키마 정상화 (다대다 관계)
- 알림포인트: 64메뉴 × 2 = 496 rows
- 완료 주문 당일 자정까지 표시
2025-12-01
v1.9.6~10
Security
멀티테넌트 보안 강화
- CRITICAL: store_id 보안 점검
- 67개 axios 호출 점검 완료
- 매장 간 데이터 격리 100%
- 테이블 복사 기능 추가
2025-11-30
v1.9.1
즐겨찾기 메뉴 & 할인 시스템
- 10개 즐겨찾기 버튼 UI
- 메뉴별 개별 할인 (금액/%, 서비스)
- 할인 중복 차감 버그 수정
2025-11-10 ~ 11-29
v1.0.0~1.9.0
초기 개발 히스토리