안녕하세요!
오늘은 직장인이라면 누구나 가슴속에 품고 사는 ‘사직서’만큼이나 궁금해할 주제를 가져왔습니다. 바로 ‘퇴직금 계산기’입니다.
보통 퇴사를 결심하거나 이직을 준비할 때, “내가 지금까지 일한 대가로 얼마를 받을 수 있을까?”라는 질문이 가장 먼저 머릿속을 스칩니다. 포털 사이트의 계산기를 써도 되지만, 개발자로서 내가 직접 로직을 설계해 보고 실제 노동법 수식을 코드로 구현해 보는 과정은 그 자체로 큰 공부가 됩니다. 특히 이번 프로젝트는 자바스크립트의 Date 객체를 정밀하게 다루고, 복잡한 산술 연산을 어떻게 실무에 적용하는지 보여주는 아주 좋은 예제가 될 것입니다.

퇴직금 계산기의 핵심: 1일 평균임금이란 무엇인가?
우리가 흔히 “내 월급이 300만 원이니까 퇴직금은 대략 이 정도겠지?”라고 짐작하는 것과는 달리, 실제 법적인 기준은 훨씬 구체적입니다. 퇴직금 산정의 가장 핵심적인 지표는 바로 ‘1일 평균임금’입니다.
평균임금은 퇴직하기 직전 3개월 동안 받은 월급 총액을 그 기간의 전체 일수로 나누어 계산합니다. 여기서 중요한 점은 단순히 월급만 들어가는 게 아니라는 것이죠. 지난 1년간 받은 상여금의 4분의 1(3개월분)과 연차 수당 등을 모두 합산해야 합니다. 코드를 짤 때 이 부분을 간과하면 실제 수령액과 큰 차이가 발생할 수 있습니다. 그래서 이번 계산기 로직에는 사용자가 직접 3개월 급여와 상여금을 입력할 수 있도록 필드를 세분화했습니다.
퇴직금 계산의 핵심인 ‘날짜 연산’ 로직에 대해 더 깊이 알고 싶다면, 제가 이전에 작성한 관련 프로젝트들을 참고해 보세요. 로직의 흐름을 이해하는 데 큰 도움이 될 것입니다.
- [Date 객체로 완성하는 자바스크립트 커스텀 달력 제작법]: 이번 계산기에서 사용된 날짜 제어 로직의 기초를 다진 프로젝트입니다. 날짜를 다루는 감각을 익히기에 최적입니다.
- [SetInterval과 밀리초 계산법을 익히는 자바스크립트 스톱워치]: 시간과 날짜 연산을 더 정밀하게 다루고 싶다면 이 글이 정답입니다.
자바스크립트 Date 객체로 ‘재직 일수’ 정복하기
퇴직금은 법적으로 재직 기간이 1년(365일) 이상인 근로자에게만 지급됩니다. 따라서 프로그램이 가장 먼저 판단해야 할 것은 “이 사용자가 퇴직금을 받을 자격이 있는가?”입니다.
자바스크립트의 Date 객체를 사용하면 날짜 계산이 쉬워 보이지만, 의외로 함정이 많습니다. 단순히 날짜를 빼는 것이 아니라 밀리초(ms) 단위로 변환된 값을 다시 하루 단위로 환산하는 과정이 필요하기 때문이죠. 저는 이 과정에서 Math.ceil 함수를 사용해 재직 일수가 하루라도 누락되지 않도록 처리했습니다. 입사일과 퇴사일 사이의 정확한 ‘간격’을 구해내는 것이 이번 코드의 첫 번째 기술적 관문이었습니다.
코드 구현 과정에서 마주한 디테일한 고민들
프로그램을 만들다 보면 예상치 못한 예외 상황들을 마주하게 됩니다. 예를 들어 사용자가 입사일보다 빠른 날짜를 퇴사일로 지정한다거나, 1년 미만 근무자가 계산기를 돌리는 경우죠. 이런 상황에서 프로그램이 오류를 뱉기보다는 친절하게 “지급 대상이 아닙니다” 혹은 “날짜를 다시 확인해 주세요”라고 알려주는 것이 진정한 사용자 경험(UX)이라고 생각했습니다.
또한, 금액이 억 단위가 넘어가는 경우 숫자가 너무 길어지면 한눈에 들어오지 않더라고요. 그래서 자바스크립트의 내장 함수인 toLocaleString()을 활용했습니다. 10000000원보다는 10,000,000원으로 표시될 때 사용자가 훨씬 편안함을 느끼기 때문입니다. 이런 작은 디테일이 모여 전체적인 완성도를 높여준다고 믿습니다.
주요 코드 분석 (핵심 수식 로직)
// 1. 재직일수 계산 (Date 객체 활용)
const diffTime = leaveDate - joinDate;
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
// 2. 1일 평균임금 계산 (상여금 포함)
const avgDailyWage = (salary3Month + (bonusYear / 4)) / 90;
// 3. 최종 퇴직금 산출 공식
const severancePay = (avgDailyWage * 30 * diffDays) / 365;
이번 계산기에서 가장 중점적으로 다룬 수식은 다음과 같습니다.
먼저, (최근 3개월 급여 총액 + 연간 상여금의 1/4) / 90일을 통해 하루치 임금을 산출합니다. 그 후, 이 금액에 30일을 곱하고 다시 총 재직 일수를 곱한 뒤 365로 나누는 과정을 거칩니다. 이 과정에서 변수명을 명확하게 설정하여, 나중에 제가 코드를 다시 보거나 다른 사람이 제 코드를 보더라도 “아, 이 부분이 평균임금을 구하는 곳이구나”라고 직관적으로 이해할 수 있게 작성했습니다.
여기서 Math.ceil을 사용하여 소수점을 처리하고, toLocaleString()을 활용해 결과 금액에 콤마(,)를 찍어 가독성을 높였습니다. 작은 디테일이지만 사용자가 금액을 한눈에 확인하는 데 큰 도움을 줍니다.
퇴직금 계산기 사용해보기
퇴직금 계산기 (2026 기준)
앞으로의 발전 방향: 더 정밀한 계산기 만들기
물론 이번에 만든 계산기가 모든 상황을 완벽하게 대변할 수는 없습니다. 회사마다 퇴직연금 방식(DB/DC형)이 다를 수 있고, 세금 계산 방식도 복잡하니까요. 앞으로는 여기에 퇴직소득세율을 적용하여 '세후 실수령액'까지 보여주는 기능을 추가해 볼 계획입니다. 또한 모바일에서도 버튼을 누르기 편하도록 UI를 좀 더 다듬어보고 싶네요.
퇴직금 계산기는 사실 로직 자체가 엄청나게 화려하진 않지만, 날짜 연산이나 조건문 처리 같은 자바스크립트의 기초 체력을 기르기에 정말 좋은 예제입니다.
직접 코드를 실행해보면서 수식을 조금씩 수정해보세요. 본인의 실제 연차 수당이나 기타 수당을 넣어서 더 정밀하게 다듬어보는 것도 공부에 큰 도움이 될 겁니다. 코드를 쓰다가 계산 결과가 이상하거나 로직이 꼬이는 부분이 있다면 언제든 편하게 말씀해 주세요. 같이 고민해 보겠습니다!