이 블로그를 2년 동안 구상했다

"생각했다"는 말은 사실 정확하지 않고, 오히려 집념에 가깝다. 프런트엔드도 백엔드도 못 쓰고 임베디드 코드도 못 쓰던 시절부터 이미 있었다. 그때는 아직 전자공작을 만지작거리고 있었는데, 우연히 @ushio 영상과 사이트를 보게 됐고, 는 너무 재밌어 보여서 나도 갖고 싶어졌다. 그 뒤로 반년 가까이 걸려 C를 맨바닥부터 배우고 JS와 CSS도 조금 익혀서, Hexo로 정적 블로그를 만들어 Github Pages에 올렸다. 그렇게 나만의 작은 공간이 생긴 셈이다.

Hexo: A fast, simple & powerful blog framework. , hexo.io, 새 탭에서 열림
다크 모드로 표시된 Hexo 프로젝트 홈페이지의 스크린샷으로, 왼쪽 상단에 파란색 육각형 "H" 로고가 있고 그 옆에 Docs, API, News, Plugins, Themes, About 내비게이션 링크, GitHub 아이콘, Cmd-K 힌트가 있는 검색창, 그리고 오른쪽에 English 언어 전환기가 있다. 히어로 영역에는 "A fast, simple & powerful blog framework"라는 문구가 있고, 그 아래에 복사 가능한 설치 명령어 `$ npm install hexo-cli -g`와 파란색 화살표 버튼이 있으며, 그 아래로 GitHub 스타 41k, 포크 5k, 월간 다운로드 212k, Follow @hexojs 링크로 이루어진 배지 행이 있다. 릴리스 목록에는 2025-10-26의 hexo 8.1.0, 2025-09-16의 hexo 8.0.0, 2024-07-02의 hexo 7.3.0, 2024-04-17의 Hexo 7.2.0이 나열되어 있고, 다음 섹션은 "Blazing Fast"와 "Markdown Support"라는 기능 제목으로 시작한다. 릴리스 날짜와 다운로드 수치로 보아 이 캡처는 2025년 10월 말 이후에 촬영된 것이다.
ushio , sakura-ushio.icu, 새 탭에서 열림
왼쪽에 어두운 사이드바가 있는 개인 블로그 글 목록의 스크린샷으로, 사이드바에는 둥근 애니메이션풍 아바타, 小汐라는 이름, 主页 링크, 所有文章 / 友链 / 关于我 링크가 한 줄로 배치되어 있고, GitHub와 QQ를 포함한 원형 소셜 아이콘 네 개가 있다. 본문 열에는 2023-01-29 날짜의 PD-METER-R4라는 제목이 붙은 고정된 글 카드가 표시되며, 중국어 요약에는 개발 중이고 R3와 비교해 레이아웃이 최적화되었으며 메인 컨트롤러가 교체되었고 몇 가지 기능이 새로 추가되었다고 적혀 있다. 그 아래에는 USBC-R4 SAKURA라고 표기된 작은 녹색 PCB의 앞면과 뒷면 사진 두 장이 있으며, 흰 천 위에서 촬영되었고 2023.02.06 15:47이라고 적힌 Xiaomi 12S Ultra 카메라 워터마크가 있다. 카드에는 置顶(고정) 태그와 展开全文 >> 펼치기 버튼이 있고, 그 아래로 2023-02-14 날짜의 WORX-BAT-Charger 두 번째 카드가 시작된다. USB-C power delivery 측정 보드의 반복 개발 과정을 기록하는 하드웨어 취미가의 블로그로 보인다.

그러다 나중에 @Innei의 개인 사이트를 보게 되었다. 디자인은 정교했고 기능도 아주 다양해서, 한눈에 보자마자 갖고 싶어졌고 후원까지 했다. 결국 나중에는 쓰지 못했지만 돈이 아깝지는 않았다. 덕분에 React 소스 코드를 직접 들여다볼 수 있었기 때문이다. 처음 C를 봤을 때와 마찬가지로 이런 생각이 들었다. ‘어차피 코드일 뿐인데, 뭐가 그리 대단해? 언젠가는 나도 직접 하나 만들 거야.’

