요약
메이플스토리 마법의 빌리지 약초 채집은 "씨앗을 팔까, 오일로 만들까, 도구를 바꿀까" 같은 계산이 매일 필요합니다. 채집 마스터는 씨앗 시세 하나만 넣으면 피로도당·시간당·하루·30일 수익과 오일 비교, 도구 비교, 레벨업 비용을 바로 보여주는 계산기입니다.
기획부터 계산 엔진, 디자인, 배포, 시세 운영까지 혼자 Claude Code와 페어로 진행했습니다. 지금은 chaejip.com에서 운영 중이고, 넥슨 공식 도구가 아니라 직접 실측한 값과 커뮤니티 추정치를 쓰는 비공식 팬 도구라는 점을 사이트에 밝혀 두었습니다.
계산이 틀리면 도구가 의미 없다
계산기의 신뢰는 숫자 하나에서 무너집니다. 그래서 계산을 화면 코드와 완전히 분리했습니다.
| 단계 | 내용 |
|---|---|
| 문제 | 같은 수익 계산이 메인 화면, 공유 링크, OG 이미지에 따로 쓰이면 언젠가 서로 다른 숫자를 보여줍니다 |
| 설계 | 계산은 전부 순수 함수 엔진에 두고, 화면은 엔진 결과만 표시합니다. 기준 시세에서의 피로도당 기댓값, 씨앗 기여도 같은 결과값은 골든 테스트로 고정했습니다 |
| 발견 | 조사 자료의 누적 레벨업 합계가 실제 단계별 표와 맞지 않았습니다. 합계를 옮겨 적지 않고 단계별 표를 런타임에 더하도록 바꿨습니다 |
| 결과 | 테스트 7개 파일 130개. 커밋 전에 타입 검사·테스트·린트를 한 번에 돌리고, 엔진을 건드리는 작업은 검증 절차를 프로젝트 스킬로 묶어 두었습니다 |
시세 API가 없다
메이플 경매장 시세를 주는 공개 API는 없습니다. 시세가 바뀔 때마다 코드를 고치는 건 운영이 아니라고 판단했습니다.
- 제가 구글 시트에 시세를 적으면, 사이트가 공개 CSV를 1시간 단위로 다시 읽습니다
- 시트 값이 하나라도 형식에 맞지 않으면 전부 버리고 코드에 있는 기본 시세로 돌아갑니다. 반쯤 맞는 데이터로 계산하는 것보다 낫기 때문입니다
- 사용자 제보형 시세는 악용 대응까지 설계해야 해서 다음 개편으로 미뤘습니다
만들었다가 지운 기능
6월 16일 첫 버전부터 넥슨 Open API로 캐릭터를 연결하는 기능이 있었고, 20일에는 레벨·직업·외형을 보여주는 카드로 키웠습니다. 다음 날 이 기능을 통째로 지웠습니다.
API가 주는 건 캐릭터 신원과 서버뿐이고, 계산에 필요한 채집 레벨·피로도·시세는 없었습니다. 계산기는 시세 직접 입력 방식 하나로 운영하기로 확정하고, 서버 라우트와 넥슨 API 클라이언트, API 키 의존을 함께 삭제했습니다.
디자인과 레이아웃 검증
디자인은 방향이 다른 시안을 비교 페이지에 나란히 놓고 고르는 방식으로 여러 번 개편했고, 지금 디자인은 10월에 3개 중에서 고른 안입니다. 13개 경로를 9개 화면 폭에서 열어 요소가 어긋나거나 넘치는지 검사하는 스크립트(npm run layout)도 함께 만들었습니다. 같은 검사를 라이브 주소에도 그대로 쓸 수 있습니다.
배포에서 하나 배운 것도 있습니다. NEXT_PUBLIC_ 환경 변수는 빌드 때 코드에 박히기 때문에, 값을 바꾸면 다시 배포해야 반영됩니다.
지금 상태
- chaejip.com 운영 중, main에 push하면 Vercel이 배포합니다
- 광고 코드는 만들어 두었지만 꺼져 있습니다. 팬 사이트 광고에 대한 넥슨 답변을 받은 뒤에 켭니다
- 방문자 수는 측정하지 않고 있어 숫자로 적을 수 있는 사용 지표는 아직 없습니다
배운 점
계산 도구에서 가장 비싼 버그는 "그럴듯하게 틀린 숫자"입니다. 엔진을 순수 함수로 떼어내고 결과를 테스트로 묶어 두니, 디자인을 몇 번 갈아엎어도 숫자는 흔들리지 않았습니다. 기능을 지우는 결정도 기능을 만드는 것만큼 제품을 단단하게 만든다는 것도 이 프로젝트에서 배웠습니다.
