제안서
고객사와 범위·기능·진행 방식·검수 기준을 계약 전에 맞추기 위한 부분입니다.
1제안 개요
창고 현장에 바코드로 찍고, 라벨이 바로 나오고, 인터넷이 끊겨도 멈추지 않는 Windows 설치형 프로그램을 제안합니다.
- 고객사(가상): 직원 8명 규모의 소형 식품·식자재 유통 회사. 품목 약 300종, 하루 출고 50~150건, 창고 PC 2대.
- 한 줄 요약: 손으로 적고 엑셀에 다시 치던 입출고를, 바코드 한 번에 기록·라벨·엑셀까지 끝내게 바꿉니다.
- 진행 순서: 실제 외주와 같이 제안 → 요구사항 확정 → 설계 → 개발 → 시험 → 납품 순서로 갑니다.
2고객사 현황과 문제
지금은 출고 한 건마다 종이에 적고, 저녁에 엑셀에 다시 치고, 라벨은 손으로 씁니다. 같은 일을 세 번 하고, 적을 때마다 실수가 납니다.
| 지금 하는 방식 | 생기는 문제 |
|---|---|
| 출고할 때 품목·수량을 종이 출고장에 손으로 적음 | 글씨를 잘못 읽어 다른 품목이 나감 |
| 저녁에 사무 직원이 종이를 보고 엑셀 재고표에 다시 입력 | 하루 1시간 넘게 걸림, 빠뜨리면 재고 숫자가 안 맞음 |
| 박스 라벨을 매직으로 손으로 씀 | 바쁠 때 라벨을 빠뜨리거나 거래처를 잘못 씀 |
| 재고가 몇 개인지 물으면 엑셀을 열어 봐야 앎 | 창고에서 바로 확인 못 함 |
| 창고 와이파이가 가끔 끊김 | 온라인 프로그램은 못 쓴다고 생각해 도입을 미뤄 옴 |
상담에서 확인할 것: 거래처별로 라벨 양식이 다른지 · 품목에 이미 바코드가 붙어 있는지 · 창고 PC 사양
3제안 목표와 기대 효과
출고 기록을 한 번만 하고, 그 자리에서 라벨과 재고가 같이 끝나게 하는 것이 목표입니다.
| 목표 | 기대 효과 (고객사와 같이 재 볼 숫자) |
|---|---|
| 바코드 한 번으로 입출고 기록 | 저녁 엑셀 다시 치기 하루 1시간 → 0 |
| 찍는 순간 품목·수량 확인 | 엉뚱한 품목 출고를 화면 경고로 막음 |
| 버튼 하나로 라벨 출력 | 손 라벨 → 인쇄 라벨, 거래처 오기 없음 |
| 창고 PC에서 재고 바로 보기 | "몇 개 남았지?"에 즉시 답 |
| 인터넷 끊겨도 기록 계속 | 와이파이 걱정 없이 도입 |
4제안 범위
이번 계약은 창고 PC에서 쓰는 입출고·라벨·재고 프로그램 하나입니다. 자동화는 5-1의 선택 기능으로 따로 고릅니다.
이번에 만드는 것
- Windows 설치 프로그램 (설치 파일 + 자동 업데이트)
- 품목 엑셀 가져오기, 바코드 입고·출고
- 라벨 프린터 박스 라벨 출력 (양식 1종)
- 재고 조회, 작업 이력, 엑셀 내보내기
- 인터넷 끊겨도 기록, 연결되면 자동 동기화
- 창고 PC 2대가 같은 재고를 봄
- 사용 설명서 1부, 설치·교육 1회
이번에 안 만드는 것
- 회계·ERP 프로그램과 연결
- 택배사 송장 자동 발행
- 휴대폰·PDA 앱
- 거래처가 직접 들어오는 웹 화면
- 2종 넘는 라벨 양식, 저울·RFID 장비
5주요 기능 목록
기능은 11개이며, 하나하나 검수 때 "된다/안 된다"로 확인할 수 있게 적었습니다.
| 번호 | 기능 | 하는 일 | 쓰는 사람 |
|---|---|---|---|
| F1 | 설치·업데이트 | 설치 파일 더블클릭으로 설치, 새 판이 나오면 자동 업데이트 | 관리자 |
| F2 | 로그인·직원 구분 | 직원별로 들어가 누가 무엇을 했는지 기록 | 전 직원 |
| F3 | 품목 엑셀 가져오기 | 품목코드·품명·규격·바코드·거래처를 엑셀로 한 번에 등록 | 관리자 |
| F4 | 바코드 입고 | 찍기 → 품목 표시 → 수량 → 재고 늘림 | 창고 직원 |
| F5 | 바코드 출고 | 찍기 → 품목·거래처 확인 → 수량 → 재고 줄임, 부족하면 경고 | 창고 직원 |
| F6 | 잘못 찍음 경고 | 등록 안 된 바코드, 주문에 없는 품목이면 소리와 빨간 화면 | 창고 직원 |
| F7 | 라벨 출력 | 출고 확정과 동시에 박스 라벨(품명·수량·거래처·날짜·바코드) 출력 | 창고 직원 |
| F8 | 재고 조회 | 품목·거래처로 찾아 지금 재고와 최근 입출고 보기 | 전 직원 |
| F9 | 작업 이력 | 언제·누가·무엇을·몇 개, 날짜로 찾기 | 관리자 |
| F10 | 엑셀 내보내기 | 오늘·기간별 입출고 목록과 재고표 | 사무 직원 |
| F11 | 끊겨도 작동·동기화 | 인터넷 없어도 PC에 기록, 연결되면 서버로 올리고 다른 PC와 맞춤 | 자동 |
5-1선택 기능 (2단계 · 고객사가 고름)
기본 기능은 "찍은 것을 기록"하고, 선택 기능은 "알아서 해 주는" 자동화입니다. 기본을 먼저 납품한 뒤 필요한 것만 골라 붙입니다.
| 번호 | 선택 기능 | 하는 일 | 고객사에 주는 것 |
|---|---|---|---|
| A1 | 주문서 자동 읽기 | 거래처마다 양식이 다른 메일·엑셀·PDF 주문서에서 품목·수량을 읽어 오늘 출고 목록을 미리 만듦. 사람이 확인 후 확정 | 출고 목록 만드는 일이 없어지고, 목록에 없는 품목을 찍으면 경고 |
| A2 | 유통기한·먼저 들어온 것 먼저 | 입고 때 유통기한·입고일 기록, 출고 때 먼저 들어온 묶음부터 안내, 기한 임박 품목 아침 알림 | 식품 폐기·반품 줄임 |
| A3 | 하루 마감 보고·재고 부족 알림 | 저녁에 대표 휴대폰으로 오늘 출고·재고 부족·이상한 숫자를 보냄, 부족 품목은 거래처별 발주서 초안까지 | 창고에 안 가도 하루 상황을 앎 |
| A4 | 거래처 출고 알림 | 출고 확정되면 거래처에 "오늘 3박스 나갔습니다" 문자 | 거래처 확인 전화 줄임 |
| A5 | 사진으로 품목 등록 | 품목 라벨 사진 한 장으로 품명·규격 칸을 채움, 사람이 확인 | 새 품목 등록이 빨라짐 |
선택 기능은 기능마다 따로 견적합니다. 포트폴리오 시연에서는 A1(주문서 자동 읽기)을 대표로 보여 줍니다.
6업무 흐름: 지금과 바뀐 뒤
바코드 한 번이 종이·라벨·엑셀 세 번을 대신합니다.
7화면 목록
화면은 8개입니다. 창고 화면은 장갑 낀 손으로도 누를 수 있게 큰 단추·큰 글씨로 만듭니다.
| 화면 | 주요 내용 | 기능 |
|---|---|---|
| 로그인 | 직원 선택 + 비밀번호 | F2 |
| 홈 | 오늘 입고·출고 건수, 재고 부족 품목, 연결 상태 | F8, F11 |
| 입고 | 바코드 입력 칸, 품목 표시, 수량, 확정 | F4, F6 |
| 출고 | 바코드 입력 칸, 거래처, 수량, 확정 + 라벨 | F5, F6, F7 |
| 재고 조회 | 검색, 품목별 재고·최근 이력 | F8 |
| 작업 이력 | 날짜·직원·품목으로 찾기 | F9 |
| 품목 관리 | 엑셀 가져오기, 품목 하나씩 고치기 | F3 |
| 설정 | 라벨 프린터 고르기·시험 출력, 내보내기, 업데이트 확인 | F1, F7, F10 |
8사용 환경과 장비
창고 PC 2대에 설치하고, 장비는 USB 바코드 스캐너와 소형 라벨 프린터 각 1대를 기준으로 합니다.
| 항목 | 기준 | 비고 |
|---|---|---|
| PC 운영체제 | Windows 11 공식 지원, Windows 10 호환 시험 | 32비트 Windows는 지원 안 함 |
| 설치 PC 수 | 2대 | 3대째부터 같은 방식으로 추가 |
| 바코드 스캐너 | USB, 키보드처럼 입력되는 일반형 | 고객사 보유분 확인 |
| 라벨 프린터 | Windows에서 쓰는 소형 감열 라벨 프린터 | 라벨 크기 1종 |
| 인터넷 | 끊겨도 됨 (연결될 때 동기화) | 서버는 고객사 이름 계정 |
| 데이터 보관 | PC 안 + 서버 두 곳 | 하루 한 번 자동 백업 |
장비를 새로 사야 하면 맞는 모델을 추천하고, 장비 값은 견적에 넣지 않습니다.
9진행 방식과 단계
약 6~7주, 단계마다 고객사 확인을 받고 넘어갑니다. 개발 중에는 주마다 실제 화면을 보여 드립니다.
- 코드와 서버는 처음부터 고객사 이름 계정에 둡니다.
- 범위가 바뀌면 일정과 금액을 먼저 알려 드리고 진행합니다.
- 정한 기능이 제대로 안 되는 오류는 돈 받지 않고 고칩니다.
10검수(인수) 기준
아래 8개를 고객사 창고에서 직접 해 보고 모두 되면 납품 완료로 봅니다.
- 새 PC에 설치 파일만으로 설치되고, 새 판이 나오면 자동으로 업데이트된다
- 품목 엑셀 300줄을 가져오면 오류 줄만 따로 알려 주고 나머지는 등록된다
- 바코드를 찍으면 1초 안에 품목이 뜬다
- 등록 안 된 바코드·주문에 없는 품목은 소리와 빨간 화면으로 막는다
- 출고 확정과 동시에 라벨이 프린터에서 나온다 (10건 연속)
- 인터넷을 끊고 출고 20건을 해도 기록이 남고, 다시 연결하면 서버와 다른 PC에 모두 반영된다
- 두 PC에서 같은 품목을 동시에 출고해도 재고 숫자가 맞는다
- 오늘 입출고와 재고표가 엑셀로 나온다
11가정·위험과 대응
가장 큰 위험은 고객사 장비가 프로그램과 안 맞는 것이라, 개발 첫 주에 실제 장비로 먼저 시험합니다.
| 위험 | 생기면 | 대응 |
|---|---|---|
| 라벨 프린터가 원하는 크기로 안 나옴 | 라벨이 잘리거나 밀림 | 1주차에 고객사 프린터로 시험 출력, 안 맞으면 맞는 모델 추천 |
| 품목에 바코드가 없거나 제각각 | 찍을 게 없음 | 프로그램에서 바코드 라벨을 새로 뽑아 붙이는 기능으로 대체 |
| 두 PC가 오래 끊긴 채 같은 품목 출고 | 재고 숫자 어긋남 | 재연결 때 겹친 기록 표시, 관리자 확인 후 맞춤 (D4) |
| 창고 PC가 오래된 Windows | 설치 실패 | 상담에서 사양 확인, Windows 10 미만은 지원 안 함을 계약서에 |
| 직원이 새 프로그램을 어려워함 | 다시 종이로 돌아감 | 큰 단추 몇 개로 단순하게, 설치 날 현장 교육 |
가정: 품목 1,000종 이하, 하루 출고 500건 이하, PC 2~3대.
12산출물과 다음 단계
납품물은 고객사가 우리 없이도 쓰고 고칠 수 있는 묶음입니다.
| 산출물 | 나오는 단계 |
|---|---|
| 요구사항 정의서 (이 제안서를 확정한 판) | 요구사항 확정 |
| 화면 설계서 (화면 8개 시안) | 설계 |
| 데이터·동기화 설계서 (뒤쪽 설계안의 확정판) | 설계 |
| 설치 파일과 소스 코드 (고객사 이름 저장소) | 개발 |
| 시험 결과표 (검수 기준 8개) | 시험 |
| 사용 설명서 1부 + 현장 교육 1회 | 납품 |
설계안
개발에 쓰는 부분입니다. 요구사항 확정 뒤 설계 단계에서 고객사와 한 번 더 맞춥니다.
D1시스템 구성
창고 PC 프로그램이 모든 일을 먼저 PC 안에서 끝내고, 서버는 PC끼리 맞추고 보관하는 역할만 합니다. 그래서 인터넷이 끊겨도 현장은 멈추지 않습니다.
D2기술 선택
C# + WPF(.NET)로 만듭니다. 설치형·장비 외주에서 가장 많이 요구되는 기술이고, 프린터·시리얼 같은 Windows 장비를 다루는 기본 도구가 들어 있어 막힐 위험이 작습니다.
| 부분 | 고른 것 | 고른 이유 |
|---|---|---|
| 프로그램 틀 | C# + .NET (WPF) | Windows 설치형의 표준. 공장·물류·POS 외주에서 가장 많이 요구됨. 가볍고 오래된 PC에서도 잘 돎 |
| 화면 | WPF (XAML) + 화면과 동작을 나누는 구조(MVVM) | 큰 단추·큰 글씨 화면을 만들기 쉽고, 화면을 고쳐도 동작 코드는 그대로 |
| PC 안 저장소 | SQLite (Microsoft.Data.Sqlite) | 파일 하나짜리 데이터베이스. 인터넷 없이 빠르고, 백업이 쉬움 |
| 서버 | Supabase (PostgreSQL + 로그인 + 파일 보관), C#에서는 표준 웹 요청으로 연결 | 회사별 데이터 나누기 규칙을 서버에서 강제. 호코드 운영 경험 있음 |
| 자동 업데이트 | 설치·업데이트 도구 (Velopack 또는 ClickOnce — 설계 단계에서 시험 후 확정) | 새 판을 올리면 PC가 확인하고 다음 실행 때 바꿈 |
| 엑셀 | ClosedXML | 엑셀 프로그램이 없는 PC에서도 가져오기·내보내기를 PC 안에서 처리 |
| 장비 | Windows 인쇄(System.Printing), 시리얼(System.IO.Ports) | 라벨 인쇄와 나중의 저울·시리얼 장비를 같은 언어로 처리 |
다른 길: 웹 기술로 만드는 Electron은 화면을 빨리 만들지만 무겁고, 장비 깊은 곳에서 설정이 까다롭다는 평이 있습니다. C++/MFC는 장비·산업 쪽에 아직 남아 있지만 첫 작품으로는 난도가 너무 높아 고르지 않았습니다.
D3데이터 설계
재고 숫자를 직접 고치지 않고, 입고·출고 "기록"을 쌓아서 재고를 계산합니다. 덮어쓰는 일이 없어서 PC 두 대가 따로 일해도 숫자가 깨지지 않습니다.
| 표 | 담는 것 | 핵심 칸 |
|---|---|---|
| 품목 | 품목 정보 | 품목코드, 품명, 규격, 바코드(겹치면 안 됨), 기본 거래처, 쓰는 중 여부 |
| 거래처 | 받는 곳·보내는 곳 | 이름, 연락처, 라벨에 쓸 이름 |
| 입출고 기록 | 모든 움직임 (지우지 않음) | 기록 번호(PC에서 만든 고유번호), 종류(입고/출고/조정), 품목, 수량(+/−), 거래처, 직원, PC, 찍은 시각, 서버 도착 시각 |
| 재고 | 품목별 지금 숫자 (계산 결과) | 품목, 현재 수량, 마지막 계산 시각 — 기록을 다시 더하면 언제든 다시 만들 수 있음 |
| 직원 | 로그인과 기록 주인 | 이름, 역할(관리자/직원), 쓰는 중 여부 |
| PC | 설치된 PC | PC 이름, 마지막 동기화 시각, 프로그램 판 |
| 보낼 줄 (PC 안에만) | 아직 서버로 못 간 기록 | 기록 번호, 만든 시각, 보낸 횟수 |
잘못 찍은 출고는 지우지 않고 "조정" 기록을 하나 더 넣어 되돌립니다. 그래서 작업 이력이 언제나 그대로 남습니다.
D4끊겨도 작동·동기화
모든 기록은 PC 안에 먼저 저장되고, "보낼 줄"에 쌓였다가 연결되면 서버로 갑니다. 기록마다 고유번호가 있어 두 번 보내도 한 번만 들어갑니다.
규칙
- 고유번호: 기록 번호를 PC가 만듭니다. 서버는 같은 번호가 또 오면 무시하므로, 연결이 불안해 여러 번 보내도 한 번만 들어갑니다.
- 덮어쓰기 없음: 재고는 기록의 합이라, 두 PC가 동시에 출고해도 둘 다 반영됩니다. 누가 이기고 지는 일이 없습니다.
- 재고가 0 아래로: 끊긴 동안 두 PC가 마지막 남은 물건을 둘 다 출고한 경우입니다. 막지 않고 기록은 받되, 관리자 화면에 "확인 필요"로 띄워 실제 창고를 보고 조정합니다.
- 연결 상태 표시: 화면 위에 늘 "온라인 / 오프라인 · 보낼 기록 7건"을 보여 줍니다.
- 품목 정보: 품목·거래처 수정은 관리자만, 마지막에 고친 판이 이깁니다(드문 일이라 단순하게).
D5장비 연결
스캐너는 키보드처럼 글자를 넣는 일반형을 그대로 쓰고, 라벨은 Windows 인쇄로 먼저 출력합니다. 둘 다 별도 드라이버 개발 없이 시작합니다.
바코드 스캐너
- 스캐너는 숫자를 아주 빠르게 쳐 넣고 끝에 Enter를 누르는 키보드처럼 동작합니다.
- 입고·출고 화면은 늘 바코드 칸에 커서가 있게 하고, 글자 사이 간격이 매우 짧은 입력은 "스캐너 입력"으로 봅니다. 사람이 손으로 친 숫자와 구분됩니다.
- 찍은 바코드로 PC 안 저장소에서 품목을 찾고, 없으면 소리와 빨간 화면(F6).
라벨 프린터
- 라벨 모양은 화면처럼 만든 틀(품명·수량·거래처·날짜·바코드)에 값을 채워 인쇄합니다.
- 설정 화면에서 프린터를 고르고 시험 출력, 라벨 크기를 저장합니다.
- Windows 인쇄 기능으로 인쇄창 없이 정해 둔 프린터로 바로 보내고, 실패하면 "다시 출력" 단추와 대기열을 둡니다.
- Windows 인쇄로 크기가 안 맞는 프린터는 프린터 명령어 직접 보내기로 바꿉니다(1주차 장비 시험에서 결정).
D6출고 화면 설계
가장 많이 쓰는 화면이라, 찍기 · 수량 · 확정 세 동작만 크게 둡니다. 오른쪽은 오늘 출고 목록입니다.
단추 이름은 끝까지 같은 말을 씁니다. "출고 확정하고 라벨 출력"을 누르면 알림도 "출고 확정 · 라벨 출력함"으로 뜹니다.
D7권한·보안
역할은 관리자와 직원 둘뿐이고, 회사 데이터는 서버 규칙으로 막아 다른 회사가 절대 볼 수 없게 합니다.
| 항목 | 설계 |
|---|---|
| 역할 | 직원: 입고·출고·재고 조회 / 관리자: 위 + 품목 관리·조정·이력·설정 |
| 로그인 | 처음 한 번 서버로 로그인, 이후 끊겨도 PC에 남은 로그인으로 계속 일함(일정 기간 지나면 다시 로그인) |
| 서버 데이터 | 회사별로 나누는 규칙을 데이터베이스에서 강제 (화면에서만 숨기지 않음) |
| 비밀 열쇠 | 서버 관리용 열쇠는 PC 프로그램 안에 넣지 않음, PC는 직원 로그인 표만 가짐 |
| 통신 | 서버와는 암호화된 연결(HTTPS)만 |
| PC 분실 | 관리자가 그 PC를 끊으면 다음 연결부터 거부 |
D8설치·업데이트·백업
설치 파일 하나로 깔리고, 새 판은 저절로 받습니다. 데이터는 PC와 서버 두 곳에 있고 매일 백업합니다.
- 설치: 설치 파일 더블클릭 → 바탕화면 바로가기. 관리자 권한 없이 설치되는 방식을 우선합니다.
- 업데이트: 실행할 때 새 판을 확인해 내려받고, 다음 실행 때 바꿉니다. 일하는 중에는 끊지 않습니다.
- 코드 서명: 서명 안 된 설치 파일은 Windows가 경고를 띄웁니다. 서명 인증서가 필요한지는 상담에서 정합니다(비용이 따로 듦).
- 백업: 서버 데이터는 매일, PC 안 저장소는 프로그램을 닫을 때 PC 안에 사본을 남깁니다.
- 되돌리기: 새 판에 문제가 생기면 이전 판을 다시 올려 모든 PC가 되돌아가게 합니다.
D9시험 계획
검수 기준 8개를 그대로 시험 항목으로 쓰고, 그 전에 장비 시험과 끊김 시험을 따로 합니다.
| 시험 | 언제 | 방법 | 통과 조건 |
|---|---|---|---|
| 장비 시험 | 개발 1주차 | 고객사 스캐너·프린터로 찍기·출력만 하는 시험판 | 바코드 100번 찍어 100번 인식, 라벨 20장 크기 맞음 |
| 끊김 시험 | 개발 3주차 | 랜선을 뽑고 출고 20건 → 다시 꽂기 | 20건 모두 서버·다른 PC에 1번씩만 반영 |
| 동시 출고 시험 | 개발 3주차 | 두 PC에서 같은 품목을 동시에 출고 | 재고 = 처음 − 두 출고 합 |
| 엑셀 시험 | 개발 2주차 | 오류 섞인 품목 엑셀 300줄 | 오류 줄만 따로 표시, 나머지 등록 |
| 검수 | 시험·검수 주 | 고객사 창고에서 검수 기준 8개 | 8개 모두 됨 |
D10선택 기능 설계 (A1 주문서 자동 읽기)
AI가 주문서를 읽어 출고 목록 "초안"을 만들고, 사람이 확인해야 확정됩니다. 읽은 칸마다 원문 근거를 남겨 틀린 곳을 바로 찾게 합니다.
- 들어오는 것: 메일로 온 주문서(엑셀·PDF·본문)를 프로그램에 끌어다 놓거나, 정한 메일함에서 가져옴.
- 읽기: 품목 이름·수량·납기·거래처를 뽑고, 품목은 등록된 품목 목록 안에서만 고름(목록 밖이면 "확인 필요").
- 확인: 화면에 원문과 뽑은 값을 나란히 보여 주고, 사람이 고치거나 "그대로 확정".
- 품질 재기: 지난 주문서 30건으로 정답표를 먼저 만들고, 칸마다 맞힌 비율을 잰 뒤에 고객사에 켭니다. 맞힌 비율이 떨어지는 판은 올리지 않습니다.
- 비용: 주문서 한 건마다 AI 사용료가 들어, 월 사용 건수에 따라 따로 정합니다.
D11개발 순서
막힐 위험이 큰 것부터 먼저 만듭니다. 장비가 안 되면 나머지가 의미 없기 때문입니다.
| 주 | 만드는 것 | 그 주의 확인 |
|---|---|---|
| 개발 1주 | 프로그램 틀, PC 안 저장소, 스캐너 입력, 라벨 시험 출력 | 장비 시험 통과 |
| 개발 2주 | 로그인, 품목 엑셀 가져오기, 입고·출고, 잘못 찍음 경고 | 출고 화면을 고객사가 직접 눌러 봄 |
| 개발 3주 | 동기화(보낼 줄·서버·다른 PC), 재고·이력·내보내기, 자동 업데이트 | 끊김·동시 출고 시험 통과 |