> ## Documentation Index
> Fetch the complete documentation index at: https://intro.codebucket.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# 진행 절차

> 문의·제안·계약·개발·검수·배포·운영 7단계 29종 산출물로 진행됩니다. 과기정통부 SW 표준계약서·모두사인 전자계약·에스크로(안전결제)로 보호됩니다.

export const ProcessGrid = () => {
  const processSteps = [{
    id: 1,
    title: '문의',
    desc: '프로젝트 의뢰 접수. 사업·기술 요건을 RFP로 정리해 초기 검토합니다.',
    deliverables: [{
      code: 'RFP',
      name: '개발 제안서',
      required: true
    }]
  }, {
    id: 2,
    title: '제안',
    desc: '24년차 풀스택 대표가 기능 범위·견적을 직접 검토해 제안합니다.',
    deliverables: [{
      code: 'SOW',
      name: '기능 범위 정의서',
      required: true
    }, {
      code: 'QUO',
      name: '개발 견적서',
      required: true
    }]
  }, {
    id: 3,
    title: '계약',
    desc: 'SRS 합의 + NDA·IPA·표준계약서. 에스크로로 안전하게 결제.',
    deliverables: [{
      code: 'SRS',
      name: '기능 요구 정의서',
      required: true
    }, {
      code: 'CTR',
      name: '계약서',
      required: true
    }, {
      code: 'IPA',
      name: '지적재산권 귀속 확인서',
      required: true
    }, {
      code: 'NDA',
      name: '비밀유지협약서',
      required: true
    }]
  }, {
    id: 4,
    title: '개발',
    desc: '와이어프레임부터 코드까지. 실시간 동작 환경에서 진행 상황 공유.',
    deliverables: [{
      code: 'SCH',
      name: '개발 일정표',
      required: true
    }, {
      code: 'MSR',
      name: '중간 업무 보고서',
      required: true
    }, {
      code: '',
      name: '와이어프레임',
      required: true
    }, {
      code: '',
      name: '디자인/시안',
      required: true
    }, {
      code: '',
      name: 'DB ERD/DDL',
      required: false
    }, {
      code: '',
      name: '기술 스택 및 라이브러리 정의서',
      required: true
    }, {
      code: '',
      name: '시스템 아키텍처 다이어그램',
      required: false
    }, {
      code: '',
      name: '핵심 기능 플로우차트/시퀀스 다이어그램',
      required: false
    }, {
      code: '',
      name: 'API 명세서',
      required: false
    }, {
      code: '',
      name: '원본 소스코드',
      required: true
    }, {
      code: '',
      name: '코드 구조 정의서',
      required: true
    }, {
      code: '',
      name: '환경 설정 문서',
      required: true
    }, {
      code: '',
      name: 'Git 브랜치 / 버전 관리 정책',
      required: false
    }]
  }, {
    id: 5,
    title: '검수',
    desc: '단위·통합·시나리오 테스트로 결과물을 확정합니다.',
    deliverables: [{
      code: 'TST',
      name: '테스트 시트',
      required: true
    }, {
      code: 'ACC',
      name: '검수 완료 보고서',
      required: true
    }]
  }, {
    id: 6,
    title: '배포',
    desc: '소스 전체 인계 + 프로젝트 완료 보고 + 서비스 런칭.',
    deliverables: [{
      code: 'CMP',
      name: '프로젝트 완료 보고서',
      required: true
    }, {
      code: '',
      name: '운영 매뉴얼',
      required: false
    }]
  }, {
    id: 7,
    title: '운영',
    desc: '하자•유지보수 및 시스템 운영 + 버킷플러스로 장기 운영 가능.',
    deliverables: [{
      code: 'BPT',
      name: '버킷플러스 서비스 이용 약관',
      required: true
    }, {
      code: 'BPC',
      name: '버킷플러스 계약서',
      required: true
    }, {
      code: 'HOT',
      name: '호스팅 서비스 이용 약관',
      required: true
    }, {
      code: '',
      name: '버그 트래킹 로그',
      required: false
    }]
  }];
  const extraDeliverables = [{
    code: 'TRN',
    name: '거래명세서',
    required: true
  }];
  const [hoveredStep, setHoveredStep] = useState(null);
  const totalCount = processSteps.reduce((sum, s) => sum + s.deliverables.length, 0) + extraDeliverables.length;
  const scrollContainerRef = useRef(null);
  const groupRefs = useRef({});
  useEffect(() => {
    if (hoveredStep && scrollContainerRef.current && groupRefs.current[hoveredStep]) {
      const container = scrollContainerRef.current;
      const target = groupRefs.current[hoveredStep];
      const containerRect = container.getBoundingClientRect();
      const targetRect = target.getBoundingClientRect();
      const offset = targetRect.top - containerRect.top + container.scrollTop - 8;
      container.scrollTo({
        top: offset,
        behavior: 'smooth'
      });
    }
  }, [hoveredStep]);
  return <div className="not-prose grid grid-cols-1 lg:grid-cols-2 gap-6">
      <div className="space-y-2">
        {processSteps.map(step => {
    const isActive = hoveredStep === step.id;
    return <div key={step.id} onMouseEnter={() => setHoveredStep(step.id)} onMouseLeave={() => setHoveredStep(null)} className={`px-4 py-3 rounded-xl border transition-all cursor-default ${isActive ? 'border-primary bg-primary/5 dark:bg-primary/10' : 'border-gray-200 dark:border-white/10 hover:border-gray-300 dark:hover:border-white/20'}`}>
              <div className="flex items-baseline gap-4">
                <span className={`text-2xl font-light tabular-nums tracking-tight transition-colors ${isActive ? 'text-primary dark:text-primary-light' : 'text-gray-300 dark:text-gray-600'}`}>
                  {String(step.id).padStart(2, '0')}
                </span>
                <div className="flex-1 min-w-0">
                  <h3 className="text-base font-medium text-gray-900 dark:text-gray-200 m-0">
                    {step.title}
                  </h3>
                  <p className="text-sm text-gray-600 dark:text-gray-400 mt-1 mb-0">
                    {step.desc}
                  </p>
                </div>
                <span className="text-xs text-gray-400 dark:text-gray-500 flex-shrink-0 self-center tabular-nums">
                  {step.deliverables.length}종
                </span>
              </div>
            </div>;
  })}
      </div>

      <div className="lg:relative">
        <div className="flex flex-col rounded-2xl border border-gray-200 dark:border-white/10 lg:absolute lg:inset-0 lg:overflow-hidden">
          <div className="flex items-baseline justify-between px-5 py-4 bg-white dark:bg-[#1F1F1F] border-b border-gray-200/60 dark:border-white/10 flex-shrink-0 rounded-t-2xl">
            <h4 className="text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider m-0">
              전체 산출물
            </h4>
            <span className="text-xs text-gray-400 dark:text-gray-500 tabular-nums">{totalCount}종</span>
          </div>
          <div ref={scrollContainerRef} className="lg:flex-1 lg:overflow-y-auto p-5 space-y-3 bg-gray-50 dark:bg-[#141414] rounded-b-2xl scroll-smooth">
            {processSteps.map(step => {
    const isHighlight = hoveredStep === step.id;
    const isDimmed = hoveredStep !== null && !isHighlight;
    return <div key={step.id} ref={el => {
      groupRefs.current[step.id] = el;
    }} className={`transition-opacity duration-200 ${isDimmed ? 'opacity-25' : 'opacity-100'}`}>
                  <div className={`text-[11px] font-semibold uppercase tracking-wider mb-1 px-2.5 transition-colors ${isHighlight ? 'text-primary dark:text-primary-light' : 'text-gray-400 dark:text-gray-500'}`}>
                    {step.title}
                  </div>
                  <div className="space-y-0.5">
                    {step.deliverables.map((d, i) => <div key={i} className={`flex items-center gap-2 px-2.5 py-1.5 rounded-md text-sm transition-colors ${isHighlight ? 'bg-primary/10 dark:bg-primary/20' : ''}`}>
                        <span className="font-mono text-[11px] text-gray-400 dark:text-gray-500 w-9 flex-shrink-0 text-right tabular-nums">
                          {d.code || '—'}
                        </span>
                        <span className="text-gray-700 dark:text-gray-300 flex-1">
                          {d.name}
                        </span>
                        {!d.required && <span className="text-[10px] text-gray-400 dark:text-gray-500 flex-shrink-0">옵션</span>}
                      </div>)}
                  </div>
                </div>;
  })}
            <div className={`mt-3 pt-3 border-t border-gray-200/60 dark:border-white/10 transition-opacity duration-200 ${hoveredStep !== null ? 'opacity-25' : 'opacity-100'}`}>
              <div className="text-[11px] font-semibold uppercase tracking-wider mb-1 px-2.5 text-gray-400 dark:text-gray-500">
                단계 외 (공통)
              </div>
              <div className="space-y-0.5">
                {extraDeliverables.map((d, i) => <div key={i} className="flex items-center gap-2 px-2.5 py-1.5 rounded-md text-sm">
                    <span className="font-mono text-[11px] text-gray-400 dark:text-gray-500 w-9 flex-shrink-0 text-right tabular-nums">
                      {d.code || '—'}
                    </span>
                    <span className="text-gray-700 dark:text-gray-300 flex-1">
                      {d.name}
                    </span>
                    {!d.required && <span className="text-[10px] text-gray-400 dark:text-gray-500 flex-shrink-0">옵션</span>}
                  </div>)}
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>;
};

