

남해독일마을 웹사이트 리뉴얼
관광지 홍보 사이트를 이미지 덩어리에서 검색되고 공유되는 브랜드 홈페이지로 바꿨습니다. 파독 근로자들의 이야기를 담는 것이 이 프로젝트의 진짜 목표였습니다.
- 역할
- 프론트엔드 단독
- 상태
- 운영 중
01Now
끝난 것부터 늘어놓으면 지금 뭘 하는 사람인지가 안 보입니다. 그래서 굴러가고 있는 것을 맨 앞에 뒀습니다.


관광지 홍보 사이트를 이미지 덩어리에서 검색되고 공유되는 브랜드 홈페이지로 바꿨습니다. 파독 근로자들의 이야기를 담는 것이 이 프로젝트의 진짜 목표였습니다.


겪은 기술과 트러블슈팅을 기록하는 개인 블로그. 지원이 멈춘 라이브러리를 발견하고 대안을 찾은 것이 첫 관문이었습니다.


공공임대주택의 보증금과 월 임대료를 서로 전환해 계산해 주는 도구. 실제 사용자가 생기면서 리팩터링의 필요를 처음으로 몸으로 배웠습니다.
주력 기술: 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, CSS Modules, Framer Motion, Storybook, Canvas · Lottie, AWS, Docker, Google Search Console, Naver Search Advisor, Google Analytics, 구조화 데이터.
서버가 진실인 데이터와 클라이언트가 진실인 데이터를 한 통에 담으면, 언제 버려야 하는지 아무도 답을 못 합니다. 상태를 만들기 전에 주인부터 정해 두면 나중에 치를 값이 훨씬 쌉니다.
목록 필터, 상세 탭, 다단계 폼의 현재 단계. 누군가에게 링크로 보낼 만한 값은 전부 URL에 둡니다. 그러면 공유도 뒤로 가기도 검색 색인도 그냥 따라옵니다.
금액이나 집계처럼 여러 화면에 나오는 값은 함수 하나에 몰아넣고, 화면은 결과만 그립니다. 반올림 규칙 하나가 어긋나면 사용자는 서비스 전체를 의심합니다.
모든 버튼에 확인창을 붙이면 아무도 안 읽습니다. 체결·발송·삭제처럼 되돌릴 수 없는 것에만 한 단계를 더 두고 나머지는 가볍게 둡니다. 마찰은 골고루 뿌리는 게 아니라 필요한 곳에 몰아주는 것입니다.
고정 비율 컨테이너나 스켈레톤은 로딩 시간을 1밀리초도 줄이지 못합니다. 그런데 체감은 확실히 달라집니다. 무거운 작업일수록 지금 뭐가 돌아가고 있는지 보여주는 게 실제 속도만큼 값을 합니다.
다운로드 수는 과거의 지표고, 최근 커밋은 미래의 지표입니다. 시작할 때 이미 멈춰 있던 저장소는 반년 뒤에 발목을 잡습니다.
작은 사이트에 관리자 시스템을 안 붙이기로 한 결정이 그 프로젝트에서 제일 큰 기술 판단이었던 적이 있습니다. 무엇을 직접 만들지 않을지 고르는 것도 결국 설계입니다.
서버 상태와 클라이언트 상태를 한 스토어에 섞었다가 무효화 시점을 아무도 답할 수 없게 된 경험. 경계를 긋는 기준을 정리했습니다.
숙박 앱 관리자 시스템을 만들며 배운 것. 개발자가 아닌 사람이 매일 여덟 시간 쓰는 화면에서는 기준이 달라집니다.
관리자 시스템을 만들지 않고 기업 사이트를 넘기는 방법. 첫 프로젝트는 잘 됐고, 두 번째 프로젝트에서 무엇이 부족했는지 드러났습니다.
관광 사이트의 숙소 목록 필터를 useState로 만들었다가 URL로 옮기면서 알게 된 것들. 공유·뒤로 가기·검색 색인이 한꺼번에 따라왔습니다.