(주)원더라운드
2025.04 ~ 현재
390일째 근무 중1.
주요 화면의 진입 성능 최적화를 위한 단계적 마운트 패턴 도입
- Problem
리스트 / 지도 / 상세 등 다수의
hooks와 API 호출이 누적되는 무거운 화면에서, 진입 시점에 위젯이 동시 마운트되며 네비게이션 애니메이션이 끊기고skeleton노출이 지연되는 문제 발생Solution진입점과 본문을 두 단계로 분리하여, 네비게이션 전환 직후에는
skeleton만 즉시 노출하고 transition 종료 시점을setImmediate로 감지하여 본문이 애니메이션 종료 이후에만 마운트되도록 처리. 첫 페인트 비용을 최소화하여 체감 진입 속도를 단축 화면 상단에 노출되는 데이터는 별도
prefetch훅으로 사전에 워밍업하여, 본문 마운트 시점에 캐시 히트되도록 설계스크롤 이벤트 핸들러를 JS 스레드 비차단 방식으로 처리하는 공통 훅을 도입하여, 스크롤 중에도 다른 인터랙션이 지연되지 않도록 개선
2.
푸시 알림 및 딥링크 기반 진입 동선 구축
- Problem
콜드 스타트 상태에서 푸시 클릭 시 네비게이션 스택이 준비되지 않아, 라우팅이 누락되는 케이스 발생
Solution전역
store에pending payload를 적재하고, 네비게이션ready시점에 큐를 소비하여 라우팅하도록 비동기 큐 패턴 적용 - Problem
푸시 딥링크 목적지가 웹뷰 화면인 경우, 콜드 스타트로 진입하면 네비게이션 스택이 해당 웹뷰 단일 화면만 갖게 되어 뒤로가기 시 앱 내부 화면으로 복귀하지 않고 앱 자체가 종료되는 문제 발생
Solution단순
navigate호출 대신navigation state를 직접 구성하여,BottomTabs를 베이스 라우트로 두고 그 위에Stack(연관 underlay 화면 + 웹뷰)을 쌓는 형태로reset. 뒤로가기 시 웹뷰 → 연관 화면 →BottomTabs순서로 자연스럽게 이탈하도록 흐름을 보장 백엔드 푸시 발송 API 스키마 변경에 맞춰 알림 목록 응답을 정규화하는 레이어 도입
푸시 페이로드를 파싱하여 콜드 스타트 / 백그라운드 / 포그라운드 각 진입 케이스를 분기 처리하는 딥링크 핸들러 구현
3.
Tanstack Query낙관적 업데이트 패턴 도입 및 표준화- Problem
북마크 / 좋아요 등 토글성
mutation에서 서버 응답 전까지 UI 반영이 지연되어, 사용자가 동일 버튼을 반복 누르는 현상이 다수 화면에서 발생Solutioncancel → snapshot → cache update → rollback표준 흐름을 적용하여 서버 응답 전 즉시 UI에 반영. 실패 시onError단계에서snapshot기반 롤백과toast안내로 일관된 흐름으로 통일 setQueryData로 관련 화면 캐시를 직접 패치해invalidate에 따른 불필요한 네트워크 라운드트립을 제거하고, 화면 간 상태 일관성 확보
4.
네이버 지도 기반 매장 탐색 화면 구현 및 검색·렌더 최적화
- Problem
영역 필터 선택, 초기 카메라 세팅 등 코드에 의한 카메라 이동까지 사용자 조작과 동일하게 인식되어 결과 리스트 API가 중복 호출되는 문제발생
Solution코드 기반 카메라 이동 여부를 별도 ref로 추적하여 사용자 직접 조작과 분리하고, 재검색 활성화 플래그를 토글하여 의미 있는 사용자 조작 시점에만 재검색이 트리거되도록 처리
지도 카메라의 중심 좌표와 위·경도 델타 값을 기반으로 가시 영역의 남서·북동 경계 좌표를 계산하는 유틸을 도입하여, 결과 리스트 API의 검색 범위 파라미터로 전달. 사용자가 보고 있는 지도 영역에 정확히 매핑된 결과만 받아오도록 구현
5.
배너가 상시 노출되는
BottomSheet레이아웃에서 커스텀 당겨서 새로고침 구현- Problem
메인 화면은 상단 배너 위에
BottomSheet가 부분 노출되는 복합 레이아웃이며,BottomSheet의snapPoint를 배너 하단 위치에 맞춰 배너가 항상 노출되도록 고정한 구조. 이 환경에서 표준RefreshControl을BottomSheet내부 리스트에 바인딩하면 배너 영역에서의pull동작이 감지되지 않아, iOS / Android 모두 당겨서 새로고침이 동작하지 않는 문제 발생Solution화면 전체를
GestureDetector로 감싸Pan Gesture로pull동작을 직접 감지하고,Reanimated worklet으로pull거리에 따라 인디케이터의 위치 / 회전 /opacity를 동기화하는 커스텀 새로고침 흐름을 구현. 임계치 초과 시 새로고침을 트리거하고, 응답 완료 시점까지 인디케이터를 유지하는 상태 흐름을 직접 설계 BottomSheet내부 스크롤 제스처와 화면 전체Pan Gesture가 충돌하지 않도록waitFor옵션으로 제스처 우선순위를 조정해, 배너 영역에서의pull과BottomSheet내부 스크롤을 자연스럽게 분리iOS와 Android 각각의 인디케이터 외형 / 위치를 분기 처리하여 플랫폼 가이드라인에 맞춤
6.
Android 플랫폼 특이사항 트러블슈팅
- Problem
고주사율·고밀도 Android 기기에서 가상 리스트를 빠르게 튕겨 넘길 때(
fling) 항목이 잠깐 빈 칸으로 보이며 스크롤이 끊겨 보이는 현상 발생Solution공통
LegendList래퍼에 Android 전용 분기를 추가. 사전 렌더 영역을 정의하는drawDistance를 250 → 400으로 상향해 미리 그려둘 범위를 확보하고, 스크롤 감속 정도를 결정하는decelerationRate를 iOSfast/ Androidnormal로 분기해 플랫폼별 관성 차이 보정. 화면 밖 뷰를 잠시 떼어내는removeClippedSubviews경로는 필요 시점에만 켜는 옵션으로 제공하여 Android의 중복 그리기(overdraw) 부하 감소 - Problem
이미지 피커 라이브러리가 Android에서 시스템 하단 네비게이션 바에 가려져 액션 버튼 영역이 잘리는 문제 발생
Solution라이브러리 자체에
patch를 적용하여SafeArea inset을 반영하도록 수정하고,pnpm patch워크플로우로 의존성 업그레이드 시에도 패치가 유지되도록 관리 - Problem
Reanimated Spring+Pan Gesture기반 커스텀 가로 스와이퍼가 Android에서 오버슈트가 과하게 발생하고 빠른 스와이프가 인식되지 않으며, 동일한 손 동작에서 iOS 대비 둔하게 동작하는 문제 발생SolutionSpring 설정과 제스처 임계값을 플랫폼별로 분기. Android는
damping을 25(iOS 22)로 상향해 오버슈트 억제,Pan Gesture의activeOffsetX를 ±10 → ±8로 좁혀 스와이프 인식 감도 향상, Android에서velocity가 낮게 보고되는 특성을 반영해 swipe 트리거velocity threshold를 150으로 낮춰 iOS와 유사한 체감을 갖도록 보정
7.
Claude Code 기반 개발 생산성 인프라 구축
기존 RN 앱 담당 개발자의 퇴사로 도메인 지식 인계가 끊긴 상태에서, RN 앱 개발 경험이 부족한 채로 단독으로 유지보수와 신규 기능 개발을 동시에 진행해야 하는 환경에 놓임. 학습 비용 절감과 도메인 컨텍스트의 항시 참조를 위해 Claude Code 기반 보조 인프라를 직접 설계 및 구축
프로젝트 규칙을 UI 생태계 / 성능 / 애니메이션 / 서버 상태 / 네비게이션 / 전역 상태 / 다국어 / 신규 기능 흐름 등 도메인별로 분리하여, 작업 키워드 기반으로 필요한 규칙만 부분 적재되는 구조로 설계
planner → generator → evaluator3단계 루프 기반 서브에이전트를 구성하여 구현 작업의 일부를 자동화Android 성능 최적화 전용 서브에이전트를 별도로 구성하여, 가상 리스트 jank / 제스처 충돌 / 렌더 부하 / 메모리 사용 패턴 등 Android 특유의 이슈를 자동 진단하고 코드 변경 제안까지 이어지도록 설계
RN 디버깅 도구 훅 세팅으로 개발 환경 보강
