이 블로그에 대해 두 해 동안 생각했습니다.

‘원한다’는 표현은 정확하지 않고, 오히려 집착에 가깝다. 초기에는 프론트엔드·백엔드 코드를 쓰지도 못하고, 임베디드 코드조차 작성하지 못했을 때부터 이런 감정이 생겼다. 그때 전자공학을 만지작거리며 우연히 @ushio의 B站 동영상과 웹사이트를 보게 되었고, 재미있다고 느껴 나도 해보고 싶었다. 이후 약 반년 동안 기초부터 C와 약간의 JS/CSS를 배우고, Hexet을 이용해 정적 블로그를 만들어 GitHub Pages에 배포했다. 이렇게 나만의 작은 공간을 갖게 되었다.

Hexo: 빠르고 간단하며 강력한 블로그 프레임워크. , hexo.io, opens in new tab
이 이미지는 Hexo 프로젝트의 홈페이지 스크린샷으로, 어두운 테마에 육각형 “H” 로고와 Docs, API, News, Plugins, Themes, About 메뉴가 있는 상단 네비게이션을 가지고 있습니다. 히어로 헤드라인은 “빠르고, 간단하며 강력한 블로그 프레임워크”라고 표시되어 있으며, 그 아래 터미널 스타일의 설치 명령 `npm install hexo-cli -g`가 있고, 양옆에 GitHub 별 41k, 포크 5k, 월간 다운로드 212k, X에서 @hexojs 팔로우 수 배지가 표시됩니다. 그 아래에는 버전 8.1.0(2025-10-26), 8.0.0(2025-09-16), 7.3.0(2024-07-02), 7.2.0(2024-04-17)을 나열한 릴리스 타임라인이 있으며, 페이지는 “Blazing Fast”와 “Markdown Support”를 강조하는 기능 섹션으로 전환됩니다. 이 이미지는 Hexo의 현재 릴리스 주기와 공식 사이트에 표시된 커뮤니티 채택 지표를 증명합니다.
Hexo: 빠르고 간단하며 강력한 블로그 프레임워크. , hexo.io, opens in new tab
이 이미지는 Hexo 프로젝트의 홈페이지 스크린샷으로, 어두운 테마에 육각형 “H” 로고와 Docs, API, News, Plugins, Themes, About 메뉴가 있는 상단 네비게이션을 가지고 있습니다. 히어로 헤드라인은 “빠르고, 간단하며 강력한 블로그 프레임워크”라고 표시되어 있으며, 그 아래 터미널 스타일의 설치 명령 `npm install hexo-cli -g`가 있고, 양옆에 GitHub 별 41k, 포크 5k, 월간 다운로드 212k, X에서 @hexojs 팔로우 수 배지가 표시됩니다. 그 아래에는 버전 8.1.0(2025-10-26), 8.0.0(2025-09-16), 7.3.0(2024-07-02), 7.2.0(2024-04-17)을 나열한 릴리스 타임라인이 있으며, 페이지는 “Blazing Fast”와 “Markdown Support”를 강조하는 기능 섹션으로 전환됩니다. 이 이미지는 Hexo의 현재 릴리스 주기와 공식 사이트에 표시된 커뮤니티 채택 지표를 증명합니다.

再后来,看到了 @Innei 的小站,设计很精致、功能也很全,当时的我看了一眼我就想要,甚至还赞助支持了,虽然后面没用上但是这钱也花的不怨 因为我摸到了 React 源码,就和我最初看到 C 一样,不过就是代码嘛,有什么大不了的,总有一天我要自己写一个。

