All Posts

Thoughts, learnings, and snippets from the journey back to dev.

한국어는 생각보다 라는 말을 많이 한다.

생각보다라는 말을 많이 쓰는 한국사람들...

#일상다반사

구글 플레이 프로덕션 승인 완료

구글플레이 프로덕션 승인 완료

#구글플레이#앱등록

앱 개념어를 바꿨다 — Folder에서 Chain으로, 전면 리네이밍 작업기

ChainPlay 앱에서 Folder 개념을 Chain으로 전면 리네이밍하면서 겪은 과정과 TypeScript 타입 주도 리팩토링 방법

#React Native#TypeScript#리팩토링#ChainPlay

머지한 피처 브랜치, 왜 지워야 할까? — 로컬·원격 삭제 방법 정리

머지 후 피처 브랜치를 삭제해야 하는 이유와 로컬·원격 브랜치 삭제 명령어를 정리

#git#branch#협업#버전관리

GitHub REST API Rate Limit 때문에 블로그 글 목록이 사라졌다

Next.js 블로그에서 GitHub API Rate Limit을 초과해 글 목록이 사라진 문제를 GraphQL API로 해결한 과정

#GitHub API#GraphQL#Next.js#트러블슈팅

구글 플레이 콘솔 — 비공개 테스트 후 프로덕션 등록하기

비공개 테스트 14일 완료 후 프로덕션 액세스 신청까지 채워야 하는 항목과 실제 답변 정리

#Google Play Console#앱 출시#비공개 테스트

구글 플레이 비공개 테스트, 자주 업데이트할수록 승인이 빨라진다

Tilt 게임 버전업을 하면서 느낀 것 — 비공개 테스트 중에는 업데이트 빈도가 심사 통과에 직접 영향을 준다

#Android#GooglePlay#비공개테스트#앱출시#게임개발

Android 빌드 파일 정리하는 법 — 디스크 수 GB를 한 방에

안드로이드 프로젝트 빌드 파일이 디스크를 잡아먹을 때, 안전하게 정리하는 방법 총정리

#Android#Gradle#개발환경#디스크관리

Next.js 다국어 블로그 SEO — Google이 /ko를 무시하는 이유와 두 가지 해결법

Google Search Console 중복 페이지 오류의 원인인 x-default hreflang 누락과 isFallback noindex 처리 방법

#Next.js#SEO#next-intl#hreflang

Supabase Free 사용 제한

Supabase 무료 사용 제한 내용

#Supabase

에이전트 활용 방법 및 생성

AI 에이전트 블로그에서 활용하기

#AI Agent#Claude Code

[정보] 모바일 신분증을 활용한 블록체인 & AI 해커톤

모바일 신분증을 활용한 블록체인 & AI 해커톤 지원할까?

#Hackathon#AI#BlockChain

Next.js + next-intl, /ko/ 리디렉션 오류와 proxy.ts 충돌 삽질기

Google Search Console 리디렉션 오류를 잡으려다 빌드 에러까지 만난 과정과 proxy.ts 구조 이해

#Next.js#next-intl#SEO#middleware

Ollama 사용후기 (각 모델별 사용 느낌)

각 모델별 사용후기 — DeepSeek, EXAONE, QWEN 비교

#Ollama#AI#로컬 AI#DeepSeek#EXAONE#Qwen

Ollama 설치 및 로컬 AI 시작하기

로컬 AI 사용을 위한 Ollama 설치와 모델 선택 가이드

#Ollama#AI#로컬 AI#macOS

블로그 포스트 목록에서 "1분 읽기" 지운 이유

읽기 시간 표시가 초기 블로그에서 오히려 역효과가 나는 이유와 Next.js 컴포넌트에서 제거하는 방법

#Next.js#UI#블로그#React

Google이 내 블로그 예시 코드를 링크로 크롤링한 날

Search Console 404 오류를 추적했더니 포스트 본문의 코드 예시 파일명을 Google이 실제 URL로 인식한 것이었다 — next.config.ts redirects로 해결

#NextJS#SEO#GoogleSearchConsole#Debugging

Next.js 다국어 블로그에서 canonical 빠뜨리면 생기는 일