静かな森 , innei.in, 새 탭에서 열림
다크 모드로 표시된 개인 블로그 홈페이지의 스크린샷으로, 거의 검은색에 가까운 배경 위로 창백한 꽃잎들이 흩날리고 있다. 상단 중앙에는 알약 모양의 내비게이션 바가 있고 首页(활성), 文稿, 手记, 时光, 思考, 更多라는 중국어 항목이 들어 있으며, 좌측 상단에는 작은 애니메이션풍 아바타가, 우측 상단에는 로그인 아이콘이 있다. 왼쪽의 히어로 텍스트는 "Hi, I'm Innei 👋。"이며 그 아래에 "A NodeJS Full Stack <Developer />"와 "An independent developer coding with love."라는 문구가 이어진다. 그 아래에는 둥근 소셜 버튼들이 한 줄로 놓여 있다 — Bilibili, 넷이즈 클라우드 뮤직, GitHub, 이메일, RSS, Telegram, X — 그리고 분홍색 리본을 단 은발 소녀의 커다란 원형 애니메이션 초상이 오른쪽을 채우고 있으며, 책임감과 내면의 강인함에 관한 회색 중국어 인용문이 하단 가장자리를 따라 이어진다. 데스크톱 너비의 브라우저에서 렌더링된 Innei 개인 사이트의 랜딩 화면으로 보인다.

그건 2024년이었다. 그리고 24년, 25년, 26년을 지나 지금에 이르렀다

그때부터 멈출 수 없게 됐다.

통제 불능

처음엔 그저 @colmugx 의 Hexo 테마 Nlvi 에 라이트/다크 전환을 붙이고 싶었을 뿐이다. Dark Reader 의 JS 로 대충 하나 붙여 봤지만 보기 흉했고 마음에 들지 않았다. 그다음 CSS @media 를 배우고, JS 의 SPA 전환으로, TailwindCSS 의 .dark class 로, SSR 의 next-theme 로 옮겨 갔고, 마지막엔 Cookie 와 Head Sync 인라인 스크립트를 FOUC 깜빡임을 해결했다. 그렇게 네다섯 가지 방법을 거쳤다.

🎨 A simple theme for hexo. , github.com, 새 탭에서 열림
Hexo 블로그 테마의 홍보용 목업으로, 왼쪽에는 짧은 연어살빛 분홍 밑줄 위에 큼직한 연회색 서체로 "NIvi" 워드마크를 배치하고, 오른쪽에는 테마를 담은 브라우저 형태의 스크린샷 두 장이 겹쳐져 있다. 더 큰 데스크톱 너비 패널에는 크림색 헤더에 필기체 로고 "Hexo"와 search, ARTICLE, ARCHIVES, TAGS, ABOUT로 이루어진 내비게이션이 있고, 그 아래에는 2013-12-27 날짜의 "Elements"라는 제목이 붙은 타이포그래피 테스트 글이 자리한다. 이는 Heading 1부터 Heading 6까지를 훑고, 분홍색 인라인 링크와 굵게, 기울임, 밑줄, 코드 스팬이 들어간 로렘 입숨 Paragraph 섹션, 분홍색 세로줄이 붙은 인용문, 그리고 "Table Header 1–3" 위에 "Division 1–3" 행이 놓인 3열 표를 보여주는 표준 Hexo 샘플 페이지다. 같은 페이지를 더 좁은 모바일 또는 태블릿 화면으로 렌더링한 것이 오른쪽 아래에서 이를 겹치고 있으며, 로고가 가운데 정렬되고 동일한 내용이 단일 열로 재배치되어 있다. 전체는 순백색 바탕에 놓여 테마 쇼케이스로 읽히며, 해당 디자인이 두 너비 모두에서 전체 HTML 요소 집합을 깔끔하게 렌더링한다는 증거가 된다.

