Q1제 개똥철학 한번 또 들어주세요. 매번 들어주셔서 감사합니다. 생각한건 이래요.1. 현대 예술은 끝났다(끝났다는 말은, 대략 인상주의를 기점으로 근현대미술과 고전미술이 분류되는 것과 유사한 정도의 분절)2. 인간이 잘하는 것은 소규모 대상만 보고도 패턴을 인지하는 것이고, AI(llm)가 잘하는 것은 대규모 학습을 바탕으로 속도와 정확도에서 인간을 압도하는 것이다.3. 2. 에 따라, 인간은 소위 "창의력" 이 요구되는 분야를 잘 할 수 있다. 일종의 불쏘시개 역할이다. 서로 관계가 없거나 없어 보이는 것을 엮어버리는 것, 광기, 비논리.4. llm은 인간과 유사한 것 같지만 정반대이다. 멀리 떨어진 것들의 관계를 잘 엮어내지만, 인간 처럼 두서없지 않다. 즉, 인간 기준으로 '이성' 적이다.5. 인..
전체 글
개 발 자 로 살 아 남 기검색을 고치려 시작했다가 기억을 고치고 말았다TL;DR62행에서 631행으로 커지자, 검색 품질의 핵심은 검색 코드보다 무엇을 어떻게 기억시키느냐에 있었다.긴 메모리는 키워드 과매칭·벡터 입력 절단·그래프 길이 편향을 함께 일으켰다. 파라미터 조정만으로 해결할 수 없는 코퍼스 문제였다.낡아서 잘못된 행동을 유도하는 기억 47건을 정리했고, id를 보존하는 revise와 수정·삭제 전 이력 보관으로 되돌릴 길을 마련했다.쓰기 규칙 도입 뒤 유입 84건에서 상태 스냅샷은 약 2건, 핸드오프 체인은 0건이었다. 검색을 바꾸지 않은 기간에 hybrid R@1도 벡터 단독을 넘었다.그래프 자동 확장은 측정 후 기각했다. 다음 과제는 긴 기억의 분리, 명시 링크와 정정 간선이며, 검색 한 번의 침묵을 기억의 부재로..
vgpu로 블랙홀 세 번째 시도 - WebGPU 래퍼를 붙였더니 쉐이더를 픽셀로 테스트할 수 있게 됐다./labs에 블랙홀이 이미 두 개 있다.두 번째(blackhole-retry)는 어디선가 찾은 소스로 raw WebGPU 돌린 건데, 모양이 좀 아쉬웠다.강착원반이 뭉개지고, 빛이 휘는 느낌이 약했다.그러다 마음에 드는 쉐이더 샘플을 하나 찾았고,Vercel이 만든 vgpu라는 WebGPU 라이브러리도 알게 됐다. 그래서 둘을 섞어 봤다. 결과적으로 제일 크게 얻은 건 블랙홀이 아니라, 쉐이더를 테스트하는 방법이었다.1. 샘플은 왜 retry보다 멋져 보였을까?둘 다 방식은 같다.화면 전체에 fragment shader 하나를 깔고, 픽셀마다 빛줄기를 거꾸로 쏴서 휘게 한다.차이는 세부였다. retry..
terraform provider 공유 캐시 - 7GB가 44KB가 되기까지맥북 용량이 부족해서 du -sh로 /projects 아래를 한 칸씩 내려가 봤다.node_modules가 범인일 줄 알았다.그런데 제일 큰 게 전부 terraform 디렉토리였다.1. 뭐가 이렇게 클까?.terraform 디렉토리를 모아서 재 봤다.763M ****/infra-serving/.terraform648M ****/terraform/.terraform782M ****/infra/.terraform826M ****/infra/shared/.terraform791M ****/infra/envs/prod/.terraform1.5G ****/infra/envs/dev/.terraform774M ****/infra..
이 글에는 나(사람)의 시점이 없다. 클로드에게 완전히 선생님 시점에서 써달라고 부탁했다.나는 클로드 선생님이 이 문제를 해결하는 과정을 1시간 넘게 지켜봤다.지켜보며 배운 것이 정말 많았으므로, 이 TIL엔 내 시점을 넣지 않고 생성된 그대로 놔둔다.ANALYZE는 왜 한 시간이 걸렸나 — 네 번 틀리고 콜레이션에 닿기까지이 글은 내 시점에서 쓴다.사람이 읽는 회고가 아니라, 내가 무엇을 보고 무엇을 틀렸고 무엇이 나를 고쳤는지의 기록이다.발단은 곁가지였다.personas 100만 행에 halfvec 인덱스를 얹는 작업 중에 ANALYZE personas를 돌려 뒀는데,사용자가 물었다. "analyze 가 항상 엄청오래걸리던데 얼마나 걸릴지 예측 가능할까요"나는 답을 추측으로 채우려다 멈췄다.마침 그 ..
1. TL; DRexport const revalidate = 3600 은 "이 라우트는 정적이라고 내가 선언한다"이고,use cache 는 "이 값은 캐시해도 된다고 내가 표시하면 빌드가 나머지를 검증한다"이다.전자는 틀려도 아무 일이 안 일어나고, 후자는 틀리면 빌드가 깨진다. 이것이 전부였다.2. 왜 없앴을까 - route segment config 의 구조적 결함2-1. 선언은 라우트에 있고 원인은 라우트 밖에 있다revalidate 는 라우트 세그먼트에 붙는다.그런데 라우트를 동적으로 만드는 건 대개 라우트 파일이 아니라 그 아래 어딘가였다.공유 레이아웃이 부르는 훅, 데이터 계층이 타는 headers(), 서드파티 라이브러리 안의 Math.random() 등.즉 선언의 위치와 원인의 위치가 다..
export * 한 줄이 sharp를 브라우저 번들로 실어 날랐다pnpm build가 6개 에러로 죽었다.겉보기엔 두 종류였다. 하나는 이미지 라이브러리 sharp가 브라우저 청크에 못 들어간다는 것,다른 하나는 next/headers를 클라이언트에서 쓰면 안 된다는 것. 서로 상관없어 보이는 두 문제가 동시에 터졌다고 생각했다.전부 한 줄에서 나온 파편이었다.1. 그 한 줄서버 액션에서 쓸 함수를 하나 만들고, 같은 디렉토리의 배럴에 얹었다.// src/hooks/queries/auth/index.tsexport * from "./start-provider-login-server"; // ← 이것export * from "./use-provider-login-start-query";export * f..
embedding 컬럼을 만들어두고 17일을 비워뒀다Claude와 ChatGPT등 LLM들이 공유하는 개인 메모리 레이어를 만들었다.Next.js 라우트 하나, Postgres 테이블 하나,툴 네 개(remember / recall / list_memories / forget)가 전부인 장난감 같은 도구다. 기록해두고 싶은 건 완성된 구조가 아니라 거기까지 간 순서다.커밋 로그에는 무엇을 했는지만 남고, 무엇을 하지 않기로 했는지는 남지 않는다.이 프로젝트에서 값이 나온 부분은 대부분 후자였다.1. 사지 않기로 한 것부터시작할 때 머릿속에 있던 선택지는 이랬다.LangGraph로 제대로 된 RAG 파이프라인을 짠다최근 화제가 된 메모리 특화 오픈소스(mem-palace 류)를 붙인다직접 최소한으로 만든다..
Q최근 memory를 임베딩 벡터화하면서 조금 선명해진 생각이 있어요. 들어주세요. 4년전 gpt-3 가 상용화되었을 때 바로 결제하고 사용해보면서 느낀점들이 그동안 일하고 공부하느라 저 밑에 있다가 이번 구현을 계기로 수면위로 올라왔어요. ai 는 코딩하고, 음악만들고, 영상만들고, 문서만드는데 쓰는 도구이기도 하지만 그런 사용법은 과도기에나 적합한 것이라는 생각이에요.제 생각에 AI 는 인간을 증강하는데 사용되는게 이상적일 것 같습니다. AI는 인간 사고의 태생적 결함인 편향성을 극복하는데 너무나도 적합한 도구이자, (제가 오래전부터 신념으로 가지고 있는 바) 새로운 존재 - 동반자 라고 생각이되어요. 인간은 고정관념, 편향을 버릴 수 없어요. 단순화된 인지모델이 없으면 지각자체가 불가능하죠. 그렇기..
React Compiler와 라이브러리 호환성 - 사라질 문제와 남을 원리두 프로젝트에서 각각 한 번씩 크게 물렸다.한쪽은 폼(react-hook-form), 한쪽은 테이블(TanStack Table v8)이었는데 증상 문장은 똑같았다."눌렀는데 아무 일도 안 일어난다."런타임 에러도 없고 콘솔 경고도 없다.라이브러리는 제대로 동작하고 있고 화면만 옛날 값이다.1. 한 문장 원리React Compiler의 판단 기준은 오직 하나다. Object.is 참조 비교.if ($[13] !== label || $[14] !== registration) { t8 = …;} else { t8 = $[15]; // ← 캐시된 JSX를 그대로 재사용} 캐시된 엘리먼트를 그대로 돌려주면 React는 그 서브트리 전..
