단위 12 / 12

경계: 보안, 개인 정보 보호, 라이센스 및 윤리

이득:

  • AI가 가짜 API, 안전하지 않은 코드, 저작권이 있는 콘텐츠를 생성할 수 있음을 인식하고 검증하는 능력
  • 소스 코드 기밀성, 개인 데이터 및 기업 정책의 한계 내에서 AI 사용을 관리하는 능력
  • 라이센스 준수, 보안 및 윤리에 대한 최종 책임은 엔지니어에게 있음을 이해합니다.

모듈 시험

1. 컴퓨터 엔지니어로서 AI 코드 생성 도구를 사용할 때 다음 중 궁극적인 책임은 항상 인간에게 있어야 합니까?

  • A) 프로덕션에 투입된 코드의 정확성, 보안, 검토 및 테스트에 대한 최종 승인 ✔
  • B) 함수의 첫 번째 코드 뼈대 만들기
  • C) 변수 이름에 대한 제안 목록 생성
  • D) 코드 주석을 위한 초안 텍스트 준비

설명: AI; 코드 뼈대, 테스트 초안, 문서화 등의 작업 속도를 높일 수 있습니다. 그러나 생성된 코드를 검토, 테스트 및 승인하여 코드가 정확하고 안전하며 요구 사항을 준수하는지 확인하고 이를 프로덕션에 적용하는 것은 엔지니어의 책임입니다. 이는 독립적인 검증 없이 AI에 위임될 수 없습니다.

2. AI가 당신을 위한 기능을 만들어냈고 그것은 행복한 길로 일하고 있는 것 같습니다. 생산에 투입하기 전에 가장 좋은 단계는 무엇입니까?

  • A) 기능이 작동하는 것 같으니 바로 프로덕션에 투입하세요.
  • B) 엣지 케이스를 포함하는 소규모 단위 테스트를 작성하고 실행하여 동작을 확인합니다. ✔
  • 다) 함수의 줄 수만 보면
  • D) 함수 이름을 좀 더 설명적으로 만들기

설명: 출근하는 것이 옳다는 뜻은 아닙니다. 빈 입력, 0, 음수, 매우 큰 값 및 불일치와 같은 극단적인 사례를 다루는 작은 단위 테스트를 작성하고 실행하면 함수를 실제 환경으로 이동하지 않고도 함수의 실제 동작을 확인할 수 있습니다.

3. AI는 귀하의 언어에는 존재하지 않는 'array.sortStable()'이라는 메소드를 제안하고 이를 명확하게 설명했습니다. 가장 먼저 취해야 할 올바른 조치는 무엇입니까?

  • A) AI가 자신 있는 것 같아서 직접 방법을 사용한다.
  • B) 메소드를 직접 정의하고 이름을 정확하게 사용하십시오.
  • C) 언어/라이브러리의 공식 문서에서 메소드 존재 확인 ✔
  • D) 컴파일러 경고를 닫고 계속합니다.

설명: 언어 모델은 실제로 존재하지 않는(환각) 라이브러리, 패키지 또는 메소드 이름을 그럴듯하게 구성할 수 있습니다. 제안된 각 API는 언어 또는 라이브러리의 공식 및 최신 문서와 비교하여 축어적으로 검증되어야 합니다. 문서에 포함되어 있지 않은 경우에는 사용해서는 안 됩니다.

4. 회사의 기밀 소스 코드와 내장된 API 키를 공개 AI 도구에 붙여넣고 도움을 요청하고 싶습니다. 가장 올바른 접근 방식은 무엇입니까?

  • A) 속도를 위해 API 키를 사용하여 코드를 그대로 붙여넣습니다.
  • B) 회사명만 삭제하고 나머지는 모두 공유하면 충분합니다.
  • 다) 코드를 공유한 후 AI에게 삭제를 요청
  • D) 비밀과 숨겨진 논리를 제거하고 문제를 대표적인 사례로 축소하거나 제도적 도구를 활용 ✔

설명: 비밀 소스 코드 및 자격 증명(API 키, 비밀번호, 연결 문자열) 회사 비밀 및 보안 측면에서 위험합니다. 비밀과 숨겨진 비즈니스 로직을 제거하고 문제를 익명/대표 사례로 축소하거나 기업/비데이터 공유 도구를 사용할 필요가 있습니다.

5. AI는 자신이 작성한 검색 함수의 복잡성이 O(n)이라고 말했습니다. 하지만 코드에는 두 개의 중첩 루프가 있습니다. 올바른 엔지니어링 행동은 무엇입니까?

  • A) 코드를 수동으로 분석하고 복잡성을 직접 추출하여 필요한 경우 측정합니다. ✔
  • B) AI가 말했기 때문에 O(n)을 수락하고 계속합니다.
  • C) 사이클 수는 성능과 관련이 없다고 가정
  • D) 함수 이름만 변경하면 됩니다.

