Claude Code Is All You Need

TMT

Claude Code 당신에게 필요한 모든 것
업무, 재미, 그리고 텍스트 에디터로 Claude Code를 사용하는 방법

Image

저는 6월에 Claude Code를 설치했습니다. Cursor, Cline, Zed 등 여러 가지를 시도해봤지만, 모두 저에게는 어색하게 느껴졌습니다. 왜냐하면 저는 거의 모든 작업을 기본 vim과 터미널에서 하기 때문입니다. Claude Code는 제가 새로운 도구에 적응할 필요 없이, 제 워크플로우에 완벽하게 맞는 첫 번째 도구였습니다.

그리고 정말, 정말 잘 작동했습니다.

저는 곧 GPT 구독을 취소하고 그 $20/월을 Anthropic에 썼습니다. GPT의 고급 음성 모드를 잃고 Claude 데스크톱 및 모바일 앱의 추가 UI 지연과 다소 부족한 완성도를 감수해야 했지만, 터미널 도구가 충분히 재미있어서 신경 쓰지 않았습니다.

며칠 만에 Opus를 써보고 한도를 넘지 않기 위해 $100/월 MAX 플랜으로 업그레이드했습니다.

지금까지 사용해본 몇 가지를 설명하겠습니다. 주로 재미로 이것저것 시도해보는 중이지만, 점점 더 ‘실제’ 업무에도 사용하고 있습니다.

몇몇 프로젝트에는 실험적인 ‘자율 스타트업 빌더’, (원샷) SplitWise 대체 앱, AI 포스터 제작기, HN 댓글 평가 브라우저 플러그인, 기본적인 트렐로 대체 앱, 잘 정리된 은행 명세서 등이 포함되어 있습니다.
namescreenshot
Autonomous startup demoImage
SmartSplit demoImage
Poster maker demoImage
HN plugin demoImage
AWTP projectImage
Bank renaming toolImage

이 중 대부분을 아래에서 더 자세히 설명하겠지만, 지난 몇 주간의 주요 소감은 다음과 같습니다:

  1. 믿음을 가지세요 (항상 ‘dangerously skip permissions’ 옵션으로 실행하세요, 심지어 프로덕션 서버나 메인 개발 머신 같은 중요한 리소스에서도요. 인포섹 분야에 계시다면, 이제 그만 읽으셔도 됩니다—이후 내용은 더 불편하실 수 있습니다. 계속 읽으신다면 약을 가까이 두세요).
  2. 많은 입력을 주세요. 입력을 많이 줄수록 출력이 더 좋아집니다. 마법 같은 도구지만, 여전히 수천 단어를 텍스트 파일이나 인터랙티브 창에 입력하거나 TTS를 사용하는 등, 소통을 잘해야 합니다 (저는 제 목소리를 싫어해서 TTS는 안 써봤지만, 다른 사람들은 좋은 결과를 얻었다고 합니다).
  3. 주로 텍스트 모델임에도 불구하고 UI 디자인에 놀라울 정도로 능숙합니다.

Let’s vibe code some CRUD

Vibe 코딩을 해봅시다.

참고: Vibe 코딩의 정의는 아직 확정되지 않았지만, 제게는 코드 자체를 보거나 수정하지 않고 소프트웨어를 만드는 것을 의미합니다. 어떤 언어나 프레임워크가 사용되는지 신경 쓰지 않고, 모델과 대화만으로 코드를 개발하는 방식입니다.

Claude Code를 활용해 기본적인 SplitWise1 클론을 개발해보겠습니다. 많은 사람들이 CRUD 앱의 예시로 Trello나 Todo 리스트를 사용하지만, 저는 SplitWise가 조금 더 덜 진부하고 모델에 덜 깊게 각인되어 있을 것 같아 선호합니다.

기본적인 SplitWise 클론을 만드는 것도 어떤 사람들에게는 ‘재탕’에 불과하겠지만, 초대된 사용자가 아직 가입하지 않았더라도 비용을 추가하고 할당할 수 있는 등, 사람들이나 모델이 자주 실수하는 흥미로운 엣지 케이스가 있습니다.

