Skip to main content

클로드 코드 복붙이 매일 깨져서, 하루 만에 우회 앱을 만들어 공개했다

· By Simpson Gyusup Sim · 14 min read

TLDR

  • Claude Code 터미널에서 복사해 Notes나 Google Docs에 붙여넣으면 줄바꿈과 들여쓰기가 계속 깨졌다. 공개 이슈 #18170으로 올라와 있지만 Anthropic이 고쳐줄 때까지 매번 손으로 정리할 수는 없었다.
  • 벤더가 언제 고칠지 모르는 문제라서, 클립보드를 붙여넣기 직전에 내 쪽에서 정리하는 맥 메뉴바 앱을 하루 만에 만들어 오픈소스로 공개했다. 레포는 retention-corp/openpaste, 원본 이슈 댓글에 링크를 걸어 같은 문제를 겪던 사람들이 바로 쓸 수 있게 했다.
  • 진짜 교훈은 도구 자체가 아니라 두 가지였다. 벤더 로드맵에 내 작업 속도를 묶지 않는 태도, 그리고 내가 상상한 입력이 아니라 실제 사용자 데이터로 검증해야 한다는 것.

1. 문제는 "복사해서 붙여넣기"였다

Claude Code로 작업하면서 긴 설명이나 코드 블록을 복사해 Notes, Google Docs, Slack에 붙여넣는 일은 하루에도 수십 번이다. 그런데 붙여넣을 때마다 다음 중 하나가 깨져 있었다.

  • 한국어 문장이 터미널 너비에서 끊긴 그대로, 중간에 강제 줄바꿈이 들어간 채로 붙는다
  • 불릿 리스트가 프롬프트 정렬 공백을 그대로 끌고 와서 4칸·6칸씩 들여써진다
  • cat <<'EOF' 같은 히어독 래퍼가 본문 앞뒤로 붙어 있다
  • 채팅 앱에서 복사한 스타일 HTML이 Notes에 회색 버블로 박힌다

매번 손으로 정리했다. 한 번은 괜찮은데, 하루에 열 번 스무 번 반복되니 체감상 작업 속도가 떨어지기 시작했다. 그러다 GitHub에서 같은 문제를 정확히 글로 정리해둔 이슈 하나를 발견했다.

anthropics/claude-code#18170 — Copy/paste from terminal includes unwanted indentation and trailing spaces

댓글 중 하나는 이렇게 쓰여 있었다.

"Applications written in the 1980s didn't have this problem."

공감은 됐지만, 불평만으로는 오늘 오후에 Notes에 뭔가를 붙여넣을 때 상황이 바뀌지 않는다.

2. 벤더가 빠르게 못 고치는 이유, 그리고 내 선택

소프트웨어적으로 보면 이 문제는 명백히 Claude Code 쪽의 책임이다. 터미널 출력에 시각적 정렬용 공백을 넣고, 그 공백을 포함해서 클립보드로 퍼가는 구조가 원인이니까.

그런데 현실에서 벤더가 이걸 빠르게 고치기 어려운 이유가 몇 개 있다.

  • Claude Code는 여러 터미널 에뮬레이터 위에서 동작하고, 복사 동작은 터미널이 담당한다. 즉, Anthropic이 직접 깨끗한 버전을 클립보드에 넣기가 어렵다.
  • 이 문제는 UX 불편이고 보안·장애급 버그가 아니라서 내부 우선순위가 낮다. 대기열 맨 뒤에 있다.
  • 고쳤다가 다른 사용자(코드 들여쓰기를 그대로 복사하고 싶은 사람)의 기대를 깰 위험이 있다.

내가 이슈 스레드를 몇 주 방치하든 며칠마다 체크하든, 다음 주 월요일에 해결돼 있을 확률은 낮다. 벤더 수정을 기다리는 동안 내가 잃는 건 "작업 마찰"이다. 매일 조금씩, 합쳐보면 꽤 큰 시간이다.

그래서 관점을 바꿨다.

원인을 만드는 쪽에서 못 고치면, 내가 받는 쪽에서 덮으면 된다.