하지만 이것도 빙산의 일각일 뿐이었다. React를 접한 뒤 석기 시대의 Hexo와 순수 JavaScript에서 출발해 Next.js 13 페이지 라우터까지 갔고, 다시 옆길로 새서 Vue를 살펴보고 단일 페이지 애플리케이션 라우팅을 연구하며 index.html 대체 작동 방식을 이해하느라 프로젝트를 수도 없이 새로 만들었다. 서버를 사서 Docker, Nginx, 네트워크 결합 스토리지를 만졌고, 1Panel이 못생겼다는 이유로 Canopy 패널을 직접 만들었으며, 스토리지 배열을 연구하다 RFS를 작성했다. 보안 소켓 계층 인증서를 설정할 때는 중국 내 환경에서 말썽을 부리는 acme.sh에 시달리다 못해 Rust로 Vane과 Lazyacme라는 역방향 프록시까지 만들었다. 원래는 어느 날 밤 세 시간 만에 짠 800줄짜리 쓰레기 코드였는데, 단체 채팅방 친구들이 부추기는 바람에 넉 달 동안 개발하며 HTTP/3, 무복사 처리, 계층 모델, 흐름 엔진을 모조리 욱여넣었다. 그 뒤에는 Seam이라는 풀스택 프레임워크도 있는데, 이것도 끝없는 구덩이이니 이야기는 나중에 하자.

과잉 설계

그러다 인공지능 시대가 왔고, 불안은 또 두 배로 커졌다.

가장 아이러니한 건, 이 모든 게 원래는 블로그가 생긴 뒤에 기록하면서 만들어야 할 것들이었다는 점이다. 그런데 블로그는 , 아이디어는 점점 늘어나는데 그것들을 적어 둘 곳은 한 군데도 없었다. 한쪽에서는 마음속에서 계속 나를 몰아세웠다. Vane을 끝내겠다고 했으니 여기서 멈출 수는 없다고. 다른 한쪽에는 갈수록 멀어져만 가는 무력감이 있었다. 내가 무엇을 해야 하는지는 늘 기억하고 있었다. 다만 만들어 내지를 못했다. 곰곰이 생각해 보니, 앉아서 무언가를 써 본 지가 정말 오래되었다. 지금 돌아보면 이 모든 것이 같은 하나를 가리키고 있다 — 과잉 설계.

당시에는 사실 내가 방향을 벗어나고 있다는 생각이 들지 않았다. Vane? 어차피 블로그도 나중에는 배포해야 하니 리버스 프록시가 하나쯤은 필요하지 않겠는가. Seam? 어차피 언젠가는 풀스택으로 개발해야 하니 먼저 내가 꿈꾸던 프레임워크부터 제대로 만들어 두면 되지 않겠는가. 모든 단계에는 이유가 있었고, 모든 것은 “나중에 쓸모가 있을” 일이었다. 하지만 문제는 그 “나중”이 영원히 오지 않는다는 것이었다. 나는 단 한 번도 시작하지 않았으니까...

실패

사실 블로그를 만드는 데는 리버스 프록시도, 자체 개발 프레임워크도 필요하지 않다. 하지만 당시의 나는 그것들을 선행 조건으로 여기며, 영원히 나를 가로막으면서도 그럴듯해 보이는 이유로 삼았다. 그러나 그것들은 애초에 선행 조건이 아니었다. 진짜 선행 조건은 단 하나였다. 자리에 앉아 첫 글을 쓰는 것.

사실 블로그에 전혀 손을 대지 않았던 것은 아니다. 오히려 정반대로, 세 번이나 시도했다.

