Excel+Access로 생산관리시스템 구축하기 (2) - Access DB

한줄 요약

8개 문서 양식을 2개 테이블로 통합하는 DB 구조를 설계하다가, BOM 재귀 전개와 Access CTE 미지원이라는 벽을 만났습니다. Claude와 함께 풀어낸 과정을 공유합니다.


이런 분들께 도움돼요

  • Excel + Access 조합으로 사내 DB 시스템을 만들려는 분

  • DB 설계는 처음인데 테이블을 어떻게 나눠야 할지 막막한 분 #NAME? #NAME?


소개: 시도하고자 했던 것과 그 이유

Excel 양식 14개를 완성했지만, 데이터를 어디에 저장할지가 문제였습니다. 6명이 동시에 접근할 수 있어야 하고, 부서 간 데이터가 연결되어야 하며, 비용 부담 없이 운영할 수 있어야 했습니다.

선택지는 Access DB + Dropbox 공유였습니다. 그런데 막상 설계를 시작하니 첫 번째 질문부터 막혔습니다.

"테이블을 몇 개로 나눠야 하지?"

8개 문서 양식이 있으니 8개 테이블? 부서별로 5개? 아니면 통합해서 2개? 기준이 없으니 판단이 안 됐습니다.


진행 방법: 어떻게 AI와 협업했나요?

도구: Claude, Microsoft Access, Excel (AccessDB설계 시트)

"오, 이거 진짜 되네!" 했던 순간

Claude에게 8개 양식의 컬럼 구조와 업무 흐름을 설명했더니, 분석 편의성 극대화라는 설계 원칙과 함께 2-테이블 통합 구조를 제안했습니다. 핵심 식별자(생산의뢰번호, 작업지시번호)를 기준으로 여러 부서의 데이터를 하나의 레코드에 통합하는 방식이었습니다.

Claude가 제안한 테이블 구조와 함께 즉시 뽑아준 SQL이 이렇습니다:

-- tbl_생산의뢰: 자재부→생산관리→출고팀→제품출하 통합 (46컬럼)
CREATE TABLE tbl_생산의뢰 (
    ID         AUTOINCREMENT PRIMARY KEY,
    생산의뢰번호 TEXT(30) NOT NULL,  -- UK: TDM-YY-MM-NNN 형식
    의뢰일       DATETIME,
    대표품번     TEXT(30),           -- IX: 품번별 조회
    의뢰수량     LONG,
    진행상태     TEXT(20),           -- IX: 작업지시/가공중/완료
    발주구분     TEXT(10),
    발주금액     CURRENCY,
    입고수량     LONG,
    표면처리     TEXT(20),
    출고수량     LONG,
    출고일자     DATETIME,           -- IX: 출하확인서 조회
    출고담당자   TEXT(20)            -- 6명 담당자
);

-- tbl_작업지시: 생산관리→가공팀 통합 (36컬럼)
CREATE TABLE tbl_작업지시 (
    ID         AUTOINCREMENT PRIMARY KEY,
    작업지시번호 TEXT(30) NOT NULL,  -- UK
    생산의뢰번호 TEXT(30),           -- FK → tbl_생산의뢰 (1:N)
    가공팀       TEXT(20),           -- IX: 팀별 실적 집계
    지시수량     LONG,
    납품수량     LONG,
    완료요청일   DATETIME,
    진행완료     DATETIME
);

인덱스 26개, ER 다이어그램, 유용한 쿼리 8종까지 한 세트로 완성해준 것도 인상적이었습니다.

곤란했던 순간 ①: BOM이 들어오면서 구조가 흔들렸습니다

2-테이블 구조로 깔끔하게 정리됐다고 생각했는데, BOM(Bill of Materials) 기능이 추가되면서 관계가 복잡해졌습니다. 완제품 → 반제품 → 원자재로 이어지는 다층 구조를 기존 테이블에 넣을 수도 없고, 별도 테이블로 뺐더니 관계 설정이 까다로웠습니다.