Google Search Console에서 "중복 페이지, Google에서 사용자와 다른 표준을 선택함" 오류가 뜬 이유와 next-intl 환경에서 canonical 설정하는 방법

#NextJS#SEO#next-intl#GoogleSearchConsole

Next.js 페이지 이동할 때마다 스크롤 애니메이션이 생기는 이유

뒤로 가기 버튼과 scroll-behavior smooth가 얽혀서 만든 스크롤 점프 버그 두 개를 연속으로 잡은 과정

#NextJS#AppRouter#Debugging#UX#CSS

GitHub에 AAB 올렸다가 용량 경고 받은 후 — 빌드 파일 로컬 버전관리로 전환하기

Android 릴리즈 빌드 파일(AAB/APK)을 GitHub에 올리면 안 되는 이유와, 로컬 폴더로 버전 관리하는 방법

#Android#AAB#GitHub#Git#ReactNative

React Native(Expo) 앱에 한/영 다국어 지원 추가하기 — locale 감지 삽질기

expo-localization부터 NativeModules, Intl API까지 세 가지 방법을 직접 써보고 최종 해답을 찾은 과정

#React Native#Expo#i18n#Android

스크린샷 50장이 블로그를 통째로 날렸다 — GitHub API 한도 초과 디버깅

이미지 50개를 한 번에 커밋했더니 Vercel 빌드가 50번 돌면서 GitHub API 요청이 한도를 꽉 채운 이야기

#Vercel#GitHub#NextJS#Debugging

구글 플레이스토어 앱 등록 A-Z — 스크린샷으로 전 과정 정리

앱 생성부터 비공개 테스트 통과까지, 구글 플레이 콘솔의 전 과정을 스크린샷으로 정리한 실전 가이드

#GooglePlay#Android#AppStore#앱출시

개인정보처리방침의 어린이 조항과 Play Store 전체 이용가는 별개다

개인정보처리방침에 "13세 미만 어린이 대상 아님" 문구를 넣으면 13세 이상 등급을 줘야 하는 게 아닌지 헷갈렸던 경험 정리

#Google Play#앱출시#개인정보처리방침#COPPA#콘텐츠등급

[에세이] 학습이 되어 간다

블로그 시작 7주 차, 이것저것 만들다 보니 어느새 AI 개발 공부에 빠져 있었다

#일상다반사

Expo 앱을 Play Store에 올리기까지 — AAB 빌드부터 스토어 자산 제작까지

React Native(Expo) 게임 앱을 처음 Google Play Store에 출시하면서 겪은 빌드, 자산 제작, 버그 수정 전 과정 정리

#Expo#ReactNative#Android#GooglePlayStore#Supabase

Don't 하나가 Vercel 빌드를 박살냈다 — YAML frontmatter 함정

로컬 빌드는 멀쩡한데 Vercel만 실패할 때, 원인은 영어 축약어가 들어간 YAML title 한 줄이었다

#Vercel#YAML#NextJS#Debugging#GitHubActions

구글 애드센스 거절당했다 — 콘텐츠 없는 도구 사이트의 현실

애드센스 심사에서 "가치 없는 콘텐츠"로 거절당한 뒤, 도구 사이트에 콘텐츠를 채워 재신청한 과정

#AdSense#React#i18n#SEO#사이드프로젝트

WiFi QR 코드 생성기를 만들었다 — AI로 처음 완성한 사이드 프로젝트

손님에게 WiFi 비밀번호 알려주기가 불편해서 만든 QR 코드 생성기 — React + i18n + 인쇄까지

#React#TypeScript#i18n#사이드프로젝트#qrcode

YouTube Premium 없이 쓰는 나만의 플레이리스트 앱 — React Native(Expo)로 직접 만들기

Expo SDK 54 + TypeScript로 유튜브 플레이리스트 앱을 처음부터 만들면서 겪은 삽질과 해결법

#React Native#Expo#TypeScript#YouTube#Android

안드로이드 앱 직접 설치하는 방법들 — APK부터 USB 디버깅까지

구글 플레이 없이 안드로이드 앱을 설치하는 방법들과 ADB USB 디버깅으로 바로 설치하는 법까지 한 번에 정리

