AI 개발

AI가 코드 짜면 누가 책임지나 — 2026년 소프트웨어 품질 책임의 새 기준

cell-devlog 2026. 6. 15. 16:04
반응형

지난 주 여러분의 팀은 PR을 몇 건 머지했습니까? 그 중 AI가 작성하거나 크게 도운 코드가 몇 퍼센트였습니까? 그 비율을 정확히 알고 있습니까?

2026년 현재, 이건 단순한 엔지니어링 질문이 아닙니다. 법적 질문입니다. EU AI Act가 시행 중이고, Defective Products Directive는 스탠드얼론 소프트웨어를 제조물로 분류했으며, FTC는 알고리즘 출력에 대한 책임이 도구가 아닌 기업에 있다고 명확히 했습니다.


"AI가 짰다"는 변명은 통하지 않는다

법적 결론부터 말합니다.

법원은 "AI가 실수를 했다"는 항변을 받아들일 가능성이 낮습니다. 책임은 코드를 배포한 개발자, 시스템을 통합한 회사, AI 툴을 제공한 벤더에게 남습니다.

Copilot이 생성한 버그가 있는 코드를 배포한 스타트업은 Copilot이 "자율적으로" 작성했다고 주장할 수 없습니다. 캘리포니아 AB 316은 가장 큰 탈출구를 막았습니다.

여기서 이미 세 가지 책임 레이어가 생깁니다.

1. 배포자 책임 (Deployer Liability) AI 툴을 쓰는 회사. 가장 직접적이고 논란의 여지가 없는 레이어입니다.

2. 통합자 책임 (Integrator Liability) AI가 생성한 코드를 제품에 통합한 팀. 검토·테스트·승인의 책임이 여기 있습니다.

3. 벤더 책임 (Vendor Liability) GitHub Copilot, Claude Code, Cursor 등 AI 코딩 툴 제공사. 툴 자체의 결함에 대한 책임이 있지만, 생성된 코드의 품질에 대한 책임은 제한적입니다.


규제 환경 — 2026년에 뭐가 달라졌나

EU: Defective Products Directive (2026년 12월 9일 시행)

Directive (EU) 2024/2853은 소프트웨어와 AI 시스템을 제조물 엄격 책임 대상으로 명시적으로 포함합니다. 이는 패러다임 전환입니다. 이전 체계에서 원고는 회사의 과실을 증명해야 했지만, 이제는 (1) 제품에 결함이 있었다, (2) 피해를 입었다, (3) 결함이 피해를 유발했다는 세 가지만 증명하면 됩니다. 과실 증명이 불필요합니다.

특히 중요한 조항이 있습니다. AI Act나 사이버보안 규정을 위반한 AI 시스템은 결함 추정이 적용됩니다. 즉 규제 비준수 자체가 결함의 증거가 됩니다. AI 거버넌스와 규제 준수가 직접적으로 제조물 책임 노출과 연결되는 것입니다.

또한 새 Directive는 디지털 데이터의 파괴나 손상에 대한 보상을 최저 기준 없이 인정합니다. 이전에는 물리적 피해나 신체적 상해가 중심이었지만, 이제 순수한 디지털 피해도 보상 청구가 가능합니다.

미국: 주법 규제 복잡화

주별로 규제가 다릅니다. 콜로라도 SB 24-205는 2026년 6월 30일부터 고위험 AI 시스템에서 알고리즘 차별로부터 소비자를 보호하기 위한 "합리적 주의"를 요구하며, 위반 시 소비자당 $20,000 벌금이 부과됩니다. 텍사스 TRAIGA는 2026년 1월 1일부터 시행됐지만 의도 기반이라 입증이 더 어렵습니다. 유타 AI Policy Act는 이미 AI 출력을 핑계로 한 소비자보호법 위반 항변을 막고 있습니다.

트럼프 행정부의 연방 선점 시도가 있었지만, 행정명령은 주법을 무효화할 수 없습니다. 36개 주 검찰총장이 연방 선점에 반대하는 서한을 보냈습니다. 법률 컨센서스: 실제로 법원이 뒤집기 전까지는 주 AI 법을 계속 준수해야 합니다.


저작권 문제 — AI가 짠 코드를 회사가 소유할 수 있나

책임만큼 중요한데 덜 논의되는 영역입니다.

미국 저작권법은 인간 저자성을 요구합니다. 미국 저작권청과 판례 모두 AI가 주도적으로 생성한 저작물은 저작권 보호를 받을 수 없다고 봅니다. 즉 코드가 순수하게 AI에 의해 생성됐다면, 회사는 그 코드에 대한 저작권을 취득할 수 없습니다.

이게 실전에서 만드는 문제:

경쟁사 모방 위험: 저작권이 없는 코드는 경쟁사가 복제해도 법적으로 막을 수단이 약합니다.