ushio , sakura-ushio.icu, opens in new tab
개인 블로그 홈페이지의 스크린샷에는 애니메이션 스타일 아바타와 이름 小汐, 主页 링크, 所有文章/友链/关于我 네비게이션, GitHub 및 기타 소셜 아이콘이 포함된 사이드바가 고정된 포스트 피드 옆에 배치되어 있습니다. 가장 위의 포스트는 2023‑01‑29에 작성되었으며 置顶(고정) 태그가 붙어 있고, 제목은 PD-METER-R4이며 正在开发,相较于R3优化布局,更换主控,增加少量新功能(개발 중이며, R3에 비해 레이아웃을 최적화하고 메인 컨트롤러를 교체했으며 소량의 새로운 기능을 추가함)이라는 메모가 있습니다. 이 포스트는 USBC‑R4 SAKURA라고 적힌 초록색 PCB의 부품 면과 천 배경 위에 놓인 맨 뒤쪽 면을 보여주는 두 장의 사진으로 구성됩니다. 그 아래에는 2023‑02‑14에 작성된 WORX‑BAT‑Charger라는 두 번째 포스트가 시작되지만 프레임 하단에서 잘려 있습니다. 이 이미지는 USB‑C PD(전력 전송) 측정 장치의 반복적인 개정 과정을 문서화하는 진행 중인 하드웨어 프로젝트의 증거 역할을 합니다.

그 후에 @Innei님의 작은 사이트를 보게 됐습니다. 디자인이 아주 정교하고 기능도 완벽했어요. 그때 한눈에 보고 바로 갖고 싶었고, 심지어 후원까지 했습니다. 나중에 사용하지는 않았지만, 돈을 쓴 것을 후회하지는 않아요. React 소스 코드를 접하게 되어 처음 C를 봤을 때와 같은 느낌이었거든요. 코드는 그저 코드일 뿐, 큰 일이 아닙니다. 언젠가 제가 직접 하나 만들 날이 올 거라고 믿어요.

조용한 숲

그것은 2024년이었고, 그 후 24, 25, 26년이 현재까지

그 이후로 멈출 수 없게 되었다.

통제불능

처음에는 @colmugx님의 Hexo 테마 Nlvi에 라이트‑다크 토글만 넣고 싶었습니다. Dark Reader 스타일의 JavaScript 코드를 얕게 넣었지만, 보기 흉하고 만족스럽지 않았죠. 이후 CSS @media를 배우고, JS SPA 토글로 넘어가고, TailwindCSS의 .dark 클래스를 사용해보고, SSR next‑theme을 시도한 뒤, 마지막으로 Cookie와 Head Sync Inline 스크립트를 직접 손으로 만들어 FOUC 깜빡임을 해결했습니다. 총 네‑다섯 가지 방법을 써 보았습니다.

🎨 Hexo용 간단한 테마입니다. , github.com, opens in new tab
이 스크린샷 모형은 블로그 테마를 홍보하는 것으로, 왼쪽에 산호색 밑줄이 있는 "Nlvi" 워드마크 로고와 Hexo 정적 사이트 생성기로 만든 사이트의 두 개 겹쳐진 브라우저 창 미리보기가 함께 표시됩니다. 두 미리보기 창 모두 2013-12-27 날짜의 데모 포스트 "Elements"를 보여주며, 자리표시자 Lorem Ipsum 텍스트와 전체 타이포그래피 샘플이 포함됩니다: 크기가 큰 순서대로 1~6 수준의 헤딩, 스타일이 적용된 링크가 포함된 단락, 굵게와 기울임꼴 텍스트, 밑줄, 인용구, 그리고 "Table Header 1/2/3"와 "Division" 행이 있는 3열 표가 이어집니다. 상단 네비게이션 바에는 검색 아이콘과 함께 "ARTICLE, ARCHIVES, TAGS, ABOUT"가 표시되어, 이것이 Hexo 테마 내에서 HTML 요소가 어떻게 렌더링되는지를 보여주는 스타일 가이드 또는 테마 데모 페이지임을 나타냅니다.

하지만 이것은 빙산의 일각에 불과합니다. React를 접한 뒤, 석기 시대의 Hexo와 Vanilla JS에서 시작해 Next.js 13 Page Router까지 오르며, 그 후 Vue를 살펴보고 SPA 라우팅을 연구하고 index.html 폴백을 이해하며 프로젝트를 무수히 새로 만들었습니다. 서버를 구매하고 Docker, Nginx, NAS를 만지작거리다 1Panel이 별로라 생각해 Canopy 패널을 직접 손으로 코딩했고 NAS 스토리지 어레이를 연구해 RFS를 작성했습니다. SSL을 설정하면서 국내 환경에 맞서다 보니 acme.sh가 너무 번거로워 Rust로 역방향 프록시(Vane & Lazyacme)를 만들게 되었습니다. 원래는 밤에 3시간 동안 만든 800줄짜리 쓰레기 코드였지만, 친구의 격려로 4개월 동안 개발하며 HTTP/3, Zero‑Copy, Layer 모델, Flow 엔진을 모두 넣었습니다. 나중에 Seam이라는 풀스택 프레임워크도 있는데, 이것도 또 다른 함정이라 나중에 이야기하겠습니다.