Claude와 함께 결론 낸 것은 tbl_BOM을 추가하되, 부모-자식 관계를 한 테이블 안에서 Self-Join으로 표현하는 방식이었습니다:

-- tbl_BOM: 다층 BOM (부모-자식 관계, Self-Join으로 재귀 전개)
CREATE TABLE tbl_BOM (
    BOM_ID     AUTOINCREMENT PRIMARY KEY,
    부모품번    TEXT(50) NOT NULL,   -- IX: 완제품 또는 반제품
    부모품목구분 TEXT(20) NOT NULL,  -- '완제품' / '반제품'
    자식품번    TEXT(50) NOT NULL,   -- IX: 반제품 또는 원자재
    자식품목구분 TEXT(20) NOT NULL,  -- '반제품' / '원자재'
    소요량      DOUBLE NOT NULL DEFAULT 1,
    단위        TEXT(10) NOT NULL DEFAULT 'EA',
    손실율      DOUBLE DEFAULT 0     -- 가공 중 손실률(%)
);

#NAME?
CREATE UNIQUE INDEX IX_BOM_복합 ON tbl_BOM (부모품번, 자식품번);

#NAME?
-- SELECT * FROM tbl_BOM WHERE 부모품번 = 'TDM-A001';
-- → BOM_ID=1: 부모=TDM-A001(완제품), 자식=SF-B002(반제품), 소요량=1
-- → BOM_ID=4: 부모=SF-B002(반제품), 자식=RM-C010(원자재), 소요량=1.2, 손실율=5
-- VBA ExpandBOM() 함수로 재귀 전개하면 Ti Bar 유효소요량 = 1.26EA

곤란했던 순간 ②: Access는 재귀 쿼리(CTE)를 지원하지 않습니다

BOM 전체 전개를 SQL로 구현하려고 했더니 벽에 부딪혔습니다. 일반 DB라면 CTE로 재귀 쿼리를 짜면 되는데, Access는 CTE를 지원하지 않습니다. 이걸 설계가 상당히 진행된 뒤에 알았을 때 당혹스러웠습니다.

Claude가 제안한 해결책은 VBA 재귀 함수였습니다. SQL 한 줄로 해결되길 기대했지만, 결과적으로는 더 유연한 구조가 됐습니다.

여기서도 고유 지식의 중요성을 느꼈습니다. Claude가 Access의 CTE 미지원을 처음부터 먼저 알려주진 않았습니다. DB 기본 개념을 어느 정도 알고 있었기에 문제를 인식하고 대화를 이어갈 수 있었습니다. AI와 협업 설계는 내가 질문할 줄 알아야 제대로 됩니다.


결과와 배운 점

결과물:

최종 DB 구조는 4-테이블로 확장 완성됐습니다:

  • tbl_생산의뢰: 46컬럼 / tbl_작업지시: 36컬럼

  • tbl_BOM: 13컬럼 (다층 BOM, Self-Join 재귀 전개)

  • tbl_가공팀마스터: 4컬럼, 9레코드 (가공1,2 + 외주3~9)

인덱스 26개, 관계 4개, ER 다이어그램, SQL 스크립트 전체 완성. 다음 단계는 실제 Access 파일 생성 → Dropbox 배포 → 현장 적용이고, 이번 경험을 바탕으로 구매/품질/재고 자동화도 계획 중입니다.

배운 점:

  1. "몇 개 테이블?"보다 "어떤 기준으로 묶을 것인가?"가 핵심입니다. 핵심 식별자를 기준으로 통합하는 아이디어를 이해하고 수용하려면 업무 로직을 본인이 알고 있어야 합니다.

  2. 도구의 한계를 미리 파악해야 합니다. 설계 초기에 "Access로 재귀 BOM 전개 시 주의사항이 있어?"라고 먼저 물어봤다면 더 빨리 해결됐을 겁니다.

  3. 비개발자도 사내 DB 시스템 설계가 가능합니다. 단, AI와의 파트너십이 핵심입니다. 딸깍 한 번으로 완성되는 마법은 없습니다.


1
1개의 답글

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요