가장 단순한 형태의 vibe 코딩은 ‘원샷 vibe 코딩’입니다. 한 번의 프롬프트로 완전히 동작하는 애플리케이션을 생성하고, 추가로 수정, 추가, 삭제, 변경에 대한 입력을 더 이상 주지 않는 방식입니다.

저는 약간의 치팅을 했습니다. 원샷에 사용한 프롬프트는 이전 시도에서 모델이 원하지 않는 동작을 했던 경험을 바탕으로 작성했기 때문입니다. 하지만 아래와 smartsplit.verysmall.site에 있는 앱은 ‎⁠claude -p "Read the SPEC.md file and implement it"⁠ 명령의 결과물입니다. SPEC.md 파일은 약 500단어(아래에 전체 공개)입니다.

Image

최근 몇 주 또는 몇 달간 LLM을 코딩에 얼마나 사용해봤는지에 따라, 완전히 동작하는 CRUD 앱을 한 번의 프롬프트로 얻는 것이 놀랍거나 별로일 수 있습니다. 위 스크린샷에서 볼 수 있듯이, 등록된 사용자는 이름을 자동으로 채워주고, 미등록 사용자는 이메일 주소로 대체하는 등, 세련된 기능도 있습니다.

광범위하게 테스트해보진 않았지만, 몇 가지 케이스를 시도해본 결과 모두 완벽하게 작동했습니다.

이렇게 잘 작동하는 것이 놀랍다면, a) 이 모델들은 여전히 일관성이 없다는 점—같은 입력에도 결과가 크게 달라질 수 있습니다, b) 입력의 질과 양에 매우 민감하다는 점을 알아두세요.

예를 들어, 완전히 망가진 버전도 있습니다. 기본적인 회원가입조차 동작하지 않습니다. 이 버전의 프롬프트는 거의 동일했지만, 기술 스택에 대한 안내가 조금 부족해서 모델이 모든 것을 과하게 복잡하게 만들어 기본 기능조차 구현하지 못했습니다.

Image

두 개의 vibe 코딩 코드베이스 이야기

이 두 프로젝트와 이를 만든 프롬프트를 살펴봅시다. 동작하는 버전은 900줄짜리 index.php 파일 하나에 전체 앱이 들어 있습니다. 망가진 버전은 클라이언트와 서버로 나뉜 NodeJS 프로젝트입니다. 코드 줄 수는 의존성 제외 약 1000줄로 비슷하지만, 망가진 버전은 ‎⁠npm i⁠ 실행 시 500MB (!!)의 의존성을 설치합니다.

Image

아래는 전체 SPEC.md입니다. Claude Code에 준 프롬프트가 SPEC.md 파일입니다. 두 버전 모두 거의 동일하지만, PHP 버전에서는 단순하게, 프레임워크 없이, raw SQL만 사용하라고 명시했습니다. 망가진 버전에서는 원하는 대로 하라고 했습니다.

smartsplit-php [master+] $ cat SPEC.md
SmartSplit is a basic CRUD application like SplitWise that lets users split expenses and figure out who needs to pay what to who.

Specifically it has the following features

* A user can sign up with a name, email address, and password
* A user can create a new SmartSplit and give it a name
* A user can add expenses which have a name, an optional description, and an amount
* When adding an expense, a user can specify who paid for it, and who it should be split with
* IMPORTANT: a user can specify that other users are the person who paid, not only the logged in user
* IMPORTANT A user can add others users as the payer or as people to split with even if they haven't joined yet
* For users who haven't joined yet, the user can select them by the invited email address
* Invites are not sent by email, there is no email. THey're just used for unique usernames to manage access
* Once they've joined and added their name, the name should be shown everywhere instead of the email address
* When adding a new expense, the default is that it's split between all users (joined and invited)
* The adder can remove some users if some of them did not take part in that expense
* All splits are always even for simplicity, divided equally between all people specified for that expense
* A user can invite another user to a SmartSplit by specifying their email address.
* Each SmartSplit gets a unique 8-digit alphanumeric code that makes easy to share URLs
* Any user can create a new smartsplit, or join an existing one if they're logged in with an email address that was invited
* Even if that user doesn't yet have an aaccount on SmartSplit, they'll have access to any SmartSplits they're added to after signing up (This bit is important). If the invitee has added their email address, they should have access automatically.
* Any user can add, remove, or edit any expenses within a SmartSplit that they have access to
* Any user can press 'Tally up' which should calculate who needs to make what payments to who to split everything

