Insights
비개발자를 위한 Claude Code / Codex 코드: 제대로 작동하게 테스트하고 견고하게 만드는 법
2026-06-05
By
Roi Nam
Insights
비개발자를 위한 Claude Code / Codex 코드: 제대로 작동하게 테스트하고 견고하게 만드는 법
June 5, 2026
By
Roi Nam
Insights

비개발자를 위한 Claude Code / Codex 코드: 제대로 작동하게 테스트하고 견고하게 만드는 법

2026-06-05
By
Roi Nam
*이 글은 AB180 CEO 남성필 대표님이 Claude Code와 Codex를 사용하며 느낀 인사이트를 직접 정리한 수기입니다.

Claude Code나 Codex로 무언가를 만들기 시작하면, 처음에는 속도에 놀란다. 문서가 생기고, 코드가 생기고, 웹페이지가 뜨고, 자동화가 돌아간다. 비개발자 입장에서는 특히 더 강력하다. 예전 같으면 개발자에게 부탁해야 했던 일을 직접 시도할 수 있기 때문이다.

그런데 여기서 가장 위험한 착각이 생긴다.

"에이전트가 다 만들었다고 했으니, 이제 완성된 것 아닐까?"

대부분의 경우 그렇지 않다. 에이전트가 만든 것은 완성품이라기보다 초안에 가깝다. 잘 작동하는 것처럼 보이지만, 숨은 전제가 틀렸을 수 있고, 실제 환경에서는 깨질 수 있고, 내가 의도한 것과 다른 방식으로 문제를 해결했을 수도 있다.

Claude Code나 Codex는 코드를 쓰는 능력도 뛰어나지만, 그럴듯하게 추론하고 넘어가는 능력도 뛰어나다. 그래서 비개발자가 에이전트를 잘 쓰려면 "만드는 법"만큼이나 테스트하고 강하게 만드는 법을 알아야 한다.

이 글은 내가 Claude Code, Codex, 그리고 내부 마케팅 엔진을 쓰면서 배운 검증 방법을 정리한 것이다. 개발자가 아니어도 적용할 수 있는 방식으로 썼다.

Claude Code 작업에서 좋은 계획은 시작일 뿐이다

처음부터 Superpowers나 우로보로스 같은 도구로 implementation plan을 잘 짜는 것은 중요하다. 무엇을 만들지, 어떤 순서로 만들지, 어떤 파일을 건드릴지 미리 정하면 결과물의 품질이 크게 올라간다.

하지만 좋은 계획이 모든 문제를 막아 주지는 않는다. 명료해 보이는 기획 안에도 놓친 조건이 많다. 예를 들어 "리스트를 만들어 줘"라고 했을 때, 에이전트가 어떤 기준으로 매칭했는지, 어떤 데이터는 제외했는지, 비슷한 이름을 같은 회사로 봤는지까지는 자동으로 안전해지지 않는다.

그래서 중요한 질문은 이것이다.

"이 작업이 끝났다는 것을 무엇으로 증명할 것인가?"

비개발자가 Claude Code를 쓸 때는 결과물을 받는 사람이 아니라, 검증 기준을 정하는 사람이 되어야 한다. 에이전트에게 "완성해 줘"라고 말하는 것보다 "이 조건을 통과해야 완성으로 보자"라고 말하는 편이 훨씬 강하다.

코드 리뷰를 꼭 시켜라

가장 먼저 할 일은 코드 리뷰다. Claude Code나 Codex가 어떤 작업을 끝냈다고 말해도, 그 작업이 실제로 좋은 품질이라는 뜻은 아니다. 기능은 돌아가지만 구조가 이상할 수 있고, 에러 처리가 빠졌을 수 있고, 테스트가 비어 있을 수 있다.

작업이 끝나면 이렇게 말해 보자.

  • 지금부터 코드 리뷰어 입장에서 봐줘.
  • 칭찬이나 요약보다 버그, 회귀 가능성, 빠진 테스트, 보안 위험을 먼저 찾아줘.
  • 파일과 줄 단위로 근거를 들어주고, 정말 문제가 있는 것만 말해줘.

가능하면 작업한 에이전트가 아니라 다른 에이전트에게 리뷰를 맡기는 것이 좋다. 같은 에이전트는 자신이 만든 전제를 그대로 믿기 쉽다. 다른 에이전트는 조금 더 독립적으로 본다.

