스토어 이미지
01Now
직접 만든 앱과 웹 서비스
필요해서 만든 계산기와 개발 도구, App Store에 내놓은 앱을 소개합니다.
02Selected
대표 작업
직접 만든 앱부터 회사에서 맡았던 웹 프로젝트까지. 어떤 문제를 풀었고, 무엇을 선택했는지 함께 소개합니다.
스토어 이미지
남해독일마을 웹사이트 리뉴얼
카페24 이미지 사이트를 Next.js 브랜드 홈페이지로
글자까지 이미지에 들어 있던 관광지 홍보 사이트를, 검색되고 링크로 공유되는 브랜드 홈페이지로 바꿨습니다. 파독 근로자들의 이야기를 앞세우는 것도 이 프로젝트의 목표였습니다.
- 역할
- 프론트엔드 단독
depos.kr — 임대료·보증금 상호전환 계산기
네이버 카페에 올린 개인 프로젝트가 실제로 쓰이기 시작했을 때
공공임대주택의 보증금과 월 임대료를 서로 전환해 계산해 주는 도구입니다. 실제 사용자가 생기고 나서야 리팩터링이 왜 필요한지 알게 됐습니다.
- 역할
- 기획·디자인·개발 단독
- 022현대글로비스 CBI Admin해외 직구 물류 업무를 한 시스템에서 다루는 관리자 웹2026.02 – 2026.10·백오피스
- 021세상의 모든 탐구2주 동안 남의 코드베이스에 들어가서 하는 일2025.05·웹앱
- 020GOLDIE 금 거래 앱 (사장님)같은 데이터를 정반대 방향에서 보는 화면2025.04 – 2025.10·플랫폼
- 019GOLDIE 금 거래 앱 (사용자)집에 있는 금을 매장에 가지 않고 파는 흐름 전체2025.04 – 2025.10·플랫폼
- 018BREAK 카드 거래·경매 플랫폼웹뷰 앱과 관리자 백오피스를 한 사람이2025.01 – 2025.04·플랫폼
- 017STATION by UHC 백오피스숙박 앱 운영자와 입점 사업자를 위한 관리 도구2024.11 – 2024.12·백오피스
주력 기술: TypeScript, JavaScript, HTML, CSS, Next.js, React, Zustand, Zod, Axios, Tailwind CSS, shadcn/ui, Vercel, Git, ESLint · Prettier, pnpm · bun. 그 외 사용 기술: Sass, React Native (Expo), Vite, Hono, ASP.NET Core, TanStack Query, SWR, React Hook Form, Prisma · Drizzle ORM, CSS Modules, Framer Motion, Storybook, Canvas · Lottie, AWS, Docker, Google Search Console, Naver Search Advisor, Google Analytics, 구조화 데이터.
- 원칙 01
이 값의 주인이 누구인지 먼저 정한다
서버가 기준인 데이터와 화면에서만 쓰는 데이터를 한 스토어에 섞어 두면, 그 값을 언제 새로 받아야 하는지 아무도 답하지 못합니다. 상태를 만들기 전에 어느 쪽 값인지부터 정해 두면 나중에 고칠 일이 많이 줄어듭니다.
- 원칙 02
공유될 값은 URL에 둔다
목록 필터, 상세 탭, 다단계 폼의 현재 단계처럼 링크로 보낼 만한 값은 전부 URL에 둡니다. 그러면 공유도, 뒤로 가기도, 검색 색인도 따로 만들 필요가 없습니다.
- 원칙 03
같은 숫자는 한 곳에서만 계산한다
금액이나 집계처럼 여러 화면에 나오는 값은 계산 함수를 하나만 두고, 화면은 그 결과를 보여주기만 합니다. 화면마다 반올림이 조금씩 다르면 사용자는 어느 숫자가 맞는지 믿지 못합니다.
- 원칙 04
되돌릴 수 없는 동작에만 확인 단계를 둔다
모든 버튼에 확인창을 붙이면 사람들은 읽지 않고 넘깁니다. 체결, 발송, 삭제처럼 되돌릴 수 없는 동작에만 한 단계를 더 두고, 나머지는 한 번에 되게 합니다.
- 원칙 05
실제 속도와 체감 속도를 따로 본다
스켈레톤이나 고정 비율 컨테이너는 로딩 시간을 줄여 주지 않습니다. 그래도 사용자가 느끼는 속도는 꽤 달라집니다. 오래 걸리는 작업은 지금 뭘 하고 있는지만 보여줘도 덜 답답해합니다.
- 원칙 06
라이브러리는 기능보다 관리 상태를 먼저 본다
많이 쓰는 라이브러리여도 최근 커밋과 이슈 답변이 끊겨 있으면 쓰지 않습니다. 시작할 때 이미 멈춰 있던 저장소는 반년쯤 지나 버전을 올릴 때 발목을 잡습니다.
- 원칙 07
직접 만들지 않을 것을 먼저 고른다
작은 기업 사이트에는 관리자 화면을 만들지 않고 Notion을 CMS로 썼는데, 그 프로젝트에서 가장 효과가 컸던 결정이었습니다. 인증처럼 검증된 게 있는 것은 가져다 쓰고, 시간은 화면에 씁니다.
이 값의 주인이 누구인지부터 정한다
서버 상태와 클라이언트 상태를 Zustand 스토어 하나에 섞어 놨다가, 어떤 값을 언제 새로 받아야 하는지 아무도 답하지 못하게 됐습니다. 그 뒤로 정한 기준을 적었습니다.
백오피스는 하루 여덟 시간 쓰는 화면이다
숙박 앱 관리자 시스템을 만들면서 알게 된 것들입니다. 개발자가 아닌 사람이 하루 종일 켜 놓고 쓰는 화면은 만드는 기준이 다릅니다.
Notion을 CMS로 썼더니 두 번째 사이트에서 막혔다
관리자 시스템 없이 기업 사이트를 넘기려고 Notion을 CMS로 썼습니다. 첫 사이트는 잘 됐는데, 같은 구조를 계열사 사이트에 옮기면서 부족한 부분이 드러났습니다.
필터를 클라이언트 상태에 두면 안 되는 이유
관광 사이트의 숙소 목록 필터를 useState로 만들었다가 URL로 옮겼습니다. 링크 공유, 뒤로 가기, 검색 색인이 한꺼번에 해결됐습니다.