Claude Code가 클립보드에 무엇을 넣는지는 못 건드려도, 내가 그걸 "붙여넣기 직전에 정리하는 레이어"를 중간에 끼울 수는 있다. 맥의 시스템 클립보드는 모든 앱이 같이 쓰는 공용 자원이다. 거기에 읽기 → 정리 → 다시 쓰기 → 붙여넣기를 한 번에 묶는 작은 도구가 있으면, Claude Code든 Codex든 Cursor든 채팅 앱이든 어디서 복사했든 깨진 클립보드를 그 자리에서 고칠 수 있다.

받는 쪽에서 덮는 접근의 진짜 장점은 이거다. 원인이 여러 개여도 수정은 하나면 된다. 다른 AI CLI, 터미널, 채팅 앱에서 오는 깨진 클립보드를 전부 같은 레이어에서 처리한다.

이건 엔지니어링 문제만의 이야기가 아니다. 솔로로 운영하다 보면 "이건 결국 벤더가 고쳐야 해"라는 문제를 매주 만난다. 그 중 대부분은 벤더 입장에선 우선순위가 낮은 엣지 케이스다. 기다리면 누적되고, 내가 받는 쪽에서 덮으면 오늘부터 해결된다.

3. GitHub 이슈 댓글에서 공개 레포까지 하루

타임라인은 대략 이렇다.

  1. 아침에 Claude Code 복붙 문제가 또 발생
  2. GitHub 이슈 검색 → #18170 발견, 댓글들 확인
  3. 맥 메뉴바 앱 프로토타입 설계: 글로벌 핫키 → 클립보드 읽기 → 정리 로직 → 다시 쓰기 → Cmd+V 자동 실행
  4. Swift로 구현, 핵심 정리 로직 작성 (한국어 wrap 복구, 쉘 프롬프트 제거, 리스트·테이블 보존)
  5. 회귀 테스트 정렬, 릴리즈 빌드
  6. dist/OpenPaste.app 패키지, /Applications/에 설치
  7. 실사용하며 추가 버그 몇 개 발견(뒤에서 설명)
  8. retention-corp/openpaste로 공개 레포 생성, MIT 라이선스, README 작성
  9. 이슈 #18170에 "이렇게 고쳐서 공개했다" 라는 짧은 댓글 + 레포 링크

쓰다 보니 흐른 시간보다, 이 루프의 각 단계가 서로를 밀어주는 구조가 더 흥미로웠다. 이슈 읽기 → 설계 → 구현 → 릴리스 → 댓글 답변까지, 각 단계가 각자 분리된 작업이 아니라 앞의 결과가 다음 단계를 더 쉽게 만드는 구조였다.

특히 마지막 "이슈 스레드에 댓글 남기기"가 따로 마케팅이나 런칭 이벤트 없이도 자연스러운 배포 채널이 됐다. 같은 문제로 검색해서 그 이슈에 들어온 다른 사용자가 그 댓글을 보게 된다. 내가 만든 해결책이 문제의 검색 결과 위에 얹히는 것. 오늘의 유통 전략이다.

4. 신뢰 없이도 쓸 수 있게 만든 것들

이 앱이 "사용해도 되는 수준"이 되려면, 빠른 구현만으로는 부족하다. 내가 복사한 모든 걸 보는 앱을 내 맥에 상주시키려면 누구든 스스로 확인할 수 있어야 한다. 그래서 의식적으로 뺀 것들이 있다.

  • 네트워크 호출 없음. 어떤 URL에도 접근하지 않는다. grep -RE "URLSession|URLRequest|CFNetwork" Sources/로 확인 가능하다.
  • 텔레메트리·분석·자동 업데이트 없음. 한 번 빌드해서 쓰는 정적 도구.
  • 파일 시스템 쓰기 없음. 로그도 시스템 로거만 사용, 디스크에 따로 쌓지 않는다.
  • 오픈 소스 + 한 파일로 읽힘. 핵심 정리 로직 ClipboardFormatter.swift 한 파일에서 모든 처리가 일어난다. 빌드 없이 코드 레벨에서 검증 가능.

여기서 재미있는 건, 이게 "기존 클립보드 매니저 대비 차별점"도 된다는 사실이다. 비슷한 도구들은 App Store에 있는 바이너리를 믿어야 한다. OpenPaste는 신뢰가 필요 없는 설계가 된다. 바이너리가 아니라 소스 몇 백 줄을 직접 보면 되니까.