과도한 엔지니어링

그리하여 AI 시대가 찾아왔고, 불안이 두 배가 되었다.

가장 아이러니한 점은, 이 일들은 원래 블로그를 시작한 뒤에 기록하면서 진행해야 했다는 것입니다. 그런데 블로그는 계속해서 포기되었고, 아이디어는 점점 늘어났지만 그것들을 기록할 곳이 없었습니다. 한편으로는 내면에서 비난하고 있습니다; Vane을 완성하기로 약속했지만 할 수 없었고 멈추었습니다. 또 다른 한편에서는 점점 멀어지는 무력감을 느낍니다. 나는 무엇을 해야 할지 늘 기억하지만, 실현하지 못합니다. 곰곰히 생각해보면, 나는 꽤 오랫동안 앉아서 뭔가를 쓰지 않았다는 것을 깨닫게 됩니다. 지금 돌아보면, 이 모든 것이 같은 문제—과도한 엔지니어링을 가리키고 있습니다.

그때 나는 실제로 내가 길을 잃고 있다고는 전혀 느끼지 못했다. Vane? 어쨌든 블로그는 나중에 배포해야 하니 역방향 프록시가 필요할 것이다. Seam? 결국 언젠가 풀스택을 작성해야 하니 내가 이상적인 프레임워크를 먼저 구축하는 것이 낫다. 모든 단계마다 이유가 있고, 모든 단계는 '나중에 쓸 수 있다'는 것이다. 하지만 문제는 '나중에'가 절대 오지 않는다는 점이다. 나는 한 번도 실제로 시작하지 않았기 때문이다…

실패

블로그를 작성하는 데 실제로는 역방향 프록시도, 자체 프레임워크도 필요하지 않습니다. 하지만 그 당시 나는 그것들을 전제조건으로 여기며, 영원히 차단되지만 합리적인 이유라고 생각했지만, 실제로는 그렇지 않았습니다. 진정한 전제조건은 단 하나뿐입니다: 앉아서 첫 번째 글을 써 내려가는 것.

사실 블로그는 손대지 않은 것이 아니라, 오히려 세 번 했습니다.

Vercel , vercel.com, opens in new tab
다음은 삼각형 로고와 어두운 테마를 갖춘 Next.js 홈페이지의 스크린샷이며, 상단 네비게이션에 Showcase, Docs, Blog, Templates, Enterprise, 검색창, Deploy 및 Learn 버튼이 나열되어 있습니다. 히어로 섹션에는 "The React Framework for the Web"이라는 문구가 표시되고, 이어서 Next.js가 세계 최대 기업들 중 일부에 의해 React 컴포넌트를 사용하여 고품질 웹 애플리케이션을 구축하는 데 사용된다는 설명이 있습니다. 그 아래에는 "Get Started"와 "Learn Next.js" 버튼 두 개와 "npx create-next-app@latest"라는 터미널 스타일 명령어가 있어, 이 사이트가 프레임워크의 공식 마케팅 및 온보딩 랜딩 페이지 역할을 함을 나타냅니다.

