
본 기록은 CoreERP 백엔드 구조 정비 이후, 실제 ERP 시스템의 핵심이 되는 데이터 구조(ERD)를 확정한 과정을 정리하기 위한 문서이다.
이 단계의 목표는 기능 구현이 아니라, 데이터 무결성을 보장할 수 있는 도메인 구조를 먼저 고정하는 것이었다.
ERP 시스템은 화면 중심이 아니라 데이터 중심으로 설계해야 한다. 특히 재고 관리 시스템에서는 잘못된 구조가 곧 데이터 왜곡으로 이어질 수 있다.
CoreERP는 다음 원칙을 기준으로 ERD를 설계하였다.
아래는 CoreERP 재고 시스템의 전체 관계 구조이다.

CoreERP 재고 및 트랜잭션 구조 ERD
Item 1 ─── N Inventory N ─── 1 Warehouse Inventory 1 ─── N StockTx
품목(Item)과 창고(Warehouse)는 직접 연결되지 않는다. 두 엔티티는 inventory 테이블을 통해 연결된다.
이는 하나의 품목이 여러 창고에 존재할 수 있고, 하나의 창고에는 여러 품목이 존재할 수 있기 때문이다.
또한 모든 재고 변동은 stock_tx 테이블을 통해 기록되며, inventory는 현재 상태를, stock_tx는 변동 이력을 담당한다.
item은 재고 시스템의 기준 엔티티이며, 중복 방지를 위해 item_code는 UNIQUE로 설계하였다.
창고는 재고 보관 단위이며, 재고는 반드시 품목 + 창고 조합으로 존재하도록 설계하였다.
inventory는 현재 재고 상태를 나타내는 테이블이다. 재고 수량은 직접 수정하지 않으며, 입고·출고 확정 시에만 변경된다.
stock_tx는 모든 재고 변동을 기록하는 감사 로그(Audit Log) 역할을 한다. 이를 통해 재고 추적, 오류 복구, 통계 확장이 가능해진다.
이번 단계에서 가장 중요한 것은 기능 구현이 아니라, 재고 무결성 구조를 먼저 고정했다는 점이다.
CoreERP는 단순 CRUD 프로젝트가 아니라, 트랜잭션 중심 시스템으로 설계되었다. 이 ERD는 향후 JPA 엔티티 설계와 비즈니스 로직 구현의 기반이 된다.
ERD 확정 이후, JPA 기반 엔티티 설계 및 Repository 구현 단계로 진입한다.