#Android#ADB#React Native#Expo#앱개발

GitHub Actions 자동 커밋이 잔디에 안 심어지는 이유 — KST timezone 설정으로 해결

GitHub Actions가 자동으로 커밋해도 잔디에 반영이 안 되는 timezone 문제. TZ=Asia/Seoul 한 줄로 해결하는 방법을 정리했다.

#GitHub#GitHubActions#잔디#자동화

React Native YouTube 앱 만들면서 삽질한 것들 — Android WebView 재생 버그부터 키보드 이슈까지

Android WebView 보안 정책, KeyboardAvoidingView 함정, 자동재생 타이밍 버그까지 — YT Player 앱 개선 과정에서 만난 문제와 해결법을 정리했다

#ReactNative#Expo#Android#WebView#버그수정#YouTube

React Native 앱 Play Store 첫 출시 — 빌드부터 소개글 카피라이팅까지

AAB 빌드 자동화, versionCode 오류 해결, 스토어 소개글 작성, Play Console 권장 조치 분석까지 첫 출시에서 겪은 것들 정리

#Android#Play Store#React Native#Expo#ASO

Claude Code, 대화가 길어질수록 느려지는 이유와 /clear 활용법

Claude Code에서 context가 쌓이면 왜 느려지고 비싸지는지, /clear로 어떻게 해결하는지 실용적으로 정리

#Claude Code#context window#토큰 관리#AI 개발 도구

구글이 내 블로그를 무시했던 이유 — Next.js SEO 버그 2가지 수정기

Google Search Console에서 색인 누락을 발견하고 canonical 태그와 footer 404 링크를 수정한 과정

#Next.js#SEO#canonical#i18n#Google Search Console

Obsidian Git 모바일 설정 — 안드로이드에서 GitHub 동기화하기

안드로이드에서 Obsidian Git 플러그인으로 GitHub 레포를 클론하고 자동 동기화까지 설정하는 방법

#Obsidian#Git#Android#GitHub#모바일

Obsidian Git 플러그인 설정하다가 xcrun 에러 만난 이야기

Obsidian을 GitHub에 연결하고 Git 플러그인을 설정하는 과정에서 만난 xcrun 에러 해결법

#Obsidian#Git#macOS#GitHub#xcode

Supabase service role로 멀티 유저 앱 만들다 터진 데이터 격리 버그들

RLS 없이 service role 클라이언트만 쓸 때 빠지기 쉬운 데이터 격리 함정 4가지와 해결법

#Supabase#Next.js#PostgreSQL#PostgREST#멀티유저

Android 백그라운드 재생이 왜 이렇게 어렵냐 — Doze, WakeLock, Foreground Service 삽질기

카세트 뮤직 플레이어 앱에서 화면 꺼지면 트랙 전환이 안 되는 버그를 Foreground Service + PARTIAL_WAKE_LOCK으로 해결한 과정

#Android#React Native#Expo#백그라운드 재생#WakeLock

[JobRadar 7편] Google OAuth "Database error" — Supabase 트리거 버그 찾기까지

Google 로그인이 "Database error saving new user"로 계속 실패하는 이유를 찾아 새 프로젝트까지 팠다가, 결국 트리거 함수 한 줄로 해결한 삽질기

#JobRadar#Supabase#OAuth#디버깅#사이드프로젝트

[JobRadar 6편] 커버레터 완성, UX 개선, 그리고 로그인 붙이기

커버레터 저장/다운로드/AI재검토, 메모·상태 관리, JD 직접 입력, Supabase Auth까지 하루에 몰아서 만든 이야기

#JobRadar#Supabase#NextJS#TypeScript#사이드프로젝트

Claude Code로 블로그 운영하는 법 — 작성부터 예약 배포까지 자동화

포스트 작성, 번역, 등록, 예약 배포까지 Claude Code와 함께 블로그를 운영하는 전체 워크플로우를 정리했다.

#ClaudeCode#블로그#자동화

Claude 콘솔 크레딧 구매 버튼이 비활성화될 때 — 결제 안 되는 원인과 해결법

