이 사이트에 방을 하나 두었어요. 바다가 내려다보이는 언덕 위, 존재하지 않는 집의 서재예요. 걸어 다니고, 앉고, 물건을 집어 들 수 있어요. 집은 상상이지만, 거기서 집어 들 수 있는 것은 모두 실제예요. 제 책, 제가 들은 강의, 제가 만든 제품, 제가 다녀온 공원, 그리고 동료들이 LinkedIn에 써 준 추천글이에요.
여기까지 오는 데 네 번을 시도했고, 처음 세 번은 실패했어요. 실패한 방식이 방 자체보다 더 쓸모 있다고 생각해서, 이 글은 그 이야기예요.
왜 하필 three.js였을까
시작은 X(Twitter)였어요. 거기서 멋진 3D 작품을 계속 봤어요. 사람들이 three.js로 브라우저에서 돌아가게 만든 것들이었고, 저도 해 보고 싶었어요. 사실상 이유는 그게 전부였어요. 첫 번째 시도의 목표를 적었을 때도 그냥 three.js로 무언가를 만들어 보는 것이 목적이라고 썼어요. 궁금했거든요.
첫 번째 시도: 같은 아이디어를 열 가지 모습으로
9월 말에 제 블로그 아카이브를 주제로 시작했어요. 글 523개를 시간과 주제에 따라 공간에 배치하는 거였어요. 실제 렌더링으로 컨셉 여섯 개를 만들었어요. 기둥의 풍경, 두 가지 잉크로 찍은 리소그래프 인쇄물, 별자리 지도, 종이 폭풍, 지형 모형, 그리고 아주 작은 책상 디오라마예요. 아이디어 네 개(책, 나무, 인쇄소, 물속의 잉크)는 거친 목업 단계까지 갔어요. 열 개 중 아홉 개는 아래에 있어요. 기둥의 풍경은 저장해 두지 않았어요.
열 개를 전부 퇴짜 놓았어요. 이유를 적어 보니 결론은 단순했어요. 매번 같은 아이디어였어요. 같은 글로 만든 점들을 렌더러만 바꿔 가며 보여 준 거였어요. 기법을 열 번 바꿔도, 작품에 진짜 주제가 없다는 사실은 고칠 수 없었어요. 같은 데이터를 평범한 2D 차트로도 그려 봤어요. 3D 버전이 넘어야 할 기준선으로 삼은 거예요. 3D 자체에 끌리는 분이라면 누구에게든 권하고 싶은 좋은 시험이에요.

