Next.js로 프리랜서 요금 계산기를 만들었습니다
출처: Dev.to
대부분의 프리랜서 요금 계산기는 틀립니다. 버그가 있는 것이 아니라 개념 자체가 잘못된 겁니다. 목표 연소득을 시간으로 나누어 계산하고, 그 결과가 연중 내내 당신의 수입을 은근히 줄여버립니다.
프리랜서 친구들에게 올바른 계산법을 설명하는 데 지쳤기에, 제대로 된 도구를 직접 만들었습니다. 아래는 그 로직과 구현 과정에 대한 간단한 설명입니다.
일반적인 계산기의 로직
hourly_rate = annual_income_goal / annual_hours_worked
예를 들어 연 $80,000을 목표로 하고 연 2,080시간(40 × 52) 일한다면, 약 $38/시간을 청구하라고 알려줍니다.
하지만 이 방식은 세 가지 측면에서 잘못되었습니다.
-
순수익 목표와 세전 소득
목표 금액은 순수익, 즉 실제로 손에 쥐고 싶은 금액입니다. 하지만 세금은 세전 소득에 부과됩니다. 따라서 먼저 세전 금액을 구해야 합니다.const grossIncome = netTarget / (1 - taxRate); // $80,000 / (1 - 0.28) = $111,111순수히 위 식만 쓰면 $31,000 차이가 무시됩니다.
-
청구 가능한 실제 근무 시간
프리랜서는 전체 근무 시간 중 약 55 ~ 65%만 청구 가능한 시간으로 사용합니다. 나머지는 행정 업무, 제안서 작성, 청구, 영업 전화, 학습 등에 쓰이죠.const totalHours = weeksWorked * hoursPerWeek; // 46 * 40 = 1840 const billableHours = totalHours * billableRatio; // 1840 * 0.6 = 1104즉 실제 청구 가능한 시간은 2,080시간이 아니라 약 1,104시간에 가깝습니다. 잘못된 분모를 사용하면 50시간 주당 근무를 해도 목표 소득에 못 미치는 상황이 발생합니다.
-
기타 비용 고려
소프트웨어, 하드웨어, 보험, 교육 등 실제로 지출해야 하는 비용을 모두 포함해야 합니다.const totalNeeded = grossIncome + annualExpenses;
전체 로직
function minimumRate({ netTarget, taxRate, expenses, weeks, hoursPerWeek, billableRatio }) {
const gross = netTarget / (1 - taxRate);
const totalNeeded = gross + expenses;
const billableHours = weeks * hoursPerWeek * billableRatio;
return totalNeeded / billableHours;
}
minimumRate({
netTarget: 80000,
taxRate: 0.28,
expenses: 8000,
weeks: 46,
hoursPerWeek: 40,
billableRatio: 0.6
});
// ≈ $107/hr — not $38/hr
결과는 시간당 $107 정도이며, 단순 계산인 $38와는 2.8배 차이가 납니다. 1년 전체를 기준으로 보면 $38와 $107 사이의 차이는 엄청납니다.
구현 상세
- 이 도구는 Next.js 14(App Router) 기반으로 Vercel에 배포된 애플리케이션입니다.
- 계산기는
useState로 입력을 받고,useMemo로 파생된 요금을 계산하는 단일 클라이언트 컴포넌트이며, 백엔드가 전혀 필요 없습니다. 모든 수식이 브라우저에서 실행됩니다.
프로그램적 SEO
하나의 페이지가 아니라 직업 × 국가 조합마다 정적 페이지를 생성했습니다.
export async function generateStaticParams() {
return COUNTRIES.flatMap(country =>
PROFESSIONS.map(profession => ({ country, profession }))
);
}
이렇게 하면 8개의 직업과 6개의 국가 조합으로 48개의 정적 페이지가 만들어지고, 각각 “호주 프리랜서 개발자 요금” 같은 롱테일 검색어를 타깃으로 합니다. 배포 시점에 모두 빌드되며, 엣지에서 바로 제공됩니다.
- 시장 벤치마크 데이터는 직업별로 키가 된 평범한 JSON 객체에 저장되고, 국가별 통화 환율을 곱해 사용합니다. 데이터베이스나 CMS 없이 정적 데이터와 정적 렌더링만으로 빠르고 비용 없이 운영할 수 있습니다.
사용 방법
실제 도구는 freelancecalculator.net 에서 무료로 이용할 수 있습니다. 회원가입 없이 통화를 선택하고, 자신의 수치를 입력하면 최소 요금, 20% 여유를 둔 권장 요금, 그리고 시장 평균과의 비교를 보여줍니다.
프리랜서 개발자라면 아직도 위와 같은 수정된 공식을 쓰지 않았다면, 1분 정도만 투자해 보는 것이 좋습니다. 당신의 실제 요금이 생각보다 높을 수도 있습니다.