큰 작업이라면 코드 리뷰를 한 번 더 돌릴 수도 있다. 실제로 같은 PR을 두 번째로 리뷰하면 첫 번째 리뷰에서 못 본 문제가 다시 나오는 경우가 있다. 다만 리뷰를 많이 돌린다고 무조건 좋아지는 것은 아니다. 리뷰 결과에도 할루시네이션이 섞일 수 있다. 중요한 것은 "많이 돌리기"가 아니라, 발견된 문제를 내가 읽고 판단하는 것이다.

Claude Code와 Codex를 서로 교차 검증하라

Claude Code가 만든 것을 Codex에게 보여 주거나, Codex가 만든 것을 Claude에게 보여 주는 것도 좋은 방법이다. 서로 다른 모델은 같은 코드를 다른 방식으로 의심한다.

이때는 단순히 "괜찮아?"라고 묻지 말고, 역할을 좁혀 주는 편이 좋다.

  • 이 코드는 이미 다른 에이전트가 작성했다.
  • 너는 구현자가 아니라 검증자다.
  • 사용자가 실제로 겪을 수 있는 실패, 잘못된 데이터 처리, 테스트 누락, 배포 후 위험만 찾아줘.
  • 근거 없는 추측은 하지 말고, 확인 가능한 것과 추정인 것을 구분해줘.

이 방식은 특히 비개발자에게 유용하다. 내가 직접 코드를 완전히 이해하지 못해도, 독립된 두 에이전트가 서로 다른 관점으로 지적한 부분을 비교하면 위험한 부분이 더 선명해진다.

아예 프로세스 안에 Guardrail Agent를 넣어라

한 번 쓰고 버릴 작업이 아니라 반복적으로 쓰는 스킬이나 자동화라면, 처음부터 멀티 에이전트 구조로 설계하는 것이 좋다. 예를 들어 다음처럼 나눌 수 있다.

역할하는 일
Planner목표, 입력, 출력, 제약 조건을 정리한다.
Executor실제 구현이나 산출물을 만든다.
Reviewer버그, 빠진 조건, 테스트 누락을 찾는다.
Guardrail반드시 지켜야 할 원칙을 검사한다.
Calibrator결과물이 너무 길거나, 약하거나, 톤이 어긋났는지 조정한다.

여기서 핵심은 Guardrail Agent다. "고객명을 추정하지 말 것", "확정적 ID가 있으면 fuzzy matching을 쓰지 말 것", "실제 발송 전에는 dry-run을 거칠 것" 같은 원칙을 미리 넣어 두면, 에이전트가 빠르게 만들다가 중요한 안전장치를 건너뛰는 일을 줄일 수 있다.

다만 refinement loop를 너무 많이 돌린다고 결과물이 무조건 좋아지지는 않는다. 개인적으로는 두세 번이면 충분한 경우가 많다. 네 번, 다섯 번 돌리면 문장이 과하게 다듬어지거나, 처음 의도가 흐려질 때도 있다.

TDD를 비개발자식으로 이해하라

TDD는 Test-Driven Development의 약자다. 개발자들은 보통 코드를 짜기 전에 결과물의 성공 요건을 정의하고 이에 대한 여러 테스트를 먼저 만든다는 뜻으로 쓴다. 비개발자는 이것을 조금 더 넓게 이해하면 된다.

"완성 전에 통과해야 할 시험지를 먼저 만든다."

예를 들어 이런 식이다.

  • 버튼을 누르면 실제로 저장되어야 한다.
  • 잘못된 이메일을 넣으면 에러가 떠야 한다.
  • 빈 값이면 제출이 막혀야 한다.
  • 같은 고객이 중복으로 들어가면 안 된다.
  • 테스트용 데이터는 실제 고객에게 발송되면 안 된다.
  • 결과 파일에는 반드시 CSV, JSON, HTML이 함께 생성되어야 한다.

이런 조건을 먼저 적어 놓고, Claude Code에게 "이 조건을 자동 테스트로 만들어라"라고 시키면 된다.

우리 내부 파이프라인도 이런 식으로 검증한다. Salesforce, BigQuery, CMS 같은 외부 시스템을 매번 실제로 호출하지 않고, 가짜 데이터와 mock을 사용해 결과 파일, 제외 규칙, dry-run 동작을 먼저 확인한다. 비개발자 관점에서 중요한 포인트는 이것이다. 진짜 시스템을 건드리지 않아도, 중요한 흐름은 가짜 데이터로 먼저 검증할 수 있다.

Audit은 "다시는 같은 실수를 하지 않게 하는 장치"다

테스트는 보통 특정 기능을 확인한다. 반면 audit은 전체 시스템이 중요한 원칙을 계속 지키고 있는지 전수조사한다.