두 번째와 세 번째 시도: 진짜 주제, 그리고 잘못된 싸움
10월 초에 이번에는 진짜 주제로 다시 시도했어요. Ask Sydney(시드니)가 답변 뒤의 출처를 어떻게 찾는지, 그리고 제 제품 중 하나가 내부에서 어떻게 돌아가는지였어요. 첫 버전들은 단순했고, 사실 저 같은 사람, 즉 파이프라인이 어떻게 돌아가는지에 이미 관심 있는 사람을 위해 만든 것이었어요.
그래서 둘 다 제대로 아트 디렉션 작업을 했어요. Blender로 만든 모델, 조명을 입힌 환경, 블룸, 피사계 심도, 안개, 부드러운 그림자예요. 작품들은 테스트를 마쳤고, 접근성도 갖췄고, 번역할 준비도 돼 있었어요. 그래도 저는 여전히 충분히 좋지 않다고 판단했어요. 시작하기 전에 이미지 모델로 만들어 둔 컨셉 아트와 비교하고 있었는데, 그 옆에 놓으면 매번 졌기 때문이에요.
각 작품을 세 단계로 보여 드릴게요. 첫 버전, 아트 디렉션을 거친 버전, 그리고 제가 비교하던 컨셉 아트예요. 먼저 Ask Sydney가 출처를 찾는 방식이에요.
그리고 DIALØGUE(다이얼로그)가 에피소드를 만드는 방식이에요.
그때 적어 둔 교훈은, 실시간 three.js는 사실적인 오프라인 렌더를 따라갈 수 없다는 것이었어요. 정지 이미지는 한 프레임에 몇 분을 쓰면서 조명, 피사계 심도, 모든 질감을 정확하게 맞출 수 있어요. 브라우저에는 프레임당 몇 밀리초밖에 없어요. 그래서 다음 시도의 규칙은 이렇게 됐어요. 실시간 3D는 사실감으로 경쟁하지 않는다. 눈앞에 있는 사람에게 반응함으로써 이긴다. 영상으로 대체할 수 있다면, 그 작품은 틀린 것이다.
네 번째 시도, 그리고 여전히 많은 거절
앞의 세 번은 DeepSeek와 OpenAI의 GPT를 포함해 서로 다른 모델과 도구를 썼어요. 그중 어느 것도 제 품질 기준에 닿지 못했어요. 11월 초의 네 번째 시도는 Claude Code에서 Claude Opus 5.5로 했어요.
처음부터 잘 됐다고 말할 수 있으면 좋겠지만, 그렇지 않았어요. 방을 만들기 전에 저는 거절을 여러 번 했어요. 미디어 예산을 어떻게 나눌지 보여 주는 물잔 세트(너무 전술적이었어요), 잉크 작품, 위를 날아다니는 오려 낸 종이의 풍경(너무 밋밋했어요), 다른 세계를 그린 스케치 네 장, 걸어 다닐 수 있는 제 커리어 박물관, 그리고 마케팅 분야마다 하나씩 책상 여섯 개를 둔 스튜디오였어요. 스튜디오에 대한 제 메모는 제가 찾던 "와우 요소와는 한참 멀다"는 것, 그리고 "책상 여섯 개가 형편없다"는 것이었어요. 정말 그랬어요.
효과가 있었던 아이디어는 모델이 아니라 저에게서 나왔어요. 방문자가 제 꿈의 집에 온 손님이고, 제가 그 손님에게 서재를 보여 준다면 어떨까? 저는 제가 상상하는 방을 설명했어요. 창을 등지고 앉는 책상, 책장, 긴 소파, 둘러앉아 커피를 마시며 이야기할 수 있는 테이블, 벽난로, 그리고 창밖의 나무와 바다 물결이에요. Big Sur처럼요. 처음 돌아가는 버전을 봤을 때 저는 "네, 이 방향이에요"라고 말했어요.
그다음은 디테일이었어요. 푹신하게 부푼 소파, 평범한 테이블, 못생긴 문, 플로어 램프, 그리고 Big Sur처럼 보이지 않는 나무를 퇴짜 놓았어요. 제가 요청한 것은 "월드클래스의 조용한 럭셔리 서재"였어요. 프로젝트 초반에는 그 느낌을 좋은 호텔 로비에 빗대어 설명하려 했어요. 향기와 꽃 덕분에 안전하고 보살핌받는다고 느끼게 되는 곳이요. 그리고 "단순해 보이지만 제대로 만들기는 정말 어려운" 라멘 한 그릇에도 빗댔어요. 지금도 그게 제가 가진 최고의 설명이에요.
왼쪽은 방의 초기 버전이고, 오른쪽은 지금의 방이에요.