처음은 아직 Next.js 13 Page Router 시절이었어요. 그때 나는 SPA가 무엇인지 겨우 이해했고, SSR, SSG, ISR 같은 개념은 전혀 몰랐지만, 다른 사람들이 SSR이 좋다고 하길래 나도 써야겠다고 했죠. 코드를 작성하면서 이 아키텍처들이 어떤 문제를 해결하려는 건지 전혀 이해하지 못한다는 것을 깨닫고 더 이상 진행할 수 없었어요. 그 뒤에 Vue 2 순수 SPA로 전향했는데, 왜 Vue를 선택했냐고요? 솔직히 말하면 이름이 멋져 보이고, 새로워 보여서 한번 시도해 본 거예요. 오래 가지도 못했어요. 세 번째는 React로 돌아와서, 순수 JSX부터 시작해 TypeScript를 배우고 TSX도 다루게 되었으며, CJS와 ESM의 차이를 이해하고 Reactive에 빠졌어요. 이후 Lucide, Framer Motion, Radix UI 같은 이제는 없으면 안 되는 라이브러리들을 사용했죠—이번엔 드디어 뭔가 형태가 잡힌 느낌이었어요. 하지만 여전히 실패했어요. 본질적으로 나는 남들이 쓰는 걸 그대로 베끼는 것에 불과했거든요. 겉으로는 괜찮아 보였지만, 왜 그렇게 해야 하는지 전혀 이해하지 못했어요. 게다가 AI의 환상적인 도움으로 많은 것을 MVP 수준으로는 구현할 수 있었지만, 스케일업 단계에서는 온통 함정이었어요.

Remix , remix.run, opens in new tab
Remix 프레임워크 웹사이트의 스크린샷으로, 왼쪽 상단에 Remix 로고가 있고 오른쪽 상단에 Blog, Jam, Store, V2 Docs로 연결되는 네비게이션 바가 있습니다. 중앙 헤드라인은 "Remix 3 is under active development"이며 부제는 "A new full stack framework built on Web APIs"입니다. 그 아래에는 검은 천으로 덮인 자동차 모양의 일러스트가 배치되어 있으며, 천이 후드 위에 씌워진 부분에서 Remix 화살표 로고와 무지개 줄무늬 대각선 밴드가 살짝 보입니다. 천에 가려진 자동차 이미지는 제품 공개 또는 티저를 연상시켜 Remix 3가 아직 개발 중인 향후 출시 버전임을 알립니다.

그 후에 React(Remix) Router Loader, Next.js 15 App Router, RSC 등을 배우게 되었지만, 그때는 일상이 이미 매우 바빠서 코딩할 시간이 거의 없었고, 네 번째 실패를 할 기회조차 없었습니다. 돌아보니 제 사이트는 Next.js 13에서 Next.js 15로 옮겨졌고, 마이그레이션을 막 끝내고 아직 배포되지 않았을 때 Next.js 16 beta‑1이 출시되었습니다.

놓아버리기

"想开了"라고 말하는 것은 실제로 정확하지 않으며, 내가 피곤해서다.

터미널이나 앱 창의 스크린샷으로, 다크 테마 데이터 테이블이 표시되어 있으며, 제목은 "roject"로 끝나는 잘린 경로이고, 2026-03-03부터 2026-03-13까지 날짜별 행에 일일 모델 사용량이 나열되어 있습니다. 사용된 모델(haiku-4-5, opus-4-6, sonnet-4-6 조합) 컬럼과 수십억 단위까지 늘어나는 여러 수치 사용량 컬럼, 그리고 하루당 약 $97.92에서 $1,765.56까지 범위의 최종 달러 비용 컬럼이 있습니다. 가장 높은 비용과 토큰 수는 2026-03-09에 나타나며(가장 큰 컬럼에서 32억 7천만 이상, $1,765.56), 2026-03-12에는 $97.92로 급격히 감소하여 부분적인 혹은 비정상적인 하루임을 시사합니다. 이는 AI API 사용 및 청구 내역을 보여주는 증거로, 소프트웨어 프로젝트의 비용 모니터링 대시보드에서 가져온 것으로 보입니다.

AI 시대의 리듬이 너무 빠릅니다. 모델이 하나씩 연속으로 반복되고, 새로운 기술이 연속으로 나타나면서 점점 불안해집니다. 멈추면 추월당할 것 같은 느낌이 듭니다. 가장 미쳤을 때 하루에 16개의 작은 코드를 작성했고, 토큰은 하루에 약 1,900 USD를 소모할 수 있었습니다 (대략 2월쯤), 몸이 거의 지쳤습니다. 하지만 이 모든 것을 멈추게 만든 것은 어떤 깨달음이 아니라 단순한 피로였습니다. 점점 빨라지는 리듬 속에서 마지막 짚이 내려오자 저는 오히려 안도감을 느꼈고, 마음을 열었으며, 포기했습니다; 이렇게 하면 오히려 좋기도 합니다.