Vercel , vercel.com, 새 탭에서 열림
다크 모드의 Next.js 홈페이지 스크린샷으로, 데스크톱 브라우저에 표시되는 랜딩 히어로를 보여준다. 상단 내비게이션에는 왼쪽에 Vercel 삼각형 로고와 NEXT.js 워드마크가 있고, 그 옆에 Showcase, Docs, Blog, Templates, Enterprise 링크가 있으며, 오른쪽에는 ⌘K 힌트가 붙은 "Search documentation..." 입력란과 Deploy 버튼, Learn 버튼이 있다. 페이지 중앙에는 "The React Framework for the Web"이 큰 흰색 글씨로 적혀 있고, 그 아래 부제로 "Used by some of the world's largest companies, Next.js enables you to create high-quality web applications with the power of React components,"가 있으며, 그 아래에는 옅은 색의 "Get Started" 버튼과 어두운 색의 "Learn Next.js" 버튼이, 그 아래에는 `~ npx create-next-app@latest` 명령어가 있다. 텍스트 뒤 배경 장식으로 희미한 점선 격자와 일부만 보이는 두 개의 원 윤곽선이 자리한다.

첫 번째 시도는 아직 Next.js 13의 Page Router를 쓰던 시절이었다. 당시 나는 단일 페이지 애플리케이션이 무엇인지 어렴풋이 아는 정도였고 SSR, SSG, ISR 같은 개념은 하나도 제대로 이해하지 못했다. 그래도 남들이 SSR이 좋다고 하니 나도 써야겠다고 생각했다. 하지만 계속 만들다 보니 이런 아키텍처가 어떤 문제를 해결하려는 것인지 전혀 이해하지 못하고 있다는 사실을 깨달았고, 결국 더 진행할 수 없었다. 그다음에는 Vue 2 기반의 순수 단일 페이지 애플리케이션으로 전환했다. 왜 Vue였냐고? 부끄러운 이야기지만 이름이 듣기 좋았고, 어차피 내게는 새로운 것이니 한번 해 보자는 마음이었다. 그것도 오래가지는 못했다. 세 번째 시도에서는 React로 돌아가 단순한 JSX부터 시작했다. TypeScript를 배우고 TSX를 익혔으며 CJS와 ESM의 차이를 이해했고, 반응형 프로그래밍에 매료되어 훗날 없이는 못 살게 될 Lucide, Framer Motion, Radix UI 같은 라이브러리도 사용하기 시작했다. 이번에는 드디어 제법 그럴듯해 보였다. 하지만 나는 또 실패했다. 본질적으로 그저 남을 따라 하고 있었기 때문이다. 남들이 쓰는 것은 무엇이든 가져다 썼고, 겉보기에는 그럴듯했지만 왜 그렇게 해야 하는지는 전혀 이해하지 못했다. 거기에 AI의 환각까지 더해지니 많은 것을 최소 기능 제품으로 작동하게 만들 수는 있었지만, 규모를 확장하려 하면 온통 함정투성이였다.

Remix , remix.run, 새 탭에서 열림
Remix 웹사이트 랜딩 페이지의 스크린샷으로, 옅은 회색에서 흰색으로 이어지는 그라데이션 위에 렌더링되어 있으며 좌측 상단에는 "Remix" 워드마크가, 우측 상단에는 Blog, Jam, Store, V2 Docs를 표시한 내비게이션 행이 있다. 중앙에 배치된 헤드라인 텍스트는 "Remix 3 is under active development"를 알리고, 그 아래에는 "A new full stack framework built on Web APIs"라는 부제가 있다. 아래쪽 3분의 2를 채우는 것은 검은 천으로 덮인 자동차를 양식화한 일러스트레이션으로, 천의 주름이 빛을 받고 있으며 무지개 줄무늬의 대각선 배너와 흰색 레이싱 스트라이프 섬광이 가운데를 가로지른다 — 전형적인 덮개 씌운 슈퍼카 티저 모티프다. 이는 Remix 3 프로젝트 페이지의 사전 발표 상태를 보여주는 것으로, 프레임워크 재작성이 출시 전에 홍보되고 있음을 나타낸다.