5. "내가 상상한 입력"으로만 테스트한 대가

릴리스 직후 사용자가 실제 샘플을 붙여넣고 나서야 드러난 버그 두 개가 있었다.

버그 1. Claude Code 불릿 리스트가 리스트로 인식되지 않고 단락 블록으로 처리돼서, 불릿 중간이 이상하게 끊겼다.

버그 2. 불릿 첫 줄 뒤에 빈 줄이 한 번 들어가면 뒤 문장이 별개 단락으로 쪼개졌다.

둘 다 "쉬운 버그"였다. 그런데 출시 전 회귀 테스트 28개를 돌렸는데도 못 잡았다. 원인을 복기하니, 근본 원인은 하나였다.

나는 실제 Claude Code 출력이 아니라, 내가 상상한 입력 형태로 테스트하고 있었다.

클로드 코드가 실제로 쓰는 불릿 문자는 (U+25CF, Black Circle)인데, 나는 (U+2022, Bullet)만 테스트 고정값으로 넣고 있었다. 두 문자는 똑같아 보이지만 바이트가 다르다. 클로드 코드 터미널이 불릿 첫 줄 뒤에 빈 줄을 끼워서 복사한다는 사실도, 실제 출력을 진짜로 캡처해본 적이 없어서 몰랐다.

내 테스트는 "코드가 내 가정대로 작동한다"는 동어반복이었다. 실제 사용자 입력 분포를 반영하지 않는 테스트는 제품을 검증하지 않는다.

이건 엔지니어 얘기로만 들릴 수 있지만, 똑같은 실수가 프로덕트·그로스 전반에서 매일 일어난다.

  • 광고 카피를 내가 상상한 페르소나에만 맞춰 쓰고, 실제 유입 검색어를 한 번도 본 적 없음
  • 온보딩 퍼널을 내가 상상한 신규 유저 플로로 설계하고, 실제 세션 리플레이를 한 번도 본 적 없음
  • 결제 실패 알림을 내가 상상한 에러 유형에만 맞춰 만들고, 실제로 쌓인 에러 코드 분포를 본 적 없음

"내가 상상한 입력"은 언제나 실제 입력 분포보다 좁다. 그래서 출시 직후에만 버그가 쏟아진다.

고친 방법은 두 가지다.

  1. 실측 기반 탐침 테스트. 내가 갖고 있는 Claude Code 세션 로그에서 실제 assistant 출력을 추출하고, 터미널 wrap을 흉내 내는 합성 케이스 13개를 돌린 뒤 각 출력을 육안으로 본다. 출력이 이상하면 거기가 버그다.
  2. 한국어 폭 기반 길이 판정. 한국어 글자는 숫자로 세면 1이지만 시각적 폭은 2다. 짧아 보이는 한글 두 줄도 실제로는 wrap된 한 문장일 수 있다. 시각적 폭을 기준으로 길이를 재도록 바꾸자 여러 버그가 한 번에 풀렸다.

출시 당일 저녁까지 이 루프를 몇 바퀴 돌리면서 6가지 패턴(툴 마커 블록 보존, URL이 wrap됐을 때 공백 삽입 금지, $ 쉘 프롬프트 블록 보존, 한국어 연결어미로 끝나는 줄 강제 join 등)을 추가로 고쳤다. 테스트는 30개에서 37개로 늘었고, 지금은 각각이 실제 입력 사례에서 유도된 테스트다.

6. 사용법

retention-corp/openpaste에서 빌드 후 설치한다.

git clone https://github.com/retention-corp/openpaste.git
cd openpaste
swift build -c release
./scripts/build-macos-app.sh
cp -R dist/OpenPaste.app /Applications/
codesign --force --deep --sign - --identifier io.local.openpaste /Applications/OpenPaste.app
open /Applications/OpenPaste.app

메뉴 바에 OP 아이콘이 뜬다. 전역 핫키는 두 개다.

  • Control + Command + P — 구조 유지 정리 (단락, 리스트, 테이블, 코드 블록을 유지하며 wrap만 복구)
  • Control + Option + Command + P — 한 줄 정리 (리스트 마커·빈 줄 전부 제거하고 한 줄로 평탄화)

