All Posts
Thoughts, learnings, and snippets from the journey back to dev.
한국어는 생각보다 라는 말을 많이 한다.
생각보다라는 말을 많이 쓰는 한국사람들...
구글 플레이 프로덕션 승인 완료
구글플레이 프로덕션 승인 완료
앱 개념어를 바꿨다 — Folder에서 Chain으로, 전면 리네이밍 작업기
ChainPlay 앱에서 Folder 개념을 Chain으로 전면 리네이밍하면서 겪은 과정과 TypeScript 타입 주도 리팩토링 방법
머지한 피처 브랜치, 왜 지워야 할까? — 로컬·원격 삭제 방법 정리
머지 후 피처 브랜치를 삭제해야 하는 이유와 로컬·원격 브랜치 삭제 명령어를 정리
GitHub REST API Rate Limit 때문에 블로그 글 목록이 사라졌다
Next.js 블로그에서 GitHub API Rate Limit을 초과해 글 목록이 사라진 문제를 GraphQL API로 해결한 과정
구글 플레이 콘솔 — 비공개 테스트 후 프로덕션 등록하기
비공개 테스트 14일 완료 후 프로덕션 액세스 신청까지 채워야 하는 항목과 실제 답변 정리
구글 플레이 비공개 테스트, 자주 업데이트할수록 승인이 빨라진다
Tilt 게임 버전업을 하면서 느낀 것 — 비공개 테스트 중에는 업데이트 빈도가 심사 통과에 직접 영향을 준다
Android 빌드 파일 정리하는 법 — 디스크 수 GB를 한 방에
안드로이드 프로젝트 빌드 파일이 디스크를 잡아먹을 때, 안전하게 정리하는 방법 총정리
Next.js 다국어 블로그 SEO — Google이 /ko를 무시하는 이유와 두 가지 해결법
Google Search Console 중복 페이지 오류의 원인인 x-default hreflang 누락과 isFallback noindex 처리 방법
Supabase Free 사용 제한
Supabase 무료 사용 제한 내용
에이전트 활용 방법 및 생성
AI 에이전트 블로그에서 활용하기
[정보] 모바일 신분증을 활용한 블록체인 & AI 해커톤
모바일 신분증을 활용한 블록체인 & AI 해커톤 지원할까?
Next.js + next-intl, /ko/ 리디렉션 오류와 proxy.ts 충돌 삽질기
Google Search Console 리디렉션 오류를 잡으려다 빌드 에러까지 만난 과정과 proxy.ts 구조 이해
Ollama 사용후기 (각 모델별 사용 느낌)
각 모델별 사용후기 — DeepSeek, EXAONE, QWEN 비교
Ollama 설치 및 로컬 AI 시작하기
로컬 AI 사용을 위한 Ollama 설치와 모델 선택 가이드
블로그 포스트 목록에서 "1분 읽기" 지운 이유
읽기 시간 표시가 초기 블로그에서 오히려 역효과가 나는 이유와 Next.js 컴포넌트에서 제거하는 방법
Google이 내 블로그 예시 코드를 링크로 크롤링한 날
Search Console 404 오류를 추적했더니 포스트 본문의 코드 예시 파일명을 Google이 실제 URL로 인식한 것이었다 — next.config.ts redirects로 해결
Next.js 다국어 블로그에서 canonical 빠뜨리면 생기는 일
Google Search Console에서 "중복 페이지, Google에서 사용자와 다른 표준을 선택함" 오류가 뜬 이유와 next-intl 환경에서 canonical 설정하는 방법
Next.js 페이지 이동할 때마다 스크롤 애니메이션이 생기는 이유
뒤로 가기 버튼과 scroll-behavior smooth가 얽혀서 만든 스크롤 점프 버그 두 개를 연속으로 잡은 과정
GitHub에 AAB 올렸다가 용량 경고 받은 후 — 빌드 파일 로컬 버전관리로 전환하기
Android 릴리즈 빌드 파일(AAB/APK)을 GitHub에 올리면 안 되는 이유와, 로컬 폴더로 버전 관리하는 방법
React Native(Expo) 앱에 한/영 다국어 지원 추가하기 — locale 감지 삽질기
expo-localization부터 NativeModules, Intl API까지 세 가지 방법을 직접 써보고 최종 해답을 찾은 과정
스크린샷 50장이 블로그를 통째로 날렸다 — GitHub API 한도 초과 디버깅
이미지 50개를 한 번에 커밋했더니 Vercel 빌드가 50번 돌면서 GitHub API 요청이 한도를 꽉 채운 이야기
구글 플레이스토어 앱 등록 A-Z — 스크린샷으로 전 과정 정리
앱 생성부터 비공개 테스트 통과까지, 구글 플레이 콘솔의 전 과정을 스크린샷으로 정리한 실전 가이드
개인정보처리방침의 어린이 조항과 Play Store 전체 이용가는 별개다
개인정보처리방침에 "13세 미만 어린이 대상 아님" 문구를 넣으면 13세 이상 등급을 줘야 하는 게 아닌지 헷갈렸던 경험 정리
[에세이] 학습이 되어 간다
블로그 시작 7주 차, 이것저것 만들다 보니 어느새 AI 개발 공부에 빠져 있었다
Expo 앱을 Play Store에 올리기까지 — AAB 빌드부터 스토어 자산 제작까지
React Native(Expo) 게임 앱을 처음 Google Play Store에 출시하면서 겪은 빌드, 자산 제작, 버그 수정 전 과정 정리
Don't 하나가 Vercel 빌드를 박살냈다 — YAML frontmatter 함정
로컬 빌드는 멀쩡한데 Vercel만 실패할 때, 원인은 영어 축약어가 들어간 YAML title 한 줄이었다
구글 애드센스 거절당했다 — 콘텐츠 없는 도구 사이트의 현실
애드센스 심사에서 "가치 없는 콘텐츠"로 거절당한 뒤, 도구 사이트에 콘텐츠를 채워 재신청한 과정
WiFi QR 코드 생성기를 만들었다 — AI로 처음 완성한 사이드 프로젝트
손님에게 WiFi 비밀번호 알려주기가 불편해서 만든 QR 코드 생성기 — React + i18n + 인쇄까지
YouTube Premium 없이 쓰는 나만의 플레이리스트 앱 — React Native(Expo)로 직접 만들기
Expo SDK 54 + TypeScript로 유튜브 플레이리스트 앱을 처음부터 만들면서 겪은 삽질과 해결법
안드로이드 앱 직접 설치하는 방법들 — APK부터 USB 디버깅까지
구글 플레이 없이 안드로이드 앱을 설치하는 방법들과 ADB USB 디버깅으로 바로 설치하는 법까지 한 번에 정리
GitHub Actions 자동 커밋이 잔디에 안 심어지는 이유 — KST timezone 설정으로 해결
GitHub Actions가 자동으로 커밋해도 잔디에 반영이 안 되는 timezone 문제. TZ=Asia/Seoul 한 줄로 해결하는 방법을 정리했다.
React Native YouTube 앱 만들면서 삽질한 것들 — Android WebView 재생 버그부터 키보드 이슈까지
Android WebView 보안 정책, KeyboardAvoidingView 함정, 자동재생 타이밍 버그까지 — YT Player 앱 개선 과정에서 만난 문제와 해결법을 정리했다
React Native 앱 Play Store 첫 출시 — 빌드부터 소개글 카피라이팅까지
AAB 빌드 자동화, versionCode 오류 해결, 스토어 소개글 작성, Play Console 권장 조치 분석까지 첫 출시에서 겪은 것들 정리
Claude Code, 대화가 길어질수록 느려지는 이유와 /clear 활용법
Claude Code에서 context가 쌓이면 왜 느려지고 비싸지는지, /clear로 어떻게 해결하는지 실용적으로 정리
구글이 내 블로그를 무시했던 이유 — Next.js SEO 버그 2가지 수정기
Google Search Console에서 색인 누락을 발견하고 canonical 태그와 footer 404 링크를 수정한 과정
Obsidian Git 모바일 설정 — 안드로이드에서 GitHub 동기화하기
안드로이드에서 Obsidian Git 플러그인으로 GitHub 레포를 클론하고 자동 동기화까지 설정하는 방법
Obsidian Git 플러그인 설정하다가 xcrun 에러 만난 이야기
Obsidian을 GitHub에 연결하고 Git 플러그인을 설정하는 과정에서 만난 xcrun 에러 해결법
Supabase service role로 멀티 유저 앱 만들다 터진 데이터 격리 버그들
RLS 없이 service role 클라이언트만 쓸 때 빠지기 쉬운 데이터 격리 함정 4가지와 해결법
Android 백그라운드 재생이 왜 이렇게 어렵냐 — Doze, WakeLock, Foreground Service 삽질기
카세트 뮤직 플레이어 앱에서 화면 꺼지면 트랙 전환이 안 되는 버그를 Foreground Service + PARTIAL_WAKE_LOCK으로 해결한 과정
[JobRadar 7편] Google OAuth "Database error" — Supabase 트리거 버그 찾기까지
Google 로그인이 "Database error saving new user"로 계속 실패하는 이유를 찾아 새 프로젝트까지 팠다가, 결국 트리거 함수 한 줄로 해결한 삽질기
[JobRadar 6편] 커버레터 완성, UX 개선, 그리고 로그인 붙이기
커버레터 저장/다운로드/AI재검토, 메모·상태 관리, JD 직접 입력, Supabase Auth까지 하루에 몰아서 만든 이야기
Claude Code로 블로그 운영하는 법 — 작성부터 예약 배포까지 자동화
포스트 작성, 번역, 등록, 예약 배포까지 Claude Code와 함께 블로그를 운영하는 전체 워크플로우를 정리했다.
Claude 콘솔 크레딧 구매 버튼이 비활성화될 때 — 결제 안 되는 원인과 해결법
Claude Console에서 결제 정보를 다 입력해도 구매 버튼이 활성화되지 않는 문제. 원인은 언어 전환 시 도시 선택값이 초기화되는 버그였다.
JobRadar 개발기 5편: 자동화의 환상을 버리고 현실적인 파이프라인을 만들었다
Playwright 자동 스크래핑을 포기하고, URL 붙여넣기 → JD 스크래핑 → AI 매칭 → 커버레터 생성까지 이어지는 on-demand 파이프라인을 구축한 과정.
JobRadar 4편: Playwright 버리고 cheerio로 갈아탄 이유 — 4일차 방향 전환기
3일 동안 Playwright와 씨름하다 포기했다. 4일차에 접어들어 방향을 완전히 바꿨다. 자동 수집 대신 URL 기반 on-demand 스크래핑, cheerio + JSON-LD 구현까지.
Claude 고객센터에 이메일 보내는 법 — AI 챗봇 말고 직접 연락하기
Claude support 챗봇이 AI로만 응답할 때, 실제 이메일 티켓을 만들어 사람에게 연락하는 방법을 단계별로 정리했다.
Claude Code 커스텀 에이전트 만들기 — blog-auto-draft로 배우는 실전 세팅
반복 작업을 자동화하는 Claude Code 커스텀 에이전트 만드는 법. blog-auto-draft 예시로 파일 구조부터 호출까지 단계별로 정리합니다.
[클로드 콘솔] 결제 안됨. 조직 삭제하면 안됨!!!
Claude Console Deletion of organization
JobRadar 3편: Vercel에 Playwright 올렸더니 터졌다 — @sparticuz/chromium 삽질기
로컬에서 잘 되던 스크래퍼가 Vercel에만 올리면 터지는 이유. @sparticuz/chromium 도입부터 ETXTBSY, 60초 타임아웃 대응까지 삽질 전 과정.
Claude Code에서 MCP로 Gemini 연결하기 — 토큰 걱정 없이 두 AI 함께 쓰기
Claude Code 안에서 Gemini를 MCP 툴로 연결해 토큰 부담 없이 두 AI를 상황에 맞게 나눠 쓰는 방법을 단계별로 정리합니다.
[JobRadar 2편] Supabase 설계 + Playwright 스크래퍼 — 삽질 기록
JobRadar 2편. Supabase 멀티유저 스키마 설계부터 Indeed · Seek Playwright 스크래퍼 구현까지. Glassdoor 차단, ETXTBSY, 모듈 누락까지 삽질 과정 전부 정리.
Claude Code Hooks — "이 작업 끝나면 자동으로 해줘"를 설정하는 법
파일 저장 시 자동 포맷, 응답 완료 알림, 승인 요청 알림까지 — Claude Code Hooks로 반복 작업을 자동화하는 방법을 단계별로 정리했다.
[JobRadar 1편] 프로젝트 세팅 — 내 취업을 위해 AI 툴을 직접 만들었다
채용공고 자동 수집부터 AI 매칭까지 — JobRadar 사이드 프로젝트 1편. Next.js + Supabase + Vercel 초기 세팅을 단계별로 정리했다.
앱 만들었는데 어떻게 올리지? 구글 플레이 콘솔 등록 처음부터 끝까지
구글 플레이 콘솔에 앱을 처음 등록하는 전체 과정을 단계별로 정리합니다. 개발자 계정 등록부터 AAB 업로드, 심사 제출까지.
[앱 출시] 테스터 12명 모으는 법 — Google Groups를 써야 하는 이유
Google Play 테스트 트랙 등록 시 테스터 12명을 효율적으로 모으는 방법. 이메일 수동 등록 대신 Google Groups를 써야 하는 이유와 순서 정리.
DeepL API 사용법 — Next.js에서 번역 기능 붙이기
DeepL API Free 플랜으로 Next.js 앱에 번역 기능을 붙이는 방법을 단계별로 정리합니다. API 키 발급부터 서버 라우트 구현까지.
GitHub Actions로 블로그 포스트 예약 배포하기
GitHub Actions 워크플로우를 만들어 특정 날짜에 블로그 포스트가 자동으로 발행되도록 설정하는 방법을 실제 구현 경험 기반으로 설명합니다.
2026년 기준 Google Play 콘솔(개발자 계정) 등록 방법
Google Play 콘솔 등록 방법
번역 API 3종 비교 — MyMemory vs DeepL vs Claude, 뭘 써야 할까?
블로그 어드민에 번역 기능을 붙이면서 MyMemory, DeepL, Claude API를 직접 써본 경험을 비교 정리합니다.
React SPA에서 페이지별 title과 meta 태그 바꾸기 — react-helmet-async
SEO작업 중 react-helmet에 대한 설명
앱 테스트시 빠르게 폰에서 하는법 (무선디버깅 사용법)
안드로이드 무선디버깅 하는법
[클로드 코드] 스킬(Skill) 만들고 사용하는 법 — 나만의 슬래시 커맨드
Claude Code에서 반복 작업을 자동화하는 스킬(Skill)을 직접 만들고 사용하는 방법을 실습과 함께 정리합니다.
내 사이트, 구글에서 검색되게 만들기 — Next.js SEO 세팅법
Next.js App Router 기반 블로그에 robots.txt, sitemap.xml, Open Graph, JSON-LD를 추가해서 구글에 노출되는 방법을 실제 작업 기반으로 정리합니다.
[앱] 카세트 플레이어 앱 개발중_02
카세트 테이프 플레이어 앱 개발 일지 02
[앱] 카세트 플레이어 앱 개발중_01
카세트 테이프 플레이어 앱 개발 일지 01
Replit vs Claude Code 초보자에게 좋은 플랫폼은?
Replit과 ClaudeCode를 비교 사용해본 후기.
데이터 근친교배
AI에 의지하는 인간이 작성하는 데이터가 더이상 늘지 않을때....
우리는 도서관에 책 표지를 보러 간다.
[클로드 코드] 효율적으로 빠르게 배울수 있는 클로드코드 스터디 가이드라인
클로드 코드 공부할 방향 및 기본 공부 순서
[AI] Stitch 사용후기
디자인AI 인 Stitch 사용한 후기
[AI_개발시작04] 세션유지하기
작업하다가 네트워크 변경되면, 가끔 세션이 끊어짐.ㅠㅠ
나는 레거시 개발자 였다.
[AI 개발시작_000] AI 개발에 대한 의견 (가이드라인)
AI 개발에 대한 의견 및 생각
[AI 개발시작_003] 다국어 기능 만들기
다국어 기능을 만드는 방법
[AI 개발시작_001] 클로드 코드 시작
ai 클로드 코드로 이 블로그 만들기 시작
[AI 개발시작_002] 이미지 삽입 추가
이미지 삽입기능 추가
40대 다시 개발 시작
이 사이트를 만든 이유