Threads API로 내 게시물 댓글 151개 수집하기 — OAuth 토큰부터 pagination까지

커뮤니티 모집글을 Threads에 올려서 댓글이 잔뜩 달렸다. 참가자에게 DM으로 설문 링크를 돌리려면 댓글 작성자 @handle 목록이 필요한데, 수동으로 스크롤하며 복사하는 건 100개 넘어가면 현실적이지 않다. Meta가 2024년에 공식 Threads API를 열었다는 건 알고 있었지만 실제로 써본 적은 없었다. “Instagram Graph API랑 뭔가 다른 것 같은데 뭐가 다른지 모르겠다” 상태에서 시작해, 삽질하면서 151개 댓글 / 151명 유니크 작성자를 추출하기까지의 과정을 정리한다. 공식 문서에는 흩어져 있고, 커뮤니티 자료는 대부분 게시 자동화(content publish) 쪽에 치중돼 있어서 “읽기(read replies)“만 필요한 케이스를 한 페이지에 모은 게 없었다. ...

2026-04-20 09:00 · 8분 소요 · Seunghan

Git 브랜치 정리 — worktree 에러 포함 완전 클린업 가이드

프로젝트를 어느 정도 운영하다 보면 브랜치가 쌓인다. feature 브랜치, claude가 만든 자동 브랜치, dependabot 브랜치까지 정리 안 하면 git branch -a 결과가 화면 가득 찬다. 오늘 작업하다 머지된 브랜치들 싹 정리했는데, feature/link-in-bio 삭제하려고 하니까 이런 에러가 났다. error: cannot delete branch 'feature/link-in-bio' used by worktree at '/path/to/.worktrees/link-in-bio' 처음엔 그냥 -D 옵션으로 강제 삭제하면 되지 않나 싶었는데, 그게 올바른 방법이 아니다. worktree를 먼저 제거하는 게 맞다. PR이 이미 머지됐는지 확인하는 법 브랜치 정리 전에 먼저 해야 할 게 있다. 각 브랜치가 main에 이미 포함됐는지 확인하는 것. ...

2026-03-31 00:00 · 5분 소요 · Seunghan

Godot 4 미니게임 모드 전환 — 상태 저장/복원 패턴과 _process() 함정

다마고치 게임에 미니게임 3종을 넣었다. 게임 자체보다 어려웠던 건 게임 모드 전환이다. 미니게임을 시작하면 씬이 줌아웃되고 캐릭터가 축소되고 이동 범위가 바뀌고 배경이 교체된다. 게임이 끝나면 이 모든 게 원래대로 돌아와야 한다. 하나라도 복원을 빠뜨리면 버그가 된다. 캐릭터가 작은 채로 남아있거나, 배경이 확장된 채로 유지되거나, 이동 범위가 좁아진 채로 고정된다. 유저는 “게임이 망가졌다"고 느낀다. 이 글에서는 미니게임 모드 전환 시 상태 관리 패턴과, 실제로 터진 버그들의 원인과 해결을 정리한다. 문제의 본질: 임시 상태 vs 영구 상태 미니게임 모드는 임시 상태다. 잠깐 동안만 다른 설정을 쓰고, 끝나면 원래대로 돌아간다. 이게 간단해 보이는데 실제로는 복잡하다. ...

2026-03-26 00:00 · 7분 소요 · Seunghan

git log -S로 UI가 언제 바뀌었는지 추적하기 — pickaxe, blame, show 실전 조합

사이드바 타이틀이 이상하다 Rails + Hotwire Native 기반 웹앱을 운영하고 있다. 어느 날 사이드바 상단에 원래 표시되던 앱 타이틀 대신 “리서치·정보분석” 같은 팀 이름이 들어가 있는 걸 발견했다. 분명 예전에는 앱 이름이 나왔는데 언제 바뀐 건지 모르겠다. 이런 상황, 개발하다 보면 꽤 자주 겪는다. “이거 원래 이랬나?” 싶은 순간이 오면, 코드를 뒤지기 전에 Git 히스토리를 먼저 파보는 게 훨씬 빠르다. 이번에 실제로 git log -S, git show, git diff를 조합해서 원인 커밋을 찾아낸 과정을 정리했다. ...

