Context API 하나에 다 때려 넣었다가 지옥을 봤습니다
전역 상태 관리를 위해 Redux 대신 Context API를 선택했습니다. 하지만 `UserContext`에 모든 정보를 담자마자 앱 전체가 리렌더링되기 시작했습니다. Context 분리(Splitting) 전략.

개발과 기술에 대한 이야기를 기록합니다.
전역 상태 관리를 위해 Redux 대신 Context API를 선택했습니다. 하지만 `UserContext`에 모든 정보를 담자마자 앱 전체가 리렌더링되기 시작했습니다. Context 분리(Splitting) 전략.

멋진 히어로 이미지를 `<img>` 태그로 넣었더니 LCP 점수가 빨간색입니다. Next.js의 `Image` 컴포넌트가 어떻게 이미지 사이즈, 포맷, 로딩 시점을 자동 최적화하는지, 그리고 `sizes` 속성의 비밀을 파헤쳐봤습니다.

`window.addEventListener('scroll')`로 무한 스크롤을 구현하면 성능이 박살 납니다. Intersection Observer API로 리팩토링하여 CPU 사용량을 90% 줄이는 방법.

TypeScript를 배우다 보면 만나는 `Function<T>`. 외계어 같던 제네릭을 '투명 스티커'와 '자판기' 비유로 완벽하게 이해하고, `any`와의 차이점을 정리해봤습니다.

빨간 줄을 없애려고 습관적으로 `as unknown as Type`을 쓰시나요? `as`가 사실 컴파일러의 눈을 가리는 행위인 이유와 Type Guard를 통한 올바른 해결법.

`npm install`을 했는데 모듈을 못 찾는다고 합니다. 로컬에선 되는데 CI에서만 터지는 이유와 `package.json`의 `exports`, 그리고 TypeScript 설정까지 완벽 분석.

서비스가 조금 잘 되나 싶더니 Supabase에서 경고 메일이 날아옵니다. 'Disk Full', 'CPU 100%'. 무료 플랜(Free Tier)의 진짜 한계와 업그레이드 없이 버티는 최적화 팁.

DB 컬럼을 추가했는데 프론트엔드에서는 여전히 에러가 납니다. `supabase gen types`의 작동 원리와 자동화된 타입 동기화 파이프라인 구축 방법을 정리해봤습니다.

팀원과 동시에 DB 스키마를 수정했더니 `supabase db push`가 실패합니다. 마이그레이션 파일 충돌 원인과 `migration repair` 명령어로 해결하는 방법을 정리해봤습니다.

로컬에선 잘 되는데 배포만 하면 500 에러? Node.js와 Edge Runtime의 차이부터 Import Map 설정까지, Supabase Edge Function 배포 성공을 위한 체크리스트.

채팅 기능을 만들었는데 DB가 업데이트되어도 프론트엔드는 조용합니다. Supabase Realtime 구독이 먹통일 때 확인해야 할 'Replication' 설정과 RLS 필터링에 대해 정리해봤습니다.

테이블 RLS는 켰는데, 스토리지 파일 업로드가 막힙니다. 'new row violates row-level security policy' 에러의 진짜 원인인 `storage.objects` 정책 설정법을 정리해봤습니다.

회원가입 버튼을 눌렀는데 메일이 안 옵니다. 스팸함에도 없습니다. Supabase 무료 SMTP의 한계와 Resend를 연동하여 이메일 전송 성공률을 99%로 높이는 방법을 정리해봤습니다.

로그인한 유저 ID를 가져오려고 했는데 `auth.uid()`가 에러를 뱉거나 엉뚱한 값을 줍니다. RLS(Row Level Security)에서 `auth.uid()`를 올바르게 사용하는 법과 `security definer` 함수의 비밀.

카카오톡이나 문자의 링크를 눌렀는데 앱이 안 켜지고 웹페이지만 뜹니다. Android App Links, iOS Universal Links 설정, 그리고 `go_router` 처리까지 딥링크의 모든 것을 파헤칩니다.

게시글(Post)을 가져올 때 작성자(User) 정보도 같이 보고 싶은데 `null`만 뜹니다. Foreign Key 설정부터 `select(*, users(*))` 문법, 그리고 M:N 관계, Inner Join, Count까지 완벽하게 파헤칩니다.

DB에 데이터가 분명히 있는데, 프론트엔드에서는 빈 배열(`[]`)만 옵니다. Supabase 초보자가 가장 많이 겪는 RLS(Row Level Security) 정책 위반 문제와 해결법을 정리해봤습니다.

안드로이드는 오는데 iOS는 조용합니다. 혹은 앱이 켜져 있을 때만 옵니다. Background/Terminated 상태 처리, APNs 인증서, 그리고 Notification Channel 설정까지 완벽하게 해결합니다.

Debug에선 잘 되는데 Release에서만 죽나요? 범인은 '난독화'입니다. R8의 원리, Mapping 파일 분석, 그리고 Reflection을 사용하는 라이브러리를 지켜내는 방법(@Keep)을 정리해봤습니다.

기능도 별로 없는데 앱 용량이 100MB? 사용자는 무거운 앱을 설치하지 않습니다. 이미지 최적화, 폰트 경량화, ABI 필터링, 그리고 Android App Bundle(AAB)까지, 확실한 다이어트 비법을 공개합니다.
