방은수

Introduce

안녕하세요. 만 27세 2년의 경력을 가진 프론트엔드 개발자 방은수입니다.

TypeScript와 React, Next.js를 기반으로 웹 서비스를 개발하고 있으며, React Native(CLI) 환경에서 자사 모바일 애플리케이션의 신규 기능 개발과 유지보수도 함께 담당하고 있습니다.

화면을 만드는 것에서 그치지 않고, 진입 성능이나 인터랙션처럼 사용자 경험과 맞닿아 있는 부분을 신경 쓰며 개발하고 있습니다. 문제가 생기면 원인을 함께 살펴보고 구조적으로 접근해 해결하려고 합니다.

Claude Code 같은 AI 도구를 일상적인 개발 흐름에 활용하는 것에도 관심이 많습니다. 프로젝트 컨텍스트를 도메인별로 정리해 적재하거나, 서브에이전트를 활용한 반복적인 작업을 자동화하는 식으로, AI를 실제 업무에 자연스럽게 녹여내는 방법을 고민하고 있습니다.

업무 중 생기는 문제는 팀원들과의 충분한 대화로 풀어가는 편이며, 비즈니스와 개발 사이의 간극을 줄이는 것이 좋은 프로덕트의 출발이라고 생각합니다. 변화하는 기술과 AI 기반 개발 환경에 꾸준히 적응하며, 사용자에게 더 나은 경험을 전하는 개발자가 되고 싶습니다.

Experience

(주)원더라운드

2025.04 ~ 현재