<script type="application/ld+json">
  {`{"@context":"https://schema.org","@graph":[{"@type":"HowTo","@id":"https://intro.codebucket.dev/process#howto","name":"코드버킷 진행 절차 — 7단계 29종 산출물","description":"코드버킷의 모든 프로젝트는 정형화된 7단계로 진행되며, 단계마다 받게 되는 산출물 29종(필수 22 + 옵션 7)이 사전에 정의되어 있습니다. 계약은 과기정통부 SW분야 표준계약서, 결제는 에스크로(서울 프리랜서 온)로 진행되며, 모든 개발 계약에는 개발 종료 후 3개월 무상 버킷플러스 특약이 포함됩니다.","inLanguage":"ko-KR","isPartOf":{"@id":"https://intro.codebucket.dev/#website"},"publisher":{"@id":"https://codebucket.dev/#organization"},"totalTime":"P3M","step":[{"@type":"HowToStep","position":1,"name":"문의 — 사업·기술 요건 파악","text":"전화·이메일·홈페이지·플랫폼으로 의뢰를 접수합니다. 24년차 풀스택 대표 개발자가 직접 응대하며, 사업·기술 요건을 정리한 개발 제안서(RFP)를 회신합니다. 상담은 무료입니다."},{"@type":"HowToStep","position":2,"name":"제안 — 기능 범위·견적 작성","text":"기능 범위 정의서(SOW)와 개발 견적서(QUO)를 작성·전달합니다. 항목별 비용·기간이 명시되어 직접 조정할 수 있습니다."},{"@type":"HowToStep","position":3,"name":"계약 — 표준계약서 + 에스크로 등록","text":"기능 요구 정의서(SRS)를 함께 확정하고, 모두사인 전자계약(과학기술정보통신부 SW분야 표준계약서 기반, 소프트웨어진흥법 제38조)으로 체결합니다. 계약과 동시에 에스크로(서울 프리랜서 온)를 등록합니다."},{"@type":"HowToStep","position":4,"name":"개발 — 실시간 동작 환경에서 단계별 공유","text":"와이어프레임·디자인 시안·DB ERD·기술 스택부터 개발 일정표까지 단계별로 합의해 진행합니다. 마일스톤마다 중간 업무 보고서(MSR)를 회신합니다."},{"@type":"HowToStep","position":5,"name":"검수 — 단위·통합·시나리오 테스트","text":"테스트 시트(TST)로 검증하고, 검수 완료 보고서(ACC)를 회신합니다."},{"@type":"HowToStep","position":6,"name":"배포 — 100% 소스 인계 + 서비스 런칭","text":"프로젝트 완료 보고서(CMP)와 함께 모든 산출물을 정리해 인계합니다. 소스코드는 100% 고객 소유로 인계됩니다. 에스크로 잔금이 지급되며 결제가 마무리됩니다. 본 계약 종료일(검수 합격·잔금 지급일)을 기산점으로 6개월 하자 보수가 시작됩니다."},{"@type":"HowToStep","position":7,"name":"운영 — 만든 사람이 그대로 관리","text":"모든 개발 계약에는 개발 종료 후 3개월 무상 버킷플러스 특약이 포함됩니다. 무상 기간 종료 후의 운영은 별도 버킷플러스 구독으로 시작하실 수 있으며(자동 전환 안 함), 갱신 시 운영비는 종전과 동일하게 유지하는 것을 원칙으로 합니다(시장 변동 요인 시 양자 협의 조정 가능). 호스팅·인프라 운영, 유지 보수, 기능 업그레이드, 신규 기능 추가의 4개 영역을 같은 사람이 단일 월 구독으로 처리합니다."}]},{"@type":"BreadcrumbList","@id":"https://intro.codebucket.dev/process#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"홈","item":"https://intro.codebucket.dev/"},{"@type":"ListItem","position":2,"name":"진행 절차","item":"https://intro.codebucket.dev/process"}]}]}`}
