무색
기술블로그
에세이
연구
프로덕트
소개

무색

소프트웨어로 비즈니스의 가능성을 만듭니다. 웹·앱 개발, 음성 AI, 자동화 콘텐츠 제작까지 — 기술이 필요한 곳에 무색이 있습니다.

연락처

[email protected]

사업자 정보

상호: 무색

대표: 배성재

사업자등록번호: 577-58-00836

인천광역시 연수구 인천타워대로 323, 에이동 8층 801-802호 AB-132 (송도동, 송도 센트로드)

© 2026 무색. All rights reserved.
개인정보처리방침·이용약관
INCHEON, KR
2주간의 Vibe Coding 회고: Claude Code로 10개 프로젝트 만들기 — sumi-e 스타일 키 비주얼
크로스커팅
2026. 1. 26.

2주간의 Vibe Coding 회고: Claude Code로 10개 프로젝트 만들기

claude-codevibe-codingai-pair-programmingdeveloper-experienceproductivity

시작은 단순한 호기심이었다

2주 전, 회사 홈페이지를 새로 만들어야 했다. PayloadCMS와 Next.js 15 조합으로 가기로 했는데, React 19에 App Router까지 써야 하니 세팅할 게 산더미였다. 평소라면 공식 문서 뒤적이며 일주일은 걸렸을 초기 설정을 Claude Code에 맡겨봤다.

"PayloadCMS 3.x + Next.js 15 + TypeScript + Tailwind로 회사 홈페이지 세팅해줘. 블록 기반 페이지 빌더 패턴으로."

이 한 줄이 2주간의 Vibe Coding 여정을 열었다.

Vibe Coding이 뭔데

Vibe Coding은 Andrej Karpathy가 처음 쓴 표현이다. 코드를 한 줄 한 줄 타이핑하는 대신 AI에게 의도를 전달하고 생성된 코드를 리뷰하는 방식으로 개발하는 걸 뜻한다. 전통적인 개발이 "직접 운전"이라면 Vibe Coding은 "내비 찍고 자율주행 모드"에 가깝다. 목적지(기능 명세)를 알려주면 AI가 경로(구현)를 찾아간다.

다만 자율주행이라고 해서 운전대에서 손을 떼면 안 된다. 나는 이 2주 동안 Claude Code를 "주니어 개발자"처럼 다뤘다. 방향을 잡아주고 결과물을 검토하고 잘못된 부분을 바로잡는 시니어 역할을 맡은 거다.

2주 동안 만든 것들

솔직히 이 속도는 나 자신도 놀랐다. 2주 만에 10개 프로젝트가 돌아가는 상태로 만들었다.

1주차에는 기반을 닦았다. museck.com 홈페이지를 PayloadCMS + Next.js 15로 세팅하고 Docker 컨테이너화한 뒤 K8s에 올렸다. Gitea Actions로 CI/CD까지 연결해서 git push 한 번이면 스테이징 환경에 자동 배포되게 만들었다.

2주차에는 재미가 붙었다. 홈페이지 디자인을 안티브루탈리즘으로 갈아엎고 블로그 시스템을 붙이고 Claude Code 스킬을 만들고 ComfyUI로 이미지 생성 파이프라인까지 구축했다. 이 블로그 글에 들어간 대표 이미지도 그 파이프라인으로 만든 거다.

빨라진 건 프로토타이핑이었다

Claude Code의 압도적 강점은 프로토타이핑 속도다. museck.com 초기 세팅을 예로 들면 이렇다.

PayloadCMS 컬렉션 5개(Users, Media, Posts, Projects, Pages) 정의하고 블록 컴포넌트 5개(Hero, Content, Features, CTA, ImageText) 만들고 Tailwind 디자인 토큰 설정하고 Lexical richText 시리얼라이저까지 구현하는 데 하루가 걸렸다. 혼자 했으면? 최소 3~4일은 잡아야 했다.