나는 놓기 시작했다. 예전마다 고집하던 것을 포기하고, 적당한 시점에 멈추는 법을 배우며, 내일 일은 내일에 말한다. Vane 아직 안 됐어? 일단 놔두자. Seam 아직 멀었어? 나중에 하자. 블로그가 완벽하지 않아? 먼저 올리자. 완전히 Vibe Coding을 시작하고, 문제가 없으면 신경 쓰지 않고, 문제가 있으면 나중에 이야기한다.

이상하게도, 손을 놓은 뒤에도 품질이 나빠지지 않았다. 이는 아마도 이전의 “古法” 프로그래밍 시절이 헛되지 않았기 때문이라고 생각한다. GPT‑2 시절부터 이미 AI를 사용하기 시작했지만, 그때는 여전히 모든 코드를 한 줄씩 성실히 작성하고 모든 개념을 이해하려고 했다. 그 경험이 토대가 되었고, 이후의 Vibe Coding이라기보다 Context Coding이라고 부르는 것이 맞으며, 필요한 판단력은 여전히 남아 있고, 손을 놓았다고 해서 저급한 실수나 사고가 발생한 것은 아니다.

이전의 모든 고생이 지금 놓아버릴 수 있는 자본을 주었다.

원점

최종 솔루션은 오히려 매우 간단합니다: All in Cloudflare. R2 객체 스토리지, D1 Edge 데이터베이스, KV를 캐시로 사용하고, Worker가 SSR을 실행합니다. 모두 서버리스이며 서버가 없습니다.

Cloudflare Worker , workers.cloudflare.com, opens in new tab
이 이미지는 따뜻한 주황색 그라디언트 배경에 섬세한 점 무늬 텍스처가 적용된 마케팅 웹사이트 히어로 섹션의 스크린샷입니다. 상단에는 제품, 솔루션, 리소스, 가격에 대한 링크와 오른쪽에 로그인 및 시작하기 버튼이 있는 내비게이션 바가 있습니다. 헤드라인은 “인터넷의 20%를 구동하면서 배운 모든 것을 — 기본적으로 여러분에게 제공됩니다”라고 적혀 있으며, 이어서 회사가 Cloudflare임을 밝히고 “컴퓨팅, AI 추론, 스토리지를 갖춘 AI 클라우드”이며 사용자가 “인프라를 관리하는 대신 애플리케이션을 배포할 수 있게 해준다”는 부연 설명이 있습니다. 아래 중앙에는 두 번째 시작하기 호출‑액션 버튼이 배치되어 있습니다.

이 답변은 빈정거리는 건가요? 아주 빈정거립니다. 이 “간단한” 끝점에 도달하기 전에 나는 한 바퀴를 돌아서 우회했습니다. 한때 자체 구축을 계획했기에 서버 관리, Docker 파헤치기, 컨테이너 관리가 필요했고, 그래서 관리 패널로 Canopy를, 인증서 관리를 위해 Lazycert를, 역방향 프록시로 Vane을, 리소스 모니터링 훅으로 Twig을 작성했습니다. 한 무더기의 프로젝트는 결국 쓰레기 서버를 위해서였습니다.

스토리지는 마찬가지입니다. 객체 스토리지가 비싸다고 생각해서 내 서버의 하드디스크를 사용하고 싶었고, 그래서 RFS라는 VFS를 만들었습니다. 이는 단일 파일을 원자적으로 중복 제거하고 병합하기 위한 것이며, 80~90년대의 레지스트리 개념까지 부활시켰고, 마지막으로 FUSE를 통해 마운트했습니다. 그 결과, 별로 좋지 않은 휠을 만드는 데 더 많은 시간을 들였고, 서버는 1년 동안 빈 채로 돌아갔으며, 완전히 적자 사업이었습니다.