2026-03-25 00:00 · 6분 소요 · Seunghan

Godot 4 Tween 실전 레시피 — 미니게임에서 써먹은 12가지 애니메이션 패턴

Godot 4에서 Tween API가 완전히 바뀌었다. Godot 3에서 노드 기반이던 게 빌더 패턴으로 재설계됐다. 코드는 깔끔해졌는데 API 경계가 헷갈린다. set_loops()를 PropertyTweener에 호출해서 에러 나고, set_parallel()을 tween_property() 뒤에 붙여서 동작 안 하고. 다마고치 미니게임을 만들면서 12가지 Tween 패턴을 정리했다. 삽질 한 번 할 때마다 하나씩 추가된 목록이다. 기본: Tween vs PropertyTweener 이게 모든 혼란의 원흉이다. create_tween()은 Tween을 반환하고, tween_property()는 PropertyTweener를 반환한다. 두 클래스의 메서드가 다르다. var tween: Tween = create_tween() # Tween 반환 var pt: PropertyTweener = tween.tween_property(...) # PropertyTweener 반환 메서드 Tween PropertyTweener set_loops() ✅ ❌ set_parallel() ✅ ❌ set_speed_scale() ✅ ❌ set_trans() ✅ ✅ set_ease() ✅ ✅ as_relative() ❌ ✅ set_delay() ❌ ✅ from() ❌ ✅ from_current() ❌ ✅ 체이닝할 때 반환 타입을 항상 의식해야 한다. 이걸 모르면 컴파일은 되는데 런타임에 터진다. ...

2026-03-25 00:00 · 6분 소요 · Seunghan

2026 반값여행 신청방법 완전 정리 — 쏘카 55%·코레일 100% 환급·청년 14만원·봄 국내여행 지원금

2026년 봄, 국내 여행 비용을 절반 이하로 줄일 수 있는 정부 지원이 한꺼번에 쏟아진다. ‘촌캉스’(농촌+바캉스) 트렌드와 맞물려 인구감소 지역으로 떠나는 봄 여행이 어느 때보다 경제적인 선택이 됐다. 문화체육관광부의 반값여행·반값휴가·여행가는봄에 행정안전부가 쏘카·코레일과 체결한 MOU 할인까지 더하면 실질 여행 비용을 크게 낮출 수 있는 조합이 만들어진다. 각 제도별 대상, 금액, 신청 방법을 순서대로 정리했다. 반값여행 (지역사랑 휴가지원) — 여행비 최대 50~70% 환급 어떤 제도인가 농어촌 인구감소 지역으로 여행하면 사용한 경비의 50%를 모바일 지역사랑상품권으로 돌려주는 제도다. 행안부가 지정한 인구감소지역 89개 중 도시자치구를 제외한 84개 지역이 대상이고, 2026년 상반기 시범사업으로 선정된 16곳이 4월부터 운영된다. ...

2026-03-24 00:00 · 7분 소요 · Seunghan

WarioWare에서 훔친 미니게임 설계 원칙 — Godot 4로 3종 구현까지

미니게임을 만들다 보면 욕심이 생긴다. 조작을 추가하고, 규칙을 복잡하게 만들고, 스코어 시스템을 정교하게 다듬고. 그런데 막상 플레이하면 재미없다. 5초 안에 “이게 뭐하는 게임이지?“가 파악이 안 되면 이미 실패다. 닌텐도 R&D1 팀이 2003년에 만든 WarioWare(미니게임천국)는 이 문제를 정면으로 해결한 게임이다. 5초짜리 게임 200개를 쏟아내면서도 하나하나가 직관적이다. 이 글에서는 WarioWare의 설계 원칙을 분석하고, 내 다마고치 프로젝트에 적용한 과정을 기록한다. WarioWare가 20년째 연구 대상인 이유 WarioWare 시리즈는 게임 디자인 수업에서 단골 교재다. “마이크로게임"이라는 장르를 사실상 창조했기 때문이다. ...