오픈소스 라이선스 오염: AI 모델은 오픈소스 코드로 학습됐을 수 있습니다. 생성된 코드 조각이 GPL·AGPL 같은 카피레프트 라이선스가 걸린 소스에서 나왔다면, 그 코드를 포함한 전체 프로젝트에 라이선스 의무가 발생할 수 있습니다.

투자·M&A 실사 리스크: 코드베이스의 AI 생성 비율과 저작권 상태가 기업 가치 평가에 영향을 미치기 시작했습니다.


실전 거버넌스 — 지금 당장 해야 할 것

규제 논의보다 실질적인 것이 더 중요합니다. AI 코드 거버넌스를 어떻게 구축하느냐입니다.

1. AI 기여 추적 (Attribution Tracking)

# git commit 메시지에 AI 기여도 명시하는 컨벤션
# .gitmessage 템플릿

"""
<타입>(<스코프>): <제목>

<본문>

AI 기여도: [없음|보조(<30%)|주요(30-70%)|주도(>70%)]
AI 툴: [Claude Code|GitHub Copilot|Cursor|기타]
리뷰어 검증: [직접 검토|테스트 통과|배포 전 감사]
"""

# 예시
# feat(auth): JWT 토큰 갱신 로직 추가
#
# AI 기여도: 주요(60%)
# AI 툴: Claude Code
# 리뷰어 검증: 유닛 테스트 통과 + 보안 검토 완료

이런 기록이 법적 분쟁 시 "합리적 주의"를 입증하는 핵심 증거가 됩니다.

2. AI 코드 검증 파이프라인

보안 검증 파이프라인은 AI가 생성한 코드를 품질·보안 기준에 맞게 자동 검증합니다. 회귀 테스트, 유닛 테스트, 반복 피드백 루프, 생성과 검증에 서로 다른 LLM을 사용하는 패턴이 효과적입니다.

# .github/workflows/ai-code-review.yml
name: AI 코드 품질 검증

on: [pull_request]

jobs:
  ai-attribution-check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: AI 기여도 메타데이터 확인
        run: |
          # PR의 커밋 메시지에 AI 기여도 태그 있는지 확인
          git log --oneline origin/main..HEAD | \
          grep -v "AI 기여도:" && \
          echo "⚠️ AI 기여도 태그 누락된 커밋 발견" || \
          echo "✅ 모든 커밋에 AI 기여도 태그 확인"

  security-scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: 보안 취약점 스캔
        run: |
          # Semgrep으로 AI 코드 패턴 검사
          pip install semgrep
          semgrep --config=auto --error .

      - name: 오픈소스 라이선스 스캔
        run: |
          # FOSSA 또는 OSS Review Toolkit으로 라이선스 오염 체크
          pip install reuse
          reuse lint || echo "라이선스 이슈 발견 — 검토 필요"

  ai-code-quality:
    runs-on: ubuntu-latest
    steps:
      - name: AISlop 린터 실행
        run: |
          # AI가 만드는 나쁜 패턴 자동 감지
          # 내러티브 주석, 무시된 예외, 불필요한 타입 캐스트 등
          npx aislop --strict .

3. 인간 검토 게이트 (Human Review Gate)

AI 기여도가 높을수록 검토 기준이 강화돼야 합니다:

from enum import Enum

class AIContributionLevel(Enum):
    NONE = 0        # AI 미사용
    ASSIST = 1      # AI 보조 (<30%)
    MAJOR = 2       # AI 주요 (30-70%)
    LEAD = 3        # AI 주도 (>70%)

def required_review_gates(contribution: AIContributionLevel) -> list[str]:
    """AI 기여도에 따른 필수 검토 게이트"""
    base = ["유닛 테스트 통과", "린터 통과"]

    if contribution == AIContributionLevel.NONE:
        return base

    if contribution == AIContributionLevel.ASSIST:
        return base + ["시니어 엔지니어 코드 리뷰"]

    if contribution == AIContributionLevel.MAJOR:
        return base + [
            "시니어 엔지니어 코드 리뷰",
            "보안 스캔",
            "라이선스 스캔",
            "통합 테스트"
        ]

    if contribution == AIContributionLevel.LEAD:
        return base + [
            "시니어 엔지니어 코드 리뷰",
            "보안 감사",
            "라이선스 법률 검토",
            "통합 테스트",
            "스테이징 환경 검증",
            "QA 팀 승인"
        ]

# AI 기여도 70% 이상 PR은 QA까지 필수
print(required_review_gates(AIContributionLevel.LEAD))

4. AI 코드 감사 로그

import hashlib
import json
from datetime import datetime