390일째 근무 중

  1. 1.

    주요 화면의 진입 성능 최적화를 위한 단계적 마운트 패턴 도입

    • Problem

      리스트 / 지도 / 상세 등 다수의 hooks와 API 호출이 누적되는 무거운 화면에서, 진입 시점에 위젯이 동시 마운트되며 네비게이션 애니메이션이 끊기고 skeleton 노출이 지연되는 문제 발생

      Solution

      진입점과 본문을 두 단계로 분리하여, 네비게이션 전환 직후에는 skeleton만 즉시 노출하고 transition 종료 시점을 setImmediate로 감지하여 본문이 애니메이션 종료 이후에만 마운트되도록 처리. 첫 페인트 비용을 최소화하여 체감 진입 속도를 단축

    • 화면 상단에 노출되는 데이터는 별도 prefetch 훅으로 사전에 워밍업하여, 본문 마운트 시점에 캐시 히트되도록 설계

    • 스크롤 이벤트 핸들러를 JS 스레드 비차단 방식으로 처리하는 공통 훅을 도입하여, 스크롤 중에도 다른 인터랙션이 지연되지 않도록 개선

  2. 2.

    푸시 알림 및 딥링크 기반 진입 동선 구축

    • Problem

      콜드 스타트 상태에서 푸시 클릭 시 네비게이션 스택이 준비되지 않아, 라우팅이 누락되는 케이스 발생

      Solution

      전역 storepending payload를 적재하고, 네비게이션 ready 시점에 큐를 소비하여 라우팅하도록 비동기 큐 패턴 적용

    • Problem

      푸시 딥링크 목적지가 웹뷰 화면인 경우, 콜드 스타트로 진입하면 네비게이션 스택이 해당 웹뷰 단일 화면만 갖게 되어 뒤로가기 시 앱 내부 화면으로 복귀하지 않고 앱 자체가 종료되는 문제 발생

      Solution

      단순 navigate 호출 대신 navigation state를 직접 구성하여, BottomTabs를 베이스 라우트로 두고 그 위에 Stack(연관 underlay 화면 + 웹뷰)을 쌓는 형태로 reset. 뒤로가기 시 웹뷰 → 연관 화면 → BottomTabs 순서로 자연스럽게 이탈하도록 흐름을 보장

    • 백엔드 푸시 발송 API 스키마 변경에 맞춰 알림 목록 응답을 정규화하는 레이어 도입

    • 푸시 페이로드를 파싱하여 콜드 스타트 / 백그라운드 / 포그라운드 각 진입 케이스를 분기 처리하는 딥링크 핸들러 구현

  3. 3.

    Tanstack Query 낙관적 업데이트 패턴 도입 및 표준화

    • Problem

      북마크 / 좋아요 등 토글성 mutation에서 서버 응답 전까지 UI 반영이 지연되어, 사용자가 동일 버튼을 반복 누르는 현상이 다수 화면에서 발생

      Solution

      cancel → snapshot → cache update → rollback 표준 흐름을 적용하여 서버 응답 전 즉시 UI에 반영. 실패 시 onError 단계에서 snapshot 기반 롤백과 toast 안내로 일관된 흐름으로 통일

    • setQueryData로 관련 화면 캐시를 직접 패치해 invalidate에 따른 불필요한 네트워크 라운드트립을 제거하고, 화면 간 상태 일관성 확보

  4. 4.

    네이버 지도 기반 매장 탐색 화면 구현 및 검색·렌더 최적화

    • Problem

      영역 필터 선택, 초기 카메라 세팅 등 코드에 의한 카메라 이동까지 사용자 조작과 동일하게 인식되어 결과 리스트 API가 중복 호출되는 문제발생

      Solution

      코드 기반 카메라 이동 여부를 별도 ref로 추적하여 사용자 직접 조작과 분리하고, 재검색 활성화 플래그를 토글하여 의미 있는 사용자 조작 시점에만 재검색이 트리거되도록 처리

    • 지도 카메라의 중심 좌표와 위·경도 델타 값을 기반으로 가시 영역의 남서·북동 경계 좌표를 계산하는 유틸을 도입하여, 결과 리스트 API의 검색 범위 파라미터로 전달. 사용자가 보고 있는 지도 영역에 정확히 매핑된 결과만 받아오도록 구현

  5. 5.

    배너가 상시 노출되는 BottomSheet 레이아웃에서 커스텀 당겨서 새로고침 구현

    • Problem

      메인 화면은 상단 배너 위에 BottomSheet가 부분 노출되는 복합 레이아웃이며, BottomSheetsnapPoint를 배너 하단 위치에 맞춰 배너가 항상 노출되도록 고정한 구조. 이 환경에서 표준 RefreshControlBottomSheet 내부 리스트에 바인딩하면 배너 영역에서의 pull 동작이 감지되지 않아, iOS / Android 모두 당겨서 새로고침이 동작하지 않는 문제 발생

      Solution

      화면 전체를 GestureDetector로 감싸 Pan Gesturepull 동작을 직접 감지하고, Reanimated worklet으로 pull 거리에 따라 인디케이터의 위치 / 회전 / opacity를 동기화하는 커스텀 새로고침 흐름을 구현. 임계치 초과 시 새로고침을 트리거하고, 응답 완료 시점까지 인디케이터를 유지하는 상태 흐름을 직접 설계

    • BottomSheet 내부 스크롤 제스처와 화면 전체 Pan Gesture가 충돌하지 않도록 waitFor 옵션으로 제스처 우선순위를 조정해, 배너 영역에서의 pullBottomSheet 내부 스크롤을 자연스럽게 분리

    • iOS와 Android 각각의 인디케이터 외형 / 위치를 분기 처리하여 플랫폼 가이드라인에 맞춤

  6. 6.

    Android 플랫폼 특이사항 트러블슈팅

    • Problem

      고주사율·고밀도 Android 기기에서 가상 리스트를 빠르게 튕겨 넘길 때(fling) 항목이 잠깐 빈 칸으로 보이며 스크롤이 끊겨 보이는 현상 발생

      Solution

      공통 LegendList 래퍼에 Android 전용 분기를 추가. 사전 렌더 영역을 정의하는 drawDistance를 250 → 400으로 상향해 미리 그려둘 범위를 확보하고, 스크롤 감속 정도를 결정하는 decelerationRate를 iOS fast / Android normal로 분기해 플랫폼별 관성 차이 보정. 화면 밖 뷰를 잠시 떼어내는 removeClippedSubviews 경로는 필요 시점에만 켜는 옵션으로 제공하여 Android의 중복 그리기(overdraw) 부하 감소

    • Problem

      이미지 피커 라이브러리가 Android에서 시스템 하단 네비게이션 바에 가려져 액션 버튼 영역이 잘리는 문제 발생

      Solution

      라이브러리 자체에 patch를 적용하여 SafeArea inset을 반영하도록 수정하고, pnpm patch 워크플로우로 의존성 업그레이드 시에도 패치가 유지되도록 관리

    • Problem

      Reanimated Spring + Pan Gesture 기반 커스텀 가로 스와이퍼가 Android에서 오버슈트가 과하게 발생하고 빠른 스와이프가 인식되지 않으며, 동일한 손 동작에서 iOS 대비 둔하게 동작하는 문제 발생

      Solution

      Spring 설정과 제스처 임계값을 플랫폼별로 분기. Android는 damping을 25(iOS 22)로 상향해 오버슈트 억제, Pan GestureactiveOffsetX를 ±10 → ±8로 좁혀 스와이프 인식 감도 향상, Android에서 velocity가 낮게 보고되는 특성을 반영해 swipe 트리거 velocity threshold를 150으로 낮춰 iOS와 유사한 체감을 갖도록 보정

  7. 7.

    Claude Code 기반 개발 생산성 인프라 구축

    • 기존 RN 앱 담당 개발자의 퇴사로 도메인 지식 인계가 끊긴 상태에서, RN 앱 개발 경험이 부족한 채로 단독으로 유지보수와 신규 기능 개발을 동시에 진행해야 하는 환경에 놓임. 학습 비용 절감과 도메인 컨텍스트의 항시 참조를 위해 Claude Code 기반 보조 인프라를 직접 설계 및 구축

    • 프로젝트 규칙을 UI 생태계 / 성능 / 애니메이션 / 서버 상태 / 네비게이션 / 전역 상태 / 다국어 / 신규 기능 흐름 등 도메인별로 분리하여, 작업 키워드 기반으로 필요한 규칙만 부분 적재되는 구조로 설계

    • planner → generator → evaluator 3단계 루프 기반 서브에이전트를 구성하여 구현 작업의 일부를 자동화

    • Android 성능 최적화 전용 서브에이전트를 별도로 구성하여, 가상 리스트 jank / 제스처 충돌 / 렌더 부하 / 메모리 사용 패턴 등 Android 특유의 이슈를 자동 진단하고 코드 변경 제안까지 이어지도록 설계

    • RN 디버깅 도구 훅 세팅으로 개발 환경 보강