그 뒤로 React(Remix) Router의 Loader, Next.js 15 App Router, RSC도 배웠지만, 그때는 이미 일상이 너무 바빠 코드를 작성할 시간이 거의 없었고 덕분에 네 번째로 실패할 기회도 없었다. 지금 생각해 보면 내 웹사이트는 Next.js 13부터 Next.js 15까지 이어서 만들었는데, 마이그레이션을 막 끝내고 아직 공개도 하지 않은 사이 Next.js 16 beta 1이 나왔다.

놓아주자

“마음을 내려놓았다”고 말하는 건 사실 정확하지 않다. 나는 그저 지쳤을 뿐이다.

macOS 터미널 창의 스크린샷(왼쪽 상단의 신호등 버튼, 어두운 배경, 고정폭 서체)으로, 일별 LLM 토큰 사용량과 비용을 박스 선으로 그린 표가 표시되어 있으며, 스크롤되어 헤더 행은 화면 밖으로 벗어나 있다. 각 행은 2026-03-03부터 2026-03-13까지의 날짜와 그날 사용된 모델(haiku-4-5, opus-4-6, 그리고 일부 날짜에는 sonnet-4-6)이 짝지어져 있고, 그 뒤에 입력, 출력, 캐시 쓰기, 캐시 읽기 토큰과 합계로 읽히는 다섯 개의 숫자 열, 마지막으로 달러 금액이 이어진다. 합계는 2026-03-12의 161,186,904 토큰에 $97.92부터 2026-03-09의 3,277,442,496 토큰에 $1,765.56까지 분포한다. 캐시 읽기가 압도적으로 지배적인 열로, 수백만 개의 출력 토큰에 비해 흔히 수십억 개에 달하며, 비용은 이 합계를 밀접하게 따라간다. 사용량 보고 CLI의 출력으로 보이며, 2026-03-06부터 2026-03-09 구간에서 하루 약 $1,700로 정점을 찍는 여러 날에 걸친 고강도 Claude Code 작업 부하의 증거다.

AI 시대의 속도는 너무 빠르다. 모델은 한 번씩 계속 갈아엎히고, 새로운 기술은 파도처럼 밀려온다. 나는 점점 더 불안해졌다, 멈추면 곧바로 추월당할 것 같아서. 가장 미쳐 있을 때는 하루에 열여섯 시간씩 코드를 썼고, Token 값만 하루 $1.9k USD를 태울 수 있었다 (대충 2월쯤이었던 것 같다). 몸이 거의 망가졌다. 하지만 이 모든 걸 멈추게 한 건 무슨 깨달음이 아니라 그냥 지쳤기 때문이다. 점점 조여드는 속도 속에서 마지막 지푸라기가 얹혔을 때, 나는 오히려 후련해졌고, 마음을 놓았고, ; 이래도, 꽤 괜찮다.

나는 내려놓기 시작했다. 한때 집착했던 것들을 포기하고, 적당한 선에서 멈추며, 내일 일은 내일 생각하는 법을 배웠다. Vane을 다 못 만들었다고? 일단 놔둔다. Seam은 아직 갈 길이 멀다고? 나중에 다시 하면 된다. 블로그가 완벽하지 않다고? 일단 공개한다. 완전히 Vibe Coding을 시작해, 문제가 없으면 건드리지 않고 문제가 생기면 그때 생각하기로 했다.

이상한 건, 손을 놓은 뒤에도 품질이 나빠지지 않았다는 것이다. 아마 예전의 그 프로그래밍의 나날이 헛되지 않아서일 것이다. GPT-2 시절부터 이미 AI를 쓰고 있었지만, 그때의 나는 여전히 한 줄 한 줄 성실하게 코드를 쓰고 개념 하나하나를 이해하고 있었다. 그 경험이 밑바탕이 되었다. 그 뒤의 것은 Vibe Coding이라기보다 Context Coding이었고, 있어야 할 판단력은 그대로 남아 있었다. 손을 놓았다고 해서 저급한 실수를 하거나 사고를 낸 적은 없었다.

