URL: https://www.youtube.com/watch?v=xdtHydnLmcU
날짜: 2026-09-17
채널: Tech Bridge
영상 ID: xdtHydnLmcU
길이: 약 11분 18초
📌 핵심 질문 / AI가 만든 코드를 어떻게 신뢰할 수 있는가
==AI 생성 코드(Generated Code)는 생성됐다는 사실이 아니라 실제 결과의 보안성으로 신뢰해야 하며, 보안을 개발 초기부터 배포 후까지 계속 검증해야 한다.==
- AI는 몇 초 만에 코드, 테스트, 에이전트(Agent), 다단계 작업(Multi-step Task), 워크플로를 만든다.
- 기존의 인간 작성 코드와 느린 개발 주기를 전제로 한 보안 절차는 AI 보조 개발(AI-assisted Development)의 속도와 규모에 자동으로 맞춰지지 않는다.
- 보안 검토를 마지막에 덧붙이는 방식은 품질을 떨어뜨리고 전체 개발 흐름을 멈추게 하므로, 시프트 레프트(Shift Left) 보안을 설계·생성·테스트·배포·운영 전 과정에 내장해야 한다.
- 신뢰를 만들려면 코드 자체뿐 아니라 결과, 의존성(Dependency), 의도(Intent), 연결된 전체 워크플로와 시간에 따른 변화까지 검증해야 한다.
AI 시대의 핵심 문제는 더 빠른 생성이 아니라 더 빠른 생성 속도에 맞는 신뢰성 확보다. 더 많은 코드와 기능은 더 많은 복잡성을 만들며, 복잡성은 보안의 적이 된다. 따라서 개발 조직은 규정 준수용 체크박스나 릴리스 게이트가 아니라 일상적인 연속 검증(Continuous Validation)으로 보안을 운영해야 한다.
1. AI 개발 속도와 시프트 레프트 보안의 필요성
AI는 소프트웨어 개발 방식을 수십 년 만에 가장 빠르게 바꾸고 있다. 과거 개발 경험과 현재의 자동화 규모 사이의 간극을 보안 관점에서 다시 설계해야 한다.
1.1. 수작업 개발에서 프롬프트 기반 개발로
-
과거의 개발 흐름
- 약 40년 전 초기 개발 환경에서 코드를 직접 작성하는 일은 복잡하고 시간이 오래 걸렸으며 오류가 발생하기 쉬웠다.
- 코드 한 덩어리를 만드는 데 걸리는 시간이 길었기 때문에 보안 검토가 개발 흐름의 뒤쪽에 놓이기 쉬웠다.
-
AI가 바꾼 생산 속도와 산출물
- 개발자는 프롬프트 하나로 코드(Code), 테스트(Tests), 에이전트(Agents), 다단계 AI 작업, 전체 워크플로(Workflow)까지 생성할 수 있다.
- AI는 소프트웨어 개발의 게임 체인저(Game Changer)이지만, 생성 속도가 커진 만큼 보안 검증의 빈도와 범위도 커져야 한다.
1.2. 기존 보안 방식이 맞지 않는 이유
-
인간 작성 코드 전제의 한계
- 기존 보안 관행은 인간이 작성하고 상대적으로 느리게 변경되는 코드를 전제로 설계됐다.
- AI 보조 개발에서는 코드가 빠르게 생기고 바뀌므로, 같은 보안 절차를 마지막에 한 번 적용하면 개발 속도와 맞지 않는다.
-
뒤늦은 보안 검토의 비용
- 보안이 과정의 마지막에 사후 보수(Retrofit)처럼 추가되면 품질이 떨어지고 개발 과정 전체가 급정거한다.
- 보안은 가장 이른 개발 단계에서 시작해 소프트웨어 개발 생명주기 전체에 걸쳐 계속되어야 한다.
1.3. 시프트 레프트의 새로운 의미
-
보안을 왼쪽으로 옮기기
- Beyoncé의 노래 “To the left, to the left”를 빌린 표현처럼 보안을 개발 흐름의 앞쪽으로 옮긴다.
- 시프트 레프트는 단순히 보안 도구 몇 개를 앞 단계에서 실행하는 일이 아니라, 무엇을 검증할지·언제 검증할지·AI가 만든 해법에 어떻게 확신을 쌓을지를 다시 정하는 일이다.
-
다섯 가지 원칙의 목표
- AI 보조 개발의 결과를 더 빠르게 만들면서도 실제 조건에서 안전하게 동작하도록 한다.
- 생성된 코드의 겉모습이 아니라 안전한 결과와 지속되는 신뢰를 확인한다.
2. 원칙 1 — 생성이 아니라 결과를 신뢰하라
AI 생성 코드(AI-generated Code)는 생성됐다는 사실만으로 신뢰할 수 없다. 기술적으로 성공한 구현과 실제로 안전한 해법은 다를 수 있다.
2.1. 컴파일·실행·테스트 통과가 보안을 보장하지 않는다
-
정상처럼 보이는 코드의 함정
- AI가 만든 코드는 컴파일되고 실행되며 보안 테스트를 모두 통과할 수 있다.
- 그 결과 겉으로는 문제가 없어 보이지만, 아래쪽에 드러나지 않는 보안 위험이 남을 수 있다.
-
검증 대상의 전환
- 기술적 구현이 성공했다는 사실은 해법이 안전하다는 뜻이 아니다.
- “코드가 작동하는가?”에서 멈추지 말고 “예상한 결과를 내면서 실제 조건에서도 안전하게 행동하는가?”를 물어야 한다.
2.2. 결과 중심으로 확인할 보안 조건
-
권한과 데이터 흐름
- 어떤 권한(Permissions)이 부여됐는지 확인한다.
- 데이터가 새어나가는 데이터 유출(Data Leak) 또는 조직 밖으로 민감 정보가 반출되는 데이터 탈취·유출(Exfiltration)이 발생하는지 확인한다.
-
실패 동작
- 인증(Authentication)이 실패했을 때 시스템이 어떻게 반응하는지 확인한다.
- 시스템이 안전하게 실패하는 Fail Safe인지, 위험한 개방 상태로 남는 Fail Open인지 확인한다.
-
현실적인 데이터 처리
- AI가 만든 서비스가 데이터베이스에서 고객 정보를 정확히 가져오더라도, 데이터베이스 안의 모든 정보에 접근할 권한까지 필요한 것은 아니다.
- 잘못된 형식의 데이터(Malformed Data)가 데이터베이스에 들어가 데이터를 훼손하거나 데이터베이스 자체를 오염시키는 경우를 점검해야 한다.
-
접근 범위와 정책 준수
- 고객 정보 조회라는 기능이 작동하는지와 별개로, 실제 사용자가 모든 고객 정보에 접근할 수 있어야 하는지 확인한다.
- 기능의 성공률보다 권한 경계, 민감 정보 보호, 실패 시 안전한 상태 유지가 더 중요한 결과 검증 대상이다.
3. 원칙 2 — 개발 중에 보안을 시작하라
보안 검토는 개발이 끝난 뒤 체크하는 항목이 아니라 코드가 만들어지는 순간부터 함께 실행되는 검증 과정이어야 한다.
3.1. 마지막 체크박스 모델의 문제
-
전통적인 순서
- 개발자가 코딩을 끝낸다.
- 컴포넌트를 빌드하고 함수를 테스트한다.
- 코드를 커밋한 다음 보안 검토를 진행한다.
- 이 구조에서 보안은 사실상 과정 마지막의 체크박스가 된다.
-
발견 시점과 수정 비용
- 버그는 일찍 발견할수록 수정 비용이 낮고, 프로덕션에 들어간 뒤 발견하면 비용이 매우 커진다.
- 보안 버그도 일반 버그와 같은 비용 곡선을 따르며, AI 코드 생성이 몇 초 만에 끝나는 환경에서 마지막까지 기다리면 병목과 위험이 함께 커진다.
3.2. 생성 과정에 자동 검증을 삽입하라
-
개발 중 자동화 항목
- 정적 소스 분석(Static Source Analysis)을 자동 실행한다.
- 동적 침투 테스트(Dynamic Penetration Testing)와 침투 테스트(Penetration Testing)를 수행한다.
- 코드에 내장된 시크릿(Embedded Secrets)을 스캔한다.
- 정책 검증(Policy Validation)과 컴플라이언스 점검(Compliance Checks)을 진행한다.
-
시프트 레프트의 운영 목표
- 코드가 생성되는 동안 보안 검증을 수행해 개발 후반의 불쾌한 놀라움을 줄인다.
- 보안을 릴리스 직전의 장애물로 남겨두지 않고 개발 프로세스 내부의 빠른 피드백으로 만든다.
4. 원칙 3 — 생성된 의존성도 코드와 같은 수준으로 검증하라
AI는 애플리케이션 코드만 작성하지 않는다. 새 패키지(Package), 라이브러리(Library), 서비스(Service), 통합(Integration)을 함께 끌어오므로, 의존성 검증(Dependency Validation)은 안전한 코드 생성의 필수 요소다.
4.1. 기능을 늘리는 동시에 공격면을 넓히는 의존성
-
의존성의 양면성
- 의존성 하나마다 기능과 역량(Capability)이 추가되는 점은 좋다.
- 동시에 의존성 하나마다 위험(Risk)도 추가되므로, 편리함과 공격면 확대를 함께 평가해야 한다.
-
보이지 않는 생성 과정
- 개발자는 생성된 소스 코드 검토에 집중하면서 코드가 무엇에 의존하는지 놓치기 쉽다.
- AI가 내부적으로 새 구성요소를 연결하면 그 과정이 눈에 잘 보이지 않아 “보이지 않으니 신경 쓰지 않는” 상태가 된다.
4.2. 소프트웨어 공급망을 검토하라
-
공급망 위험
- 보안 사고는 애플리케이션 로직만이 아니라 소프트웨어 공급망(Software Supply Chain)에서 시작할 수 있다.
- 따라서 생성된 의존성도 생성된 코드와 동일한 수준의 보안 검토를 받아야 한다.
-
의존성 검토 목록
- 패키지의 평판(Package Reputation)을 확인한다.
- 알려진 취약점(Vulnerabilities)을 점검한다.
- 라이선스(Licensing)가 조직 정책과 맞는지 확인한다.
- 소스 무결성(Source Integrity)을 검증한다.
- 조직 표준(Organizational Standards)을 충족하는지 확인한다.
5. 원칙 4 — 코드 품질뿐 아니라 의도를 검증하라
심각한 보안 문제의 상당수는 나쁜 코딩 습관보다 잘못된 가정에서 발생한다. AI가 개발 모범 사례를 지키며 우아한 코드를 생성해도, 요구사항과 의도를 잘못 이해하면 보안 정책을 위반할 수 있다.
5.1. 보안은 요구사항과 권한 경계에서 시작된다
-
먼저 분명히 해야 할 질문
- 실제로 누가 데이터에 접근해야 하는가?
- 각 사용자가 어떤 작업을 수행할 수 있는가?
- 적용해야 하는 비즈니스 규칙(Business Rules)은 무엇인가?
- 어떤 정보가 끝까지 보호되어야 하는가?
-
기술적으로 우아해도 틀릴 수 있는 해법
- AI 모델은 개발 모범 사례를 따르는 깔끔한 코드를 만들 수 있다.
- 그러나 요구사항을 잘못 해석하면 금융 데이터를 올바르게 처리하면서도 원래 접근해서는 안 되는 사용자에게 그 정보를 노출할 수 있다.
- 이 문제는 단순한 코딩 문제가 아니라 의도(Intent)의 문제다.
5.2. AI의 산출물을 검토하는 사람의 책임
-
의도를 명시하는 일
- AI를 사용할수록 요구사항과 의도를 특히 명확하게 표현해야 한다.
- 개발자는 코드 품질만 검토하는 것이 아니라 AI가 올바른 문제를 올바른 방식으로 해결했는지 검토해야 한다.
-
미다스 왕의 비유
- 그리스 신화의 미다스 왕(King Midas)은 만지는 모든 것이 금으로 변하기를 바랐다.
- 소원은 이루어졌지만 금은 먹을 수 없었기 때문에 거의 굶어 죽을 뻔했다.
- AI가 기계 속도로 점점 정교한 코드를 만들어도, 산출물이 원래 필요한 목적을 달성하는지 검증하는 사람의 책임은 사라지지 않는다.
- 더 많은 자동화는 사람의 판단을 없애는 것이 아니라, 결과가 문제의 본질과 맞는지 확인하는 책임을 더 크게 만든다.
6. 원칙 5 — 보안을 지속적인 관행으로 만들어라
보안은 릴리스 직전의 최종 체크포인트가 아니라 소프트웨어 변화가 이어지는 동안 계속 작동하는 운영 관행이어야 한다.
6.1. 개발 생명주기 전체의 연속 검증
-
AI 변화 속도와 검증의 지속성
- 조직은 역사적으로 릴리스 직전과 마지막 단계에 보안 활동을 집중해왔다.
- AI 보조 개발은 지속적으로 변화를 만들어내므로 보안 검증도 지속적으로 수행되어야 한다.
- 검증은 배포 이후에도 멈추지 않아야 한다.
-
보안이 필요한 전체 루프
- 개발(Develop)한다.
- 테스트(Test)한다.
- 배포(Deploy)한다.
- 모니터링(Monitor)한다.
- 개선(Improve)한다.
- 보안은 이 모든 단계와 반복 루프 전체에서 작동해야 한다.
6.2. 시간이 지나도 신뢰를 유지하는 통제
-
지속 실행할 통제 항목
- 최첨단 AI 모델(Frontier Model)을 활용한 취약점 탐지(Vulnerability Detection)로 새 취약점을 신속하게 찾는다.
- 의존성을 모니터링하고 패치(Dependency Monitoring and Patching)한다.
- 정책을 검증하고 강제(Policy Verification and Enforcement)한다.
- 변경 사항을 검증(Change Validation)한다.
-
한 번의 통과를 넘어서는 질문
- “한 번 통과했는가?”가 아니라 “계속 통과하는가?”를 확인해야 한다.
- 시간이 지나도 계속 안전한지, 즉 신뢰(Confidence)가 유지되는지를 확인해야 한다.
-
27년 동안 숨어 있던 취약점
- 한 최첨단 AI 모델이 오픈소스 운영체제(Open-source Operating System)에 숨어 있던 제로데이 취약점(Zero-day Vulnerability)을 발견했다.
- 그 취약점은 무려 27년 동안 눈앞에 드러나지 않은 채 존재했다.
- 이 사례는 보안이 완료되는 순간이 없으며, 소프트웨어와 함께 진화하는 살아 있는 프로세스(Living Process)여야 한다는 점을 보여준다.
7. 에이전트 시대에는 파일이 아니라 전체 워크플로를 지켜라
AI가 더 에이전틱(Agentic)해질수록 여러 시스템을 넘나드는 다단계 작업이 늘어나므로 개별 파일 검토만으로는 충분하지 않다.
7.1. 연결된 시스템에서 생기는 의도하지 않은 결과
-
검토 범위의 확대
- 에이전트는 서비스(Services), 저장소(Repositories), 파이프라인(Pipelines), 구성(Configuration)을 가로질러 다단계 작업을 수행하게 된다.
- 가장 어려운 보안 문제는 단일 함수 안에 숨어 있기보다 연결된 시스템 사이에서 발생하는 의도하지 않은 결과(Unintended Consequences)에 있다.
-
워크플로 관점의 보안
- 개별 파일이 안전해 보여도 전체 워크플로가 안전하다는 뜻은 아니다.
- 데이터와 권한이 여러 단계에서 어떻게 전달되고 변경되는지 전체 흐름을 이해해야 한다.
7.2. 에이전트에 필요한 가드레일과 감독
-
행동을 제한하는 통제
- 가드레일(Guardrails)은 에이전트가 할 수 있는 일과 할 수 없는 일, 적절한 행동과 부적절한 행동을 구분하게 한다.
- 접근 제어(Access Controls)는 에이전트의 능력 범위를 제한해 의도하지 않은 변경을 막는다.
-
책임성과 관찰 가능성
- 에이전트에게 신원(Identity)을 부여해 누가 무엇을 왜 수행했는지 추적 가능하게 해야 한다.
- 모니터링(Monitoring)과 인간 개입 루프(Human-in-the-loop Oversight)를 두어 자동화된 판단과 행동을 감독해야 한다.
-
감독이 없을 때의 위험
- 적절한 감독과 강제 집행이 없으면 에이전트는 생산성 도구가 아니라 위험 증폭기(Risk Amplifier)가 될 수 있다.
- 빠른 자동화보다 행동 범위, 신원, 권한, 로그, 사람의 개입 지점을 먼저 설계해야 한다.
8. 최종 결론 — 빠르게 만들되 지속적으로 신뢰를 검증하라
-
속도와 규모의 새 현실
- AI는 과거 하루 동안 만들 수 있던 코드보다 더 많은 코드를 1분 안에 생성할 수 있다.
- 코드가 많아지면 기능도 많아지지만, 동시에 복잡성도 커진다.
- 복잡성은 보안의 적이므로 생성 속도만 높이는 것은 가치 창출의 충분조건이 아니다.
-
성공하는 조직의 공통점
- 보안을 컴플라이언스 연습이나 릴리스 게이트로만 다루지 않고 일상적인 개발 워크플로에 직접 내장한다.
- 보안을 지속적인 검증 관행으로 운영해 변화가 생길 때마다 결과를 다시 확인한다.
-
신뢰의 정의
- AI 보조 개발의 목표는 코드를 단순히 리뷰하는 데 있지 않다.
- 계속 커지고 복잡해지는 코드베이스 전체에서 결과를 자신 있게 검증하고, 과거보다 더 빠르게 안전성을 유지하는 데 있다.
- 속도만으로는 충분하지 않으며, 신뢰(Trust)가 가치를 만든다.
- 결론은 “보안을 왼쪽으로 옮겨라(To the left)”라는 원칙으로 수렴한다.
주요 발언 모음
“AI generated code does not equal trusted code.”
“AI 생성 코드는 신뢰할 수 있는 코드와 같지 않다.”
“Trust the outcome, not just the generation.”
“생성 자체가 아니라 결과를 신뢰하라.”
“Just because the technical implementation appears successful doesn't mean the solution is secure.”
“기술적 구현이 성공적으로 보인다고 해서 해법이 안전한 것은 아니다.”
“Security starts during development.”
“보안은 개발 중에 시작된다.”
“Dependency validation isn't optional. It's part of secure code generation.”
“의존성 검증은 선택 사항이 아니다. 안전한 코드 생성의 일부다.”
“We're no longer just reviewing code quality. We're reviewing whether the AI solved the right problem in the right way.”
“더 이상 코드 품질만 검토하지 않는다. AI가 올바른 문제를 올바른 방식으로 해결했는지를 검토한다.”
“Security is never done.”
“보안은 결코 끝나지 않는다.”
“Speed alone doesn't create value. Trust does.”
“속도만으로는 가치를 만들지 못한다. 신뢰가 가치를 만든다.”
핵심 데이터 & 수치
- 약 40년 전: 인간이 코드를 직접 작성하던 초기 개발 과정은 복잡하고 오래 걸리며 오류가 발생하기 쉬웠다.
- 몇 초: AI는 코드, 테스트, 에이전트, 다단계 작업, 워크플로를 프롬프트 하나로 생성할 수 있다.
- 27년: 최첨단 AI 모델이 오픈소스 운영체제에 숨어 있던 제로데이 취약점을 발견하기 전까지 드러나지 않았던 기간이다.
- 개발 루프 5단계: 개발 → 테스트 → 배포 → 모니터링 → 개선의 각 단계가 보안 검증 대상이다.
- 보안 원칙 5가지: 결과 신뢰, 개발 중 보안 시작, 의존성 검증, 의도 검증, 지속적인 보안 관행이다.
실무 적용 체크리스트
- AI가 만든 코드가 컴파일·실행·테스트를 통과했는지와 별개로 권한, 데이터 유출, 실패 동작, 민감 정보 접근 범위를 검증한다.
- 정적 분석, 동적·침투 테스트, 시크릿 스캔, 정책 검증, 컴플라이언스 점검을 코드 생성 과정에 자동 연결한다.
- 패키지·라이브러리·서비스·통합 의존성의 평판, 취약점, 라이선스, 소스 무결성, 조직 표준을 확인한다.
- 누가 어떤 데이터에 접근하고 어떤 작업을 수행할지, 비즈니스 규칙과 보호 정보가 무엇인지 프롬프트와 요구사항에 명확히 적는다.
- 배포 뒤에도 취약점 탐지, 의존성 패치, 정책 강제, 변경 검증을 반복해 시간이 지나도 신뢰를 유지한다.
- 에이전트에는 가드레일, 신원, 최소 권한 접근 제어, 모니터링, 인간 감독을 함께 부여한다.
결론 및 시사점
- 검증 단위의 전환: AI 시대의 보안 단위는 생성된 파일이 아니라 실제 결과와 그 결과가 연결된 시스템 전체다.
- 책임의 전환: AI가 코드를 작성해도 올바른 문제를 올바른 방식으로 풀었는지 판단하는 책임은 개발 조직에 남는다.
- 시간축의 확장: 검증은 생성 시점에 시작해 배포 후에도 반복되어야 하며, 한 번의 통과는 장기적인 안전성을 보장하지 않는다.
- 자동화의 조건: 에이전트의 생산성은 무제한 권한이 아니라 가드레일·신원·접근 제어·감독이 결합될 때 안전하게 실현된다.
- 조직의 목표: 보안을 별도 심사나 릴리스 장애물로 두지 않고 매일의 개발 워크플로에 내장해, 빠른 개발과 지속적인 신뢰를 함께 달성해야 한다.
핵심 요약 (20줄)
- AI는 프롬프트 하나로 코드와 테스트뿐 아니라 에이전트와 다단계 워크플로까지 생성한다.
- AI 생성 코드가 작동한다는 사실만으로 신뢰할 수 있는 코드가 되는 것은 아니다.
- 컴파일과 실행 성공, 보안 테스트 통과도 실제 환경의 안전성을 보장하지 않는다.
- 권한과 데이터 흐름을 결과 중심으로 검증해야 한다.
- 민감 정보가 유출되거나 조직 밖으로 반출되는지 확인해야 한다.
- 인증 실패와 잘못된 데이터 입력에서 시스템이 안전하게 실패하는지 점검해야 한다.
- 보안 검토를 개발 마지막의 체크박스로 두면 AI 생성 속도와 맞지 않는다.
- 버그와 보안 문제는 일찍 발견할수록 수정 비용이 낮다.
- 정적 분석과 동적·침투 테스트를 코드 생성 과정에 자동화해야 한다.
- 내장된 시크릿, 정책, 컴플라이언스도 개발 중에 검사해야 한다.
- AI는 새 패키지와 라이브러리, 서비스, 통합 의존성을 함께 만든다.
- 의존성은 기능을 늘리지만 소프트웨어 공급망 위험도 늘린다.
- 패키지 평판과 취약점, 라이선스, 소스 무결성, 조직 표준을 검토해야 한다.
- 심각한 보안 문제는 나쁜 코드보다 잘못된 가정에서 발생할 수 있다.
- 누가 데이터를 보고 어떤 작업을 하는지와 보호할 정보를 먼저 명확히 해야 한다.
- AI가 올바른 문제를 올바른 방식으로 풀었는지 사람이 확인해야 한다.
- 개발·테스트·배포·모니터링·개선의 전체 루프에서 보안을 이어가야 한다.
- 27년 동안 숨어 있던 제로데이 사례는 보안이 끝나지 않는다는 점을 보여준다.
- 에이전트에는 가드레일과 신원, 접근 제어, 모니터링, 인간 감독이 필요하다.
- 더 빠른 생성보다 중요한 목표는 복잡한 코드베이스의 결과를 지속적으로 신뢰하는 일이다.