2026-03-24 00:00 · 7분 소요 · Seunghan

Godot 4 다마고치 미니게임 개발기 — 줌아웃 좌표계, Tween 루프, WarioWare 설계

다마고치 스타일 펫 게임을 Godot 4로 만들고 있다. 밥 주고, 쓰다듬고, 산책시키는 기본 기능은 어렵지 않았는데, 미니게임을 추가하면서 예상 못한 문제가 쏟아졌다. 똥 피하기 게임 하나 만드는데 좌표계 문제로 반나절을 날렸다. 이 글에서는 Godot 4의 Tween 루프 문법, 부모 노드 스케일 변경 시 자식 좌표 보정, 그리고 _process()에서 값이 매 프레임 덮어써지는 함정까지 실제로 겪은 삽질을 정리한다. Godot 4 Tween의 set_loops() 함정 에러 상황 똥이 하늘에서 떨어지면서 회전하는 애니메이션을 넣으려고 이렇게 작성했다: ...

2026-03-23 00:00 · 8분 소요 · Seunghan

Godot 4로 다마고치 만들기 — Unity 포기하고 전환한 이유와 macOS에서 겪은 좌표 지옥

Unity로 다마고치를 만들다가 멈췄다 올해 초에 AI 생성형 다마고치 프로젝트를 시작했다. 프롬프트를 입력하면 AI가 펫 이미지를 생성해주고, 밥 주고 씻기고 놀아주면서 키우는 방치형 게임이다. 처음에는 당연히 Unity를 선택했다. 2D 게임이니까 Unity면 충분하다고 생각했고, WebGL export로 모바일 웹뷰에 임베딩하면 크로스 플랫폼도 해결될 거라고 봤다. 문제는 바이브코딩이었다. Claude Code로 게임 로직을 짜는데, Unity의 .unity 씬 파일은 직렬화된 YAML에 GUID 참조가 가득하다. AI가 씬 구조를 읽고 이해하기가 사실상 불가능했다. C# 코드는 그나마 낫지만, Unity는 하나의 기능을 구현하는 패턴이 너무 다양하다. MonoBehaviour 싱글톤, ScriptableObject 이벤트, 의존성 주입, ECS — AI가 프로젝트에서 어떤 패턴을 쓰는지 먼저 파악해야 코드를 짤 수 있다. 이건 느리다. ...

2026-03-23 00:00 · 7분 소요 · Seunghan

Hugo 블로그 Google Search Console '크롤링됨 - 현재 색인이 생성되지 않음' 완벽 해결

어느 날 날아온 Google Search Console 경고 메일 블로그를 운영하다 보면 Google Search Console(이하 GSC)에서 메일이 날아올 때가 있다. 대부분은 “색인 생성이 완료되었습니다” 같은 좋은 소식이지만, 이번에는 달랐다. 크롤링됨 - 현재 색인이 생성되지 않음 유효성 검사 상태: 실패함 영향을 받은 페이지: 14개 14개 페이지가 Google에 의해 크롤링은 되었지만, 검색 결과에는 나타나지 않는 상태였다. 이전에 유효성 검사를 요청했지만 실패로 돌아왔다. 무엇이 문제인지, 어떻게 해결했는지 기록한다. ‘크롤링됨 - 현재 색인이 생성되지 않음’이란? Google의 페이지 색인 생성 과정은 크게 3단계로 나뉜다: ...

2026-03-23 00:00 · 9분 소요 · Seunghan

스마트폰으로 문 여는 시대, CSA '알리로(Aliro) 1.0' 표준 발표