예를 들어 "모든 페이지에 SEO 메타데이터가 있어야 한다", "특정 route는 static rendering을 깨면 안 된다", "고객 데이터가 들어간 파일은 generated 폴더 밖으로 나가면 안 된다" 같은 규칙은 개별 기능 테스트보다 audit에 가깝다.

Airbridge Website에서도 비슷한 일이 있었다. 사람 브라우저에서는 페이지가 정상적으로 보였지만, AI crawler나 JavaScript를 실행하지 않는 크롤러가 보는 HTML에는 본문이 거의 비어 있었다. 원인은 layout 근처의 작은 구현 선택이 prerendered HTML을 비워 버린 것이었다. 일반적인 수동 QA로는 발견하기 어려운 종류의 문제였다.

이 문제를 해결한 뒤에는 단순히 코드를 고치는 데서 끝내지 않았다. prerendered HTML에 같은 문제가 다시 생기는지 검사하는 audit을 추가했다. 즉, 한 번 겪은 실수를 다음 PR에서 반복하지 못하게 만든 것이다.

비개발자도 Claude Code에게 이렇게 요청할 수 있다.

  • 이번에 발견한 문제가 다시 생기지 않도록 audit을 만들어줘.
  • 특정 파일 하나만 테스트하지 말고, 관련된 전체 경로를 훑어서 위반 사항을 잡아줘.
  • 이 audit이 실패하면 PR을 머지하지 못하게 하는 방식까지 제안해줘.

E2E 테스트는 "진짜 사용자처럼 해보기"다

E2E는 End-to-End의 약자다. Unit test가 작은 부품을 검사한다면, E2E 테스트는 실제 사용자가 하는 일을 처음부터 끝까지 해보는 것이다. Playwright 같은 도구를 쓰면 브라우저를 열고, 버튼을 누르고, 폼을 작성하고, 제출 결과를 확인할 수 있다.

Airbridge Website에도 production이나 preview URL을 대상으로 돌리는 smoke test가 있다. 핵심 페이지가 렌더링되는지, 주요 폼이 보이는지, 일부 경우에는 의도적으로 브라우저 에러를 발생시켜 Sentry에 실제로 잡히는지도 확인한다. 기능만 보는 것이 아니라 관측 시스템까지 살아 있는지 보는 것이다. 폼 테스트도 마찬가지다. 실제 리드 폼을 테스트하려면 DB에 값이 들어가는지 확인해야 한다.

비개발자 입장에서 배울 점은 명확하다. E2E 테스트는 단순히 "화면이 뜬다"가 아니다.

  • 실제 사용자가 하는 행동을 따라 한다.
  • DB나 외부 시스템에 원하는 결과가 생겼는지 본다.
  • 테스트 데이터가 실제 고객/영업/광고 시스템으로 새지 않게 한다.
  • 테스트가 끝나면 cleanup까지 한다.

Smoke test는 큰 작업의 첫 번째 안전벨트다

모든 것을 완벽하게 테스트하기 어렵다면 smoke test라도 만들어야 한다. Smoke test는 "일단 핵심 흐름이 연기라도 안 나는지" 확인하는 최소한의 테스트다.

비개발자는 큰 자동화를 만들 때 이렇게 말하면 된다.

  • 전체 기능을 한 번에 완벽히 테스트하기 어렵다면 smoke test를 먼저 만들어줘.
  • 실제 입력에 가까운 샘플로 처음부터 끝까지 돌리고, 최소 성공 기준을 gate로 정의해줘.
  • 실패하면 어느 단계에서 왜 실패했는지 로그로 남겨줘.

눈으로 보는 블랙박스 QA를 포기하지 마라

AI가 만든 결과물은 화면으로 보면 바로 이상한 점이 보일 때가 많다. 줄 간격이 어색하고, 버튼 텍스트가 넘치고, 링크가 안 걸려 있고, 표가 깨져 있고, 데이터가 그럴듯하지만 이상한 기준으로 정렬되어 있을 수 있다.

중요한 것은 "왜 이렇게 했는지"를 묻는 것이다.

  • 이 결과에서 가장 위험한 숨은 전제는 뭐야?
  • 어떤 데이터를 근거로 매칭했어?
  • 확정 ID를 썼어, 아니면 이름 유사도로 추정했어?
  • 실제 브라우저에서 스크린샷을 찍어 봤어?
  • 모바일에서도 같은가?

우리도 Article Studio에서 Google Docs로 글을 뽑을 때 비슷한 문제를 겪었다. Markdown을 그대로 밀어 넣으면 표나 링크 서식이 깨질 수 있다. 그래서 문서를 만든 뒤 다시 export해서 heading, table, link, bold가 살아 있는지 확인했다.