설명: 시간 복잡도(Big-O)는 입력이 증가함에 따라 작업 수가 어떻게 증가하는지 보여줍니다. 두 개의 중첩 루프는 일반적으로 O(n^2)를 의미합니다. AI의 복잡성 주장은 코드를 수동으로 분석하고 필요한 경우 입력을 늘려 측정하여 검증해야 합니다. 주장에 의존하면 성능에 대한 잘못된 가정이 생성됩니다.

6. 텍스트를 연결하여 사용자 입력을 SQL 쿼리에 직접 삽입하는 AI 생성 코드. 여기서 주요 문제와 올바른 해결책은 무엇입니까?

  • A) 문제 없습니다. 텍스트 병합이 가장 빠른 방법입니다
  • B) SQL 주입의 위험이 있습니다. 입력을 구분하는 매개변수화된 쿼리(준비된 문)를 사용해야 합니다. ✔
  • C) 쿼리를 대문자로 변환하는 것만으로도 충분합니다.
  • D) 쿼리를 더 짧게 작성하면 문제가 해결됩니다.

설명: 쿼리 텍스트에 사용자 입력을 직접 추가하면 SQL 주입 취약점이 발생합니다. 공격자는 입력으로 쿼리를 수정할 수 있습니다. 올바른 해결 방법은 쿼리 텍스트에서 입력을 분리하는 매개 변수가 있는 쿼리(준비된 문)를 사용하는 것입니다. 이는 AI 코드에서 가장 흔히 놓치는 보안 실수 중 하나입니다.

7. AI가 생성한 코드를 검토하는 데는 시간이 제한되어 있습니다. 어떤 문제를 우선순위로 두는 것이 가장 좋습니까?

  • 가) 들여쓰기, 간격 등 형식 세부 사항만
  • 나) 변수명의 길이만
  • C) 논리적 정확성, 취약성 및 극단적인 사례 동작 ✔
  • D) 파일의 총 라인 수만

설명: 코드 검토 시 위험이 가장 높습니다. 논리적 오류, 보안 취약점, 기밀정보 유출 등 심각한 피해를 초래하는 문제입니다. 형식 및 스타일 문제는 자동 도구를 사용하여 해결됩니다. 인간의 주된 관심은 정확성, 보안 및 극단적인 경우 행동에 집중되어야 합니다.

8. AI가 버그를 해결하길 원합니다. AI가 근본 원인을 찾는 데 가장 도움이 되는 입력은 무엇입니까?

  • A) 그냥 '코드가 안 되니까 고쳐라'라고만 하세요.
  • B) 파일 이름만 알려주세요.
  • C) 오류 텍스트 없이 예상 결과만 말함
  • D) 전체 오류 메시지, 스택 추적, 관련 코드 및 최소한의 재현 예시 제공 ✔

설명: 효과적인 디버깅을 위해서는 AI에 전체 오류 메시지, 스택 추적, 관련 코드 조각 및 오류를 생성하는 재현 가능한 가장 작은 샘플을 제공해야 합니다. '작동하지 않는다'라는 모호한 진술은 AI가 추측하고 포괄적인 추천을 하도록 강요합니다.

9. AI가 생성한 모든 단위 테스트는 첫 번째 실행에서 통과됩니다. 이 상황에서 무시해서는 안되는 위험은 무엇입니까?

  • A) 테스트를 통해 코드의 현재 상태를 확인할 수 있지만 실제/예상되는 동작은 확인할 수 없습니다. ✔
  • B) 모든 테스트를 통과했기 때문에 코드에는 오류가 전혀 없습니다.
  • 다) 테스트 횟수가 많으면 품질이 보장됩니다.
  • D) 테스트에 합격하면 보장 범위가 완전하다는 것을 증명합니다.

설명: 테스트는 의도된 동작이 아니라 코드의 현재(버그가 있는) 동작을 검증할 수 있습니다. 또는 의미 있는 주장이 포함되어 있지 않을 수 있으며 항상 전달됩니다. 테스트가 실제 기대치를 확인하고 있는지 확인하려면 의식적으로 코드를 중단하고 테스트가 빨간색으로 바뀌는지 확인해야 합니다.