열쇠가 사라진다 — CSA 알리로(Aliro) 1.0 공식 발표 2026년 2월 26일, 스마트홈 표준단체 **CSA(Connectivity Standards Alliance)**가 알리로(Aliro) 1.0 규격을 공식 발표했다. 스마트폰이나 스마트워치를 도어 리더기에 가까이 대거나, 심지어 손 하나 들지 않고 문 앞에 다가가는 것만으로 잠금이 해제되는 기술이다. 알리로(Aliro)란? 알리로는 디지털 출입 자격증명(credential)을 교환하는 통신 프로토콜 표준이다. 기기와 리더기 사이에서 “이 사람이 출입 권한이 있는가"를 판단하는 방식을 하나의 개방형 표준으로 통일한 것. 기존에는 브랜드마다 앱도 다르고, 안드로이드 폰으로는 애플 HomeKey가 안 되는 식의 파편화가 심각했다. 알리로는 이 문제를 해결한다. ...

2026-03-05 00:00 · 3분 소요 · Seunghan
Apple MacBook Neo

Apple MacBook Neo 완전 분석: 드디어 나온 59만원대 맥북

Apple이 2026년 3월 4일, 드디어 MacBook Neo를 공식 발표했다. 맥북 역사상 가장 낮은 시작 가격 $599(약 87만원). iPhone 칩셋(A18 Pro)을 맥북에 탑재한 전례 없는 시도다. 출시일은 2026년 3월 11일. 핵심 스펙 요약 항목 사양 칩셋 Apple A18 Pro CPU 6코어 (성능 2 + 효율 4) GPU 5코어 뉴럴 엔진 16코어 메모리 대역폭 60GB/s 메모리 8GB 통합 저장공간 256GB / 512GB 디스플레이 13인치 Liquid Retina, 2408×1506, 219ppi, 500nits, sRGB 배터리 36.5Wh · 영상 최대 16시간 · 웹 최대 11시간 충전 20W USB-C 포트 USB 3 (USB-C) + USB 2 (USB-C) + 3.5mm 무선 Wi-Fi 6E · Bluetooth 6 카메라 1080p FaceTime HD 무게 1.23kg 색상 Silver, Blush, Citrus, Indigo 가격 $599~ 출시일 2026년 3월 11일 디자인 & 컬러 ...

2026-03-04 00:00 · 4분 소요 · Seunghan
Project Docs Cleanup 2300 Files

프로젝트 문서 2,300개를 400개로 줄인 전수점검 기록

프로젝트를 1년 가까이 진행하다 보면 문서가 쌓인다. 기능 설계서, TODO, 디버깅 기록, 마이그레이션 계획서, 테스트 시나리오… 각각은 그 시점에 필요했지만, 시간이 지나면 노이즈가 된다. 어느 날 find docs -name "*.md" | wc -l을 쳤더니 2,352개가 나왔다. 현황 파악: 어디서 이렇게 쌓였나 find docs -name "*.md" | wc -l # 2352 # 디렉토리별 파일 수 find docs -maxdepth 1 -type d | while read d; do count=$(find "$d" -name "*.md" | wc -l) echo "$count $(basename $d)" done | sort -rn | head -15 결과: ...

2026-01-27 00:00 · 5분 소요 · Seunghan
Chrome Extension Oacx Iframe Korean Ime Fix

Chrome 확장 프로그램에서 iframe OACX 자동입력이 안 되는 문제 — 타이밍과 한글 IME

Chrome 확장 프로그램으로 정부 사이트 간편인증(OACX) 폼을 자동입력하는 기능을 만들었다. 대부분의 사이트에서 잘 동작하는데, 특정 대형 사이트에서 “이름 입력이 안 됩니다"라는 피드백이 들어왔다. 증상 간편인증 팝업이 열리면 이름, 생년월일, 휴대폰번호를 자동입력하는 확장 대부분의 정부 사이트(정부24, 건강보험 등)에서는 정상 동작 특정 사이트에서만 이름 필드가 비어있음 — 생년월일, 전화번호도 안 채워짐 조사: Playwright로 실제 DOM 구조 확인 사용자가 알려준 페이지를 Playwright MCP로 직접 열어서 확인했다. 1단계: 메인 페이지 스냅샷 메인 페이지에서 “간편인증” 버튼을 클릭하면 레이어 팝업 + iframe이 열린다. ...

2026-01-23 00:00 · 5분 소요 · Seunghan
개인정보처리방침 이용약관 면책조항 문의