메뉴에는 "Clean Only" 변형(붙여넣기 없이 클립보드만 정리)과 "Show Raw Clipboard"(현재 클립보드의 원본 텍스트·HTML·정리된 결과를 나란히 보여주는 디버그 창)도 있다.

자동 붙여넣기는 맥 Accessibility 권한을 사용한다. 권한이 없으면 클립보드만 정리되고 붙여넣기는 수동으로 해야 한다.

7. 이 경험이 다음 작업을 바꾸는 방법

솔로로 일하거나 소수 인원으로 운영하다 보면, "벤더가 고쳐주겠지"라는 태도가 누적될수록 내 작업 속도의 상한선이 벤더 로드맵에 묶인다. AI 도구 생태계는 새로운 문제가 매주 생기고, 그 중 상당수는 내 고유 워크플로에서만 마찰을 일으키는 엣지 케이스다. 벤더가 내 엣지 케이스를 이번 분기에 고칠 이유는 별로 없다.

그래서 매번 질문이 바뀐다.

  • "이 문제는 누가 고쳐야 하지?" → "내가 받는 쪽에서 덮을 수 있나?"
  • "벤더에 이슈 남길까?" → "남기되, 동시에 내 쪽 우회 경로도 만든다."
  • "도구 하나 더 쓰는 게 부담 아닐까?" → "오픈 소스로 만들면 다른 사용자의 검증까지 받는다."

이번에 OpenPaste를 만들면서 세 가지를 작업 프로세스로 박아뒀다.

  1. 원인 쪽 vs 받는 쪽 질문. 새 문제를 만나면 먼저 "이건 원인 쪽에서 고쳐야 하는 문제인가, 내가 받는 쪽에서 덮을 수 있는 문제인가"를 분리한다. 원인이 벤더면, 받는 쪽 해결이 가능한지 30분 동안 스케치해본다.
  2. 실측 기반 테스트 우선. 내가 상상한 입력으로 쓴 테스트·카피·퍼널은 제품을 검증하지 않는다. 실제 사용자 데이터(세션 로그, 클립보드 덤프, 검색 쿼리, 에러 코드)에서 출발한다.
  3. 오픈 소스 + 이슈 스레드 = 배포 채널. 런칭 이벤트 없이도, 원 문제를 검색해서 찾아오는 사람에게 내 도구가 노출된다.

이 세 개는 이번 건에만 국한되지 않는다. 다음에 Notion 복붙이 깨지거나, Slack 검색이 불편하거나, 다른 AI CLI의 출력이 이상하게 정렬되는 걸 만나면 같은 루프가 재사용된다. 개별 문제의 해결이 다음 문제의 해결을 더 빠르게 만든다. AI 시대에 솔로로 움직이는 사람이 복리로 쌓는 자산이 이거라고 본다.

마치며

이 글의 핵심은 OpenPaste라는 앱 자체가 아니다. 맥에 작은 클립보드 정리 유틸리티가 하나 더 있는지 없는지는 대부분의 사람에게 중요하지 않다.

핵심은 벤더 로드맵에 내 속도를 묶지 않는 태도다. 그리고 그걸 가능하게 하는 루프 — 받는 쪽에서 덮고, 실측으로 검증하고, 이슈 스레드에 배포하는 루프 — 가 한 사람 규모에서도 돌아간다는 실증이다.

AI 도구 생태계에서 가장 손해 보는 방식은 "수정 요청하고 기다리는 것"이다. 가장 이익을 보는 방식은 "내가 우회 경로를 만들고, 같은 문제를 가진 다른 사람에게 링크 하나 던지는 것"이다.


직접 써보기

전문가와 함께하기

AI 도구 스택 튜닝, 솔로/소수 인원 운영에서의 레버리지 설계가 필요하다면:

📅 30분 무료 상담 예약

  • AI 도구 스택 간 마찰 진단
  • 솔로 오퍼레이터 생산성 설계
  • 오픈 소스 기여를 유통 전략으로 전환하는 루프

Retention Inc. — AI-Augmented Growth Consulting

About the author

Simpson Gyusup Sim
Updated on 2026년 4월 20일
무엇이든 물어보세요! 👋
15분 미팅 예약