전체 검색

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

전체 글

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

전체 글
66개

글 목록

칼럼2026년 10월 15일클린 코드를 넘어, ‘클린 컨텍스트’로왜 조직의 맥락 부채를 개인의 ‘센스’로 갚게 하는가8분 읽기일상2026년 10월 1일요즘 내 Slack에 눈사람이랑 고양이가 산다Slack에서 도트와 루프에게 물었어요. 혹시 제 블로그를 알고 있냐고요.5분 읽기프로젝트2026년 9월 15일고객사에 배포하러 갔다가, USB 테더링 도구를 만들었어요핫스팟을 쓸 수 없었던 고객사 배포 현장을 계기로 GalaxyBridge를 만들었어요. 안드로이드와 맥을 USB로 연결하고, 실제 데이터 전송과 재연결까지 확인한 이야기예요.4분 읽기칼럼2026년 9월 9일언제 배웠는지가 왜 실력의 기준이 되는가필요할 때 빠르고 정확하게 알아내고 결과를 확인할 수 있다면, 왜 반드시 미리 알고 있어야 할까요? AI 시대의 역량 평가와 회사의 지식을 필요할 때 활용할 수 있게 만드는 선임의 역할을 생각합니다.7분 읽기일상2026년 9월 5일반차 쓰고 기다린 아스트라, 두 번째 새벽에 드디어 만났습니다반차까지 쓰고 새벽 3시부터 5시까지 기다렸지만 아스트라를 쓰지 못한 날. 초기화권 소식으로 조금 위로받고, 두 번째 새벽 4시에 드디어 사용을 시작한 기록입니다.3분 읽기방법론2026년 9월 2일지역 차단에 막혔다가, Daybreak Blue 신청했습니다OpenAI의 사이버 보안 모델 프로그램에 개인도 신청할 수 있게 됐어요. 신청 페이지가 지역 때문에 막혀 있다가 며칠 뒤 열렸고, 기다리는 김에 Daybreak이 뭔지 정리해봤습니다. 안전이 "모델의 거절"에서 "사람의 승인"으로 옮겨간 이야기예요.5분 읽기Git GUI2026년 8월 27일여울 v0.2.0 공개 베타 — 5주 만에 도구가 된 Git GUI여러 Git 저장소와 워크트리를 한 화면에서 다루는 여울 v0.2.0을 공개합니다. MIT 오픈소스 전환과 첫 공개 빌드까지의 5주 기록을 함께 정리했어요.9분 읽기칼럼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 개발 하네스문서를 연결해 둬도 참조 누락과 반복 설명이 계속됐어요. Jira 티켓부터 구현·테스트·사람의 검토까지 연결했고, 백엔드 개발자도 프론트 기능을 만들었습니다. 총 작업 시간과 직접 개입 시간을 구분해 정리한 실제 사용 이야기예요.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가 지켜봅니다화면에 필요한 코드가 제때 내려오는지, 사이드바와 홈이 같은 API를 중복 요청하지 않는지 브라우저에서 확인해요. 코드 격리와 초기 로딩 API 검사의 판정 기준·관측 범위를 나눠 기록했습니다.9분 읽기데이터 플랫폼2026년 7월 29일고객사마다 다른 앱을, 빌드 한 번으로고객사별 브랜치의 공통 변경 관리와 온프레미스 반입 부담을 줄이려고 코드 빌드와 구성 선택을 나눴어요. Manifest로 바꿀 수 있는 범위와 Host·Core 호환성 검증을 함께 정리합니다.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일피벗테이블 엔진을 직접 만들며 내린 결정들 — 단일 패스 집계와 셀 병합커스텀 공수와 라이선스 비용을 검토한 뒤 피벗을 직접 구현했어요. 집계·병합의 설계와 AI 보조, Excel 대조, 제품 대체 후 겪은 인터랙션 회귀를 함께 기록합니다.7분 읽기데이터 플랫폼2026년 7월 14일한 코드베이스에 가상화 라이브러리 3개 + 자체 구현이 공존하는 이유일반 테이블과 트리는 무료 라이브러리를 쓰고, 피벗은 직접 구현했어요. 반복되는 커스텀 공수·서버 연동·라이선스 비용을 놓고 선택한 이유와 직접 맡게 된 유지보수를 정리합니다.7분 읽기데이터 플랫폼2026년 7월 14일재빌드 없는 릴리스 — write-once 아티팩트 레지스트리와 CAS 포인터온프레미스의 배포 협의·반입 부담을 줄이기 위한 릴리스 조립 구조예요. 이미 반입된 기능의 Manifest 갱신, 호환 범위 확인, 과거 파일 보존을 전제로 한 복구를 나눠 설명합니다.7분 읽기데이터 플랫폼2026년 7월 14일구조 검사가 통과해도 화면 검토는 남습니다flat props를 검사하는 AST 테스트와 초기 로딩의 중복 API 검사. 각각 무엇을 확인하는지 구분하고, 이전 글의 UI 불변 증명 표현을 바로잡았어요.3분 읽기데이터 플랫폼2026년 7월 14일컨벤션은 문서가 아니라 실패하는 빌드다 — 규칙을 기계로 강제하는 4개 층반복되는 props·레이어 규칙을 검사로 옮겼어요. AST의 정상·위반 사례 테스트와 PR CI 연결을 포함해, 정적 검사·훅·아키텍처 테스트·산출물 검증의 역할과 한계를 정리합니다.7분 읽기데이터 플랫폼2026년 7월 14일재빌드 없이 고객사 브랜딩 — 토큰 3계층 디자인시스템고객사가 브랜딩을 바꿔도 빌드는 없어요. 칩 → 시멘틱 → 통합 클래스로 수렴하는 3계층 토큰 체계와, 고객사 추가가 곧 패키지 추가인 소유권 구조 이야기입니다.6분 읽기데이터 플랫폼2026년 7월 14일중앙 조립 코드를 전부 걷어내다 — 런타임 기여 플랫폼 아키텍처고객사별 브랜치에서 공통 수정 전파가 어려웠어요. 단일 코드베이스와 확장 기여 구조로 옮기고, 온프레미스의 반입 부담을 고려해 Manifest로 바꿀 수 있는 범위를 정했습니다.9분 읽기데이터 플랫폼2026년 7월 14일클래스 컴포넌트 0개로 다시 쓰기 — 1년의 프론트엔드 리뉴얼v3 유지보수와 v4 초기 개발을 병행하며 시작한 리뉴얼. 상용 피벗 대체와 기여 구조 전환에서 무엇을 비교하고 검증했는지, 인원 변화와 실제 운영 범위를 함께 정리했어요.8분 읽기프론트엔드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분 읽기