Engineering/Mobile
React Navigation을 쓰다 보면 useNavigation()이 닿지 않는 곳에서 화면을 옮겨야 할 때가 온다. 딥링크 핸들러, 푸시 알림 콜백, 외부 SDK 콜백, 전역 인터셉터 같은 "컴포넌트 트리 바깥"이다. navigationRef를 쓰면 되지만, 막상 해보면 빈 화면·흰 화면 같은 타이밍 버그가 줄줄이 튀어나온다. 이 글은 트리 밖 화면 전환을 실제로 안정적으로 만들기까지 밟은 과정과, 그 사이에 만난 버그들의 정리다.문제 — useNavigation이 닿지 않는 곳화면 전환은 보통 컴포넌트 안에서 useNavigation() 훅으로 한다. 그런데 React 컴포넌트가 아닌 곳에서 전환을 트리거해야 하는 경우가 의외로 많다.딥링크 핸들러 — linking.getInitialURL / s..
2026.06.08
댓글
Engineering/FrontEnd
리액트로 외부 라이브러리나 SDK를 붙이다 보면 한 번쯤 마주치는 함정이 있다. 부모에서 콜백을 prop으로 넘겼을 뿐인데, 부모가 리렌더링될 때마다 자식의 useEffect가 통째로 다시 실행되는 현상이다. 이 글에서는 그 원인을 짚고, useEvent라는 한 줄짜리 훅으로 깔끔하게 해결하는 방법을 정리한다.어떤 문제인가리액트에서 자식 컴포넌트(특히 외부 라이브러리)에 콜백을 prop으로 넘길 때, 자식이 그 콜백을 useEffect의 deps 배열에 잡고 있으면 문제가 생긴다. 부모가 리렌더링될 때마다 새 콜백 reference가 만들어지고, 그 reference 변화가 자식의 effect를 매번 재실행시킨다.// 자식 (외부 라이브러리라고 가정)function ThirdPartyWidget({ on..
2026.06.08
댓글
Engineering/Mobile
iOS 17 이상에서 UIGraphicsBeginImageContext()를 시도할 때, 이미지 사이즈가 (0, 0)인 경우 강제종료될 수 있으므로 UIGraphicsImageRenderer를 쓰는 것이 권장된다.문제 패키지: react-native-fast-image, react-native-linear-gradientreact-native-linear-gradient v2.6.2 → v.2.8.3 upgradereact-native-fast-image 는 현재 문제 메서드가 deprecated 되서는 안되는 환경 문제 이슈로 patch-package 사용해서 수정.iOS 내부에서 UIGraphicsBeginImageContext() 사용된 함수 수정
2025.09.24
댓글
Engineering/Mobile
m1 혹은 m2 칩 맥에서 빌드 시 발생하는 에러 빌드 충돌을 방지하기 위해 rosseta 설치하기 // 1. 라이센스 동의 필요 softwareupdate --install-rosetta // 2. 라이선스 자동 동의 /usr/sbin/softwareupdate --install-rosetta --agree-to-license
2023.12.19
댓글
Engineering/Mobile
말 그대로 SDK 경로를 찾을 수 없어서 발생하며, 주로 맥 -> 윈도, 윈도 -> 맥으로 프로젝트를 옮길 때 자주 발생하는 에러입니다. 안드로이드 스튜디오에 내 프로젝트 디렉터리로 가셔서 local.properties 파일을 한번 찾아보세요! 존재하지 않거나 경로가 잘못되어있을 가능성이 큽니다. 경로가 잘못되어 있다면 내 PC에 맞게 변경해주시면 됩니다 보통 윈도의 경우 c:\Users\'사용자 이름'\AppData\Local\android\adk 그리고 맥의 경우 /Users/'사용자 이름'/Library/Android/sdk sdk.dir=/Users/luna/Library/Android/sdk 이런 식으로 변경해주시면 됩니다.
2023.12.19
댓글
Engineering/FrontEnd
https://antoniandre.github.io/vue-cal/#installation 설치 $ npm i vue-cal 사용 // scss/app.scss @import 'vue-cal/dist/vuecal.css' {{ split.label }} 연간/월간/주간 탭 숨기기해당 배열에 각각의 탭 이름 넣어주기 :disable-views="['years', 'year', 'month', 'week']" 시간 간격 설정하기 :time-step="30" // 시간 간격 (30분 간격) :time-from="9 * 60" (9시 부터) :time-to="19 * 60" (19시 까지) 출력 날짜 설정하기 selected-date="2018-11-19" 날짜를 여러 개의 컬럼으로 쪼개기 :split-day..
2023.07.03
댓글
Engineering/FrontEnd
requestAnimationFrame() 는 브라우저에서 작동하는 애니메이션을 알려주고 다음 리페인트 진행 전에 해당 애니메이션을 업데이트하는 함수를 호출하게 합니다. 이 메서드는 리페인트 이전에 실행할 콜백을 인자로 받습니다. 리페인트 ? 리페인트란 리플로우 과정이 끝나고 재생성된 레이아웃 트리(렌더 트리)를 다시 레이어에 그리는 작업을 말합니다. 여기서 리플로우는 DOM 노드의 레이아웃 변경 시 영향을 받는 모든 노드의 수치를 다시 계산하여 레이아웃 트리(렌더 트리)를 재생성하는 작업을 의미합니다. css에서 width, height 같은 레이아웃에 영향을 주는 속성을 말합니다. 리페인트를 발생하게 하는 속성은 css에서 시각적으로 보여지는 모든 속성이며 이 외에도 레이아웃에 영향을 주는 것은 아니..
2023.04.25
댓글
Engineering/FrontEnd
https://tanstack.com/query/v4/docs/vue/examples/vue/persister Vue Query Persister는 나중에 사용할 수 있도록 쿼리 클라이언트를 저장하는 persister와 상호작용하기 위한 유틸리티 집합입니다. 다양한 persister를 사용하여 클라이언트 및 캐시를 다양한 스토리지에 저장할 수 있습니다. 여기서 우리는 indexedDB에 저장했습니다. indexedDB는 same-origin policy를 따르기 때문에 다른 도메인에서 프로젝트 도메인으로 접근할 수 없습니다. 여기에 HTTP 프로토콜을 적용한 도메인과 로컬호스트에서만 접속이 가능하도록 하여 다른 도메인으로 접속 시 access denied하여 보안을 강화하였습니다. 다음은 persistQ..
2023.04.24
댓글
Engineering/FrontEnd
백엔드와 프론트엔드 협업 시에 백엔드 API 제작이 완료되면 보통 REST API의 경우 swagger를 통해 API Docs를 작성하게 되는데 이 때에 백엔드에서 작성된 API 타입을 그대로 가져와 프론트 API 통신 코드 작성 시 타입을 지정해 줄 수 있는 도구입니다. https://www.npmjs.com/package/swagger-typescript-api // package.json { ... "scripts": { ... "generate": "npx swagger-typescript-api -p http://petstore.swagger.io/v2/swagger.json -o ./src/common/interfaces -n types.d.ts " }, } 스크립트에 해당 코드를 작성하고 n..
2023.04.20
댓글
Engineering/FrontEnd
첫 페이지에서 간단하게 mutation을 사용하는 방법에 대해서 설명했었습니다. https://metadataplanning.atlassian.net/wiki/spaces/data/pages/105447542 먼저 첫 페이지에서 설명한 것 처럼 axios apis(axios를 통해 백엔드에 put, post, patch, delete 요청을 보내는 함수)가 작성되었다는 전제로 설명드립니다. 데이터 내보내기 import { useMuataion } from '@tanstack/vue-query' const { mutate } = useMutation(createTodo); 기본적으로 데이터를 내보내기 위해서는 위와 같이 작성합니다. 이후 작성된 값을 통해 Todo를 만들려면 onClickCreate 함수가..
2023.04.20
댓글