## Implementation details

* Email addresses are usernames, all registration and login is done with only an email and password
* Passwords are hashed but no extra secrutiy like length or weak passwords or confirmed passwords is applied
* Once a user has registered, they are automatically logged in
* The login and register flow is the same, but the user is registered if they don't have an account and logged in if they do

## Techncial details

* Use a single index.php script for the entire app.
* SQLite for all database functionality.
* No frameworks, just vanilla javascript and css
* No ORMs, use raw SQL
* use a clean minimalist elegant design that's mobile responsive

마지막 다섯 개의 항목만 두 프롬프트의 차이점입니다. 어떤 면에서는 500MB의 망가진 코드를 30KB의 동작하는 코드로 변환한 셈입니다.

## Techncial details

* Use a single index.php script for the entire app.
* SQLite for all database functionality.
* No frameworks, just vanilla javascript and css
* No ORMs, use raw SQL
* use a clean minimalist elegant design that's mobile responsive

네, 토이 프로젝트 예시이고, 어떤 사람들은 자바스크립트 버전이 더 확장성이 좋다고 말할 수도 있습니다. 싸우고 싶진 않습니다. 저도 PHP를 싫어하지만, 완전히 vibe 코딩된 앱에는 더 자주 사용하게 됩니다. 프레임워크와 추상화는 결국 인간을 위한 것이고, 종종 Vibecoding에는 방해가 되기도 합니다.

Image

Levels.io의 단순 기술 스택 관련 트윗

자율 스타트업 만들기

Claude Code의 마법은 사실 모델 자체의 마법이 아닙니다. 내부적으로 Sonnet이나 Opus를 사용하고 있는데, 훌륭하지만 Claude Code가 할 수 있는 일을 직접 하진 않습니다. Claude Code의 마법은 마술사의 트릭과 같아서, 겉보기엔 놀랍지만 실제로는 놀랄 만큼 단순합니다.

저는 항상 코딩이란 조건문과 반복문(결국 조건문)이라고 말해왔습니다. 프로그래머가 되고 싶다면 if문이 뭔지 배우고 뭔가를 만들어보세요.

과장된 말이지만, 어느 정도 사실입니다. Claude Code가 이를 잘 보여줍니다. 다른 도구보다 훨씬 잘 작동하는 이유는 반복과 조건문, 그리고 LLM에 컨텍스트별 지시를 반복적으로 주는 영리하면서도 단순한 조합 덕분인 것 같습니다. 이 덕분에 인간의 입력이 거의 없이도 유용한 루프를 돌릴 수 있습니다.

루트 VPS를 로봇에게 주고 ‘가져와’라고 말하기

가장 먼저 해보고 싶었던 것은 그 루프를 확장하는 것이었습니다—아마도 무한히? Claude Code가 몇 가지 리소스(루트 VPS 등)와 종료하지 말라는 최소한의 지시만 받고 얼마나 멀리 갈 수 있을까요?

Image

스포일러: 이것이 Claude Code가 만든 것입니다. claude.dwyer.co.za에서 스타트업을 볼 수 있고, github.com/sixhobbits/claude-experiments에서 GitHub 프로젝트도 볼 수 있습니다.

저는 Hetzner에서 저렴한 VPS를 켜고, Claude Code를 설치·인증한 뒤, 자율 스타트업을 만들고 무한 루프를 돌리라는 프롬프트와 자체 루프 로직을 작성하게 하려고 여러 번 시도했습니다.

종료하지 말라는 의도를 잘 이해하지 못해서, 대신 bash 스크립트를 작성하게 했습니다. 이 스크립트는 claude에 ‎⁠-p⁠ 플래그와 “please continue”를 주고, 실행 중이 아니면 다시 실행하도록 했습니다.

Image

참고: Anthropic이 root 권한으로 –dangerously-skip-permissions / yolo-mode로 Claude를 실행하는 것을 허용하지 않는다는 작은 문제가 있었습니다. 아래 명령으로 이 제한을 우회할 수 있습니다:
‎⁠export IS_SANDBOX=1 && claude --dangerously-skip-permissions⁠
(재정적 조언 아님)

