전체 검색

글, 태그와 카테고리를 검색하고 바로 이동해요

전체 글

모든 글을 최신 순으로 한 번에 모아봐요.

전체 글
61

글 목록

카테고리 없음2026년 8월 27일여울 v0.1.0 공개 베타를 배포합니다브랜치와 여러 워크트리를 한곳에서 살펴보고, 변경 검토부터 커밋과 통합까지 이어가는 macOS Git GUI 여울의 첫 공개 베타입니다.2분 읽기
Git GUI2026년 8월 27일여울 v0.2.0 공개 베타 — 5주 만에 도구가 된 Git GUI여러 Git 저장소와 워크트리를 한 화면에서 다루는 여울 v0.2.0을 공개합니다. 첫 공개 빌드까지의 5주 기록과 최신 설치 안내를 함께 정리했어요.8분 읽기칼럼2026년 8월 14일지도가 없는 곳에서의 내비게이션목적지만 정확히 찍으면 AI가 데려다준다 — 저도 그렇게 생각했어요. 그런데 소프트웨어에는 지도가 없어요. 땅이 여행하면서 생기거든요. AI는 길 찾기를 해결한 게 아니라, 길을 그려보고 지워보는 비용을 낮춘 거예요.5분 읽기칼럼2026년 8월 13일외울 필요는 없는데, 겪을 필요는 있어요문법과 사용법은 이제 안 외워도 돼요. 그런데 “왜 그러면 안 되는지”를 아는 감각은 겪어야 생기더라고요. 그리고 제가 만든 시스템이 바로 그 겪을 기회를 없애고 있어요.7분 읽기칼럼2026년 8월 13일그 자리는 한 명이면 됩니다화면을 만드는 사람에서 화면을 만드는 시스템을 만드는 사람으로 옮겨왔어요. AI가 그 이동 비용을 무너뜨렸고요. 그런데 그 자리는 한 명이면 됩니다. 올라간 걸까요, 계단을 치운 걸까요.7분 읽기칼럼2026년 8월 13일일을 없앤 사람은 어떻게 평가받나프론트엔드가 두 명인데 한 명이면 됩니다. 제가 그렇게 만들었고요. 그런데 일을 없앤 사람을 평가하는 방법을, 우리 제도는 아직 갖고 있지 않아요.9분 읽기칼럼2026년 8월 7일아는 게 능력이던 시절이 끝났어요해결법을 아는 것 자체가 능력이던 시대가 저물고 있어요. 이미 알려진 해결법의 값이 0에 가까워질수록, 아직 정의되지 않은 문제를 발견하는 능력의 값은 올라가요. 그럼 지금까지 배운 건 버려야 할까요.9분 읽기
데이터 플랫폼2026년 8월 5일백엔드 개발자가 프론트 화면을 고치기 시작했다 — AI 개발 하네스"작업해줘" 한 마디면 지라 수집부터 구현·검증까지. 규칙을 기계에 옮겨놨더니 기여자가 프론트 개발자일 필요가 없어졌어요. 사람이 매번 하던 설명 워크플로우를 하네스에 녹인 이야기예요.9분 읽기
Git GUI2026년 7월 29일앱 안에 터미널을 넣고, 워크트리를 1급으로 올렸습니다워크트리를 쓸 때마다 터미널에서 cd를 다시 치고 있었어요. 기존 git 도구들이 워크트리를 제대로 안 다뤄주더라고요. 그래서 자리를 옮기면 도구가 따라오게 만들었습니다.7분 읽기Git GUI2026년 7월 29일충돌을 카드 한 장씩 고르게 만들기꺾쇠 기호가 잔뜩 박힌 파일을 처음 본 사람은 대개 겁을 먹어요. 그걸 "두 버전이 같은 곳을 다르게 고쳤어요, 어느 쪽을 쓸까요?"로 바꾼 이야기입니다.7분 읽기아키텍처2026년 7월 29일블로그 글에 일정표를 넣었는데, 블로그는 캘린더를 모릅니다블로그 글에 캘린더를 꽂고 싶었어요. 블로그가 캘린더 API를 부르면 반나절이면 끝나는데, 그러면 제품이 늘 때마다 배선이 제곱으로 늘어납니다. 그래서 저장소 대신 경계를 통일한 계약 이야기예요.7분 읽기아키텍처2026년 7월 29일가입부터 시키지 않는 캘린더 만들기일정 하나 안 적어본 사람한테 가입 화면부터 들이미는 게 이상했어요. 그래서 로그인 없이 다 되게 만들었는데, 그때부터 진짜 문제가 시작됐습니다. 저장 위치, 이전 규칙 다섯 개, 그리고 권한을 왜 따로 만들었는지까지.8분 읽기아키텍처2026년 7월 29일테마를 코드가 아니라 데이터로 만들기색만 바뀌는 건 테마가 아니라 팔레트더라고요. 글꼴도 형태도 컴포넌트 생김새도 바뀌게 만들면서, 사용자가 만든 테마에 자바스크립트 한 줄도 허용하지 않은 이야기예요.7분 읽기데이터 플랫폼2026년 7월 29일브라우저가 뭘 받아가는지 CI가 지켜봅니다로그인 화면인데 대시보드 코드가 딸려 오고 있었어요. 눈으로는 절대 못 잡는 문제라, 진짜 브라우저를 띄워 네트워크 탭을 검사하는 테스트를 만들었습니다.8분 읽기데이터 플랫폼2026년 7월 29일고객사마다 다른 앱을, 빌드 한 번으로고객사가 늘 때마다 빌드를 한 벌씩 더 돌리고 있었어요. 이제는 한 번 만들어 두고 배포할 때 고릅니다. 만드는 일과 고르는 일을 갈라놓은 이야기예요.8분 읽기성능 개선2026년 7월 29일이번엔 진짜로 빠르게 — 서버가 다 그려서 보냅니다지난 두 편은 빠르게 "느껴지게" 만든 이야기였어요. 이번엔 속임수 없이 진짜 시간을 줄입니다. 빈 화면을 없애고, 지구 반대편 왕복을 없애고, 안 쓰는 데이터를 없앴어요.6분 읽기에피소드2026년 7월 29일내가 만든 앱이 AI가 만든 것처럼 보였다"AI slop처럼 보이는 것들 좀 개선해줘." 그 말을 듣고 제 앱 화면을 처음으로 다시 봤어요. 보였습니다. 아주 잘 보였어요.3분 읽기Git GUI2026년 7월 29일"저장하기"를 버리고 "커밋"으로 돌아왔습니다쉬운 말이 이 앱의 정체성이었어요. 저장하기, 실험 공간, 보관함. 13일 만에 그걸 다 걷어내고 커밋·브랜치·스태시로 돌아왔습니다. 포기가 아니라 순서를 바꾼 이야기예요.7분 읽기아키텍처2026년 7월 29일두 번째 화분을 올렸습니다 — 플랫폼 가설의 성적표"두 번째 제품은 플러그인만 추가하면 된다." 온실을 지으며 걸었던 그 가설의 채점일이 왔어요. 캘린더가 올라갔거든요. 결과는 반은 맞고 반은 틀렸습니다.4분 읽기에피소드2026년 7월 24일봇이 단 첫 댓글을 보고, 좀 오래 웃었다새벽에 발행하고 새로고침했는데 댓글이 달려 있었어요. 작성자는 제가 만든 봇. 만든 사람이 자기 마술에 속은 날의 썰이에요.2분 읽기에피소드2026년 7월 24일오전에 기각한 설계가 오후에 살아 돌아왔다오전에 제가 죽인 설계안이 오후에 웃는 얼굴로 돌아왔어요. AI랑 일하다 소름 돋았던 날의 썰 — 좀비 결정 이야기예요.2분 읽기기술 노트2026년 7월 24일만들었는데, 읽는 사람이 보이지 않았다 — 독자 0편발행 버튼을 누르면 우주에 돌을 던지는 기분이었어요. 퐁당 소리도 안 나는 우주요. 하트 하나와 봇 주민들로 그 침묵을 깬 이야기의 0편이에요.2분 읽기회고2026년 7월 24일가족 블로그 하나 만들어 달랬는데 — arcaC 0편부탁은 화분 하나(블로그)였는데, 정신 차려 보니 온실(플랫폼)을 짓고 있었어요. 과해 보인다는 거 압니다. 그런데 계산이 있었어요 — 그 사연의 0편이에요.2분 읽기데이터 플랫폼2026년 7월 24일그렇게 저만 남았습니다 — 리뉴얼 0편모니터가 꺼진 책상이 하나씩 늘더니, 2025년 6월엔 저만 남았어요. 그런데 리뉴얼은 이미 시작돼 있었죠. 도망칠 명분은 충분했는데 — 안 도망친 이야기의 0편이에요.3분 읽기기술 노트2026년 7월 20일클릭보다 화면이 먼저 움직입니다 — 체감 속도 다듬기공감을 누르면 서버보다 하트가 먼저 채워져요. 실패하면 그 자리에 재시도가 남고요. 기능 목록에 안 적히는 커밋들 — 낙관적 업데이트, CLS 제거, 잔잔한 다듬기 — 로 체감 속도를 다듬은 기록이에요.8분 읽기기술 노트2026년 7월 17일붙여넣으면 알아서 — 에디터에 영상이 들어왔어요URL을 붙여넣으면 이미지·영상·링크를 알아서 분류해요. 붙여넣기 하나로 분기하는 판정 순서와, 남의 사이트를 내 페이지에 끼워 넣을 때의 보안 처리를 적었습니다.7분 읽기기술 노트2026년 7월 17일이 블로그 댓글창에는 봇이 삽니다 — 독자 상호작용 2탄빈 댓글창은 첫 댓글을 더 어렵게 만들어요. 그래서 캐릭터 봇 주민들을 초대했습니다 — 단, 사람인 척은 금지. 후보만 내는 모델과 게시 버튼을 쥔 트랜잭션을 왜 갈랐는지, 말투를 어떻게 조련했는지 적었어요.7분 읽기기술 노트2026년 7월 16일블로그에 ⌘K를 달았어요 — 검색과 탐색 만들기글이 서른 편을 넘기니 쓴 사람도 옛 글을 못 찾겠더라고요. ⌘K 팔레트, 한글이 부분 일치해야 하는 이유, 그리고 처음 온 사람을 위한 시리즈 페이지 — 찾아오는 세 가지 문을 만든 이야기예요.9분 읽기기술 노트2026년 7월 16일"지난 글에서 썼듯이"가 진짜 링크가 되기까지 — 내부 링크와 용어 버블"지난 글에서 썼듯이"를 쓸 때마다 독자에게 숙제를 내고 있었어요. 그래서 링크가 URL이 아니라 글 자체를 가리키게 만들었습니다. 주소가 바뀌어도 안 깨지는 링크와, 그 자리에서 열리는 용어 버블 이야기예요.5분 읽기기술 노트2026년 7월 16일새벽 3시에 발행 버튼은 누가 누르나 — 예약 발행 만들기"발행 버튼을 미래에 누르는 기능"이 그대로 사양이 됐어요. 남은 문제는 미래에는 누를 손가락이 없다는 것. 예약 발행의 실체는 타이머가 아니라 권한 모델이었습니다.9분 읽기기술 노트2026년 7월 16일로그인 없는 블로그에서 "공감 취소"는 어떻게 될까 — 독자 상호작용 만들기공감 버튼 하나가 5분이면 될 줄 알았는데, 로그인 없는 블로그에서는 철학 문제가 되더라고요. 익명 독자에게 신원을 주는 쿠키, +1이 아니라 상태를 선언하는 API, 그리고 이 기능이 blog라는 단어를 모르는 이유예요.8분 읽기Git GUI2026년 7월 16일파일 5,868개짜리 저장소를 열어봤다 — Git GUI 개발기: 0단계와 디자인계획 편에서 멈추지 않았어요. 열기→변경→diff→저장까지 수직으로 뚫고, 디자인 토큰과 픽토그램을 입혔습니다. 바뀐 파일 5,868개짜리 극단 케이스를 열어본 순간까지 — Git GUI 2편이에요.7분 읽기방법론2026년 7월 15일드래그 한 번이면 끝 — Codex의 '더 자세히'가 세션을 지켜준다AI 응답에서 이해 안 되는 문장이 나오면 늘 고민이었어요. 되물으면 세션이 오염되고, 안 물으면 모른 채 진행하고. Codex 업데이트로 생긴 드래그 '더 자세히'가 이 저울질을 없앴습니다.3분 읽기Git GUI2026년 7월 15일화면엔 AI만 남았는데, 커밋은 어디서 하지 — Git GUI를 직접 만듭니다IntelliJ를 끄고 나니 제일 아쉬운 건 코드 편집기가 아니라 git 도구였어요. 대안은 불친절하거나 유료라서 직접 만들기로 했습니다. 개발자 모드와 쉬운 모드를 함께 담은 데스크톱 Git 클라이언트, 그 시작 편이에요.7분 읽기일상2026년 7월 14일카톡 대란에서 ChatGPT Pro 20개를 주운 이야기2월 카톡 대란에서 ChatGPT Pro 90% 할인을 만났어요. 동료들은 하나씩 사고 끝났는데, 저는 가족 찬스로 20개를 챙겼습니다.2분 읽기데이터 플랫폼2026년 7월 14일사이드바 메뉴를 데이터가 아니라 배포 아티팩트로 다루기사이드바가 왜 한 편씩이나 되냐고요? 모든 제품이 만나는 유일한 UI거든요. 메뉴 config를 없애고 배포 아티팩트로 다룬 이야기입니다.6분 읽기데이터 플랫폼2026년 7월 14일react-grid-layout 없이 대시보드 그리드 만들기 — 순수 함수 레이아웃 엔진react-grid-layout 없이 대시보드를 만들었어요. 충돌 밀어내기·상향 압축·최소폭 역산은 전부 React 밖 순수 함수가 합니다. 레이어 분리가 라이브러리를 대체한 사례예요.6분 읽기데이터 플랫폼2026년 7월 14일피벗테이블 엔진을 직접 만들며 내린 결정들 — 단일 패스 집계와 셀 병합피벗 엔진을 직접 만들며 내린 결정 다섯 개. 평균은 저장하지 않고, 순회는 한 번만 하고, 병합은 1차원 비교로 끝냅니다. 3,100줄 순수 함수 엔진의 설계 노트예요.7분 읽기데이터 플랫폼2026년 7월 14일한 코드베이스에 가상화 라이브러리 3개 + 자체 구현이 공존하는 이유가상화 라이브러리 세 개에 자체 구현까지, 정리 안 된 게 아니라 정리한 결과예요. 요구가 다르면 답도 다르거든요. 상용 그리드를 밀어낸 벤치마크와 리렌더 0회 스크롤까지.8분 읽기데이터 플랫폼2026년 7월 14일재빌드 없는 릴리스 — write-once 아티팩트 레지스트리와 CAS 포인터레지스트리 없이 파일시스템 원자성만으로 불변 배포를 만들었어요. EEXIST가 지키는 write-once 게시, CAS 포인터 전환, 그리고 재빌드 금지를 정규식으로 강제하는 no-build 정책까지.7분 읽기데이터 플랫폼2026년 7월 14일UI는 1px도 못 바꾸면서 구조를 갈아엎기 — SHA-256 UI 불변 게이트와 경계 래칫64만 LOC 모노레포를 갈아엎는데 화면은 1px도 못 바꿉니다. 그걸 가능하게 한 두 안전망 — 렌더 구조를 해시로 고정하는 fingerprint와, 역행만 막는 boundary 래칫 이야기예요.8분 읽기데이터 플랫폼2026년 7월 14일컨벤션은 문서가 아니라 실패하는 빌드다 — 규칙을 기계로 강제하는 4개 층규칙 문서 32개, 4,500줄. 아무도 다 기억 못 합니다. 그래서 기억을 포기하고 기계에 맡겼어요. 훅·정적 검사·아키텍처 테스트·산출물 검증으로 쌓은 네 개 층과, 각 층이 무엇을 잡고 무엇을 못 잡는지 적었습니다.7분 읽기데이터 플랫폼2026년 7월 14일재빌드 없이 고객사 브랜딩 — 토큰 3계층 디자인시스템고객사가 브랜딩을 바꿔도 빌드는 없어요. 칩 → 시멘틱 → 통합 클래스로 수렴하는 3계층 토큰 체계와, 고객사 추가가 곧 패키지 추가인 소유권 구조 이야기입니다.6분 읽기데이터 플랫폼2026년 7월 14일중앙 조립 코드를 전부 걷어내다 — 런타임 기여 플랫폼 아키텍처어느 레포에나 있는 그 중앙 config 파일, 저희는 금지했어요. 각 패키지가 기여를 게시하고 중앙엔 조립 결과만 남는 아키텍처 — 그리고 그걸 게이트로 강제한 이야기예요.8분 읽기데이터 플랫폼2026년 7월 14일클래스 컴포넌트 0개로 다시 쓰기 — 1년의 프론트엔드 리뉴얼class 컴포넌트 0개로 다시 쓴 1년. 상용 그리드를 4개월 만에 뺐고, 제가 만든 아키텍처를 제가 폐기했어요. 리뉴얼의 실제 성과는 되돌리는 결정을 공식적으로 내리는 구조였습니다.10분 읽기프론트엔드2026년 7월 14일무조건 지키는 코드 컨벤션 — 예외 없는 절대 규칙이 규칙들에는 예외가 없어요. "상황에 따라 다르죠"도 없습니다. React Compiler부터 Props CASE, 추상 동사 금지, useEffect 제한까지 — 전부 자동완성·추적·가독성을 위해서예요.6분 읽기방법론2026년 7월 14일Cursor · Claude · Codex — 2026년 중반, 셋을 같이 쓰는 이유셋 중 하나를 못 고른 게 아니라 안 골랐어요. 세 도구가 파는 축이 다르거든요. 벤치마크는 자체 발표와 리더보드를 갈라서 봤습니다.5분 읽기방법론2026년 7월 14일작업 규모 적응형 AI 개발 프로세스아홉 단계라고 하면 관료적으로 들리는데, 실제론 반대예요. 크고 위험하면 절차를 늘리고, 작고 명확하면 접어서 한 번에 갑니다.4분 읽기방법론2026년 7월 14일AI 개발의 진짜 병목 — 컨텍스트가 뒤섞인다기각했던 대안이 채택된 결정처럼 되살아나는 순간 — 그게 제일 큰 병목이었어요. 그래서 기억을 세션 밖 정리본에 둡니다.3분 읽기방법론2026년 7월 14일AI 툴 세 번 갈아탄 이야기 — Cursor에서 Claude, 그리고 Codex혼자 남은 리뉴얼에서 시작해 Cursor, Claude, Codex까지. 툴은 세 번 바뀌었는데, 끝까지 남은 건 따로 있었어요.4분 읽기아키텍처2026년 7월 14일arcaC 아키텍처 한눈에 보기 — 다이어그램 3장설계 문서와 ADR 16편에만 있던 arcaC의 구조를 다이어그램 3장으로 꺼냈어요. 콘텐츠 파이프라인, Worker 3개 토폴로지, 플러그인 조합 — 한 화면씩 보시죠.2분 읽기회고2026년 7월 14일혼자 플랫폼을 만들며 힘들었던 것들238커밋 동안 힘들었던 건 알고리즘이 아니었어요. 이름을 정하는 일, 실패 이후를 설계하는 일, 속도를 스스로 늦추는 결정을 견디는 일 — 혼자 개발한 사람의 회고입니다.4분 읽기인프라·배포2026년 7월 14일Cloudflare Worker 3개로 나눈 배포 토폴로지비용 0원, 트래픽 거의 없음, 그리고 재배포 금지. 이 세 조건에서 나온 답이 Worker 세 개였어요. 실제 설정과 함께, 왜 하나로도 셋 이상으로도 안 갔는지 적었습니다.6분 읽기성능 개선2026년 7월 14일엣지에서 JWT를 로컬 검증하기 — JWKS 캐시와 리전 고정인증이 2초를 잡아먹고 있었어요. 매 요청마다 지구 반대편에 "이 사람 맞나요?"를 물어보고 있었거든요. 서명 검증을 엣지로 내리고 캐시를 붙인 4단계와, 병목이 순서대로만 보인다는 교훈이에요.6분 읽기성능 개선2026년 7월 14일블로그 페이지 전환을 빠르게 — prefetch 캐시와 mutation queue로컬에선 빨랐는데 배포하니 버벅였어요. hover는 저장하고 navigate는 소비하는 프리패치, 세대로 지우는 캐시, 그리고 프로미스 체인 하나로 지킨 저장-발행 순서 이야기입니다.6분 읽기기술 노트2026년 7월 14일SSR hydration 불일치를 잡은 기록hydration mismatch의 범인은 ⌘K 배지 한 글자였어요. 서버에는 navigator가 없거든요. 6줄짜리 수정과, 그 뒤에 세운 순수성 규칙 이야기입니다.6분 읽기기술 노트2026년 7월 14일TipTap을 플랫폼에 가두기 — FieldEditor와 revision coalescing에디터 라이브러리는 언젠가 갈아탑니다. 그래서 blog-* 어디에도 @tiptap import가 없어요. 저장 버튼 없는 저장(250ms 유휴 flush)과 이력 스팸을 막는 coalescing까지, 실제 상태 기계로 뜯어봤습니다.8분 읽기기술 노트2026년 7월 14일별도 /edit 없이, 같은 URL에서 편집 모드로보던 화면을 그대로 편집한다 — 그런데 로그인 세션은 다른 도메인에 있었어요. 복제 화면 2,000줄을 만들었다 지우고, __Host- 쿠키와 게이트웨이로 같은 주소에서 편집 모드를 켠 기록입니다.6분 읽기아키텍처2026년 7월 14일플러그인은 DB를 모른다 — blueprint와 ui의 경계렌더러가 DB를 직접 읽으면 편해요. 그리고 그 순간 결합이 시작됩니다. 선언만 하는 blueprint와 그리기만 하는 ui — 파일 4개와 95개로 갈라진 경계를 실제 코드로 뜯어봤어요.7분 읽기아키텍처2026년 7월 14일Draft와 Release를 가르는 선 — CQRS식 콘텐츠 프로젝션초안을 저장했을 뿐인데 공개 화면이 바뀌면, 사용자는 도구를 불신하게 돼요. 그게 정확히 어디서 깨지는지 실제 스키마와 쿼리로 뜯어보고, 잠금을 if문이 아니라 SQL 제약에 맡긴 이야기입니다.8분 읽기아키텍처2026년 7월 14일블로그를 앱이 아니라 플랫폼으로 만든 이유Next.js 블로그 하나면 끝날 일을 플러그인 플랫폼으로 만들었어요. 과해 보인다는 거 압니다. 그런데 다음 사이트가 이미 줄 서 있었거든요. 그 결정의 기록과 대가입니다.6분 읽기