배포 전에는 되돌릴 방법을 생각하라

프로덕션에 올리는 기능이라면, 잘못되었을 때 바로 되돌릴 방법을 미리 생각해야 한다. Git revert도 방법이지만, 기능이 크거나 위험하다면 feature flag, 환경 변수, remote config, DB 설정으로 끄고 켤 수 있게 만드는 편이 낫다.

다만 비개발자가 환경 변수나 DB flag를 다룰 때는 더 조심해야 한다. true와 "true"가 다를 수 있고, trailing newline 하나 때문에 secret이 깨질 수 있고, 0과 1의 의미가 반대로 쓰일 수도 있다. 그래서 이런 작업을 할 때는 에이전트에게 반드시 검증까지 시켜야 한다.

  • 이 기능을 배포한 뒤 문제가 생기면 어떻게 끌 수 있는지 알려줘.
  • revert, feature flag, env var, DB toggle 중 어떤 방식이 가장 안전한지 비교해줘.
  • 설정값이 잘못 들어갔을 때 생길 수 있는 실패도 같이 점검해줘.

머지 후에도 실제 환경에서 확인하라

테스트가 다 통과해도, merge 후 실제 환경에서 확인하지 않으면 반쪽짜리다. 로컬에서는 통과했지만 Vercel preview에서 깨질 수 있고, preview에서는 통과했지만 production에서만 외부 스크립트나 쿠키 정책 때문에 달라질 수 있다.

비개발자는 배포 후 이렇게 요청하면 된다.

  • 머지된 뒤 실제 production 또는 preview URL에서 확인해줘.
  • 사용자가 보는 화면뿐 아니라 네트워크 요청, DB 저장, 외부 도구 연동까지 확인해줘.
  • 로컬 테스트와 실제 환경의 차이가 있다면 따로 정리해줘.

Sentry와 로그를 반드시 봐라

웹사이트나 내부 도구를 운영한다면 Sentry 같은 로깅 도구는 선택이 아니라 필수다. 코딩 에이전트가 아무리 잘 짠 코드라도 실제 환경은 다르다. 브라우저 버전, 확장 프로그램, 외부 스크립트, Vercel runtime, Node.js 버전, Next.js 빌드 정책이 모두 영향을 준다.

배포 후 최소 2주 정도는 에러를 계속 봐야 한다. Slack alert, Sentry issue, user report, screenshot을 함께 확인해야 한다. 에러가 없다는 말도 검증되어야 한다.

AI 에이전트 실수는 룰, 테스트, 감사로 남겨라

마지막으로 가장 중요한 것은 학습이다. 한 번 틀린 것은 다시 틀리지 않게 만들어야 한다. 비개발자가 에이전트를 쓸 때 가장 큰 자산은 코드가 아니라, 점점 강해지는 작업 하네스다.

어떤 문제가 생겼다면 이렇게 정리한다.

  • 왜 생겼는가?
  • 사람이 미리 볼 수 있었는가?
  • 테스트로 막을 수 있었는가?
  • audit으로 더 잘 막을 수 있었는가?
  • AGENTS.md나 Claude.md에 hard rule로 넣어야 하는가?
  • knowledge 문서에 사례로 남기는 정도면 충분한가?

모든 것을 AGENTS.md나 Claude.md에 넣으면 안 된다. 너무 무거워지면 에이전트가 중요한 규칙을 놓친다. 정말 어기면 안 되는 것은 hard rule로 넣고, 반복 참고용 지식은 knowledge 문서로 분리한 뒤 인덱싱하는 편이 좋다.

예를 들어 "절대 main에 바로 force push하지 말 것" 같은 것은 hard rule에 가깝다. 반면 "고객 데이터 매칭에서 확정 ID가 있으면 fuzzy matching을 쓰지 말 것" 같은 것은 knowledge에 가깝다.

비개발자가 바로 쓸 수 있는 요청 문장들

아래 문장들은 거의 그대로 복사해서 써도 된다.

1. 코드 리뷰 요청

  • 구현이 끝났다고 가정하지 말고, 코드 리뷰어 입장에서 봐줘.
  • 버그, 회귀 가능성, 보안 위험, 빠진 테스트를 우선순위순으로 찾아줘.
  • 근거 없는 추측은 하지 말고 파일/함수/동작 기준으로 설명해줘.

2. 테스트 요청

  • 이 기능이 완성되었다는 것을 증명하는 테스트를 먼저 정의해줘.
  • happy path, sad path, edge case를 나눠서 작성해줘.
  • 외부 API는 mock으로 처리하고, 중요한 데이터 shape은 fixture로 검증해줘.