// Claude Code가 만든 RenderBlocks 패턴
// blockType 기반으로 블록을 동적 렌더링한다
export function RenderBlocks({ blocks }: { blocks: LayoutBlock[] }) {
  return blocks.map((block, i) => {
    switch (block.blockType) {
      case 'hero': return <HeroBlockComponent key={i} block={block} />
      case 'features': return <FeaturesBlockComponent key={i} block={block} />
      // ...
    }
  })
}

멀티스택 대응 능력도 좋았다. TypeScript, CSS, Docker, K8s YAML, GitHub Actions 워크플로우를 넘나들며 작업하는데 별도의 컨텍스트 스위칭 비용이 없었다. 내가 "이제 Docker 설정 해줘"라고 하면 바로 Dockerfile과 docker-compose.yml을 뽑아줬다.

디자인도 AI와 함께할 수 있을까

가장 인상적이었던 건 안티브루탈리즘 디자인 리뉴얼이었다. 처음에 미니멀하게 만든 홈페이지가 너무 밋밋했다. 그래서 Claude Code에게 이렇게 말했다.

"안티브루탈리즘 스타일로 전면 리뉴얼하자. 오프화이트 배경에 테라코타 악센트, Archivo Black 폰트, 날카로운 모서리, 두꺼운 보더."

2일에 걸쳐 11개 커밋으로 색상 팔레트부터 타이포그래피, Hero 비대칭 레이아웃, 새 블록 컴포넌트까지 전부 바뀌었다. Tailwind 디자인 토큰 레이어를 잘 분리해둔 덕분에 가능한 일이었다.

/* 브루탈리즘의 핵심: 모든 둥글림과 트랜지션 제거 */
@layer base {
  * { border-radius: 0 !important; }
  *, *::before, *::after {
    transition: none !important;
    animation: none !important;
  }
}

물론 한 번에 완성되진 않았다. 커밋 히스토리를 보면 "안티브루탈리즘 디자인 전면 리디자인" 뒤에 "비대칭 레이아웃 전면 리뉴얼"이 오고 "색상 팔레트 전환"이 이어진다. 점진적으로 발전시키는 과정이 그대로 드러난다. 모바일 반응형 h1 사이즈도 별도 커밋으로 나왔는데 데스크탑 중심으로 먼저 디자인한 뒤 모바일 테스트에서 문제를 발견한 거다.

AI와의 디자인 협업에서 배운 점은 이거다. 방향과 레퍼런스를 명확히 주면 AI가 구현을 빠르게 해낸다. 하지만 "좋은 디자인"을 판단하는 건 여전히 사람의 몫이었다.

스킬 시스템: AI에게 장기 기억을 심는 방법

Claude Code에는 재밌는 기능이 있다. 스킬(Skill)이라고 부르는 마크다운 파일을 읽어서 특정 작업의 맥락을 자동으로 파악하게 만드는 시스템이다.

2주 동안 만든 스킬 중에서 대표적인 두 개를 꼽자면 이렇다.

wrap 스킬은 세션 마무리를 자동화한다. Claude Code 세션이 길어지면 컨텍스트가 압축(compaction)되면서 대화 맥락이 사라진다. 이걸 막으려면 세션 끝에 반드시 문서화하고 커밋하고 스킬 사용 기록을 남겨야 하는데 매번 같은 걸 반복하니까 스킬로 만들었다. /wrap 한 번이면 문서화, git commit, 스킬 record가 순서대로 실행된다.

comfy-prompt 스킬은 z_image_turbo라는 이미지 생성 모델에 최적화된 프롬프트를 만들어준다. 이 모델은 CFG를 안 쓰기 때문에 네거티브 프롬프트가 먹히지 않는다. "no watermark" 대신 "clean image without any text overlays"처럼 긍정 표현으로 바꿔야 하는데 이런 규칙을 스킬에 넣어두니까 매번 설명할 필요가 없어졌다.

스킬의 핵심은 반복되는 지식을 코드화하는 거다. 한 번 삽질한 내용을 스킬에 기록해두면 다음 세션에서는 같은 실수를 반복하지 않는다. AI에게 장기 기억을 심어주는 셈이다.

