본 시스템과 동일 기능·품질의 소프트웨어를 공공기관이 신규 발주할 경우의 적정 개발대가다. 실측으로 확정된 현재 기준(개정 6판)을 제시한다.
※ 초기 로드맵으로 예정했던 위험성평가·체크리스트·계획도 기능이 실제 구현되어 이번 실측에 포함됐다. 한전 사내 시스템 연계·공공 보안요건이 더해지면 총사업비는 5~8억 원 수준(8장).
목적. 본 시스템과 동일한 기능·품질의 소프트웨어를 공공기관(한국전력공사 등)이 신규 발주할 경우의 적정 개발대가를 산정한다. 산정 결과는 발주 예정가격 산정, 시스템 대체비용(자산가치) 평가, 협상 기준가 근거로 사용할 수 있다.
방법. 「소프트웨어 진흥법」에 따라 한국소프트웨어산업협회(KOSA)가 공표하는 「SW사업 대가산정 가이드」의 기능점수 간이법을 적용했다. 간이법은 기능 유형별 평균 복잡도 가중치를 사용하며, 발주 단계 예가 산정에 통용되는 방식이다.
근거의 특수성. 통상의 산정이 요구사항 문서에서 기능을 추정하는 것과 달리, 본 산정은 이미 구축·운영 중인 시스템의 소스코드를 전수 실측해 기능 목록을 도출했다. 추정 오차가 개입할 여지가 작다.
919a208) 이후 사고사례 입력(사진 스캔→AI 민감정보 제거·구조화→전국 공유), 작업안전 체크리스트 이해퀴즈(무지성 체크 방지), 본부장·전력사업처장 전 사업소 조회(운영중·미가입 현황), 사업소 전출입(코드 변경으로 소속·직책 이동), 위험성평가 선별·유해위험요인 스캔 등이 추가되었다. 백엔드 라우트 69→92개로 증가(신규 트랜잭션 21개). 2판 대비 +87.8 FP(381.1→468.9). 2판에서 '예정(로드맵)'으로 추정했던 위험성평가·체크리스트·계획도가 실제 구현되어 실측에 편입됐다. 개정 4판(2026-07-31): 두 번째 시그니처 아찔순간(근접사고 음성보고 → AI 익명 구조화 → 조직 내 익명 교훈 공유)과 체크리스트 낭독 지적확인(항목을 소리내어 읽으면 STT로 자동 확인)이 추가되어 +29.8 FP(468.9→498.7, 107개 기능).| 항목 | 실측값 | 비고 |
|---|---|---|
| 백엔드 API | 110개 | FastAPI 라우트 전수 — 비(非)기능 7개 제외 후 103개를 논리 트랜잭션으로 산정(제외: 루트·헬스체크, 지도 JS키 발급, 지도 페이지 서빙, 개인정보처리방침·계정삭제 안내 HTML 2개, 구버전 PDF 1개) |
| 모바일 앱 화면 | 40개 | React Native(Expo), 공사업체·한전 2개 모듈 (한전 전용 화면 15개 이상 포함, 아찔순간 화면 포함) |
| DB 테이블 | 20개 | SQLite (운영 전환 시 RDBMS 동일 구조), 사고사례·전자서명·아찔순간(near_miss·신원분리) 테이블 포함 |
| 사용자 역할 | 10종 | 공사 3종(대표자·시공관리책임자·작업자) + 한전 7종(본부장·지사장·사업소장·배전운영차장·본부 안전·사업소 안전·작업자) — 코드 역할 enum 기준 |
| AI 기능 | 6종 | TBM 위험분석 · 개인 안전분석 · 대표자/책임자 인사이트 · 작업통보서 OCR · 아찔순간 음성 구조화 |
| 외부 연계 | 5개 | 기상청, 카카오(주소), Anthropic(AI), Google(음성 인식·합성), SendGrid(메일) |
내부논리파일(ILF)은 시스템이 생성·수정·관리하는 논리 데이터 그룹, 외부연계파일(EIF)은 외부에서 유지되고 본 시스템은 참조만 하는 데이터 그룹이다. 물리 테이블이 아닌 논리 그룹 기준으로 통합 계상했다(보수적).
| # | 데이터 기능명 | 설명 | 유형 | 가중치 | FP |
|---|---|---|---|---|---|
| D1 | 사용자 | 계정·역할(10종)·기능자격·소속 (users) | ILF | 7.5 | 7.5 |
| D2 | 회사·사업소 | 조직, 6자리 가입코드, org_type, 무사고일수 등 설정 (companies, company_settings) | ILF | 7.5 | 7.5 |
| D3 | TBM 기록 | 8단계 결과, 증빙사진 3종 경로, AI 분석 결과, 중지·재시작·종료 이력, 참여자 (tbm_records) | ILF | 7.5 | 7.5 |
| D4 | 작업 세션 | 작업 시작·종료 시각, 누적 작업시간 (work_sessions) | ILF | 7.5 | 7.5 |
| D5 | 작업자 컨디션 | 일일 수면시간·몸상태 (worker_conditions) | ILF | 7.5 | 7.5 |
| D6 | 안전점검 | 한전 안전점검 등록·시정 상태 (safety_inspections) | ILF | 7.5 | 7.5 |
| D7 | AI 인사이트 이력 | 작업자·대표자·책임자별 AI 분석 이력 3종 (insight_logs 계열) | ILF | 7.5 | 7.5 |
| D8 | 현장방문 기록 | 대표자 현장방문 (owner_visits) | ILF | 7.5 | 7.5 |
| D9 | 전일 작업계획 | 익일 작업 사전 등록 (tomorrow_plans) | ILF | 7.5 | 7.5 |
| D14 | 전자서명 신규 | 문서 범용 서명(doc_type/doc_id) — 손글씨 서명·본인확인 셀피·서명 시각·GPS 위치·문서 해시 (signatures). 회의록·체크리스트·계획도 공통 재사용 | ILF | 7.5 | 7.5 |
| D15 | 아찔순간 신규 | 근접사고 보고 본문 + 신원 분리 저장(1개월 후 자동삭제, 본체에 보고자 식별정보 없음) (near_miss · near_miss_reporter) | ILF | 7.5 | 7.5 |
| D16 | TBM 작성 초안 신규 | 마법사 작성 중 임시 저장분 — 교차기기 이어하기용 서버 초안(완료 시 정리) (tbm_drafts) | ILF | 7.5 | 7.5 |
| D10 | 사고사례 DB | 배전공사 실사고 사례 386건 — 읽기전용 참조 (accident_cases) | EIF | 5.4 | 5.4 |
| D11 | 사고보고 자료 | 산업재해 발생보고·도해 이미지 — 읽기전용 참조 (accident_reports·images) | EIF | 5.4 | 5.4 |
| D12 | 기상 데이터 | 기상청 단기예보·실황 (외부 유지) | EIF | 5.4 | 5.4 |
| D13 | 주소·좌표 | 카카오 로컬 API 역지오코딩 (외부 유지) | EIF | 5.4 | 5.4 |
| 데이터 기능 소계 — ILF 12개 (90.0) + EIF 4개 (21.6) | 111.6 | ||||
백엔드 라우트 110개에서 기능점수 대상이 아닌 7개를 제외한 103개를 논리 트랜잭션으로 분류했다(각 라우트를 1개 트랜잭션으로 셌으며, 라우트를 임의로 병합하지 않았다). 제외 대상은 인프라 2개(/·/health), 지도 JS키 발급 1개, 지도 페이지 서빙 1개, HTML 안내 페이지 2개(/privacy·/delete-account), 신버전으로 대체된 구버전 PDF 1개다. 외부입력(EI)은 데이터·상태를 변경하는 처리, 외부출력(EO)은 계산·가공·파생 정보를 만들어 내보내는 처리, 외부조회(EQ)는 저장 정보의 단순 조회다.
| # | 기능명 | API |
|---|---|---|
| EI1 | TBM 작성 초안 저장 | POST /tbm/draft |
| EI2 | TBM 작성 초안 삭제 | DELETE /tbm/draft |
| EI3 | TBM 완료 저장 | POST /tbm/complete |
| EI4 | 작업 종료 | POST /tbm/{id}/end |
| EI5 | 작업 중지 | POST /tbm/{id}/stop |
| EI6 | 작업 재시작 | POST /tbm/{id}/restart |
| EI7 | 작업 취소 | POST /tbm/{id}/cancel |
| EI8 | TBM 기록 삭제 | DELETE /tbm/{id} |
| EI9 | 작업 세션 시작 | POST /work/start |
| EI10 | 작업 세션 종료 | POST /work/end |
| EI11 | 대표자·팀장 가입 | POST /auth/register/owner |
| EI12 | 직원 가입 | POST /auth/register/employee |
| EI13 | 직원 추가 | POST /company/add-employee |
| EI14 | 사업소 전출입 | POST /company/transfer |
| EI15 | 유해위험요인 저장 | POST /kepco/hazard/save |
| EI16 | 유해위험요인 삭제 | POST /kepco/hazard/delete |
| EI17 | 유해위험요인 일괄 저장 | POST /kepco/hazard/save-bulk |
| EI18 | 체크리스트 커스터마이징 저장 | POST /kepco/checklist/save |
| EI19 | 체크리스트 항목 삭제 | POST /kepco/checklist/delete |
| EI20 | 사고사례 등록 | POST /accident/save |
| EI21 | 등록 사고 삭제 | DELETE /accident/user-case/{id} |
| EI22 | 아찔순간 저장(익명) | POST /nearmiss |
| EI23 | 체크리스트 낭독 폴백 계측 | POST /kepco/checklist/voice-fallback |
| EI24 | 컨디션 입력 | POST /worker/condition |
| EI25 | 전일 작업계획 등록 | POST /workplan/tomorrow |
| EI26 | 전일 작업계획 삭제 | DELETE /workplan/tomorrow/{id} |
| EI27 | 현장방문 기록 | POST /workplan/visit-record |
| EI28 | 전일 작업계획 수정 | PUT /workplan/tomorrow/{id} |
| EI29 | 프로필 수정 | PUT /user/profile |
| EI30 | 안전 사진 업로드 | POST /safety/photo/upload |
| EI31 | 참석자 전자서명 저장 | POST /signature/upload |
| EI32 | 전자서명 요청 열기 | POST /signature/open |
| EI33 | 무사고 일수 설정 | POST /company/no-accident-days |
| EI34 | 안전점검 등록 | POST /inspection |
| EI35 | 안전점검 수정 | PUT /inspection/{id} |
| EI36 | 안전점검 삭제 | DELETE /inspection/{id} |
| # | 기능명 | API |
|---|---|---|
| EO1 | 위험도(URI) 산정 | POST /uri/v3 |
| EO2 | TBM 통계 | GET /tbm/stats |
| EO3 | 개인 작업 통계 | GET /work/stats/{id} |
| EO4 | 안전점수 추이 | GET /score/recent |
| EO5 | 날씨 예보·경보 판정 | GET /weather/forecast |
| EO6 | 위험요인 사진 스캔(AI) | POST /kepco/hazard/scan |
| EO7 | 위험요인 일괄 스캔(AI) | POST /kepco/hazard/scan-bulk |
| EO8 | 공종별 맞춤 이해퀴즈 생성(AI) | POST /kepco/checklist/quiz-for |
| EO9 | 대표자·팀장 대시보드 | GET /company/dashboard |
| EO10 | 사고보고서 스캔·구조화(AI) | POST /accident/scan |
| EO11 | AI 분석 읽어주기(TTS) | POST /tts |
| EO12 | 현장 구두 위험요인 추가(STT) | POST /tbm/risk/voice-add |
| EO13 | 아찔순간 음성 보고(STT·AI 익명 구조화) | POST /nearmiss/voice |
| EO14 | 체크리스트 낭독 확인(STT) | POST /kepco/checklist/voice-check |
| EO15 | 증빙 이메일 발송 | POST /evidence/email/{id} |
| EO16 | 작업통보서 AI 인식 | POST /workplan/analyze |
| EO17 | 개인 통계 리포트 | GET /stats/insight |
| EO18 | 팀원 안전현황 | GET /company/worker-safety |
| EO19 | TBM AI 위험분석 | POST /ai/risk-insight |
| EO20 | 대표자 AI 인사이트 | POST /ai/owner-insight |
| EO21 | 책임자 AI 인사이트 | POST /ai/supervisor-insight |
| EO22 | 개인 AI 안전분석 | POST /ai/worker-risk |
| EO23 | 사고 위험점수 | GET /accident/risk-score |
| EO24 | 사고 예측 | GET /accident/predict |
| EO25 | 위험카드 공유 | POST /share/risk-card |
| EO26 | 특정시각 날씨 | GET /weather/at |
| EO27 | TBM 증빙 PDF | GET /evidence/pdf2/{id} |
| EO28 | 증빙자료 콜라주 일괄 생성 | GET /kepco/evidence-collage/{id} |
| EO29 | 증빙 PDF 일괄 생성 | GET /evidence/pdf-batch |
| # | 기능명 | API |
|---|---|---|
| EQ1 | TBM 목록 | GET /tbm/list |
| EQ2 | TBM 작성 초안 조회 | GET /tbm/draft |
| EQ3 | 오늘 TBM 결과 | GET /tbm/today-result |
| EQ4 | 미종료 작업 조회 | GET /tbm/unfinished |
| EQ5 | TBM 상세 | GET /tbm/{id} |
| EQ6 | 전일 작업 조회 | GET /work/yesterday/{id} |
| EQ7 | 역지오코딩 | GET /geo/reverse |
| EQ8 | 로그인 | POST /auth/login |
| EQ9 | 내 정보 조회 | GET /auth/me |
| EQ10 | 공종별 유해위험요인 조회 | GET /kepco/hazards/{code} |
| EQ11 | 유해위험요인 목록 | GET /kepco/hazard-list |
| EQ12 | 유해위험요인 이력 | GET /kepco/hazard-history/{code} |
| EQ13 | 공종별 체크리스트 조회 | GET /kepco/checklist/{code} |
| EQ14 | 체크리스트 목록 | GET /kepco/checklist-list |
| EQ15 | 저장된 이해퀴즈 조회 | GET /kepco/checklist/quiz/{code} |
| EQ16 | 체크리스트 항목별 사진 조회 | GET /kepco/checklist-photos/{id} |
| EQ17 | 직원 목록 | GET /company/employees |
| EQ18 | 내 조직코드 조회 | GET /company/my-code |
| EQ19 | 사업소 목록 조회 | GET /company/offices |
| EQ20 | 회사 TBM 기록 | GET /company/tbm-records |
| EQ21 | 유사 사고 조회 | GET /accident/similar |
| EQ22 | 사고 상세 | GET /accident/detail |
| EQ23 | 사고 등록 권한·중복 확인 | GET /accident/can-edit |
| EQ24 | 최근 산업재해 공지 조회 | GET /accident/recent-notice |
| EQ25 | 내 등록 사고 목록 | GET /accident/user-cases |
| EQ26 | 증빙 목록 | GET /evidence/list |
| EQ27 | 내 아찔순간 조회 | GET /nearmiss/mine |
| EQ28 | 아찔순간 익명 교훈 공유 | GET /nearmiss/lessons |
| EQ29 | 명단 기준 컨디션 조회 | POST /worker/conditions/by-roster |
| EQ30 | 오늘 컨디션 현황 | GET /worker/conditions/today |
| EQ31 | 전일 작업계획 조회 | GET /workplan/tomorrow |
| EQ32 | 현장방문 대상 확인 | GET /workplan/visit-check |
| EQ33 | 프로필 조회 | GET /user/profile |
| EQ34 | AI 분석 이력 | GET /stats/insight/history |
| EQ35 | 전자서명 조회·위변조 검증 | GET /signature/list |
| EQ36 | 서명 대기 조회 | GET /signature/pending |
| EQ37 | 최근 프로젝트 | GET /company/recent-projects |
| EQ38 | 안전점검 조회 | GET /inspection |
| 기능 유형 | 개수 | 평균 가중치 | 기능점수(FP) |
|---|---|---|---|
| 내부논리파일 (ILF) | 12 | 7.5 | 90.0 |
| 외부연계파일 (EIF) | 4 | 5.4 | 21.6 |
| 외부입력 (EI) | 36 | 4.0 | 144.0 |
| 외부출력 (EO) | 29 | 5.2 | 150.8 |
| 외부조회 (EQ) | 38 | 3.9 | 148.2 |
| 합계 (보정 전 기능점수) | 119 | — | 554.6 FP |
| 보정계수 | 적용값 | 선정 근거 |
|---|---|---|
| 규모 | 1.2017 | 554.6FP(500 초과) — 규모 보정계수 = 0.4057×(ln FP − 7.1978)² + 0.8878 = 1.20165(정밀), 소수 넷째 자리 반올림 1.2017. 500FP 대입 시 약 1.27998이 되어 넷째 자리 반올림하면 규정값 1.2800과 이어진다. 규모가 커질수록 생산성 반영으로 계수가 낮아진다. |
| 연계복잡성 | 1.0000 | 타기관(외부) 연계 5개: 기상청·카카오·Anthropic·Google(음성)·SendGrid → '3~5개' 등급 |
| 성능 요구수준 | 1.0000 | 아침 TBM 집중 시간대(피크타임) 응답성능 중요 → '피크타임 중요' 등급 |
| 운영환경 호환성 | 1.0600 | iOS·Android 2개 플랫폼 지원 코드베이스(React Native 단일 코드) — 현재 Android(Play스토어) 배포·시범운영, iOS는 빌드 구성 완료·미출시 → '유사 환경' 등급 |
| 보안성 요구수준 | 1.0600 | 시큐어코딩, 암호화(JWT·HTTPS), 개인정보보호(건강 컨디션·본인확인 셀피·GPS), 전자서명 위변조 검증, 웹취약점 점검(rate-limit·CORS·권한 스코핑) → 상위 등급(보수적 1.06 유지) |
| 보정계수 곱 | 1.3502 | 1.2017 × 1.00 × 1.00 × 1.06 × 1.06 (표시 계수로 계산) |
| 구분 | 금액 (원) | 산출 근거 |
|---|---|---|
| 보정 전 개발원가 | 335,967,806 | 554.6 FP × 605,784원/FP (2025~2026년 적용 기능점수 단가) |
| 보정 후 개발원가 | 453,623,732 | 보정 전 × 1.3502 (표시 계수 곱) |
| 이윤 | 113,405,933 | 개발원가의 25% (가이드 상한) |
| 직접경비 | 15,000,000 | 개발기간 클라우드 인프라, 상용 API 사용료(AI·지도·메일·음성), 시험 단말기, 스토어 등록 등 |
| SW 개발비 합계 (VAT 별도) | 582,029,665 | 약 5억 8,200만 원 |
| (참고) VAT 포함 | 640,232,632 |
기능점수 단가 605,784원은 2024 개정판에서 종전 553,114원 대비 9.52% 인상된 단가로, 2026년 현재까지 동일하게 적용된다(노임단가 인상은 반영됐으나 FP 단가는 605,784원 유지). 산정 시점 이후 KOSA가 새 단가를 공표하면 해당 단가로 치환해 재계산한다(FP 554.6는 불변).
초기 로드맵에서 '예정(약 +58.5 FP 추정)'으로 제시했던 위험성평가 선별·작업안전 체크리스트·작업계획도 디지털화는 이후 실제 구현되어, 관련 사고사례 입력·이해퀴즈·본부 조회·전출입 기능과 함께 현행 실측(1~6장)에 편입됐다(편입 당시 498.7 FP). 즉 종전 추정치는 확정 실측으로 대체됐다. 개정 5판(9/4) 이후 마법사 이어하기·구두 위험 추가·산재 공지·증빙 콜라주·체크리스트 커스터마이징·맞춤 퀴즈가 추가되어, 개정 6판(9/13) 재실측에서 +55.9 FP(→554.6 FP)로 반영됐다(6장 대가 갱신).
/·/health), 지도 JS키 발급 1개, 지도 페이지 서빙 1개, HTML 안내 페이지 2개(/privacy·/delete-account), 구버전 PDF 1개. 나머지 라우트는 각각 1개 논리 트랜잭션으로 셌다(임의 병합 없음).ee53774 이후, 개정 6판은 2026-09-13 현재 운영 코드로 재실측). 7장은 향후 미구현 로드맵으로 계상에서 제외했다.