10. AI는 문제에 대해 미리 만들어진 코드 블록을 생성했습니다. 코드가 오픈 소스 프로젝트에서 그대로 복사되었을 수 있다고 의심됩니다. 올바른 접근 방식은 무엇입니까?

  • A) 코드가 작동하니 아무 생각 없이 라이센스를 사용하세요
  • B) 코드의 소스/라이센스를 확인하고, 필요한 경우 다시 작성하고 회사 정책을 준수합니다. ✔
  • C) 변수 이름을 변경하고 문제가 해결되었다고 생각하십시오.
  • D) 라이센스가 대기업에만 적용된다고 가정

설명: AI는 훈련 데이터에서 저작권/라이센스가 있는 코드를 그대로 재현할 수 있습니다. 상업용 제품의 라이센스 위반은 심각한 법적 위험을 야기합니다. 코드의 소스와 라이선스를 확인하고, 필요한 경우 자신의 말로 다시 작성하고, 해당 기관의 라이선스 정책을 준수해야 합니다.

11. AI는 프로젝트에 대해 즉시 마이크로서비스 아키텍처로 전환할 것을 제안했습니다. 이 제안을 평가할 때 가장 적절한 엔지니어링 접근 방식은 무엇입니까?

  • A) AI가 제안하므로 전체 시스템을 즉시 마이크로서비스로 분할
  • B) 마이크로서비스가 항상 최선의 선택이라고 가정
  • C) 실제 요구 사항, 업무량, 팀 구조 및 플러스-마이너스 균형에 따라 제안을 평가합니다.
  • D) 아키텍처의 인기만을 토대로 결정을 내립니다.

설명: 아키텍처 결정은 상황에 따라 달라집니다. 마이크로서비스는 규모 및 팀 분리와 같은 요구 사항에 가치를 추가하지만 운영 복잡성, 분산 디버깅 및 비용과 같은 비용이 발생합니다. 실제 요구 사항, 업무량, 팀 구조, 장단점 균형에 따라 제안을 평가합니다. 일반적인 조언을 맹목적으로 따라서는 안 됩니다.

12. AI는 코드에 대한 간소화된 README 및 API 문서를 생성했습니다. 하지만 일부 엔드포인트와 매개변수가 코드에서 일치하지 않습니다. 올바른 행동은 무엇입니까?

  • 가) 본문이 유창하기 때문에 문서를 그대로 출판하는 것
  • B) 제목만 수정하고 나머지는 그대로 둡니다.
  • C) 문서를 읽지 않고 창고에 추가하는 행위
  • D) 각 엔드포인트와 매개변수를 실제 코드와 비교하여 일치하지 않는 부분 수정 ✔

설명: 문서는 실제 코드를 정확하게 반영해야 합니다. 잘못된 문서는 그것을 읽는 개발자가 그것을 잘못 사용하도록 강요합니다. 모든 엔드포인트, 매개변수 및 반환 값을 실제 코드와 비교하여 확인해야 하며 불일치가 있으면 수정해야 합니다.

13. AI에 코드를 요청할 때 최고 품질의 출력에 적합한 입력 접근 방식은 무엇입니까?

  • A) 언어/버전, 입출력 계약, 제약사항 및 오류 상황을 명확하게 제공 ✔
  • B) 그냥 '작동하는 코드를 작성해 주세요'라고 말하면 됩니다.
  • C) 컨텍스트를 제공하지 않고 가장 짧은 요청을 작성합니다.
  • D) 코드 줄 수를 지정하기만 하면 됩니다.

설명: 강력한 프롬프트; 여기에는 사용된 언어 및 버전, 입출력 계약, 성능 및 스타일 제약 조건, 오류 조건, '요청된 범위 내에서만 유지' 지침이 포함됩니다. 컨텍스트 없는 '함수 작성' 요청은 일반적이며 종종 부적절한 코드를 생성합니다.

14. AI는 CI/CD(지속적 통합/배포) 파이프라인에 대한 구성을 생성하고 여기에 데이터베이스 비밀번호를 일반 텍스트로 포함했습니다. 올바른 수정은 무엇입니까?

  • A) 비밀번호는 작동하므로 일반 텍스트로 둡니다.
  • B) 저장소에 일반 텍스트를 넣지 않고 환경 변수 또는 비밀 관리 도구를 통해 비밀을 이동합니다. ✔
  • 다) 비밀번호를 주석라인에만 이동하세요.
  • D) 파일 이름을 변경하면 문제가 해결됩니다.

설명: 일반 텍스트로 비밀번호 및 키와 같은 비밀을 구성 파일에 기록하면 버전 제어 유출 및 무단 액세스의 위험이 있습니다. 기미; 환경 변수나 특수 비밀 관리자에 의해 보관되어야 하며 일반 텍스트로 저장소에 입력되어서는 안 됩니다.