🔨 시설·자산 관리
2026년 4월 최신 법령 반영

인테리어 공사 견적 비교 계산기

두 개의 견적서(엑셀·PDF)를 드래그앤드롭하면 항목을 자동 매칭·정렬합니다. API 키도, 가입도 필요 없이 완전 무료 — 파일은 브라우저 밖으로 나가지 않습니다.

🆓 완전 무료 🔑 API 키 불필요 📊 항목 자동 매칭 ⚠️ 이상항목 경고 📐 평단가 계산 🔒 서버 미전송
견적서 A
📄
견적서 A 업로드
클릭하거나 파일을 드래그하세요
XLSXXLSPDF
견적서 B
📄
견적서 B 업로드
클릭하거나 파일을 드래그하세요
XLSXXLSPDF
🏢 공사 면적 평단가 계산에 사용 (선택사항)
견적서 항목을 분석 중입니다
잠시만 기다려 주세요
항목 추출 중…
📋 항목별 상세 비교
전체
금액 차이
누락 항목
공사 항목 수량 단가 A 금액 A 수량 단가 B 금액 B 차이 (A−B)
🔍 누락 항목 분석
💬 이런 분들이 찾았어요
🏗️

견적서 비교를 제대로 못 해서 2천만원 더 썼어요

"한 업체는 부가세 별도, 다른 업체는 철거비 누락이었어요. 기준을 통일해서 비교했다면 더 저렴한 업체를 선택했을 텐데요."

— 총무팀장, 사무실 이전 담당

📋

추가 공사가 계속 나와서 예산이 150% 초과됐어요

"사전에 범위를 명확히 했더라면 달랐을 텐데요."

— 경영지원팀, 중견기업

이 계산기로 견적서 불일치를 바로 발견했어요

"전기 공사비 누락을 발견하고 재견적 받아서 500만원 절약했어요."

— 구매팀 과장

📋 실무 아티클

인테리어 공사 견적 완전 가이드
사무실 인테리어 견적 비교·계약 실무

사무실 인테리어는 총무팀이 처리하는 단일 프로젝트 중 가장 큰 예산이 투입됩니다. 3개 이상 업체 견적 비교와 공사 범위 명확화가 핵심입니다.

1 공사 유형별 평균 단가 (2026년 기준)

공사 유형평균 단가(평당)비고
경량칸막이 설치15~25만원석고보드 기준
도배·장판5~12만원벽지 등급별 차이
타일 시공15~30만원재료비 포함
전기·조명10~20만원분전반 교체 별도
냉난방 설치20~40만원시스템에어컨 기준

2 견적서 검토 핵심 항목

공사 범위 명확화

벽체·바닥·천장·전기·조명·냉난방·가구 각각 포함 여부 명시. 추가 공사비 분쟁 예방

자재 등급 명시

"도배"가 아닌 "실크도배 LG지인 XX제품" 수준으로 명시 요구. 등급 차이로 단가 2배 차이 가능

하자보수 조건

공사 완료 후 1년 이상 하자보수 보증 조항 필수. 업체 폐업 대비 보증보험 요구

3 계약 체결 시 주의사항

가. 계약금 — 총 공사비의 30% 이하. 잔금은 완공 후 지급
나. 공사 일정 — 착공일·완공일 계약서 명시, 지연 시 패널티 조항
다. 폐기물 처리 — 처리 책임과 비용 부담 주체 명확화
라. 층간소음 — 야간·주말 공사 금지 조항 확인

4 예산 절감 팁

⚠️ 비수기(1~2월, 7~8월) 계약 시 10~20% 절감 가능. 기존 자재(파티션·가구) 재활용 범위를 먼저 확인하고 견적을 요청하면 불필요한 교체 비용을 줄일 수 있습니다.

FAQ 자주 묻는 질문

Q. 인테리어 계약금은 얼마가 적당한가요?

A. 총 공사비의 30% 이하가 적당합니다.

TIP 실무 활용 팁

  • 비수기(1~2월) 계약으로 10~20% 절감이 가능합니다.

📚 근거 법령