그동안의 모든 시행착오가 지금 내가 손을 놓을 수 있는 밑바탕이 되어 주었다.

원점

최종 해법은 의외로 간단했다. 모든 것을 Cloudflare에서 운영하는 것이다. R2는 객체 스토리지, D1은 엣지 데이터베이스, KV는 캐시, Worker는 서버 측 렌더링을 담당한다. 모두 서버리스이므로 서버가 필요 없다.

Cloudflare Worker , workers.cloudflare.com, 새 탭에서 열림
Cloudflare 마케팅 홈페이지의 히어로 영역을 페이지 상단만 잘라낸 스크린샷으로, 채도 높은 주황색 배경에 희미한 점 패턴 텍스처가 깔려 있고 하단 중앙에서 따뜻한 연한 광채가 피어오른다. 내비게이션 바에는 Products, Solutions, Resources, Pricing이 드롭다운 항목으로 놓여 있고 오른쪽에는 "Login" 알약형 버튼과 흰색 "Start building" 버튼이 있다. 헤드라인은 "Everything we learned from powering 20% of the Internet—yours by default"라고 적혀 있으며, 이어서 "Cloudflare is your AI Cloud with compute, AI inference, and storage — letting you ship applications instead of managing infrastructure."라는 서브헤드와 두 번째 흰색 "Start building" 행동 유도 버튼이 뒤따른다. 이는 Cloudflare가 순수한 CDN이나 보안 업체가 아니라 "AI Cloud"로 스스로를 자리매김하고 있는 현재의 포지셔닝을 보여주는 증거이며, 인터넷의 20%를 담당한다는 도달 범위 주장을 그 근거로 내세우고 있다.

이 답이 아이러니하냐고? 너무나도 아이러니하다. 이 “간단한” 종착점에 도달하기까지 한참을 빙 돌아왔기 때문이다. 한때는 직접 호스팅할 계획이어서 서버를 관리하고, Docker와 씨름하고, 컨테이너를 관리해야 했다. 그래서 관리 패널로 Canopy를 만들고, 인증서 관리를 위해 Lazycert를 만들고, 역방향 프록시로 Vane을 만들고, 리소스 모니터링 계측을 위해 Twig를 만들었다. 고작 형편없는 서버 한 대를 떠받들려고 수많은 프로젝트를 만든 셈이다.

스토리지도 마찬가지였다. 객체 스토리지가 비싸다고 생각해 내 서버의 하드디스크를 쓰려 했고, 그래서 데이터를 원자적으로 중복 제거해 단일 파일로 합치는 VFS인 RFS를 만들었다. 심지어 1980~90년대의 레지스트리 개념까지 되살린 뒤, 마지막에는 FUSE를 통해 마운트했다. 결과는 어땠을까? 더 많은 시간을 들여 성능도 별로인 바퀴를 다시 발명했고, 서버는 1년 동안 놀고만 있었다. 완전히 밑지는 장사였다.

Vercel , vercel.com, 새 탭에서 열림
검은 배경에 흐릿한 격자 오버레이가 깔린 Vercel 마케팅 홈페이지를 데스크톱 브라우저로 촬영한 스크린샷. 어두운 내비게이션 바에는 왼쪽에 Vercel 삼각형 워드마크가, 가운데에 Products, Resources, Solutions, Enterprise, Pricing 메뉴 항목이, 오른쪽에 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" 보조 버튼이다. 버튼 아래로는 커다란 선화 삼각형이 격자에서 솟아오르며, 뒤쪽에서 비추는 블룸이 왼쪽의 파랑에서 꼭짓점의 초록을 거쳐 오른쪽의 빨강으로 흐려진다. 사이트의 현재 AI Cloud 포지셔닝을 최근에 캡처했음을 보여주는 증거다.