</script>

모든 프로젝트는 정형화된 <strong>7단계</strong>로 진행되며, 단계마다 받게 되는 <strong>산출물 29종(필수 22 + 옵션 7)</strong>이 사전에 정의되어 있습니다.<br />
"지금 어디까지 와 있는지", "다음 단계에 무엇을 받게 되는지"가 항상 명확합니다.

***

## 문의부터 운영까지 한눈에 봅니다.

산출물 29종이 어느 단계에서 생산되는지 확인해 보세요.<br />

<ProcessGrid />

<p style={{fontSize: '0.85rem', fontStyle: 'italic', color: '#6b7280', marginTop: '1rem'}}>
  ※ 코드(RFP, SOW, SRS 등)가 부여된 산출물은 코드버킷 표준 양식으로 산출되는 핵심 문서이며, 코드 없는 항목은 프로젝트에 따라 형식·범위가 조정됩니다.
</p>

***

## 단계별로 자세히 보면 다음과 같습니다.

각 단계는 **이전 단계의 결과를 바탕으로 다음 단계를 합의**하는 흐름으로 이어집니다.<br />
어떤 단계도 일방적으로 진행되지 않으며, 모든 진행은 산출물로 기록됩니다.

<div className="process-steps">
  <Steps>
    <Step title="문의 — 사업·기술 요건 파악">
      전화·이메일·홈페이지·플랫폼 등 편한 채널로 의뢰를 접수합니다. **24년차 풀스택 대표 개발자가 직접** 응대하므로, 영업 담당을 거치지 않고 첫 대화에서 기술적 판단과 가능 여부가 즉시 안내됩니다.

      문의 내용을 바탕으로 사업·기술 요건을 정리한 <strong>개발 제안서(RFP)</strong>를 회신합니다. 상담은 무료입니다.

      <Card title="문의 채널 안내" icon="paper-plane" href="https://codebucket.dev/inquiry">
        코드버킷 홈페이지에서 간편하게 문의를 남기세요.
      </Card>
    </Step>

    <Step title="제안 — 기능 범위·견적 작성">
      의뢰 내용을 검토해 <strong>기능 범위 정의서(SOW)</strong>와 <strong>개발 견적서(QUO)</strong>를 작성·전달합니다. 항목별로 비용·기간이 명시되어 있어, 어느 부분을 빼고 더할지 직접 조정하실 수 있습니다.

      기획·설계·개발·운영을 모두 직접 수행하는 구조이기 때문에, 견적은 빠르고 정확합니다.
    </Step>

    <Step title="계약 — 표준계약서 + 에스크로 등록">
      범위·견적 합의 후 <strong>기능 요구 정의서(SRS)</strong>를 함께 확정하고, <strong>모두사인 전자계약</strong>으로 체결합니다. 계약서는 <strong>과학기술정보통신부 SW분야 표준계약서</strong>를 기반으로 작성됩니다.

      필요에 따라 <strong>지적재산권 귀속 확인서(IPA)</strong>와 <strong>비밀유지협약서(NDA)</strong>도 함께 체결합니다.

      계약과 동시에 <strong>에스크로(안전결제)</strong>를 등록하고, 합의된 비율에 따라 선금이 입금됩니다. 결제 흐름의 자세한 내용은 [아래 결제 안내](#결제는-에스크로로-안전하게-진행됩니다)를 참고하세요.
    </Step>

    <Step title="개발 — 실시간 동작 환경에서 단계별 공유">
      와이어프레임·디자인 시안·DB ERD·기술 스택부터 개발 일정표까지 단계별로 합의해 진행합니다. 캡처 이미지가 아닌 <strong>실제 동작하는 환경</strong>에서 중간 결과를 직접 확인하고 피드백을 주실 수 있습니다.

      마일스톤마다 <strong>중간 업무 보고서(MSR)</strong>를 회신해, 진척도·완료 항목·다음 일정을 정리해 보고합니다.

      <Card title="개발 산출물 상세" icon="layer-group" href="/services/fullstack">
        개발 일정표·MSR·DB ERD·테스트 시트·소스코드 README 등 산출물 샘플을 확인하실 수 있습니다.
      </Card>
    </Step>

    <Step title="검수 — 단위·통합·시나리오 테스트">
      완성된 결과물을 <strong>테스트 시트(TST)</strong>로 검증합니다. 페이지·기능별 테스트 케이스가 모두 기록되며, 검수 진행률을 실시간으로 확인할 수 있습니다.

      단위·통합·시나리오 테스트가 모두 통과되면 <strong>검수 완료 보고서(ACC)</strong>를 회신하고 검수 종결을 합의합니다.
    </Step>

    <Step title="배포 — 100% 소스 인계 + 서비스 런칭">
      검수 완료 후 서비스를 런칭하고, <strong>프로젝트 완료 보고서(CMP)</strong>와 함께 모든 산출물을 정리해 인계합니다. <strong>소스코드는 100% 고객 소유</strong>로 인계되어, 이후 직접 운영하시거나 다른 개발팀에 인수인계하셔도 그대로 사용할 수 있습니다.

      배포 완료 시점에 에스크로에 보관 중이던 잔금이 코드버킷으로 지급되며 결제가 마무리됩니다. 본 계약 종료일(검수 합격·잔금 지급일)을 기산점으로 **6개월 하자 보수**가 시작됩니다(아래 [하자 보수 안내](#하자-보수는-별도-시계로-보장됩니다) 참조).
    </Step>

    <Step title="운영 — 만든 사람이 그대로 관리">
      모든 개발 계약에는 <strong>개발 종료 후 3개월 무상 버킷플러스 특약</strong>이 포함됩니다. 무상 기간 종료 후의 운영은 별도 버킷플러스 구독으로 시작하실 수 있으며(자동 전환 안 함), 갱신 시 운영비는 <strong>종전과 동일하게 유지하는 것을 원칙</strong>으로 합니다(인건비·환율 등 외부 시장 변동 요인이 있는 경우 양자 협의로 조정될 수 있습니다).

      호스팅·인프라 운영, 유지 보수, 기능 업그레이드, 신규 기능 추가의 4개 영역을 <strong>같은 사람이 단일 월 구독</strong>으로 처리합니다. 1개월 단위 무약정으로 운영되며, 7일 환불권이 함께 적용됩니다.

      <Card title="버킷플러스 자세히 보기" icon="plus" href="/services/bucket-plus">
        호스팅·인프라 운영 / 유지 보수 / 기능 업그레이드 / 신규 기능 추가<br />
        1개월 무약정 + 7일 환불권 + 하자 보수 별도 보장
      </Card>
    </Step>
  </Steps>
</div>

***

## 계약은 과기정통부 SW 표준계약서로 진행됩니다.

계약 단계에서는 <strong>모두사인 전자계약</strong>을 통해 계약을 체결합니다.<br />
계약서에는 프로젝트 범위·일정·금액·검수 기준이 명시되며, <strong>과학기술정보통신부 SW분야 표준계약서</strong> (소프트웨어진흥법 제38조)를 기반으로 작성됩니다.

프로젝트 성격에 따라 <strong>지적재산권 귀속 확인서(IPA)</strong>와 <strong>비밀유지협약서(NDA)</strong>가 함께 체결될 수 있으며, 모든 계약 문서는 체결 전에 충분히 검토하실 수 있습니다.

<Columns cols={2}>
  <Card title="SW분야 표준계약서 원문 확인" icon="file-lines" href="https://www.nipa.kr/home/2-1/7817">
    정보통신산업진흥원(NIPA)에서 배포하는 SW분야 표준계약서 6종을 확인할 수 있습니다.
  </Card>

  <Card title="전자계약의 법적 효력" icon="scale-balanced" href="https://modusign.co.kr/legality">
    모두사인 전자계약은 전자서명법에 따라 법적 효력이 인정됩니다.
  </Card>
</Columns>

***

## 결제는 에스크로로 안전하게 진행됩니다.

코드버킷의 모든 결제는 <strong>에스크로(안전결제)</strong> 방식으로 진행됩니다.<br />
고객이 입금한 대금은 제3자(에스크로 서비스)가 보관하며, 각 단계의 작업이 완료되고 <strong>고객이 직접 승인한 후에야</strong> 코드버킷으로 지급됩니다.

<Card title="서울 프리랜서 온" icon="building-columns" href="https://www.seoullabor.or.kr/work/main.do">
  서울시 운영 공공 에스크로 서비스. 수수료 무료, 신한은행 예치.
</Card>

### 프로젝트 금액별 결제 비율

아래 결제 비율은 **개발 계약**에만 적용됩니다. 운영 단계의 [버킷플러스](/services/bucket-plus)는 **월 선결제 구독** 방식으로 별도 운영됩니다(1개월 단위 무약정 + 7일 환불권).

프로젝트 금액에 따라 결제 단계가 달라집니다.

| 프로젝트 금액              | 결제 방식         | 비율                |
| -------------------- | ------------- | ----------------- |
| 300만원 이하             | 일괄 결제         | 100%              |
| 300만원 초과 \~ 800만원 이하 | 선금 / 잔금       | 50 : 50           |
| 800만원 초과             | 선금 / 중도금 / 잔금 | 30 : 40 : 30 (협의) |

#### 300만원 이하

| 단계     | 입금 시점         | 진행           | 지급 시점      |
| ------ | ------------- | ------------ | ---------- |
| **일괄** | 계약 완료 후 대금 입금 | 개발 → 검수 → 배포 | 검수 승인 후 지급 |

#### 300만원 초과 \~ 800만원 이하

| 단계         | 입금 시점         | 진행              | 지급 시점      |
| ---------- | ------------- | --------------- | ---------- |
| **선금 50%** | 계약 완료 후 선금 입금 | 기획·설계, 검수 항목 확정 | 확정 승인 → 지급 |
| **잔금 50%** | 개발 시작 시 잔금 입금 | 개발·검수·배포 완료     | 검수 승인 → 지급 |

#### 800만원 초과

<p style={{fontSize: '0.85rem', fontStyle: 'italic', color: '#6b7280'}}>※ 분할 비율은 프로젝트 규모와 일정에 따라 협의 가능합니다.</p>

| 단계          | 입금 시점          | 진행              | 지급 시점      |
| ----------- | -------------- | --------------- | ---------- |
| **선금 30%**  | 계약 완료 후 선금 입금  | 기획·설계, 검수 항목 확정 | 확정 승인 → 지급 |
| **중도금 40%** | 개발 시작 시 중도금 입금 | 개발·베타 테스트       | 완료 확인 → 지급 |
| **잔금 30%**  | 검수 시작 시 잔금 입금  | 배포·최종 검수        | 검수 승인 → 지급 |

***

## 하자 보수는 별도 시계로 보장됩니다.

검수 합격 시점에 **이미 존재하였던 결함**의 시정(하자 보수)은 **개발 계약 의무**입니다. 운영 중 새로 발생한 결함을 처리하는 **유지 보수**(버킷플러스 영역)와 구분되며, **버킷플러스 가입 여부와 무관하게** 보장됩니다.

| 대상                     | 기간  | 기산점                     |
| ---------------------- | --- | ----------------------- |
| **신규 개발** (본 계약)       | 6개월 | 본 계약 종료일 (검수 합격·잔금 지급일) |
| **추가 개발** (파트 추가·제거 등) | 1개월 | 추가 계약 배포 완료일            |

버킷플러스 미가입·종료 시에도 **잔여 기간이 남아 있으면 무상 제공**됩니다. 버킷플러스 이용 기간과 하자 보수 기간은 별개의 시계로 산정됩니다. 적용 범위·제외 사유(고객 제공 자료의 오류·외부 서비스 정책 변경·고객 또는 제3자의 임의 변경 등)는 계약서 본문을 따릅니다.

***

## 세금계산서·현금영수증을 발행합니다.

사업자 간 거래 시 <strong>세금계산서</strong>, 개인 고객의 경우 <strong>현금영수증</strong>발생이 가능합니다.

***

<CardGroup cols={2}>
  <Card title="풀스택 개발" icon="layer-group" href="/services/fullstack">
    개발 단계 산출물 5종 — 일정표·MSR·DB ERD·테스트 시트·README 샘플
  </Card>

  <Card title="버킷플러스" icon="plus" href="/services/bucket-plus">
    운영 단계 — 만든 사람이 그대로 관리하는 통합 운영 서비스
  </Card>

  <Card title="포트폴리오" icon="briefcase" href="/portfolio">
    실제 수행한 프로젝트 12종 — 사업 영역·시스템 카테고리별 사례
  </Card>

  <Card title="상담·견적 의뢰" icon="paper-plane" href="https://codebucket.dev/inquiry">
    구상 단계부터 함께 검토합니다. 상담은 무료입니다.
  </Card>
</CardGroup>