Claude Console에서 결제 정보를 다 입력해도 구매 버튼이 활성화되지 않는 문제. 원인은 언어 전환 시 도시 선택값이 초기화되는 버그였다.

#Claude#ClaudeConsole#트러블슈팅

JobRadar 개발기 5편: 자동화의 환상을 버리고 현실적인 파이프라인을 만들었다

Playwright 자동 스크래핑을 포기하고, URL 붙여넣기 → JD 스크래핑 → AI 매칭 → 커버레터 생성까지 이어지는 on-demand 파이프라인을 구축한 과정.

#JobRadar#NextJS#Playwright#cheerio#AI#사이드프로젝트

JobRadar 4편: Playwright 버리고 cheerio로 갈아탄 이유 — 4일차 방향 전환기

3일 동안 Playwright와 씨름하다 포기했다. 4일차에 접어들어 방향을 완전히 바꿨다. 자동 수집 대신 URL 기반 on-demand 스크래핑, cheerio + JSON-LD 구현까지.

#JobRadar#cheerio#스크래핑#Vercel

Claude 고객센터에 이메일 보내는 법 — AI 챗봇 말고 직접 연락하기

Claude support 챗봇이 AI로만 응답할 때, 실제 이메일 티켓을 만들어 사람에게 연락하는 방법을 단계별로 정리했다.

#Claude#고객지원

Claude Code 커스텀 에이전트 만들기 — blog-auto-draft로 배우는 실전 세팅

반복 작업을 자동화하는 Claude Code 커스텀 에이전트 만드는 법. blog-auto-draft 예시로 파일 구조부터 호출까지 단계별로 정리합니다.

#ClaudeCode#Agent#자동화

[클로드 콘솔] 결제 안됨. 조직 삭제하면 안됨!!!

Claude Console Deletion of organization

JobRadar 3편: Vercel에 Playwright 올렸더니 터졌다 — @sparticuz/chromium 삽질기

로컬에서 잘 되던 스크래퍼가 Vercel에만 올리면 터지는 이유. @sparticuz/chromium 도입부터 ETXTBSY, 60초 타임아웃 대응까지 삽질 전 과정.

#JobRadar#Playwright#Vercel#서버리스

Claude Code에서 MCP로 Gemini 연결하기 — 토큰 걱정 없이 두 AI 함께 쓰기

Claude Code 안에서 Gemini를 MCP 툴로 연결해 토큰 부담 없이 두 AI를 상황에 맞게 나눠 쓰는 방법을 단계별로 정리합니다.

#ClaudeCode#MCP#Gemini#AI

[JobRadar 2편] Supabase 설계 + Playwright 스크래퍼 — 삽질 기록

JobRadar 2편. Supabase 멀티유저 스키마 설계부터 Indeed · Seek Playwright 스크래퍼 구현까지. Glassdoor 차단, ETXTBSY, 모듈 누락까지 삽질 과정 전부 정리.

#JobRadar#Playwright#Supabase#스크래핑

Claude Code Hooks — "이 작업 끝나면 자동으로 해줘"를 설정하는 법

파일 저장 시 자동 포맷, 응답 완료 알림, 승인 요청 알림까지 — Claude Code Hooks로 반복 작업을 자동화하는 방법을 단계별로 정리했다.

#ClaudeCode#Hooks#자동화

[JobRadar 1편] 프로젝트 세팅 — 내 취업을 위해 AI 툴을 직접 만들었다

채용공고 자동 수집부터 AI 매칭까지 — JobRadar 사이드 프로젝트 1편. Next.js + Supabase + Vercel 초기 세팅을 단계별로 정리했다.

#JobRadar#NextJS#Vercel#사이드프로젝트

앱 만들었는데 어떻게 올리지? 구글 플레이 콘솔 등록 처음부터 끝까지

구글 플레이 콘솔에 앱을 처음 등록하는 전체 과정을 단계별로 정리합니다. 개발자 계정 등록부터 AAB 업로드, 심사 제출까지.

#Android#Google Play#앱 배포#React Native

[앱 출시] 테스터 12명 모으는 법 — Google Groups를 써야 하는 이유