class AICodeAuditLog:
    """
    AI 생성 코드 감사 로그
    법적 분쟁 시 '합리적 주의' 입증을 위한 기록
    """

    def __init__(self, log_path: str = "ai_audit.jsonl"):
        self.log_path = log_path

    def log_ai_generation(
        self,
        file_path: str,
        ai_tool: str,
        prompt_summary: str,
        reviewer: str,
        review_actions: list[str]
    ):
        code_hash = self._hash_file(file_path)

        entry = {
            "timestamp": datetime.utcnow().isoformat(),
            "file": file_path,
            "code_hash": code_hash,
            "ai_tool": ai_tool,
            "prompt_summary": prompt_summary,
            "reviewer": reviewer,
            "review_actions": review_actions,
            "compliant": True  # 검토 완료 증명
        }

        with open(self.log_path, "a") as f:
            f.write(json.dumps(entry, ensure_ascii=False) + "\n")

        return entry

    def _hash_file(self, path: str) -> str:
        with open(path, "rb") as f:
            return hashlib.sha256(f.read()).hexdigest()[:16]

# 사용 예시
audit = AICodeAuditLog()
audit.log_ai_generation(
    file_path="src/auth/token_refresh.py",
    ai_tool="Claude Code",
    prompt_summary="JWT 토큰 갱신 로직 구현 요청",
    reviewer="김개발",
    review_actions=[
        "전체 코드 라인별 검토",
        "보안 패턴 확인",
        "유닛 테스트 추가 및 통과",
        "오픈소스 라이선스 확인"
    ]
)

저작권 보호 최대화 전략

AI 코드에 저작권을 최대한 확보하려면 인간의 창의적 기여를 명시적으로 남겨야 합니다.

저작권 리스크를 줄이기 위한 실천 사항으로는 인간 기여를 정확히 기록하고, AI가 사용하는 훈련 데이터에 투명한 툴을 선택하며, AI 코딩 툴의 이용약관에서 소유권 조항을 반드시 확인하고, 코드베이스 전체를 정기적으로 감사하는 것이 있습니다.

실전 팁: AI가 생성한 코드를 그대로 복붙하지 말고, 아키텍처 결정·변수명 선택·엣지 케이스 처리를 인간이 명시적으로 수정하고 이를 커밋 히스토리에 남기면 저작권 주장이 더 강해집니다.


툴 제공사 책임 한계 — 약관에서 뭐라고 하나

GitHub Copilot, Claude Code, Cursor 등 대부분의 AI 코딩 툴 약관은 유사한 내용을 담고 있습니다.

요약하면: "우리 모델이 생성한 코드의 정확성·보안성·라이선스 적합성을 보장하지 않으며, 이 코드를 사용해서 발생하는 피해에 대한 책임은 사용자에게 있습니다."

이건 불합리한 조항이 아닙니다. 툴이 아니라 사람이 최종 검토·승인·배포 결정을 내리기 때문입니다. 하지만 이 조항을 근거로 툴 제공사에 책임을 돌리려는 시도는 대부분 실패할 것입니다.


스타트업·중소기업 실전 체크리스트

대기업 법무팀이 없다면, 최소한 이것만 합니다.

□ AI 코딩 툴 이용약관 저작권·책임 조항 확인
□ 팀 내 AI 사용 정책 문서화 (어떤 툴, 어떤 경우에)
□ AI 기여도 git 커밋 메시지 컨벤션 도입
□ 자동 보안 스캔 CI/CD 파이프라인 추가
□ 오픈소스 라이선스 스캔 도구 도입 (FOSSA, OSS Review Toolkit)
□ AI 고기여도(>70%) 코드에 대한 추가 인간 검토 프로세스
□ EU 제품 판매 시 EU Defective Products Directive 준수 계획
□ 콜로라도·캘리포니아·유타 등 주법 준수 확인 (해당 지역 서비스)

✅ 결론

  • "AI가 짰다"는 어디서도 면죄부가 되지 않습니다. 배포한 회사가 책임을 집니다
  • EU Defective Products Directive 12월 시행으로 소프트웨어 결함 책임이 엄격 책임으로 바뀝니다
  • AI 생성 코드의 저작권은 인간 기여가 충분하지 않으면 취득이 어렵습니다
  • AI 코드 거버넌스는 선택이 아니라 법적 의무가 되어가고 있습니다

❌ 주의

  • 모든 주 AI 법이 같은 기준이 아닙니다 — 서비스 지역에 맞게 확인 필요
  • 툴 약관은 책임을 사용자에게 전가합니다 — 읽지 않으면 모릅니다
  • 오픈소스 라이선스 오염은 M&A 시 치명타 — 코드베이스 정기 감사 필수
  • 규제는 계속 빠르게 바뀌고 있습니다 — 법무 전문가와 정기 검토 권장

 

반응형