한국글로벌널리지네트웍(주)

2024.03 ~ 2025.03

총 1년 10일 근무

  1. 1.

    퀴즈에 필요한 문제 은행 관리 기능 개발

    • Problem

      보기 순서를 변경할 때, API 요청 시 각 보기의 ID가 필요했지만, 보기를 추가·수정·삭제하는 과정에서 새로운 보기와 기존 보기를 구분하기 어려운 문제에 직면

      Solution

      보기의 추가·수정·삭제 직후 문제 데이터를 최신 상태로 유지하기 위해 Tanstack QueryinvalidateQueries 기능을 활용하여 데이터를 자동으로 갱신. 이후, 최신 상태의 보기 데이터를 기반으로 정렬 후 보기 순서 변경 API를 요청하여 정확성을 보장

  2. 2.

    강의 구성 단위(챕터 / 섹션 / VOD / 퀴즈 / 실습) 관리 기능 개발

    • Problem

      실습, VOD 등에 따라 요구되는 설정 값이 달라 일관된 폼을 제공하기 어려웠고, UI 복잡성이 증가하는 문제가 발생

      Solution

      각 콘텐츠 유형별로 독립적인 폼을 구성하고, 선택된 유형에 따라 동적으로 렌더링하도록 개선하여 UI 복잡성을 완화하고 사용성을 개선

  3. 3.

    출석부 달력 컴포넌트 & 선택한 연도, 월, 주차에 따른 출석 현황을 보여주는 기능 개발

    • 주간 / 월간별 보기 모드 구현

    • 사용자가 특정 연도, 월, 주차를 선택할 수 있는 팝업 컴포넌트 개발

Skills

Languages

  • JavaScript (ES6+)
  • TypeScript
  • HTML5 / CSS3
  • Java
  • C#

Libraries & Frameworks

  • React.js (vite)
  • Next.js
  • React Native (CLI)
  • Tailwind CSS
  • Tanstack Query
  • Zustand
  • Recoil
  • Shadcn
  • Express

Backend

  • Prisma
  • Drizzle
  • Neon
  • Supabase
  • Vercel
  • Docker
  • GitHub Actions
  • EC2
  • S3

Tools

  • Git & GitHub
  • Jira
  • Notion
  • Figma
  • Slack

Portfolio

Bread And Source

  • 실제 운영중인 베이커리의 사이트 & 백오피스 (beta)
Next.jsTypeScriptTailwind CSSNeonDrizzleZustandTanstack QueryFramer motion

Eunsutory

  • 개인 회고 & 소개 블로그
Next.jsTypeScriptTailwind CSSPrisma

Scrama

  • 아마존 웹 스크레핑 사이트
Next.jsTypeScriptTailwind CSSCheerio

Wasd Rental System

  • 대학교 동아리에서 제작한 장비 대여 시스템
React.jsTypeScriptExpress.jsTailwind CSSZustandTanstack Query

Eunimation

  • 애니메이션 추천 사이트
Next.jsTypeScriptTailwind CSSFramer MotionZustand

Eunsuread

  • Thread 클론 사이트
Next.jsTypeScriptTailwind CSSClerkMongoose

Education

명지전문대학교

소프트웨어 콘텐츠학과

2022.03.02 ~ 2024.02.28

  • 학점 4.26 졸업
  • 웹 개발 동아리 운영 (부장) 및 프로젝트 개발 주도 (2022.06 ~ 2024.02)
  • 기자재 대여 시스템 사이트 / 주변 맛집 등 명소를 찾는 사이트 / 2D 로그라이크 앱 게임 등 개발

Certification

  • 정보처리산업기사
  • 컴퓨터 활용능력 1급
  • 워드프로세서
  • TOEIC (815점)2023.07.19 취득