Google Play 테스트 트랙 등록 시 테스터 12명을 효율적으로 모으는 방법. 이메일 수동 등록 대신 Google Groups를 써야 하는 이유와 순서 정리.

#앱스토어등록#앱테스터#GooglePlay

DeepL API 사용법 — Next.js에서 번역 기능 붙이기

DeepL API Free 플랜으로 Next.js 앱에 번역 기능을 붙이는 방법을 단계별로 정리합니다. API 키 발급부터 서버 라우트 구현까지.

#DeepL#번역 API#Next.js#API 연동

GitHub Actions로 블로그 포스트 예약 배포하기

GitHub Actions 워크플로우를 만들어 특정 날짜에 블로그 포스트가 자동으로 발행되도록 설정하는 방법을 실제 구현 경험 기반으로 설명합니다.

#GitHub Actions#자동화#CI/CD#Vercel#블로그

2026년 기준 Google Play 콘솔(개발자 계정) 등록 방법

Google Play 콘솔 등록 방법

#Google Play 콘솔

번역 API 3종 비교 — MyMemory vs DeepL vs Claude, 뭘 써야 할까?

블로그 어드민에 번역 기능을 붙이면서 MyMemory, DeepL, Claude API를 직접 써본 경험을 비교 정리합니다.

#번역 API#DeepL#MyMemory#Claude API#Next.js

React SPA에서 페이지별 title과 meta 태그 바꾸기 — react-helmet-async

SEO작업 중 react-helmet에 대한 설명

#React#SEO#react-helmet-async#SPA

앱 테스트시 빠르게 폰에서 하는법 (무선디버깅 사용법)

안드로이드 무선디버깅 하는법

#android

[클로드 코드] 스킬(Skill) 만들고 사용하는 법 — 나만의 슬래시 커맨드

Claude Code에서 반복 작업을 자동화하는 스킬(Skill)을 직접 만들고 사용하는 방법을 실습과 함께 정리합니다.

#Claude Code#Skill#자동화#슬래시 커맨드

내 사이트, 구글에서 검색되게 만들기 — Next.js SEO 세팅법

Next.js App Router 기반 블로그에 robots.txt, sitemap.xml, Open Graph, JSON-LD를 추가해서 구글에 노출되는 방법을 실제 작업 기반으로 정리합니다.

#SEO#Next.js#Google Search Console#Open Graph

[앱] 카세트 플레이어 앱 개발중_02

카세트 테이프 플레이어 앱 개발 일지 02

#React Native#카세트앱

[앱] 카세트 플레이어 앱 개발중_01

카세트 테이프 플레이어 앱 개발 일지 01

#React Native#카세트앱

Replit vs Claude Code 초보자에게 좋은 플랫폼은?

Replit과 ClaudeCode를 비교 사용해본 후기.

#Replit#ClaudeCode

데이터 근친교배

AI에 의지하는 인간이 작성하는 데이터가 더이상 늘지 않을때....

우리는 도서관에 책 표지를 보러 간다.

#일상#Essay

[클로드 코드] 효율적으로 빠르게 배울수 있는 클로드코드 스터디 가이드라인

클로드 코드 공부할 방향 및 기본 공부 순서

#Claude Code Study#Study Guideline

[AI] Stitch 사용후기

디자인AI 인 Stitch 사용한 후기

#Stitch#디자인시스템

[AI_개발시작04] 세션유지하기

작업하다가 네트워크 변경되면, 가끔 세션이 끊어짐.ㅠㅠ

#AI개발시작#세션유지

나는 레거시 개발자 였다.

#AI개발#레거시

[AI 개발시작_000] AI 개발에 대한 의견 (가이드라인)

AI 개발에 대한 의견 및 생각

#AI개발시작

[AI 개발시작_003] 다국어 기능 만들기

다국어 기능을 만드는 방법

#AI개발시작#다국어 기능

[AI 개발시작_001] 클로드 코드 시작

ai 클로드 코드로 이 블로그 만들기 시작

#클로드 코드 시작

[AI 개발시작_002] 이미지 삽입 추가

이미지 삽입기능 추가

#블로그 이미지 추가.ai

40대 다시 개발 시작

이 사이트를 만든 이유

#BackToDev