어떻게 만들었나
Blender가 방을 만들고 Cycles 렌더러로 빛을 구워 넣어요. 그래서 햇빛이 바닥을 가로질러 떨어지는 모습을 브라우저가 계산할 필요가 없어요. 그다음 three.js가 방을 실시간으로 그리고, 여러분에게 반응하는 모든 것을 처리해요. 걷기, 앉기, 물건 집어 들기, 저녁까지 머물기예요.
정직함에 대한 규칙이 하나 있어요. 집은 상상이고 그렇다고 밝혀 두었지만, 손님이 집어 드는 것은 모두 실제이고 출처가 있어요. 각 물건에 붙은 글은 짧아요. 이 방에 대한 제 규칙이 3D로 보여 주되, 짧은 한 줄만 두고 글 벽은 만들지 않는 것이었기 때문이에요.
방은 13개 언어로도 동작하고, 화면 낭독기를 쓰는 분이나 브라우저에서 방을 그릴 수 없는 분을 위한 텍스트 버전도 있어요.
처음 10초
출시 전에 개발 빌드에서 방을 테스트했어요. 실제 사이트보다 느린 환경이에요. 역할, 기기, 연결 속도가 각기 다른 대역 방문자 세 명에게 페이지 설명 없이 보여 줬어요. 사람이 아니라 AI 에이전트였기 때문에 조사가 아니라 스모크 테스트로 받아들여요. 그래도 결과는 분명했어요. 가장 빠른 방문자는 "어서 오세요, 천천히 보세요."라는 문구와 함께 검은 화면을 8초 정도 봤어요. 나머지 둘은 10초 내내 검은 화면을 봤어요. 둘은 스스로 떠났을 것 같다고 말했어요. "천천히 보세요"는 "기다리세요"로 읽혔고, 이 페이지가 무엇인지 알려 주는 건 아무것도 없었어요.
그래서 이제는 첫 순간부터 방의 정지 사진이 보이고, 그 아래에 제 이름과 한 줄이 나와요. 공원 사진은 방이 준비된 뒤에야 불러와요. 아직 실제 방문자의 데이터는 없어요.
출시 뒤에도 계속 손봤어요. 시뮬레이션한 느린 폰에서 방이 열리기까지 여전히 약 8초가 걸렸기 때문이에요. 이제 브라우저는 코드가 로드된 뒤가 아니라 페이지와 함께 방을 내려받기 시작해요. 바다 풍경은 절반 크기로 먼저 도착해서 잠시 뒤 선명해지고, 3D 모델 자체는 2.8 MB에서 0.81 MB로 줄었는데 제 눈에 보이는 차이는 없어요. 시뮬레이션한 느린 폰에서는 이제 방이 약 4.5초 만에 열려요. 제 폰에서는 부드럽게 돌아가요.
배운 것
취향이 그 어느 때보다 중요해요. 머릿속에 있는 것을 기계가 만들어 내도록 요청하려면, 취향이 있어야 하고 그것을 표현할 어휘도 있어야 해요. 처음부터 끝까지 아이디어와 거절은 제 몫이었고, AI 모델은 만드는 일을 했어요. 결과가 좋아졌는지는 무엇이 잘못됐는지(푹신하다, 평범하다, 너무 밋밋하다, Big Sur 같지 않다), 그리고 대신 무엇을 원하는지를 제가 말할 수 있었는지에 달려 있었어요. 설명하지 못할 때는 잘못된 것의 아주 잘 만든 버전을 받았어요.
제품은 목적을 위한 수단이지 목적 그 자체가 아니에요. 왜 만드는지, 누구를 위한 것인지, 사람들에게 어떤 결론이나 인상을 남기고 싶은지 알아야 해요. 첫 시도들은 기법에서 출발했어요. 방은 저를 만난 적 없는 방문자에서 출발했어요. 그 사람이 무엇을 집어 들고, 떠날 때 무슨 생각을 하는지였어요. 그게 분명해지자 많은 결정이 저절로 내려졌어요.
모델이 중요했을까요? 중요했다고 생각해요. 방이 제 기준을 넘게 한 건 이번이 처음이에요. 하지만 네 번의 시도에 대한 메모를 다시 읽어 보면, 주제와 목적도 모델만큼 바뀌었고, 솔직히 둘을 따로 떼어 낼 수 없어요.
방은 chandlernguyen.com/study에 있어요. 폰에서도 돼요, 제 폰으로 확인했어요. AI로 3D 작품을 만들어 보셨거나, 시도하다 포기하셨다면, 무엇이 발목을 잡았나요? 도구 때문이었는지, 아이디어 때문이었는지 궁금해요.