구매팀 발주·납기 관리 콘솔
구매팀이 엑셀과 같은 그리드로 발주를 등록·수정하고, 협력업체별 납기 현황과 변경 이력, 계정 권한, 이메일 알림 큐를 한곳에서 다루는 관리 콘솔을 제안합니다.
프로젝트 개요
구매팀이 엑셀과 같은 그리드로 발주를 등록·수정하고, 협력업체별 납기 현황과 변경 이력, 계정 권한, 이메일 알림 큐를 한곳에서 다루는 관리 콘솔을 제안합니다. 1차 이후 기존 ERP 데이터 연동과 전자결재 연동으로 확장하는 로드맵까지 같은 스택으로 이어 갑니다.
작업 범위
- 엑셀형 발주 관리 그리드: 발주와 품목을 행 단위로 인라인 편집하고, 다수 발주를 빠르게 걸러 보며, 엑셀 파일 일괄 업로드와 결과 다운로드를 처리합니다
- 협력업체별 납기 현황: 협력업체별 발주 건수, 납품예정일 미입력 건, 납기 변경 횟수를 집계해 업체를 눌러 발주 상세로 내려갑니다
- 변경 이력과 감사 로그: 협력업체와 구매팀의 입력·수정 내역을 사용자, 변경 일시, 변경 전/후 값으로 조회하고 납기 변경만 따로 모아 봅니다
- 계정 권한과 알림 큐: 협력업체와 담당자 계정을 발급하고 역할별 권한을 나누며, 신규 발주·납기 변경 이메일의 발송 큐와 재시도 상태를 확인합니다
주요 업무
- 엑셀형 발주 관리 그리드 화면: 셀 이동·복사·붙여넣기를 지원하는 그리드에 서버 필터와 가상 스크롤을 적용합니다
- 협력업체별 납기 현황 화면: 업체 단위 집계 뷰와 발주별 품목 상세를 한 화면에서 오가는 구조입니다
- 변경 이력과 감사 로그 화면: 모든 쓰기 API가 한 트랜잭션 안에서 이력 행을 남기는 감사 구조입니다
- 계정 권한과 알림 큐 화면: 역할에 따라 메뉴와 버튼이 달라지고, 발송 실패 건은 재시도 정책에 따라 큐에 남습니다




프로젝트 핵심 과제
수천 행 그리드에서 셀 단위 편집과 서버 저장을 맞추려면 행 저장 단위와 충돌 처리 규칙 설계가 필요하며
낙관적 잠금 버전으로 대응합니다
엑셀 업로드 양식이 구매팀마다 다를 수
열 매핑 화면과 행별 오류 보고 구조를 함께 설계합니다
기존 ERP 연동 방식이 확정되지 않은 상태라 어댑터 인터페이스로 연동부를 분리해 1차 범위와 섞이지 않게 할 계획입니다
이메일 발송 실패와 지연이 납기 알림 신뢰도에 영향을 주므로 재시도 정책과 실패 가시화를 큐 단계에서 설계할 계획입니다
사내 서버 설치 환경에서 협력업체 외부 접속을 허용하는 만큼 계정 잠금과 감사 로그 보존 정책을 함께 설계할 계획입니다
핵심 기능 상세
엑셀형 발주 관리 그리드
발주와 품목을 행 단위로 인라인 편집하고, 다수 발주를 빠르게 걸러 보며, 엑셀 파일 일괄 업로드와 결과 다운로드를 처리합니다. 셀 이동·복사·붙여넣기를 지원하는 그리드에 서버 필터와 가상 스크롤을 적용합니다.
- TanStack Table과 가상 스크롤로 수천 행 인라인 편집 그리드 구성
- ExcelJS 기반 일괄 업로드에서 행별 검증 결과를 미리보기로 제시한 뒤 반영
- 필터·정렬 조건을 서버 쿼리와 주소에 동기화하고 같은 조건으로 엑셀 다운로드
업로드 검증 결과를 반영 전에 행 단위로 보여 주어 잘못된 엑셀이 데이터를 덮어쓰는 일을 막는 흐름을 설계합니다.


협력업체별 납기 현황
협력업체별 발주 건수, 납품예정일 미입력 건, 납기 변경 횟수를 집계해 업체를 눌러 발주 상세로 내려갑니다. 업체 단위 집계 뷰와 발주별 품목 상세를 한 화면에서 오가는 구조입니다.
- PostgreSQL 집계 뷰로 업체별 미입력·지연 건수 계산
- 업체 행을 눌러 우측 패널에서 발주 목록을 여는 마스터-상세 구조
- 지연 판정 기준일을 서버 시각 기준 한 곳에서 계산
업체 집계와 발주 상세를 같은 쿼리 조건으로 연결하여 숫자와 근거 목록이 어긋나지 않게 구성합니다.


변경 이력과 감사 로그
협력업체와 구매팀의 입력·수정 내역을 사용자, 변경 일시, 변경 전/후 값으로 조회하고 납기 변경만 따로 모아 봅니다. 모든 쓰기 API가 한 트랜잭션 안에서 이력 행을 남기는 감사 구조입니다.
- Prisma 미들웨어로 쓰기 시점에 변경 전/후 JSON 차이를 이력 테이블에 기록
- 사용자·업체·기간·변경 항목 조건의 복합 필터와 인덱스 설계
- 이력 행은 수정·삭제 API를 두지 않는 추가 전용 테이블로 구성
이력을 쓰기 경로에 묶어 기록 누락 경로가 생기지 않도록 구조화합니다.


계정 권한과 알림 큐
협력업체와 담당자 계정을 발급하고 역할별 권한을 나누며, 신규 발주·납기 변경 이메일의 발송 큐와 재시도 상태를 확인합니다. 역할에 따라 메뉴와 버튼이 달라지고, 발송 실패 건은 재시도 정책에 따라 큐에 남습니다.
- 역할 기반 권한을 라우트·API·화면 요소 3단계에서 검증
- Bull Queue로 이메일 발송 작업을 큐잉하고 지수 백오프 재시도 적용
- 발송 로그 테이블과 큐 상태 화면을 연결해 실패 건 수동 재발송 구현
권한 검사를 API 계층에 두고 화면은 그 결과를 따르게 하여 우회 경로가 없는 구조를 설계합니다.


프로젝트 진행 단계
그리드 편집 모델과 이력 스키마 설계 · 2026.10
행 단위 편집 저장 규칙, 변경 전/후 JSON 이력 테이블, 업로드 검증 단계 설계
발주 그리드와 엑셀 입출력 구현 · 2026.10
가상 스크롤 그리드, 인라인 편집, ExcelJS 업로드 미리보기와 다운로드 구현
권한·감사·알림 큐 구현 · 2026.10
역할 기반 권한 3단계 검증, Bull Queue 이메일 발송과 재시도, 이력 조회 화면 구현
업체 현황과 연동 로드맵 화면 · 2026.10
업체별 집계 뷰, 마스터-상세 화면, 기존 ERP 필드 대응표와 단계별 연동안 화면 구현
개발 결과
기술적 주안점
- 업로드 검증 결과를 반영 전에 행 단위로 보여 주어 잘못된 엑셀이 데이터를 덮어쓰는 일을 막는 흐름을 설계합니다
- 업체 집계와 발주 상세를 같은 쿼리 조건으로 연결하여 숫자와 근거 목록이 어긋나지 않게 구성합니다
- 이력을 쓰기 경로에 묶어 기록 누락 경로가 생기지 않도록 구조화합니다