Vercel , vercel.com, opens in new tab
검은 배경에 Vercel 마케팅 홈페이지의 스크린샷으로, 상단 네비게이션 바에는 Products, Resources, Solutions, Enterprise, Pricing가 표시되고, 삼각형 Vercel 로고 옆에 Ask AI, Log In, Sign Up 버튼이 있습니다. 그 아래에는 큰 제목으로 “Build and deploy on the AI Cloud”가 나타나며, 이어서 “Vercel provides the developer tools and cloud infrastructure to build, scale, and secure a faster, more personalized web”라는 부제가 있고, “Start Deploying”과 “Get a Demo”라는 두 버튼이 있습니다. 하단 절반은 빛나는 면이 있는 삼각형 프리즘이 와이어프레임 메쉬 형태로 렌더링되어 파란색, 녹색, 주황색, 빨간색 빛을 격자 배경에 방사하고 있으며, 이는 Vercel 로고를 영웅 이미지로 재구성한 스타일리시한 3D 표현입니다.

결국 여러 차례 돌아서 다시 Serverless 로 돌아왔습니다. Vercel 의 개념은 좋지만 Next.js 는 마음에 들지 않습니다. 또한 Vercel 은 마법이 너무 많고, Edge 에서 실행되도록 미리 컴파일하는 미들웨어 설계는 결국 파편화되고 몇몇 CVE 가 발생하기까지 했습니다. 모든 것을 원본 서버에 모아두는 것이 더 나을 것 같습니다. 반면 Cloudflare Workers 는 매우 훌륭합니다. 10 MB 이하의 결과물을 WASM 으로 컴파일해 Edge 에서 실제 비즈니스 로직을 실행할 수 있는 또 다른 극단을 구현했으며, 이것이 제가 원하던 것입니다. 비용을 제외하고는 큰 단점이 없으며, 이는 사실상 단점이 아니라 절약된 시간이 곧 돈이기 때문입니다.

적을수록 풍부하다

이 문장을 무수히 들어왔지만, 진정으로 그 의미를 이해하는 데는 두 해가 걸렸습니다.

엔지니어링의 본질은 “Make it function, make it correct, then make it exceptional.”입니다. 나는 마침내 올바른 길을 찾아 functional하게 만들었습니다. 현재 블로그가 소박한가요? 소박합니다. 완전하지 않은가요? 확실히 완전하지 않습니다. 하지만 전혀 없는 것보다는 낫습니다. 만약 출시조차 없고 “아마 필요할지도” 하는 것을 계속 만들면서 보이지 않는 완벽을 추구한다면 결국 아무것도 내놓지 못하게 됩니다. 이는 타협이 아니라 엔지니어링상의 선택입니다. 어쨌든 나는 마음을 열었습니다. 그래서 마음을 열었습니다. 이제는 하나의 세부 사항에 집착하지 않고 밖으로 나갔습니다. 휴대폰 앨범에 야외 사진이 오래 없었기에 길가를 즉흥적으로 찍었는데, 정말 오랜만에 밖에 나왔습니다.

이 사진은 야외에서 촬영했으며, 거리나 인도에 심어진 작은 잎이 많은 낮고 촘촘한 관목 울타리를 아래에서 바라보고 있다. 화강암 보도가 좌하단에서 우상단으로 대각선으로 이어지고, 좌하단 구석에 포장된 도로가 보인다. 울타리에는 어두운 목가지 위에 신선한 연두색 새싹이 돋아 있고, 상단 가장자리 근처에 나무줄기 밑부분이 보이며, 관목 너머에 멀칭되었거나 벌거벗은 갈색 토양이 있다. 밝고 직접적인 햇빛이 잎과 보도에 선명한 그림자를 드리워 사진이 정오 무렵에 촬영된 것으로 보인다.

과거에 걸었던 우회로를 되돌아볼 때, 후회하시나요? 전혀 후회하지 않습니다. 스스로 시도해 보지 않으면 영원히 이해 못 할 수도 있습니다. 더구나 AI 시대에 저는 예전의 길을 걷는 것이 거의 불가능해졌습니다. 너무 많은 워크플로가 이미 바뀌었거든요. 또한 이 프로젝트는 Taki이며, 100% AI 코딩이지만 장기적으로 유지 관리할 수 없다는 뜻은 아니며, 인간적인 느낌이 없다는 뜻도 아닙니다. 실제로 AI가 있든 없든 중요하지 않으며, 제가 좋아하는 것은 코드 자체를 쓰는 것이 아니라 무언가를 구축하는 것입니다...