3. E2E 요청

  • 실제 사용자처럼 브라우저에서 처음부터 끝까지 실행하는 E2E 테스트를 만들어줘.
  • 화면 확인뿐 아니라 DB 저장, 외부 전송 skip 여부, cleanup까지 확인해줘.
  • 테스트 데이터가 실제 고객이나 영업 시스템으로 흘러가지 않게 안전장치를 넣어줘.

4. Audit 요청

  • 이번에 발견한 문제가 다시 생기지 않도록 audit을 만들어줘.
  • 한 파일만 보지 말고 관련된 전체 경로를 검사해줘.
  • 위반하면 CI나 PR 단계에서 실패하게 만드는 방법까지 제안해줘.

5. 배포 후 확인 요청

  • 머지 후 실제 preview 또는 production에서 검증해줘.
  • 로컬 테스트와 실제 환경에서 다른 점이 있는지 확인해줘.
  • Sentry, 네트워크 요청, DB 저장, 외부 서비스 연동까지 확인해줘.

6. 회고 요청

  • 이번 문제를 다시 막기 위해 rule, knowledge, test, audit 중 어디에 남겨야 하는지 판단해줘.
  • 너무 넓은 규칙이 아니라, 다음에 같은 실수를 막을 정도로 구체적으로 정리해줘.

에이전트가 더 잘 일할 수밖에 없는 구조를 만들어라

Claude Code와 Codex는 비개발자에게 엄청난 레버리지를 준다. 하지만 레버리지가 커질수록 검증의 중요성도 커진다. 내가 만든 것이 내부에서만 쓰이는 작은 도구라면 조금의 오류를 견딜 수 있다. 하지만 웹사이트, 고객 데이터, 영업 자동화, 프로덕션 시스템으로 이어지는 순간부터는 다른 수준의 책임이 필요하다.

결국 중요한 것은 에이전트를 믿지 않는 것이 아니다. 에이전트가 더 잘 일할 수밖에 없는 구조를 만드는 것이다. 계획을 세우고, 리뷰를 시키고, 테스트를 만들고, E2E로 확인하고, audit으로 잠그고, 배포 후 모니터링하고, 실수를 룰로 남기는 것. 이 과정을 반복하면 비개발자도 꽤 강한 소프트웨어와 자동화를 만들 수 있다.

우리는 이런 방식으로 10개 이상의 내부 프로젝트들을 계속 강하게 만들고 있다. 그리고 이런 일을 함께 해 보고 싶은 사람들을 찾고 있다. 비개발자이지만 Claude Code와 Codex로 더 많은 일을 만들고, 더 나은 하네스를 설계하고, 실제 비즈니스 결과까지 연결하고 싶은 분이라면 AB180의 열린 포지션을 한 번 확인해 보면 좋겠다.

응답이 제출되었습니다. 감사합니다.
잘못된 메일주소입니다.
AI-Driven 문화 속에서 성장하고 싶으시나요?
지금 바로 AI 테크 기업 AB180에 지원해 보세요
채용 공고 보러가기
Roi Nam
더 알아보기
클래스101, 전 직원이 데이터 기반으로 소통하기 - 앰플리튜드 & 브레이즈와 함께라면 가능합니다.
‘모두가 사랑하는 일을 하며 살 수 있는’ 세상을 만들어가고 있는 클래스101의 마케팅 팀을 인터뷰했습니다. 브레이즈 및 앰플리튜드를 통해 CRM 마케팅을 자동화하고 전사적으로 데이터를 기반으로 소통하는 문화를 구축한 솔루션 활용기를 소개합니다.
성공 사례 보러가기
퍼즐몬스터즈, 채널별 성과 가시화로 명확한 의사결정 기준 하에 모바일 게임 마케팅을 진행했습니다.
퍼즐몬스터즈가 운영하는 모바일 게임 '닌자키우기'는 국내 모바일 P2E 게임 1위를 달성했습니다. 닌자키우기의 모바일 게임 앱 마케팅 전략과 함께 에어브릿지 활용기를 확인해보세요.
성공 사례 보러가기
15,000명 이상의 업계 관계자들이 구독하고 있는 뉴스레터를 통해 업계 최신 트렌드를 가장 먼저 만나보세요.
응답이 제출되었습니다. 감사합니다.
잘못된 메일주소입니다.
주식회사 에이비일팔공
주식회사 에이비일팔공
사업자등록번호: 550-88-00196
대표이사: 남성필, 정헌재
서울특별시 강남구 테헤란로 419, 19층, 20층
Copyright ⓒ 2023 AB180 Inc. All Rights Reserved.
개인정보 처리방침