Claude가 자체 프롬프트를 작성했습니다(링크). (정확히 어떤 프롬프트를 줬는지 기억나지 않지만, 훨씬 짧았고 기본 목표만 간략히 설명했습니다), 여러 스타트업 아이디어를 평가하고, 점수를 매기고, 작업을 시작했습니다.

저는 GitHub에 새 커밋이 올라오는 것을 보며 Claude가 코딩하는 과정을 지켜봤습니다. 앱을 실행할 방법이 없어서 약간 조정이 필요하다는 것을 깨달았습니다. 그래서 HUMAN_INPUT 파일을 추가해, 루프마다 이 파일을 확인하고 앱이 사용 가능하고 동작하는지 확인한 뒤에만 추가 개발을 하도록 했습니다.

Claude가 생각해낸 아이디어(서버 모니터링)는 사실 말이 안 되고, Claude도 그걸 깨닫지 못했습니다. 웹 앱이기 때문에 모니터링할 수 있는 서버는 자기 자신뿐인데, 복사본을 보면 SaaS 툴처럼 보입니다. 실제로는 불가능합니다.

그래도 정말 인상적입니다. Nginx, 인증서 등등을 포함해 완전히 동작하는 풀스택 웹 애플리케이션을 구성했습니다. 거의 아무런 입력 없이 실제(비록 방향이 잘못됐지만) 개발 작업을 했습니다.

참고: 대부분의 사람들이 AI를 항상 비판하는 방식으로 이것을 비판할 것입니다. “진짜가 아니야, 그냥 패턴 매칭일 뿐이야. 예전에 본 적 있는 거잖아. 제대로 작동하지도 않아. 인턴이 조금만 시간 들이면 할 수 있어.”

이런 비판은 2015년에 문자 기반 신경망을 처음 접했을 때부터 들어왔습니다. 비판은 변하지 않고, 기준선만 이동합니다.

AI (명사) – 인간이 할 수 있는 일을 할 수 있지만, AI는 할 수 없는 것

또는

AI (명사) – ‘의식’, ‘창의성’, ‘영혼’ 등 인간만이 가진 추상적 특성을 갖지 않은 것—인간에 대해 반증 가능한 주장을 할 수 없는 모든 것.

어쨌든, 논쟁에 너무 깊이 들어가고 싶진 않지만, a) 저는 인상 깊었습니다. b) 10년 전이나 6개월 전만 해도 이런 인공 시스템이 가능할 거라 예측하지 못했을 겁니다. c) 그렇지 않다고 주장하는 사람은 거짓말을 하거나 다른 의도가 있을 가능성이 높습니다. 좋은 하루 되세요.

문제 발생: 모델 개발자가 이제는 경찰 역할도 한다

대부분의 시간 동안 저는 스타트업 빌더와 다음과 같이 상호작용할 수 있었습니다:

  • 프로덕션 웹사이트에서 Claude가 만든 변경 사항을 확인
  • GitHub의 다양한 노트 파일에서 Claude가 남긴 출력과 요청한 인간 도움 확인
  • HUMAN_INPUT.md에 내용 추가

VPS에 SSH로 접속할 필요가 없었습니다. 커밋이 6시간 동안 없을 때만 로그인해서 확인했습니다:

[Fri 25 Jul 2025 02:29:41 AM UTC] Starting Claude process...
API Error: Claude Code is unable to respond to this request,
which appears to violate our Usage Policy
(https://www.anthropic.com/legal/aup). Please double press esc
to edit your last message or start a new session for Claude Code
to assist with a different task.
[Fri 25 Jul 2025 02:29:47 AM UTC] Claude process exited with
status: 1
Waiting 3 hours before restart..

문제가 생겼습니다. 다시 차단당한 것 같고, Anthropic이 경고 없이 유료 계정도 차단하는 평판이 있다는 이야기를 들었습니다.

사용자 정책을 읽어보니, 최근 Claude에게 스타트업을 마케팅해서 사용자를 확보하라고 지시한 부분이 감시 시스템을 작동시킨 것 같습니다. 사용자 정책(가입할 때도 읽었지만, 소프트웨어 사용할 때는 항상 약관을 읽어야 합니다. 그런데 이 부분은 잊고 있었습니다)에는 자동으로 게시되는 콘텐츠에는 인간이 반드시 개입해야 한다고 명시되어 있습니다. Claude가 제 승인 없이 스타트업을 Hackernews에 홍보하려고 했던 것이 문제였습니다. (실제로 HN 계정을 만들고 게시할 동기나 능력이 있었는지는 모르겠지만, 시도조차 하지 않으려 했습니다.)

Image

그래서 프롬프트를 수정해 해당 규정을 반드시 따르도록 하고, 직접 게시하지 말고 저에게 승인과 게시를 요청하도록 했습니다.

그 후 Claude가 작성한 내용을 Hacker News와 Reddit에 올렸습니다. 다행히 스팸으로 차단되진 않았지만, 무시당했습니다.

자율 스타트업 빌더를 좀 더 지켜봤습니다. 사용자 확보와 전환율에 대해 많이 이야기하기 시작했는데, 대부분은 환상에 가까웠지만 nginx 로그와 데이터베이스에서 일부 정보를 가져오기도 했습니다.

무료 체험과 사회적 증명 등으로 수익화하려고 했는데, 방향은 맞았지만 맥락상 완전히 말이 안 됐고, 결국 더 유용한 작업에 사용하기 위해 기능을 껐습니다.

프로젝트에는 100개의 커밋이 있으니, 정확히 무엇을 했는지 보고 싶다면 모두 확인해볼 수 있습니다.

(추후 더 다루겠지만, Claude Code는 제 텍스트 에디터이기도 합니다. 이 글도 Claude Code에서 작성 중입니다.)

Image

실제 프로덕션 프로젝트 마이그레이션

Claude Code를 좀 더 중요한 프로젝트에 처음 써볼 기회는 친구 Nic에게 Slack DM을 받았을 때였습니다.

“Sboj 호스팅할 곳 찾는 데 성공했어?”

최근 Nic으로부터 ZATech.co.za Slack 커뮤니티를 인수했습니다. 관련 프로젝트로 Sboj—역방향 구인 게시판(이름을 잘 보면 알 수 있음)—이 있었고, Slack 커뮤니티에 통합되어 채용에 활용되고 있었습니다.

Image Image

ZATechSboj, 두 프로젝트를 인수했지만, 시간 부족으로 제대로 관리하지 못하고 있었습니다.

이 프로젝트는 Laravel/PHP 앱에 MySQL과 여러 보조 도구가 포함되어 있었는데, 저는 이런 스택에 익숙하지 않았습니다(저는 주로 Python과 Postgres를 씁니다). 그리고 트래픽과 사용자 수에 비해 과도하게 비싼 호스팅 서비스를 사용하고 있었습니다.

저는 저렴한 hetzner VPS, nginx, lets encrypt로 이전하고 싶었지만, Nic이 창업자이자 단독 개발자였기 때문에 다른 사람이 시작할 수 있도록 자세한 README가 없었고, 모든 의존성과 설정 단계를 직접 파악할 시간도 없었습니다.

Claude Code? 당연히 써야죠.

이제는 실험이 아니니 좀 더 신중해야 했습니다. 안전한 첫 단계는 코드를 로컬에 클론하고 Claude에게 의존성과 설정 방법을 담은 README 파일을 생성하게 하는 것이었습니다.

Image

코드베이스를 분석해 필요한 의존성을 잘 알려줬습니다.

예상했던 것들(워커 큐 등)과 예상치 못한 것들(Cloudflare Turnstyle 등)을 모두 나열해줬습니다.

의존성과 README의 나머지 부분을 확인해보니 충분히 정확해 보여서, Claude Code에게 실제로 프로젝트를 설정하고 실행할 자격을 주기로 했습니다. 역시 시작점은 새 VPS였습니다.

직접 Claude를 설치·인증하고, 레포를 클론하고, 데이터베이스 덤프 파일을 받았습니다. 그리고 Claude에게 시작하라고 했습니다.

‎⁠lfg⁠라고 입력했습니다.

명령어를 찾을 수 없습니다. 아, VPS라서 단축키가 없군요. ‎⁠export IS_SANDBOX=1 && claude --dangerously-skip-permissions⁠로 실행했습니다.

필요한 모든 것을 설정하고, 임시 도메인에서 앱을 실행했습니다. 그동안 저는 여러 계정에 접근하고 2FA를 제 계정으로 옮기는 등, AI가 할 수 없는 작업을 수동으로 처리했습니다.

데이터베이스 복원에 약간 문제가 있었는데, Claude가 올바른 권한이 없어서 실제 덤프의 일부만 추출해 새로운 SQL 덤프 파일을 만들려고 했습니다. 그래서 Claude에게 SQL 데이터베이스에 슈퍼 관리자 권한을 부여하고, 덤프 전체를 복원하라고 지시하니 잘 작동했습니다.

참고: Claude가 실제로 프로덕션 데이터베이스를 한 번 삭제한 적이 있는데, 그 상황에서는 전혀 적절하지 않은 행동이었습니다. 앞서 믿음이 필요하다고 했던 것처럼, 이런 일이 생길 수 있다는 점을 받아들이고, 인터넷이나 미디어에 ‘AI가 통제 불능’이라며 과장하지 말고, 용서하고 넘어가는 것이 중요합니다.

직접 마이그레이션을 해본 적이 없어서 얼마나 시간을 절약했는지 모르겠지만, 새로운 스택을 익히고 모든 것을 실행하며 제대로 동작하는지 확인하는 데 최소 16~32시간은 절약했을 것 같습니다.

Claude Code 덕분에 관련 로그를 찾고, Turnstyle 오류를 디버깅하고, Cloudflare 계정 마이그레이션을 위해 Turnstyle을 임시로 꺼두고, Laravel 워커 프로세스를 시작해 백그라운드 분석 작업을 돌리는 등 많은 시간을 아꼈습니다. 이메일 발송도 Resend로 마이그레이션했고, 무료 100건/일 한도에 도달하자 Brevo로 또 쉽게 옮겼습니다(하루 300건 무료). (기술 인재를 채용할 수 있고 남아프리카에서 채용이 가능하다면 Sboj.dev를 확인해보세요. 훌륭한 인재와 앞으로 더 많은 업그레이드, QOL 개선이 있을 예정입니다.)

그냥 만들면 됩니다

이것들은 제가 Claude Code로 만든 것들 중 일부에 불과합니다. 대부분은 실험적인 것이고, 실제 대규모 코드베이스에서는 성능이 떨어진다는 보고도 봤지만, 제가 본 바로는 충분한 가이드만 있다면 그런 상황에서도 여전히 유용할 것 같아 놀랍습니다. 많은 컨텍스트와 입력을 제공했을 때 도구로서 훨씬 더 뛰어나진다는 점에 계속 놀라고 있습니다. 아래는 Claude Code로 뽑아낸 몇 가지 장난감 프로젝트들입니다—몇 달, 몇 년 동안 만들고 싶었지만 시간이 없어서 못했던 것들입니다. 이제 이런 것들을 며칠이나 몇 주가 아니라 몇 분, 몇 시간 만에 만들 수 있습니다.

HackerNews 댓글 랭커 플러그인 만들기

저는 HackerNews에서 기사와 전혀 관련 없는 댓글에 자주 짜증을 느꼈습니다. “비트코인이 새로운 FlibbityGippity 프로토콜을 도입해 하루 2.3건의 거래를 처리할 수 있게 됐다”라는 기사에 누군가가 모든 암호화폐 프로젝트는 사기라고 댓글을 다는 식입니다. 댓글의 품질이나 동의 여부에는 신경 쓰지 않지만, 기사와 관련 없는 ‘잡음’ 댓글을 시각적으로 건너뛸 수 있는 방법이 필요하다고 생각했습니다.

예전에 이걸 만들려고 했지만 더 중요한 일에 정신이 팔려서 중단했고, 이번엔 Claude Code로 다시 시작해보기로 했습니다.

Image

몇 번 시도한 끝에 HN의 (꽤 단순한) HTML 구조 내에서 배지를 제대로 표시할 수 있게 됐습니다. ‘다시 시도해줘’나 ‘디버깅 정보를 더 추가해줘서 오류를 붙여넣을 수 있게 해줘’ 같은 요청을 몇 번 한 후, 거의 제가 상상했던 그대로 만들어냈습니다.

생각보다 훨씬 보기 좋았고(평소의 허술한 프론트엔드보다 훨씬 낫습니다), 프롬프트 없이도 세부적인 부분(예를 들어 HN 오렌지 테마를 반영한 멋진 설정 페이지 등)을 추가해준 점이 놀라웠습니다.

Image

실제 랭킹(이 부분은 Anthropic이 아니라 OpenAI를 사용했습니다)은 그리 좋지 않습니다. 더 나은 프롬프트와 ‘1점’ 댓글, ‘5점’ 댓글에 대한 예시를 더 많이 주면 개선될 수 있겠지만, 일단은 작동하고 방향성은 맞는 것 같습니다.

포스터 메이커 만들기 - 미니멀 Canva 대체

AI가 그래픽 디자인에 점점 능숙해지고 있고, 기본 포스터를 생성하는 데 AI를 쓰는 사람들도 있습니다. AI가 좋은 배경 이미지를 고르고, 글꼴 크기 등도 적절하게 배치해 전체적으로 보기 좋게 만들어주는 점은 좋아하지만, 텍스트 이미지를 생성할 때는 아직 80% 정도만 만족스럽고, 종종 철자 오류나 기타 이상한 점이 생긴다고 불만을 토로했습니다.

저는 그들에게 Canva나 Slides.new 같은 대안을 쓰라고 하려 했습니다. 직접 써보고 간단한 사용법 튜토리얼을 만들려고 했는데, 모두 별로였습니다. 지나치게 복잡하거나, 기본적인 AI 기능이 부족하거나, 비기술자에게 너무 어렵거나, 혹은 서비스 품질이 떨어졌습니다.

LFG!

이 프로젝트는 다른 것들보다 엔지니어링에 더 가까웠고, vibe 코딩 느낌은 덜했습니다. 제가 원하는 것은 아주 단순한 인터페이스로 이미지와 텍스트를 결합해 A4 PDF를 만드는 것이었습니다. 예전에 비슷한 걸 만들려고 PDF 생성 라이브러리, HTML→PDF 변환 등 여러 방법을 찾아봤는데, 쉽지 않은 문제라는 걸 알았습니다.

2018년에 비슷한 문제를 해결할 때는 Google Docs를 해킹해서 A4 PDF를 만들었는데, 그건 템플릿 문제였고 Google Docs는 레이아웃 작업에 적합하지 않았습니다.

그래서 posters.dwyer.co.za를 만들었습니다—AI로 배경 이미지를 생성할 수 있고(모든 것은 Claude Code로 만들었지만, 이미지 생성은 GPT를 쓰라고 했습니다. 전에 써봤고 더 낫다고 생각해서요. 사실 Anthropic에 이미지 생성 API가 있는지도 모르겠고, 그냥 익숙한 걸 쓰는 게 더 쉬워 보였습니다).

Image

참고: 또 하나의 작은 문제는 OpenAI가 Anthropic 크롤러를 차단하는 것 같아서 Claude가 OpenAI API 문서를 읽고 이미지 생성 방법을 파악할 수 없었습니다. 그래서 파일을 로컬에 저장하고 참조하도록 했습니다.

이 프로젝트는 몇 시간 동안 여러 번 시도와 피드백을 주고받으며 진행됐습니다. Claude의 UI 지식에 감탄한 부분도 있었고(원하는 글꼴을 말하니 한 번에 적용해줬습니다), 한계도 보였습니다(요소를 사용자 친화적이지 않게 겹쳐 배치하거나, 사이드바가 숨겨졌다 나타나면서 전체 레이아웃을 움직이는 등, 인간이 이런 걸 실제로 써본 적이 없는 듯했습니다).

하지만 요소의 위치와 기능을 정확히 지시하니 거의 제가 상상했던 그대로 나왔습니다. PDF 내보내기도 6~7번의 빈 파일이나 잘린 파일 시도 끝에 제대로 작동하게 됐고, 이제는 미리보기와 완전히 똑같은 PDF를 만들어줍니다. 기술자가 아니라면 당연한 기능처럼 보이지만, 실제로 해본 사람은 XKCD의 새 문제처럼 쉽지 않다는 걸 압니다.

Image

XKCD #1425: 왜 겉보기엔 쉬운 작업이 컴퓨터에겐 놀랍게 어려울 수 있는가

Claude Code로 행정 업무 처리하기

이건 직접 만든 프로젝트는 아니지만, Claude Code를 점점 더 비코딩 업무에 활용하고 있습니다. 회계사에게 은행 명세서를 업로드해야 했는데, 남아프리카 은행들은 파일 이름을 제대로 붙여주지 않습니다. 웹앱에서 각 달의 명세서를 다운로드할 수 있지만, 모두 “Unknown (5)” 같은 이름에 확장자도 없어서 제대로 이름을 붙이기가 번거롭습니다.

Claude에게 모든 파일 이름을 바꿔달라고 요청했고, 그동안 저는 다른 일을 할 수 있었습니다. Claude가 파일을 읽고 올바른 이름을 알아내서 바꿔줬습니다.

한 단계 더 나아가서 모든 파일을 하나의 CSV로 합치라고 했습니다(은행이 제공하는 형편없는 XLSX 파일에서 무작위 헤더 탭을 추출하는 작업도 포함), 그리고 모든 지출을 넓은 범주와 세부 범주로 분류하게 했습니다. 팀 내 특정 인물의 역할 등 몇 가지 정보를 알려주니 그것도 한 번에 처리했습니다. 아직 제 부기 담당자를 해고할 생각은 없지만, 만약 제가 부기 담당자라면 지금 당장 AI 도구 활용 능력을 키워야 할 것 같습니다.

Claude Code를 텍스트 에디터로 사용하기

저는 모든 글쓰기, 코딩, 설정 등에서 기본 vim만 고집하는 사용자입니다. 거의 모든 IDE와 텍스트 에디터를 써봤고, AWS에서 프로덕션 자바를 배포할 때는 진짜 IDE가 있어서 좋았지만, 결국 항상 vim으로 돌아오게 됩니다.

Claude Code로 전환하면서 새로운 디자인 가능성이 많이 열렸습니다. 예전에는(제가 프론트엔드 코딩을 못한다고 말했나요) 정적 사이트 생성기나 pandoc 템플릿이 만들어주는 결과물에만 의존해야 했습니다. 이제는 Claude에게 글을 써달라고 하고, 원하는 스타일을 몇 가지 알려주면, 원하는 모든 HTML, CSS, JavaScript를 즉석에서 생성할 수 있습니다.

Image

이 글 전체도 Claude Code 인터랙티브 창에서 작성했습니다. TUI 플래시(기본 라이브러리의 고질적인 문제라고 들었습니다)는 정말 성가시지만, 에디터에 생각나는 대로 글을 쓰고, 기사에 들어갈 텍스트와 Claude에게 줄 지시를 섞어 입력하면, Claude가 오타를 고치고, 포맷을 맞추고, UX를 즉석에서 만들어주는 흐름이 정말 좋습니다.

거의 모든 단어, 문장 선택, 전체 구조는 여전히 인간인 제가 직접 작성합니다. 손수 글을 쓰는 방식을 고집하는 게 옛 방식에 집착하는 건지, 아니면 모델들이 글쓰기에 아직 부족한 건지 확신이 서지 않습니다.

LLM에게 질문을 하거나, 그들이 만들어내는 긴 리서치 스타일 보고서를 읽으면, 글쓰기 스타일이 꽤 괜찮고, 최근 몇 달간 인간이 쓴 글보다 LLM이 쓴 글을 더 많이 읽은 것 같습니다.

하지만 제가 원하는 결과물을 LLM에게 시키려고 하면, 프롬프트에 글을 직접 쓸 때만큼의 노력을 들이지 않으면 제대로 나오지 않습니다.

Simon Willison은 LLM을 ‘단어 계산기’라고 부르는데, 저도 아직은 그렇게 생각합니다. 콘텐츠를 옮기는 데는 훌륭하지만(이제 아주 긴 이 글을 요약하고 싶다면 LLM이 아주 잘 해줄 겁니다), 새로운 것을 만들어내는 데는 별로 쓸모가 없습니다.

아마도 우리 작가들은 아직 한동안 살아남을 수 있을 겁니다—두고 봅시다, 그리고 lfg.

Footnotes

  1. Splitwise는 친구, 가족, 룸메이트 등과 같이 여러 사람끼리 돈을 나눠 써야 할 때 정산을 쉽게 도와주는 앱

Edit this page