KIM
DONGSUN

김동선Full-stack Developer · React · TypeScript
경력 4년 2개월
SUMMARY60초 요약

스마트시티 관제 대시보드로 시작해, 지금은 설치 5만+ 리워드 광고 서비스의 사용자 앱·광고 지면·광고주 플랫폼과 그 뒤의 서버를 만들고 3년째 운영합니다. 화면에서 드러나지만 원인은 다른 층에 있는 문제를 직접 찾아 고칩니다 — 훅 하나로 27개 페이지가 빈 HTML 로 나가던 일, DB 는 정상인데 전체 API 응답이 12ms 에서 160ms 로 늘던 일. 매체사가 우리 API 를 물고 있어 응답 하나 바꾸려면 상대 개발자와 먼저 합의해야 하는 계약을 2년 넘게 유지했고, 구현은 AI 에 맡기되 무엇을 만들지와 그 결과를 받아들일지는 제가 판단합니다.

운영 중인 제품 숏캐시 Google Play · App Store · marketingmall.co.kr


SKILLS기술
FRONTEND
React · TypeScript · Next.js · React Native · TanStack Query · SWR · Zustand · Tailwind CSS
TEST
Vitest · React Testing Library · Jest
BACKEND
Node.js · Express · PostgreSQL · Prisma · Redis · AWS · GitHub Actions
WORKFLOW
Claude Code · git worktree 병렬 · 커밋 전 Git 훅 검증 · 재발 방지 문서 축적

WORK경력2023.07 – 현재

버프 · Full-stack Developer

1인 개발사로 광고 회사 한 곳의 서비스를 전담. 아래 세 제품은 그 클라이언트의 것으로, 기획자·디자이너와 한 팀으로 진행하고 개발을 담당.

숏캐시 — 리워드 사용자 앱

React Native · Node.js · PostgreSQL · AWS Google Play App Store

Android 5만+ 설치 · 평점 4.3, iOS 4.6 · Jest 테스트 72개

  • 미션 완료 판정이 우리가 통제할 수 없는 외부 사이트 안에서 돌아야 하는 구조. class 가 배포마다 난독화돼 aria 속성으로 요소를 탐색, 클릭이 아니라 상태 변화로 완료를 판정 — 8개월 동안 7개 서비스·41개 미션 유형까지 확대.
  • 그 스크립트는 외부 사이트가 바뀔 때마다 깨지는데 스토어 심사는 며칠 소요. CodePush 서버를 직접 구성해 심사 없이 당일 배포, 문제가 생기면 즉시 롤백.

오퍼월 — 리워드 광고 지면

React · TypeScript · SWR · Zustand · Vitest · React Testing Library
  • 광고사마다 미션 로직이 달라 요청이 올 때마다 지면 코드를 고쳐 배포하던 상황. 바뀌는 미션 로직과 고정된 화면 동작을 갈라 설정 기반으로 전환, 이후 미션 유형은 배포 없이 어드민에서 추가·변경.
  • 어디서 이탈하는지 알 수 없어 퍼널을 매체별로 집계 — 상세보기 → 복사 → 시작 → 제출 → 완료. 이 지표로 한 매체의 전환율이 68% → 7% 로 떨어진 것을 포착.
  • 원인은 우리 코드의 순서. 소진 여부를 판단하는 캐시를 자사 미션 조회 판정보다 먼저 확인하던 순서.
  • 이미 터졌던 검색어 인코딩·지도 앱 미설치·인덱스 범위 문제를 재현 테스트로 고정 — 49개.

마케팅몰 — 광고주 플랫폼

Next.js · TypeScript · React · Vitest · RTL marketingmall.co.kr
  • 광고주가 대행사를 거쳐야만 광고를 집행할 수 있던 구조. 상품 선택부터 결제·충전·정산까지 한 서비스에서 처리하는 셀프서브 플랫폼 구축.
  • 결제창은 통과했는데 서버 승인이 실패하는 경우. 승인 응답까지 끝나야 포인트가 반영되도록 변경.
  • 만료된 구독을 즉시 차단하면 되돌릴 방법이 없음. 상태를 active / grace / expired / suspended / none 다섯으로 나누고 유예 기간과 복구 일자를 안내. 테스트 39개.
  • 훅 하나 때문에 27개 페이지가 빈 HTML 로 렌더링되던 문제. 브라우저는 멀쩡한데 서버 HTML 에만 본문이 없었고, 27개에서 같이 나타나 공통 코드부터 확인. 깜빡임을 막으려 쓴 useSyncExternalStore 가 SSR 에서도 돌던 탓 — 서버 HTML 본문 0자 → 8,391자, 모바일 TBT 19.4초 → 40ms.

매체사 API 연동 — 광고 지면 공급

Node.js · Express · PostgreSQL · Redis · AWS

버즈빌·퍼플페퍼 등 매체사 앱에 지면을 공급 · 피크 1,900 RPS · 2년 넘게 운영

  • 상대가 우리 API 를 물고 있어 응답 하나 바꾸려면 사전 합의가 필요. 필드를 빼지 않고 더하는 쪽으로만 변경, 미션 목록은 해시를 비교해 변경분만 전송.
  • DB CPU 는 정상인데 전체 API 만 느려진 현상. 요청량도 평소와 같았고 connection pool 만 모두 차 있었습니다 — 중복 요청 제어가 없어 한 파트너의 반복 요청이 connection 을 계속 점유.
  • 중복 제거·동시 실행 제한·10초 캐시로 160ms → 9ms. 배포 검증 기준에 응답 시간과 connection 사용량을 추가.

그 밖에 운영 어드민 78개 화면, 배포 파이프라인 — 포트폴리오.


2022.07 – 2023.07

그렉터 · Frontend Developer

스마트시티 IoT 관제 플랫폼

React · TypeScript · Zustand · React Query
  • 장비마다 봐야 하는 지표가 달라 이상 상태가 먼저 보이도록 정보 구조를 재설계. 스마트 횡단보도·스마트폴이 섞여 있고, 센서 스트림이 끊길 때 값이 빈 칸으로 깜빡이지 않도록 처리.
  • 여러 개발자가 같은 UI 를 각자 만들던 상황. 인터페이스를 먼저 합의한 뒤 공용 컴포넌트 라이브러리를 구축 — 중복 코드 40% 감소.
  • 종일 띄워 두는 화면이라 초기 로딩이 곧 체감 품질. 이미지 최적화와 코드 스플리팅으로 Lighthouse 30 → 90.