결국 한참을 돌아 다시 서버리스로 돌아왔다. Vercel의 개념은 좋지만 나는 Next.js를 좋아하지 않는다. 게다가 Vercel에는 마법 같은 요소가 너무 많고, 미들웨어를 미리 컴파일해 엣지에서 실행하는 설계도 결국 구조를 단절시키며 CVE까지 몇 건 발생시켰다. 이럴 바에는 차라리 모든 것을 오리진 서버에서 함께 실행하는 편이 낫다. 반면 Cloudflare Workers는 아주 좋다. 10 MB 미만의 결과물을 WASM으로 컴파일해 실제 비즈니스 로직을 엣지에서 실행할 수 있게 함으로써 또 다른 극단에 도달했다. 바로 이것이 내가 원하던 것이다. 돈이 많이 든다는 점 외에는 단점이 없다. 하지만 따지고 보면 그것도 단점은 아니다. 결국 절약한 시간이 곧 돈이기 때문이다.

적을수록 좋다

이 말은 수도 없이 들었지만, 그 의미를 진정으로 이해하기까지 2년이 걸렸다.

엔지니어링의 본질로 돌아가자. 「Make it function, make it correct, then make it exceptional.」 이제야 제대로 된 길에 들어서서 우선 작동하게 만들었다. 지금 블로그가 허술한가? 허술하다. 불완전한가? 분명 불완전하다. 그래도 없는 것보다는 낫다. 공개한 것도 하나 없는 채로 “어쩌면 필요할지도 모르는” 것만 계속 만들고, 눈에 보이지도 않는 완벽함을 좇는다면 결국 아무것도 내놓지 못한다. 이것은 타협이 아니라 엔지니어링상의 선택이다. 어쨌든 나는 이제 내려놓게 됐다. 그래서 내려놓았다. 한 가지 세부 사항에 집착하지 않게 되니 오히려 문밖으로 나왔다. 휴대폰 사진첩에는 한동안 야외 사진이 없었기에 길가 풍경을 무심코 한 장 찍었다—정말 오랫동안 밖에 나가지 않았으니까 (

창백한 화강암 연석 뒤로 화면을 가로질러 대각선으로 뻗은, 다듬어진 상록 관목의 낮은 생울타리를 내려다보며 찍은 사진으로, 왼쪽 아래 모서리에는 회색 포장재와 아스팔트가 띠 모양으로 보인다. 관목은 빽빽하지만 연석 가까이에서는 눈에 띄게 성글어져 잎이 없는 목질 줄기와 갈색 낙엽이 깔린 바닥이 드러나 보이며, 잎에는 봄에 새로 돋은 연둣빛 기운이 감돈다. 위쪽 가장자리에서는 가느다란 나무 줄기가 식재 사이로 솟아 있고, 먼 배경은 녹빛이 도는 붉은색 화단 식물의 띠로 채워져 있다. 빛은 밝고 방향성이 뚜렷하며, 화면 밖 물체의 길고 부드러운 그림자를 포장면과 연석 위로 드리울 만큼 낮게 기울어 늦은 오후임을 짐작하게 한다.

지금까지 돌아서 온 길을 되돌아보면 후회할까? 후회하지 않는다. 어떤 일은 직접 해 보지 않으면 어쩌면 영원히 이해하지 못할 수도 있다. 더구나 인공지능 시대인 지금은 내가 당시에 걸었던 옛길을 다시 가고 싶어도 사실상 기회가 없다. 너무 많은 작업 흐름이 이미 바뀌었기 때문이다. 그리고 이 프로젝트는 Taki로, 코딩 전부를 인공지능으로 했다. 하지만 그렇다고 장기적으로 유지·보수할 수 없다거나 인간미가 없다는 뜻은 아니다. 사실 인공지능을 사용했는지는 중요하지 않다. 게다가 내가 좋아하는 것은 코드 작성 자체가 아니라 무언가를 만들어 내는 일이다...