본문으로 건너뛰기
DEVKBS
작업 원장
010개인 서비스2024.02 – 운영 중운영 중

depos.kr — 임대료·보증금 상호전환 계산기

네이버 카페에 올린 개인 프로젝트가 실제로 쓰이기 시작했을 때

기간
2024.02 – 운영 중
분류
도구
역할
기획·디자인·개발 단독
구성
1인
사이트 방문
depos.kr — 임대료·보증금 상호전환 계산기 데스크톱 화면
depos.kr — 임대료·보증금 상호전환 계산기 모바일 화면

01개요

SH 서울주택도시공사 등 공공임대주택에는 보증금을 더 내고 월세를 낮추거나, 그 반대로 조정하는 '상호전환' 제도가 있습니다. 전환 이율이 정해져 있어 계산은 가능하지만, 사람들은 대개 계산기를 두드리며 여러 조합을 시도해 봅니다. 나 역시 그랬고, 그래서 만들었습니다.

떠오른 아이디어를 바로 개발해 하나의 페이지로 완성했고, 배포한 뒤 공공임대주택 관련 네이버 카페에 공유했습니다. 반응이 예상보다 좋았습니다. 여기서부터가 이 프로젝트의 진짜 시작이었습니다.

처음에는 '동작하면 됐지'라는 생각으로 컴포넌트 분리 없이 한 파일에 밀어 넣었습니다. 그런데 사용자가 생기니 사정이 달라졌습니다. 입력할 때마다 폼 전체가 다시 그려져 숫자를 빠르게 입력하면 화면이 버벅였습니다. 내가 쓸 때는 몰랐던 것이, 남이 쓰기 시작하니 문제로 드러났습니다.

이후 컴포넌트를 나누고 Zustand로 상태를 옮기며 리렌더 범위를 좁히는 리팩터링을 진행했습니다. 지금도 계속 다듬고 있습니다.

02기술 결정

문제가 무엇이었고, 무엇을 골랐고, 그래서 어떻게 됐는지.

  1. 결정 01

    폼 전체 리렌더를 스토어로 끊는다

    문제
    모든 입력 값을 상위 컴포넌트의 useState에 모아 두었더니, 한 글자 입력할 때마다 폼 아래 모든 컴포넌트가 다시 그려졌습니다. 숫자를 빠르게 타이핑하면 입력이 밀리는 게 눈에 보였습니다.
    선택
    값을 Zustand 스토어로 옮기고, 각 입력·결과 컴포넌트가 자기에게 필요한 필드만 selector로 구독하게 했습니다. 계산 결과도 파생 selector로 뽑았습니다.
    결과
    입력 하나가 바뀔 때 다시 그려지는 컴포넌트가 몇 개로 줄었습니다. 타이핑이 밀리는 현상이 사라졌습니다.
  2. 결정 02

    실효성 있는 주제를 고른다

    문제
    개인 프로젝트는 대개 만들고 나면 아무도 쓰지 않습니다. 포트폴리오용 To-do 앱을 하나 더 만드는 것에 회의가 들었습니다.
    선택
    내가 직접 필요했던 계산을 주제로 삼고, 완성 후 그 문제를 겪는 사람들이 모인 커뮤니티에 직접 공유했습니다.
    결과
    실사용자가 생겼고, 그 덕에 성능 문제와 사용성 문제를 실제 피드백으로 받았습니다. 혼자 만들었으면 절대 발견하지 못했을 것들입니다.
  3. 결정 03

    계산기는 PWA로 만든다

    문제
    이런 도구는 계약을 앞두고 반복해서 꺼내 보게 됩니다. 매번 검색해서 들어오는 것은 번거롭고, 현장에서 네트워크가 불안정할 수도 있습니다.
    선택
    매니페스트와 서비스 워커를 붙여 홈 화면에 설치 가능하게 만들고, 오프라인에서도 계산이 되게 했습니다.
    결과
    앱처럼 실행되고 네트워크 없이도 동작합니다. 재방문 경로가 생겼습니다.
  4. 결정 04

    검색으로 찾아올 수 있게 만든다

    문제
    아무리 좋은 도구여도 검색되지 않으면 커뮤니티 게시글이 묻히는 순간 유입이 끊깁니다.
    선택
    메타데이터와 구조화 데이터를 정리하고, Google Search Console과 네이버 서치어드바이저에 등록했습니다. 사용자가 실제로 검색할 법한 표현을 제목과 본문에 담았습니다.
    결과
    커뮤니티 유입에만 의존하지 않고 검색으로 꾸준히 들어오는 경로가 생겼습니다.

03주요 기능

  • 보증금 ↔ 월 임대료 상호전환

    기본 보증금과 월 임대료를 입력하면 전환 조합과 비율을 자동 계산.

  • 실시간 계산

    입력을 바꾸는 즉시 결과가 갱신됩니다. 제출 버튼이 없습니다.

  • PWA 설치와 오프라인 동작

    홈 화면에 설치해 앱처럼 쓰고, 네트워크 없이도 계산이 됩니다.

  • 다크·라이트 모드

    시스템 설정을 따르면서 수동 전환도 가능합니다.

  • SEO 최적화

    구조화 데이터와 메타 태그를 정비해 검색 유입 경로를 확보.

04회고

이 프로젝트에서 가장 크게 배운 것은 '사용자가 있는 코드'와 '나만 쓰는 코드'는 다른 물건이라는 사실입니다. 혼자 쓸 때는 한 파일에 다 넣어도 아무 문제가 없었습니다. 남이 쓰기 시작하자 같은 코드가 갑자기 문제가 됐습니다.

리팩터링의 필요를 책이 아니라 실제 사용에서 배운 것이 컸습니다. '컴포넌트를 나눠야 한다'는 말은 여러 번 읽었지만, 왜 나눠야 하는지는 내가 만든 화면이 버벅이는 걸 보고서야 이해했습니다.

그리고 개인 프로젝트는 배포가 끝이 아니라 시작이라는 것. 공유하고, 반응을 받고, 고치는 과정이 있어야 프로젝트에서 배울 수 있는 것을 다 가져올 수 있습니다.