솔직한 한계

장점만 늘어놓으면 광고가 되니 한계도 솔직하게 이야기하겠다.

컨텍스트 윈도우 한계가 제일 크다. 프로젝트가 커지면 Claude Code가 전체 코드베이스를 파악하지 못한다. skill-version-manager를 만들 때 하드코딩된 경로 문제를 겪었는데 WSL2에서 홈 디렉토리 구조가 바뀌자 스킬이 통째로 먹통이 됐다. CWD 기반 감지로 바꿔서 해결했지만 이건 결국 내가 문제를 발견하고 방향을 잡아줘야 했다.

때로는 자신 있게 틀린다. ESM 프로젝트에서 PayloadCMS 설정 파일 호환성 문제가 터졌을 때 Claude Code는 처음에 잘못된 방향으로 수정을 시도했다. CJS config 파일에 .cjs 확장자를 붙여야 하는 건 내가 알려줘야 했다. AI가 모르는 영역에서는 확신에 찬 목소리로 엉뚱한 답을 내놓기도 한다.

아키텍처 결정은 사람이 해야 한다. "PayloadCMS로 할까 Strapi로 할까" 같은 기술 선택이나 "모노레포로 갈까 멀티레포로 갈까" 같은 구조적 결정에는 AI가 도움이 안 된다. 프로젝트의 제약 조건과 팀 상황을 종합적으로 판단하는 건 여전히 사람의 영역이다.

그래서 Vibe Coding은 쓸 만한가

결론부터 말하면 그렇다. 단 조건이 있다.

Vibe Coding은 시니어 개발자에게 날개를 달아준다. 이미 아키텍처를 설계할 줄 알고 코드 리뷰를 할 수 있는 사람이 반복적인 구현 작업을 AI에게 맡기면 생산성이 극적으로 올라간다. 반면 아직 기초가 부족한 주니어 개발자가 Vibe Coding에만 의존하면 위험하다. AI가 만든 코드를 검증할 능력이 없으면 결국 기술 부채가 쌓인다.

2주 동안 10개 프로젝트를 만들면서 깨달은 건 이거다. AI 페어 프로그래밍의 본질은 "코드를 대신 짜주는 것"이 아니라 "피드백 루프를 빠르게 돌리는 것"이다. 아이디어를 코드로 바꾸고 결과를 확인하고 방향을 수정하는 사이클이 압도적으로 빨라진다.

스킬 시스템으로 AI의 학습 곡선을 관리하고 wrap 같은 자동화로 워크플로우를 표준화하면 이 사이클은 더 빨라진다. 결국 좋은 도구는 사용자가 잘 길들인 도구다. Claude Code도 마찬가지다.

자주 묻는 질문

Vibe Coding이란 무엇인가요?
Andrej Karpathy가 제안한 개념으로, 코드를 직접 타이핑하는 대신 AI에게 자연어로 의도를 전달하고 생성된 코드를 리뷰하는 개발 방식입니다. 개발자는 방향 설정과 코드 검증에 집중합니다.
Claude Code 스킬 시스템은 어떻게 작동하나요?
마크다운 파일에 작업별 규칙과 맥락을 정리해두면 Claude Code가 자동으로 읽어 적용합니다. 한 번 삽질한 내용을 기록해두면 다음 세션에서 같은 실수를 반복하지 않는 장기 기억 역할을 합니다.
Vibe Coding은 주니어 개발자에게도 효과적인가요?
시니어에게는 반복 구현을 맡겨 생산성을 높이는 도구지만, 기초가 부족한 주니어가 의존하면 AI 코드를 검증할 수 없어 기술 부채가 쌓일 위험이 있습니다. 코드 리뷰 능력이 전제됩니다.
크로스커팅(10/18)
Prev

GitHub 대신 Gitea: 셀프호스팅 Git + CI/CD를 2주간 운영해보니

Next

Claude API 대신 Claude Code를 선택한 이유