현장 점검 PWA와 법정 공식양식 Word 보고서 자동 생성을 단일 Next.js 코드베이스로 구축·납품한 다중 수행사 SaaS입니다.
정보통신공사업법의 정보통신설비 성능점검 의무화에 대응해, 현장 점검자가 휴대폰 한 대로 34종 설비를 점검하고 관공서 제출용 법정 공식양식 Word 보고서(.docx)가 양식 그대로 자동 생성되는 시스템을 구축·납품했습니다. 점검자용 PWA, 수행사 관리자 웹, 고객사 조회 포털, 서버 API를 단일 Next.js 16 코드베이스로 통합했고, 여러 수행사가 대등하게 함께 쓰는 다중 테넌트 구조 위에서 운영사가 마스터로 운영합니다. 성능점검(연 1회, 기준치 자동 판정)과 유지점검(수기 O/X/-) 두 종류의 법정 양식을 모두 지원합니다. 90일 계약 기간 동안 기획·설계·개발·실기기 UAT·보안 감사·운영 매뉴얼 3종·GitHub/Vercel/Supabase 소유권 이관까지 1인 풀스택으로 완료하고 검수를 통과했습니다.
작업 범위
주요 업무









docxtemplater로 브라우저에서 .docx를 렌더해 개인정보와 현장 사진이 서버를 거치지 않고 문서가 완성되도록 했습니다. 손글씨 서명은 점검표 서명란에 이미지로 임베드됩니다
원본 양식 기계 실측 → 멱등 patch 스크립트 56종 → 13종 시나리오 렌더 게이트 → 실데이터 렌더 검증의 4단 절차로 240페이지 문서의 어떤 칸도 조용히 비지 않게 했습니다. 양식 수정 사고 이후 확립한 절차를 CI 머지 게이트로 고정했습니다
미들웨어는 위조 불가한 app_metadata.role만 신뢰하고, DB RLS·서버측 활성 게이트·append-only 감사 로그·rate limit으로 클라이언트 검사 누락 시에도 차단되도록 했습니다
확정 보고서 불변 트리거, 재확정 시 버전 증가, 회차별 기준일·작성 기간 스냅샷, 항목 단위 타임스탬프 병합 등 "조용히 틀린 값이 인쇄되는" 경로를 하나씩 막았습니다
보고서 용량 예측, 동시 저장 5건 실측, iOS Safari IndexedDB 버그 우회, 대형 보고서 임계 실측 등 실기기·실데이터에서 나온 문제를 코드와 테스트로 고정했습니다
환경변수 레퍼런스, ERD, 기술 개요, 이관 당일 런북과 사전/사후 점검 스크립트, 운영·관리자·점검자 매뉴얼을 함께 납품해 도급인이 별도 교육 없이 운영을 시작할 수 있게 했습니다
점검 확정 시 240여 페이지 법정 서식이 그대로 채워진 .docx가 브라우저에서 생성됩니다. 표지·요약표·점검표·서명까지 80여 종 항목을 배선했고, 현장 사진은 캡션이 합성된 채 사진란에 자동 배치됩니다.
양식 수정 사고 이후 「patch 스크립트 → 시나리오 렌더 게이트 → 실데이터 렌더」 3단 검증을 확립해, 240페이지 문서의 어떤 칸도 조용히 비지 않도록 했습니다.


배정 건물을 고르면 설비별 성능점검표가 열리고, 측정값은 기준치와 대조해 즉시 적합·부적합이 판정됩니다. 미입력과 조치사항 누락은 최종 확인에서 잡습니다.
법정 점검표 34종·900여 항목을 JSON 마스터 → DB 시드 → 수행사별 복제 트리거로 구조화해, 양식 개정 시 코드 수정 없이 항목·기준치를 바꿀 수 있게 설계했습니다.


지하 기계실처럼 통신이 끊기는 현장에서도 점검을 계속 입력하고, 연결이 돌아오면 큐에 쌓인 변경분이 순서대로 반영됩니다. 여러 기기에서 같은 건물을 만져도 충돌 없이 병합됩니다.
iOS Safari가 IDB Blob을 재로드 시 비우는 버그를 우회하기 위해 사진을 Uint8Array로 저장하는 등 실기기 실측 기반으로 오프라인 내구성을 확보했습니다.


여러 수행사가 한 시스템을 대등하게 쓰면서 서로의 자료를 볼 수 없도록 데이터베이스 정책으로 격리했습니다. 건물·설비 기준정보, 점검자 배정, 계정 발급, 계측장비 관리를 콘솔에서 처리합니다.
권한 경계(회사 격리·본인 결과만·역할 위계)를 로컬 Postgres pgTAP + Playwright RLS e2e로 검수 전 필수 게이트에 편입했습니다.


생성된 보고서를 버전으로 확정해 이력에 남기고 누가 언제 내려받았는지 기록합니다. 고객사는 별도 포털에서 자기 건물의 확정 보고서만 조회합니다.
외부 스토리지 API의 폴더 삭제를 코드 레벨에서 금지하고, 파일 삭제는 우리 보고서 행 식별자로만 가능하도록 안전 모듈과 테스트로 고정했습니다.


14개 클라이언트 요구와 명세서, 224p 원본 보고서를 대조해 데이터 모델과 화면 흐름을 확정했습니다 이어서 17개 테이블 마이그레이션, 3-tier RLS 정책, auth 계정 원자 발급 흐름을 구축했습니다.
34종 체크리스트, 측정값 자동 판정, 워터마크 사진, IndexedDB 큐 동기화를 구현했습니다.
placeholder 80여 종 임베드, 클라이언트 사이드 docx 렌더, 13종 시나리오 렌더 게이트를 완성했습니다.
건물·설비·배정·계정·장비 CRUD, 보고서 버전 확정·다운로드 감사, 고객사 조회 포털을 구현했습니다.
실기기 UAT, 정밀 보안 감사, 매뉴얼 3종 납품, GitHub·Vercel·Supabase 소유권 이관 후 검수를 완료했습니다.
다양한 도메인 응용