건설산업기본법 제2조

관련 키워드: 인테리어 공사 견적 완전 가이드 사무실 인테리어 견적 비교·계약 실무

`; } else prW.innerHTML=''; const wS=document.getElementById('warnSection'); if(warnings.length){ const icon={red:'🔴',orange:'🟠',yellow:'🟡',ok:'✅',info:'ℹ️'}; wS.innerHTML=`
⚠️ 항목별 검토 사항
${warnings.map(w=>`
${icon[w.level]||'⚠️'} [${esc(w.target)}] ${esc(w.title)} ${w.badge?`${esc(w.badge)}`:''}
${esc(w.body)}
`).join('')}
`; } else wS.innerHTML=''; renderTable(matched,'all'); const oA=matched.filter(m=>m.itemA&&!m.itemB), oB=matched.filter(m=>!m.itemA&&m.itemB); document.getElementById('missingCols').innerHTML=`
B에 없는 항목 (A에만)${oA.length}개
${oA.length?oA.map(m=>`
${esc(m.name)}
${fmtWon(m.itemA.amount)}
`).join(''):'
없음
'}
A에 없는 항목 (B에만)${oB.length}개
${oB.length?oB.map(m=>`
${esc(m.name)}
${fmtWon(m.itemB.amount)}
`).join(''):'
없음
'}
`; document.getElementById('btnAnalyze').disabled=false; setTimeout(()=>rs.scrollIntoView({behavior:'smooth',block:'start'}),80); } function renderTable(matched,filter){ tableFilter=filter; let rows=matched; if(filter==='diff') rows=matched.filter(m=>m.itemA&&m.itemB&&m.itemA.amount!==m.itemB.amount); if(filter==='missing') rows=matched.filter(m=>!m.itemA||!m.itemB); const groups={}; rows.forEach(m=>{ const c=m.category||'기타'; if(!groups[c]) groups[c]=[]; groups[c].push(m); }); let html='',tA=0,tB=0; Object.entries(groups).forEach(([cat,items])=>{ html+=`📁 ${esc(cat)}`; items.forEach(m=>{ const a=m.itemA,b=m.itemB; const aA=a?.amount||0,aB=b?.amount||0; tA+=aA; tB+=aB; const d=aA-aB, both=a&&b; const ac=both?(aAaB?'ac-pricey':'ac-same'):'ac-miss'; const bc=both?(aBaA?'ac-pricey':'ac-same'):'ac-miss'; const dc=d>0?'dp':d<0?'dn':'dz'; html+=`
${esc(m.name)}
${!a?'A 누락':''}${!b?'B 누락':''} ${a?`${fmtN(a.qty)} ${esc(a.unit)}`:'-'} ${a?fmtWon(a.unitPrice):'-'}
${a?fmtWon(aA):'누락'}
${b?`${fmtN(b.qty)} ${esc(b.unit)}`:'-'} ${b?fmtWon(b.unitPrice):'-'}
${b?fmtWon(aB):'누락'}
${d===0?'—':(d>0?'+':'')+fmtWon(d)}
`; }); }); document.getElementById('compareBody').innerHTML=html|| '해당 항목 없음'; const fd=tA-tB; document.getElementById('compareFoot').innerHTML=` 합 계 ${fmtWon(tA)} ${fmtWon(tB)} ${fd===0?'동일':(fd>0?'+':'')+fmtWon(fd)} `; } function filterTable(mode,el){ document.querySelectorAll('.cf-chip').forEach(c=>c.classList.remove('active')); el.classList.add('active'); renderTable(allMatched,mode); } /* ── 유틸 ── */ function toNum(v){ return parseFloat(String(v||'').replace(/[,\s]/g,''))||0; } function fmtWon(n){ return Number(n||0).toLocaleString('ko-KR')+'원'; } function fmtN(n) { return Number(n||0).toLocaleString('ko-KR'); } function esc(s) { return String(s||'').replace(/&/g,'&').replace(//g,'>'); } function sleep(ms){ return new Promise(r=>setTimeout(r,ms)); }
🔗 관련 도구