계산기 사이트를 하나 만들었다 — Zero-DB 아키텍처와 개인정보 보호
이직을 준비하거나 연봉 협상 시즌이 다가올 때마다 내 통장에 실제로 찍히는 실수령액이 얼마인지 궁금해서 포털 사이트를 뒤적이곤 했습니다. 하지만 검색 결과 상단에 뜨는 대다수의 계산기들은 필수 회원가입과 로그인을 강요하고, 스마트폰 화면의 절반 이상을 덮는 깜빡이는 전면 광고로 사용자 경험을 해치며, 무엇보다 어떤 근거로 그 금액이 산출되었는지 공제 내역을 투명하게 공개하지 않았습니다. 내가 쓰면서 느꼈던 이 깊은 불편함과 불쾌감이라면, 나와 같은 처지의 직장인들도 똑같이 느끼고 있을 것이 분명했습니다.
직장인에게 가장 절실한 핵심 계산기 5종을 먼저 기획하고 개발했습니다. 1) 연봉과 월급을 자유롭게 오가며 4대보험과 소득세를 낱낱이 분해해 주는 '실수령액 계산기', 2) 3개월 평균임금과 통상임금을 비교하고 법정 재직일수를 일할 계산하는 '퇴직금 계산기', 3) 1년 미만 매월 개근과 1년 이상 가산 휴가를 법조문 그대로 산정하는 '연차 일수 계산기', 4) 주 15시간 분기점과 주 40시간 한도를 엄격히 지키는 '주휴수당 계산기', 5) 국민연금 상하한선과 장기요양보험 요율을 연동한 '4대보험 계산기'였습니다. 급여명세서를 옆에 펼쳐두고 한 줄 한 줄 직접 맞춰볼 수 있어야 비로소 실질적인 가치를 지닌 도구가 됩니다.
이 사이트를 만들면서 내린 가장 중요한 아키텍처 결단은 '데이터베이스(DB)를 아예 두지 않는다'는 것이었습니다. Next.js의 정적 내보내기(SSG, output: export) 방식을 채택하여, 서버는 오직 정적인 HTML, CSS, 자바스크립트 번들 파일만을 브라우저에 내려줄 뿐입니다. 모든 입력값과 복잡한 세무 수식은 방문자의 웹 브라우저 메모리 안에서만 연산되고 화면에 표시됩니다. 회원가입도 없고, 로그인 세션도 없으며, 입력한 연봉이나 계좌 정보가 서버 네트워크를 타고 전송되는 일 자체가 원천 차단되어 있습니다.
이것은 서버 비용을 아끼기 위한 꼼수가 아니라, 수많은 보안 사고 사례들을 면밀히 스터디한 끝에 내린 의도적인 엔지니어링 결정이었습니다. 최근 클라우드 서버에 사용자 인증이나 접근 제어를 허술하게 걸어두었다가 무려 만 삼천 장에 달하는 신분증 스캔본과 급여 정보가 인터넷에 통째로 유출된 충격적인 보안 사고가 있었습니다. 세상에서 가장 안전한 데이터베이스는 바로 '존재하지 않는 데이터베이스'입니다. 서버에 보관된 사용자 데이터가 아예 없다면, 해킹당할 위험도, 유출될 개인정보도, 서버 다운으로 서비스가 멈출 일도 설계상 존재하지 않습니다.