AI가 코드를 작성할 때… 책임은 누가 질까?
Source: Dev.to
콜카타의 늦은 밤, 한 개발자가 빛나는 화면을 바라보고 있었다.
그 개발자는 바로 나였다.
Angular 개발자로서 2년 차가 된 나는 소프트웨어 개발에 대해 흥미로운 사실을 깨달았다:
가장 어려운 버그는 크게 오류를 일으키는 것이 아니다.
그것은 조용히 모든 것이 정상이라고 가장하는 버그다.
그리고 요즘 AI 도구가 곳곳에 퍼져 있는 상황에서, 나는 현대 개발에서 속도 착각이라는 이상한 현상을 목격하기 시작했다.
이야기를 들려줄게.
Chapter 1: The Magical Button
저는 현재 Property Management System (PMS) SaaS 플랫폼을 개발하고 있습니다.
SaaS 제품을 작업해 본 적이 있다면 한 가지는 분명히 알게 됩니다:
Data integrity is sacred.
- 개인 프로젝트에서 작은 버그는 짜증이 납니다.
- 부동산, 세입자, 임대료 및 재무 데이터를 관리하는 SaaS 시스템에서 작은 버그는 … 매우 비싼 실수가 될 수 있습니다.
최근 우리는 흔히 마주치는 SaaS 문제인 현지화에 도전하고 있었습니다.
우리 플랫폼은 여러 언어를 지원해야 하므로 부동산 관리자와 세입자가 편리하게 사용할 수 있습니다 — 이는 AI에게 딱 맞는 작업처럼 보였습니다.
그래서 어느 저녁, VS Code 안에서 AI 채팅을 열고 매우 자신감 넘치는 명령을 입력했습니다:
“Find all SweetAlerts in the project, extract all user‑facing strings into a translation JSON file, and bind the keys back for localization.”
Enter 키를 눌렀습니다.
Five seconds later
AI는 완전한 솔루션을 제공했습니다:
- 파일이 생성됨.
- JSON이 구조화됨.
- 바인딩이 작성됨.
그 모습은… 완벽해 보였습니다. 마치 마법사가 TypeScript 파일에서 토끼를 꺼내는 듯이.
하지만 그때 한 생각이 떠올랐습니다:
내가 이 코드를 작성하지 않았다면… 정말 이해하고 있는 걸까?
그래서 저는 지루한 작업을 했습니다: 코드를 한 줄씩 검토했습니다. 그때 균열이 보이기 시작했습니다.
Source: …
Chapter 2: “거의 맞는” 문제
AI는 정확해 보이는 코드를 쓰는 데는 믿을 수 없을 정도로 능숙합니다.
하지만 SaaS 시스템은 보이는 대로 작동하지 않습니다 — 정확히 맞아야 합니다.
AI의 작업을 검토하면서 나는 작지만 위험한 문제 세 가지를 발견했습니다.
1️⃣ 컨텍스트 문제
원래 알림은 다음과 같이 의도되었습니다:
“임대 계약 저장.”
AI는 이를 기술적으로 **“저장”**이라는 의미의 단어로 번역했습니다.
하지만 부동산 관리 컨텍스트에서는 **“임대를 구출한다”**는 느낌에 가깝게 들었습니다.
버튼을 클릭하고 다음과 같은 메시지를 본다고 상상해 보세요:
“임대 계약이 성공적으로 구출되었습니다.”
누가 임대를 납치했나요?
2️⃣ 템플릿 리터럴 재난
SweetAlert 메시지 안 어딘가에 다음과 같은 코드가 있었습니다:
`Rent payment of ${amount} received successfully`
AI가 실수로 바인딩을 수정해 다음과 같이 만들었습니다:
"rent_received_message"
리팩터링 과정에서 변수 삽입이 사라졌습니다.
그 결과 알림은 다음과 같이 표시됩니다:
Rent payment of undefined received successfully.
축하합니다. 세입자가 정의되지 않은 루피를 지불했습니다.
3️⃣ 보이지 않는 알림
연체 임대료에 대한 특정 엣지‑케이스 알림이 있었습니다.
AI는 프롬프트나 편집기 컨텍스트에 포함된 파일만 볼 수 있었기 때문에 이 알림을 건드리지 않았습니다.
그래서 시스템은 지역화되었습니다… 하지만 하나의 중요한 재무 알림은 제외되었습니다 — 가장 나쁜 유형의 버그, 무음 버그.
3장: 놀라운 깨달음
모든 것을 고친 뒤, 나는 약간 아이러니한 점을 깨달았다:
- AI가 만든 작업을 검토하는 데 거의 내 스스로 코드를 짜는 것만큼 시간이 걸렸다.
- AI가 타이핑을 대신해 주긴 했지만, 생각하는 시간은 절약되지 않았다.
전문 SaaS 시스템에서는 생각하는 것이 가장 비용이 많이 드는 부분이다.
Chapter 4: 유령 커밋
더 큰 교훈은 동료의 경험에서 나왔습니다.
그는 작은 UI 문제를 디버깅하던 중 AI 코딩 에이전트를 사용해 해결했습니다.
AI는 약속대로 정확히 작동했습니다 — 버그가 사라졌습니다.
에이전트가 언급하지 않은 점은 다음과 같습니다:
- 세 개의 다른 파일에서 코드를 수정했습니다
- 유틸리티 함수를 리팩터링했습니다
- 권한 검사를 “정리”했습니다
이러한 변경 사항은 원래 작업에 포함되지 않았지만, AI는 다음과 같이 보고했습니다:
✅ Issue fixed successfully
동료는 이를 신뢰하고 코드를 푸시했으며, 갑자기 SaaS 대시보드에 문제가 발생했습니다:
- 데이터 손상 – 재산세 계산이 잘못되었습니다.
- 보안 취약점 – 권한 검사가 사라졌습니다.
- 버터플라이 효과 – 분석 차트가 세 페이지 떨어진 곳에서 깨졌습니다.
모두 AI 에이전트가 도움을 주려 했기 때문입니다.
Chapter 5: 개발에서 AI에 대한 진실
AI 도구는 놀랍습니다. AI는 다음을 할 수 있습니다:
- 보일러플레이트 작성
- 구조 생성
- 반복 작업 가속화
- 복잡한 코드 설명
하지만 한 가지 큰 제한이 있습니다: 시스템 결과에 대한 맥락적 이해와 소유권이 부족합니다.
프로덕션이 중단될 때:
- AI는 호출되지 않습니다.
- AI는 비난받지 않습니다.
- AI는 긴급 회의에 참석하지 않습니다.
당신이 해야 합니다.
6장: 공동 조종사 규칙
그래서 제가 이제 따르는 규칙은 다음과 같습니다:
AI는 선장이 아닙니다. AI는 공동 조종사입니다.
공동 조종사는:
- 제안하기
- 지원하기
- 항해하기
하지만 선장은 여전히 비행기를 조종합니다. 난기류가 발생하면, 전체 시스템을 이해할 수 있는 사람이 필요합니다.
보이지 않는 파동
SaaS 제품의 모든 코드 라인은 파동을 일으킵니다:
- 로컬라이제이션 문자열의 작은 변경이 UI 로직에 영향을 줄 수 있습니다.
- 사소한 리팩터링이 보고 모듈을 깨뜨릴 수 있습니다.
- 누락된 변수가 수천 명의 사용자를 혼란스럽게 만들 수 있습니다.
그것이 보이지 않는 파동입니다. AI가 변화를 생성할 수는 있지만, 개발자는 파동이 얼마나 멀리 퍼지는지 이해해야 합니다.
최종 생각
우리는 AI를 두려워해서는 안 되지만, 우리가 만드는 시스템의 복잡성을 존중해야 합니다.
실제 개발 현장에서 대시보드를 깨뜨리는 “빠른” 푸시는 가장 느린 제품 구축 방법입니다.
여기까지 읽어 주셔서 감사합니다.
그리고 AI를 사용하고 있다면… 조종석에 앉은 사람을 놓치지 마세요.
to write code (like most of us are now)…
**Just remember:**
- Trust the AI's assistance.
- But review the code like your production depends on it. 😄
Have you ever caught a bug introduced by AI‑generated code?
I'd love to hear your experience.