Files
dbx-main/docs/PROJECT_OVERVIEW.md
T
king 9c58b022e2 feat(expense): 개인경비 모듈 + ERP 좌측메뉴 셸 + expense_db 연결
- ERP 셸: 좌측 사이드바 + 상단 헤더 + 콘텐츠 영역(erp_base.html)
- 분기: 슈퍼관리자 → 업무모듈 카드, 일반사용자 → ERP 메인(erp_home.html)
- 신규 라우트: /modules (슈퍼관리자 모듈 카드 재진입)
- 개인경비 모듈: app/modules/expense/ (라우터/저장소/템플릿)
  - JSON 저장소(ExpenseStore) + PostgreSQL 저장소(ExpenseDBStore)
  - 팩토리: EXPENSE_DB_URL 있으면 DB, 없으면 JSON 폴백
- DB: scripts/sql/expense_db_init.sql (멱등 DDL, postgres-db 컨테이너)
  - expense_db, 역할 expense_app, 테이블 expense_items, 인덱스/트리거
- 마이그레이션: scripts/migrate_expense_json_to_db.py (멱등, --dry-run)
- 의존성: psycopg[binary,pool]>=3.2
- 환경변수: EXPENSE_DB_URL 추가
- 문서: CLAUDE.md 작업 기준 + docs/{PROJECT_OVERVIEW,SERVER_ARCHITECTURE,DATABASES,DEPLOYMENT}.md
  - main-app 배포 경로 /opt/www/main 고정 명시
  - 위험 명령(DROP/TRUNCATE/rm -rf/volume 삭제) 사용자 승인 정책
2026-05-29 02:21:03 +09:00

3.7 KiB

Project Overview

한 줄 정의

main-app은 DBX ERP 시스템의 메인 프로젝트(허브) 이다. 주문 수집부터 상품코드 매칭, 재고, CS, 반품, 외부 쇼핑몰 API 연동까지 ERP 운영 전체를 담당한다.


기능 범위

모듈 설명
주문관리 다채널 주문 수집·통합, 상태 추적, 분석
상품코드 매칭 채널별 상품코드 ↔ 사내 표준 상품코드 매핑, 단품/세트 구성
재고관리 입고/출고/재고 조정, 채널별 재고 동기화
CS관리 문의/응대 이력, 발주 업무 트리거
반품관리 반품/교환 접수, 처리, 환불 연계
외부 연동 쇼핑몰·통합관리·택배사·문자 API 연동
개인경비 법인카드/개인지출 등록·증빙·정산 신청 (app/modules/expense/)
휴가 (준비중) 연차/반차/특별휴가 신청·잔여일수 관리

모듈 디렉토리 규약

신규 업무 모듈은 별도 디렉토리 한 곳에 라우터·저장소·템플릿을 모은다.

app/modules/<name>/
├─ __init__.py        # router export
├─ router.py          # FastAPI APIRouter (prefix=/<name>)
├─ store.py           # 데이터 저장소 (JSON → 향후 <name>_db)
└─ templates/<name>/  # Jinja 템플릿 (ChoiceLoader 로 검색)

신규 모듈 등록 시 app/main.py 의:

  1. _MODULE_TEMPLATE_DIRS 에 템플릿 경로 추가
  2. app.include_router(<name>_router) 추가
  3. app.state.<name>_store = ... 등 상태 등록
  4. MODULE_KEYS (app/store.py) 와 _menu_items_for() 메뉴 항목 동기화

외부 연동 대상

  • 쇼핑몰: 카페24, 네이버 스마트스토어
  • 통합 관리: 사방넷
  • 물류: CJ대한통운(CJ Logistics) 외 택배사 API
  • 알림: 문자 발송 API
  • 인증: Google OAuth (Google Workspace 계정 기반)

기술 스택

영역 사용 기술
Backend Python, FastAPI
DB PostgreSQL (Docker 컨테이너)
컨테이너 Docker, Docker Compose
Reverse Proxy Nginx Proxy Manager (NPM)
OS Ubuntu Server (Proxmox VM)
인증 Google OAuth + 화이트리스트
저장소 Gitea (self-hosted)

관련 DB

DB명 용도
itemcode_db 상품코드, 단품/세트 구성, 매칭 정보
orderlist_db 주문 수집·분석·관리 (구 orderlist_app)
return_db 반품·교환·CS 데이터
expense_db 개인경비 / 법인카드 / 정산 (EXPENSE_DB_URL 미설정 시 JSON 폴백)

DB 후보

모듈 현재 저장소 비고
휴가 (미개발) vacation_db (승인 후 생성)

신규 DB가 필요하면 승인 요청 후 생성하며, 이름은 _db로 끝낸다. 상세는 DATABASES.md.


접속/도메인

환경 주소
운영 https://dbx.no1king.freeddns.org
로컬 http://localhost:8080
Git 저장소 https://gitea.no1king.freeddns.org/king/dbx-main.git

허용 사용자 (서버 측 화이트리스트)

app/main.pyALLOWED_EMAILS에서 검사한다.

Google hd=dbxcorp.co.kr 힌트는 클라이언트 편의용이며, 실제 권한 검사는 항상 서버 측에서 수행한다.


작업 우선순위 / 원칙

  1. 운영 데이터 안전이 최우선. 위험 명령은 사용자 승인 후 실행.
  2. 신규 기능보다 기존 데이터 일관성 유지 우선.
  3. 외부 API 연동은 실패 재시도와 로깅을 기본으로 한다.
  4. 비밀값은 .env로만 관리하고 Git에 절대 올리지 않는다.