시스템 설계의 기초
ERP 시스템을 위한 데이터베이스 설계 이야기
ERP 시스템을 구축하면서 가장 먼저 고려해야 할 것이 바로 데이터베이스 설계입니다. 이번 글에서는 급여 관리 모듈부터 세금계산서 테이블, 세트 상품 관리 시스템, 그리고 구매 관리 모듈까지, 실질적인 데이터베이스 설계 과정을 공유해 보겠습니다.
급여 관리 모듈 데이터베이스 설계: 직원 및 급여 테이블
급여 관리 시스템은 회사 운영의 기본입니다. 하지만, 이를 효율적으로 관리하기 위해서는 데이터 구조가 필수적입니다. 급여 관리 모듈을 구현하기 위해, 저는 `employees`와 `salaries` 테이블을 설계했습니다.
문제
급여 관리 모듈에서 직원 정보와 급여 정보를 어떻게 효율적으로 관리할 수 있을까?
해결
먼저 `employees` 테이블을 통해 직원 정보를 수집했습니다. 이 테이블은 직원 ID, 이름, 이메일 주소, 입사일, 직책 등의 정보를 포함합니다. 그 다음, `salaries` 테이블을 만들어 직원별 급여 정보를 관리했습니다. 마지막으로, 4대 보험 요율을 관리하기 위한 `insurance_rates` 테이블도 생성했습니다. 이 구조는 급여를 계산하는 데 필요한 모든 데이터를 명확하게 제공합니다.
교훈
데이터 모델링의 중요성은 아무리 강조해도 지나치지 않습니다. 잘 설계된 데이터베이스 구조는 나중에 유지보수 및 확장성에 큰 도움을 줍니다.
세금계산서 테이블 설계 및 헌법 준수
모든 기업은 세금계산서를 정확하게 관리해야 합니다. 그 과정에서 법률과 규정을 준수하는 것은 필수입니다.
문제
세금계산서 데이터를 효율적으로 관리할 수 있는 테이블이 필요하다.
해결
`tax_invoices_sales` 테이블을 생성하여 매출 세금계산서 정보를 관리하기로 했습니다. 이 테이블은 세금계산서의 주요 속성인 `slip_id`, `amount`, `issue_date`, 그리고 `customer_id`를 포함합니다. 설계 기준은 `docs/design/phase1_tax_system.md V2.0`을 따르며, 헌법 Art 1.1 (Slip 필수)과 Art 4.1 (Audit Trail)을 준수합니다. 또한 취소 관리 기능도 포함하여, 잘못 발행된 세금계산서를 쉽게 수정할 수 있도록 했습니다.
교훈
데이터베이스 설계 시 법률 및 규정 준수를 간과하면, 나중에 큰 문제가 발생할 수 있습니다. 따라서 항상 법률에 맞춰 설계하는 것이 중요합니다.
세트 상품 관리 시스템 데이터베이스 구조
세트 상품 관리 시스템은 가상 상품을 관리하는 데 필수적입니다. 하지만 이를 위한 데이터 구조가 부족했습니다.
문제
세트 상품 관리를 위한 효율적인 데이터 구조가 필요하다.
해결
`products` 테이블에 `is_virtual`, `has_bom`, `set_type`, `channel_product_codes`, `auto_decompose` 컬럼을 추가하여 세트 상품을 관리할 수 있는 기반을 마련했습니다. 또한 `bom_masters` 테이블에 `is_sales_set` 컬럼을 추가하여 세트 판매를 위한 데이터 구조를 확립했습니다. 이렇게 하면 각 세트 상품의 속성을 명확히 정의하고 관리할 수 있습니다.
교훈
데이터베이스 구조 설계는 비즈니스 모델에 맞게 조정돼야 합니다. 이를 통해 데이터 관리가 더욱 쉬워지고, 사용자 경험도 향상됩니다.
구매 관리 모듈 데이터베이스 설계
마지막으로, 구매 관리 모듈의 데이터 구조를 설계했습니다. 이 모듈은 거래처와 발주서를 관리하는 핵심 기능을 수행합니다.
문제
구매 관리 모듈의 데이터 구조가 부족하여 효율적인 관리가 어렵다.
해결
거래처를 관리하기 위해 `suppliers`, 발주서 관리 테이블인 `purchase_orders`, 그리고 발주 상세 정보를 담는 `purchase_order_items` 테이블을 설계했습니다. 각 테이블은 UUID를 기본 키로 사용하며, `organizations` 테이블과의 관계를 설정했습니다. 발주서 테이블은 발주 상태(status)를 PENDING, CONFIRMED, RECEIVED, CANCELLED 등으로 관리하여, 발주 진행 상황을 쉽게 파악할 수 있습니다.
교훈
구매 관리 모듈은 물류와 재고 관리와 밀접한 관계가 있습니다. 따라서 데이터베이스 설계 시 이들 간의 관계를 명확히 규명하는 것이 중요합니다.
자주 묻는 질문(FAQ)
Q: 급여 관리 모듈에서 직원 정보는 어떻게 저장되나요?
A: `employees` 테이블을 통해 직원 ID, 이름, 이메일 주소 등 다양한 정보를 저장합니다.
Q: 세금계산서 테이블은 어떤 규정을 준수하나요?
A: 세금계산서 테이블은 헌법 Art 1.1 (Slip 필수)과 Art 4.1 (Audit Trail)을 준수하며 설계되었습니다.
Q: 세트 상품 관리는 어떻게 이루어지나요?
A: `products` 테이블에 다양한 세트 상품 관련 컬럼을 추가하여 관리합니다.
Q: 구매 관리 모듈의 발주 상태는 어떻게 관리되나요?
A: 발주서 테이블에서 발주 상태를 PENDING, CONFIRMED, RECEIVED, CANCELLED 등으로 관리합니다.
마무리
이번 글에서는 ERP 시스템 설계를 위한 데이터베이스 구조에 대해 다뤘습니다. 데이터베이스 설계는 단순한 작업이 아니지만, 잘 설계된 구조는 시스템의 효율성을 극대화합니다. 다음 에피소드에서는 재고 관리 모듈 설계에 대해 다룰 예정입니다. 많은 관심 부탁드립니다!
#바이브코딩