B 바이낸스 · 전 세계 1위 암호화폐 거래소바이낸스 가입 → AD OKX OKX · 글로벌 대형 암호화폐 거래소OKX 가입 → AD
💻 코딩 기초 · 10강 / 10

AI가 짠 코드 읽고 검증하기 — 테스트·보안·라이선스·개인정보

AI가 짠 코드는 그럴듯해 보여도 경계 경우에서 틀리거나 보안상 위험할 수 있습니다. 코드를 읽고, 직접 만든 테스트로 확인하고, 비밀 정보·패키지·라이선스·개인정보를 점검하는 것이 코드를 쓰는 사람의 몫입니다.

⏱ 약 24분 ✍️ 확인 문제 5개 🧪 코드 실습 4개 업데이트 2026-10-09
🎯 이 강의의 학습 목표
  • AI가 짠 함수를 입력·처리·출력 순서로 한 줄씩 읽고 설명할 수 있다
  • 빈 값·0·경계값을 넣은 테스트를 직접 만들어 숨은 버그를 찾고 고칠 수 있다
  • 비밀 정보 노출, 입력 검증 누락, eval, 존재하지 않는 패키지 같은 보안 위험을 알아볼 수 있다
  • 오픈소스 라이선스 조건과 개인정보 보호를 위해 확인할 것을 말할 수 있다

1.왜 AI가 짠 코드를 검증해야 할까

AI 코딩 도우미는 몇 초 만에 그럴듯한 코드를 써 줍니다. 문법도 깔끔하고 설명도 자신 있어 보입니다. 하지만 AI는 '자주 보던 모양의 코드'를 만들어 내는 것이지, 내 자료와 내 상황에서 실제로 돌려 보고 답하는 것이 아닙니다. 그래서 흔한 입력에서는 맞고 빈 값이나 경계값에서는 틀리는 코드, 돌아가기는 하지만 위험한 코드가 섞여 나올 수 있습니다.

코드를 실행하고 그 결과를 쓰는 사람은 나입니다. 판매 합계가 틀려 보고서가 잘못 나가도, 비밀번호가 담긴 코드가 공개돼도 'AI가 그렇게 짜 줬다'는 말로 넘어갈 수는 없습니다. 결과를 확인하고 책임지는 쪽은 그 코드를 쓴 사람과 조직입니다. 9강까지 배운 값·조건·반복·함수·배열·문자열 지식은 바로 이 검증을 위한 도구입니다. 짧은 코드를 스스로 읽을 수 있으면 AI를 훨씬 안전하게, 더 잘 쓸 수 있습니다.

검증은 크게 네 갈래입니다. 코드가 무엇을 하는지 읽어 이해하기, 직접 만든 테스트로 결과 확인하기, 보안 위험 점검하기, 라이선스·개인정보처럼 코드 밖의 문제 확인하기입니다. 이 강의는 이 순서대로 하나씩 연습합니다.

  • 읽기: 이 함수는 무엇을 받아 무엇을 돌려주는가
  • 테스트: 흔한 입력, 빈 값, 0, 경계값에서 기대한 값이 나오는가
  • 보안: 비밀 정보, 검증하지 않은 입력, eval, 낯선 패키지가 있는가
  • 코드 밖: 라이선스 조건과 회사·학교 정책, 개인정보를 지켰는가

2.한 줄씩 읽기 — 입력·처리·출력

AI가 준 코드를 읽을 때는 처음부터 끝까지 훑어보지 말고, 1강에서 배운 '입력 → 처리 → 출력' 틀에 맞춰 봅니다. 함수 이름과 매개변수를 보고 무엇을 받는지, return을 찾아 무엇을 돌려주는지 먼저 확인합니다. 그다음 가운데 줄을 하나씩 짚으며 '이 줄이 끝나면 변수에 무엇이 들어 있나'를 말로 설명해 봅니다. 설명이 막히는 줄이 바로 확인해야 할 곳입니다.

읽으면서 '만약에' 질문을 던집니다. 배열이 비어 있으면? 값이 문자열로 들어오면? 0이나 음수라면? 아래 평균 함수는 평범한 점수에서는 정확하지만, 빈 배열이면 0 / 0이라 NaN이 나오고, CSV에서 꺼낸 문자열 점수가 들어오면 +가 이어 붙이기가 되어 엉뚱한 값을 냅니다. 오류 메시지도 없이 틀린 값이 나오기 때문에 더 위험합니다.

이해가 안 되는 문법이 나오면 AI에게 '이 줄이 하는 일을 초보자에게 설명해 줘'라고 물어도 좋습니다. 다만 설명을 들은 뒤에는 8강에서 배운 대로 console.log로 중간값을 찍어 그 설명이 실제와 맞는지 직접 확인합니다. 설명도 AI의 답이므로 확인 대상입니다.

평범한 입력은 맞습니다. 빈 배열과 문자열 점수에서는 오류 없이 틀린 값이 나옵니다.
// AI 코딩 도우미가 짜 준 함수(그대로)
function averageScore(scores) {
  let sum = 0;
  for (const s of scores) {
    sum += s;
  }
  return sum / scores.length;
}

console.log(averageScore([80, 90, 100]));
console.log(averageScore([]));
console.log(averageScore(["80", "90"]));
출력
90
NaN
4045

3.테스트를 직접 만들기 — 경계값이 버그를 찾는다

테스트는 '이 입력을 넣으면 이 값이 나와야 한다'를 미리 적어 두고 코드로 확인하는 것입니다. 기대값은 코드를 보기 전에 내가 손으로 정합니다. AI에게 테스트까지 맡기면 코드와 같은 착각을 테스트에도 넣을 수 있으므로, 적어도 몇 개는 직접 만듭니다. 아래의 check 함수처럼 받은 값과 기대값을 비교해 '통과/실패'를 찍는 작은 도구만 있어도 충분합니다.

좋은 테스트 묶음에는 평범한 경우와 함께 경계 경우가 들어갑니다. 빈 배열·빈 문자열, 0, 음수, 값이 하나뿐인 경우, 조건이 바뀌는 바로 그 값(3강의 경계값), 자릿수가 다른 수, 같은 값이 여러 개인 경우 등입니다. 버그는 대개 이런 가장자리에 숨어 있습니다.

아래는 'AI가 짠 상위 점수 뽑기 함수'입니다. 두 자리 점수로만 시험하면 통과해서 맞는 코드처럼 보입니다. 그런데 100점이 섞이면 틀립니다. JavaScript의 sort()는 비교 함수를 주지 않으면 값을 문자열로 바꿔 사전 순으로 정렬하기 때문에 "100"이 "80"보다 앞에 옵니다. 게다가 sort는 원래 배열의 순서를 바꿔 버려서, 이 함수를 부른 쪽의 자료까지 몰래 바뀝니다.

두 자리 점수만 넣었다면 버그를 못 찾았을 것입니다. 원본 배열도 바뀌었습니다.
function check(name, got, want) {
  const same =
    JSON.stringify(got) === JSON.stringify(want);
  console.log(same ? "통과" : "실패", name, got);
}

// AI가 짠 함수: 높은 점수 n개
function topScores(scores, n) {
  return scores.sort().reverse().slice(0, n);
}

check("두 자리", topScores([70, 90, 85], 2), [90, 85]);
check("100점", topScores([100, 95, 80], 2), [100, 95]);
check("n이 0", topScores([70, 90], 0), []);

const mine = [70, 90, 85];
topScores(mine, 1);
console.log("원본", mine);
출력
통과 두 자리 [ 90, 85 ]
실패 100점 [ 95, 80 ]
통과 n이 0 []
원본 [ 90, 85, 70 ]
복사본을 숫자 비교 함수 (a, b) => b - a로 정렬해 큰 수부터 놓습니다.
function topScores(scores, n) {
  const copy = [...scores];
  copy.sort((a, b) => b - a);
  return copy.slice(0, n);
}

const mine = [100, 95, 80];
console.log(topScores(mine, 2));
console.log(topScores([], 3));
console.log("원본", mine);
출력
[ 100, 95 ]
[]
원본 [ 100, 95, 80 ]
예제AI가 '배송비 함수'를 짜 주었습니다. 주문 금액이 50,000원 이상이면 무료, 아니면 3,000원이라는 규칙입니다. 어떤 테스트를 넣어야 할까요?
// AI가 짠 함수(그대로)
function shippingFee(price) {
  return price > 50000 ? 0 : 3000;
}
for (const p of [49999, 50000, 50001]) {
  console.log(p, shippingFee(p));
}
출력
49999 3000
50000 3000
50001 0
  1. 1단계 규칙에서 경계를 찾습니다. 조건이 바뀌는 값은 50,000원입니다.
  2. 2단계 경계 바로 아래·경계·바로 위를 고릅니다: 49,999원 → 3,000, 50,000원 → 0, 50,001원 → 0.
  3. 3단계 끝값과 이상한 값을 더합니다: 0원, 음수, 문자열 "50000"을 넣었을 때 어떻게 해야 하는지 먼저 정합니다.
  4. 4단계 실행해 보니 50,000원에서 3,000이 나왔습니다. 코드를 읽어 보니 >=가 아니라 >로 쓰여 있었습니다.
답경계값 50,000원과 그 앞뒤, 0·음수·문자열을 테스트에 넣습니다. 이 예에서는 경계값 테스트가 >를 >=로 고쳐야 한다는 것을 찾아냈습니다.
AI에게 코드를 받을 때 '이 함수의 경계 경우 테스트 목록도 줘'라고 함께 부탁하세요. 그 목록에 내가 생각한 경우를 더하고, 기대값은 내가 직접 정합니다.

4.보안 — 비밀 정보, 입력 검증, `eval`

가장 먼저 지킬 원칙은 비밀번호·API 키·접속 토큰 같은 비밀 정보를 코드나 프롬프트에 넣지 않는 것입니다. 코드에 적힌 키는 파일 공유, 저장소 공개, 화면 캡처로 쉽게 새어 나갑니다. AI 도우미에게 오류를 물으면서 키가 든 코드를 통째로 붙여 넣는 것도 같은 위험입니다. 키 자리는 "YOUR_API_KEY" 같은 가짜 값으로 바꿔서 보여 주고, 실제 키는 각 서비스가 안내하는 방식(환경 변수, 설정 파일, 비밀 관리 기능 등)으로 코드 밖에 둡니다. 키가 이미 노출됐다면 지우는 것만으로는 부족하므로 그 서비스에서 키를 폐기하고 새로 발급합니다.

둘째는 입력 검증입니다. 사용자 입력, 파일, 다른 프로그램에서 오는 값은 언제나 예상과 다를 수 있다고 보고, 쓰기 전에 모양과 범위를 확인합니다. AI가 짠 코드는 '정상적인 입력'만 가정하는 경우가 많습니다. 아래처럼 허용할 모양을 먼저 정하고, 그 밖의 값은 null로 거절하는 방식이 안전합니다. '나쁜 값을 골라내기'보다 '좋은 값만 받아들이기'가 빠뜨림이 적습니다.

셋째, 믿을 수 없는 입력을 eval이나 new Function에 넣으면 안 됩니다. eval은 문자열을 코드로 실행하므로, 입력에 숨은 명령이 그대로 실행될 수 있습니다. 계산기나 설정 읽기를 부탁했는데 AI가 eval을 쓴 코드를 주었다면 다른 방법을 요청하세요. 자료를 주고받는 것이 목적이라면 6강의 JSON을 JSON.parse로 읽으면 됩니다. JSON.parse는 자료만 읽고 코드는 실행하지 않으며, 형식이 틀리면 오류를 냅니다.

정규식 ^\d+$는 '처음부터 끝까지 숫자만'이라는 뜻입니다. 허용 범위 밖은 모두 null.
// 0~150 사이의 정수 나이만 받는다
function parseAge(input) {
  const s = String(input).trim();
  if (!/^\d+$/.test(s)) return null;
  const n = Number(s);
  if (n > 150) return null;
  return n;
}

const tries = ["35", " 7 ", "-3", "2.5", "abc", "", "999"];
for (const x of tries) {
  console.log(JSON.stringify(x), "→", parseAge(x));
}
출력
"35" → 35
" 7 " → 7
"-3" → null
"2.5" → null
"abc" → null
"" → null
"999" → null
JSON.parse는 코드처럼 생긴 문자열을 실행하지 않고 SyntaxError로 거절합니다. try { … } catch (e) { … }는 오류가 나도 멈추지 않고 catch 쪽에서 오류를 받아 처리하는 문법입니다.
const input = '{"name": "민수", "score": 90}';
const data = JSON.parse(input);
console.log(data.name, data.score);

try {
  JSON.parse("console.log('몰래 실행')");
} catch (e) {
  console.log("거절:", e.name);
}
출력
민수 90
거절: SyntaxError

5.존재하지 않는 패키지 — 설치 전에 확인하기

실무 코드는 남이 만들어 공개한 패키지(라이브러리)를 설치해 쓰는 경우가 많습니다. 그런데 AI 도우미는 그럴듯하지만 실제로는 없는 패키지 이름을 지어내거나, 오래전에 관리가 끊긴 패키지를 권하기도 합니다. 더 큰 문제는 누군가 이렇게 자주 지어내지는 이름이나 유명한 패키지와 한 글자 다른 이름으로 악성 패키지를 미리 올려 둘 수 있다는 점입니다. 확인 없이 설치 명령을 그대로 실행하면 내 컴퓨터에서 남의 코드가 돌게 됩니다.

그래서 설치 명령을 실행하기 전에 몇 가지를 확인합니다. 그 패키지가 공식 패키지 저장소에 실제로 있는지, 이름 철자가 공식 문서와 정확히 같은지, 최근까지 관리되고 있는지, 공개된 소스 저장소와 문서가 있는지, 널리 쓰이는지 봅니다. 회사나 학교에서는 허용된 패키지 목록이나 보안 검사 절차가 따로 있을 수 있으니 그 규칙을 먼저 따릅니다.

작은 일이라면 패키지 없이 해결할 수 있는지도 물어보세요. 9강의 텍스트 정리나 합계 계산은 JavaScript 기본 기능만으로 충분했습니다. 의존하는 패키지가 적을수록 확인할 것도, 문제가 생길 곳도 줄어듭니다. 단, 진짜 CSV 파일 읽기나 암호화처럼 규칙이 까다로운 일은 직접 짜기보다 검증된 패키지를 고르는 편이 안전합니다.

  • 공식 패키지 저장소에 그 이름이 실제로 있는가
  • 철자가 공식 문서와 똑같은가(한 글자 다른 가짜 이름 주의)
  • 최근 업데이트가 있고 관리되고 있는가
  • 소스 저장소·문서·라이선스가 공개돼 있는가
  • 회사·학교의 허용 목록과 보안 절차를 지켰는가

6.저작권·라이선스와 개인정보

공개된 코드라고 마음대로 써도 되는 것은 아닙니다. 오픈소스 코드에는 라이선스가 붙어 있고, 라이선스는 '이 조건을 지키면 써도 된다'는 약속입니다. 조건은 라이선스마다 다릅니다. 저작권 표시와 라이선스 문구를 함께 남기라는 조건이 흔하고, 어떤 라이선스는 그 코드를 넣은 프로그램을 배포할 때 소스 코드를 같은 조건으로 공개하라고 요구합니다. 라이선스 표시가 아예 없는 코드는 공개돼 있어도 사용을 허락했다는 뜻이 아닐 수 있습니다.

AI가 만든 코드가 기존 공개 코드와 매우 비슷할 가능성도 있습니다. 긴 코드 조각을 그대로 제품에 넣기 전에는 출처를 확인할 수 있는지, 회사나 학교에 AI 생성 코드와 오픈소스 사용에 관한 정책이 있는지 살펴보세요. 아래 표는 흔한 유형의 일반적 특징일 뿐이며 법률 자문이 아닙니다. 실제 조건은 라이선스 원문을 읽고, 판단이 어려우면 소속 기관의 담당 부서나 전문가에게 확인합니다.

개인정보도 코드 밖의 중요한 문제입니다. AI에게 코드를 부탁하면서 실제 고객 명단, 학생 성적, 전화번호를 붙여 넣으면 그 정보가 내 통제를 벗어납니다. 코드를 만드는 데 필요한 것은 자료의 '모양'이지 진짜 값이 아닙니다. 아래처럼 가짜 자료를 만들어 보여 주고, 진짜 자료는 내 컴퓨터에서만 돌리세요. 예시 주소에는 문서용으로 예약된 example.com 같은 도메인을 쓰면 실제 사람에게 닿을 일이 없습니다. 결과를 공유할 때는 전화번호 가운데를 가리는 등 필요한 만큼만 보여 줍니다.

진짜 명단 대신 같은 모양의 가짜 자료를 만들어 AI에게 보여 줍니다.
function fakeCustomers(n) {
  const list = [];
  for (let i = 1; i <= n; i++) {
    const no = String(i).padStart(4, "0");
    list.push({
      id: i,
      name: "고객" + i,
      phone: "010-0000-" + no,
      email: "user" + i + "@example.com",
    });
  }
  return list;
}
console.log(fakeCustomers(2));
출력
[ { id: 1, name: '고객1', phone: '010-0000-0001', email: '[email protected]' }, { id: 2, name: '고객2', phone: '010-0000-0002', email: '[email protected]' } ]
오픈소스 라이선스 유형의 일반적 특징(법률 자문 아님 — 원문과 소속 기관 정책 확인)
유형예흔한 조건
허용형MIT, BSD복사·수정·상업적 사용을 넓게 허락. 저작권 표시와 라이선스 문구를 함께 남긴다
허용형(특허 조항 포함)Apache-2.0MIT와 비슷하게 넓게 허락. 라이선스 사본·고지 유지, 바꾼 파일에 변경 사실 표시, 특허 관련 조항이 있다
카피레프트GPL 계열그 코드를 포함한 프로그램을 배포할 때 같은 라이선스로 소스 코드를 제공해야 하는 등 조건이 더 강하다
표시 없음라이선스 파일이 없는 공개 코드공개돼 있어도 사용 허락이 있다는 뜻이 아닐 수 있다. 쓰기 전에 확인한다

7.검증 순서를 습관으로

AI가 준 코드를 받으면 매번 같은 순서로 확인하는 습관을 들이면 빠뜨림이 줄어듭니다. 먼저 내가 부탁한 일과 코드가 하는 일이 같은지 읽고, 모르는 줄은 설명을 들은 뒤 console.log로 확인합니다. 다음으로 기대값을 직접 정한 테스트를 평범한 경우 두세 개와 경계 경우 서너 개로 만들어 돌립니다.

테스트가 실패하면 실패한 입력과 받은 값, 기대값을 정리해 AI에게 다시 물으면 됩니다. 8강에서 배운 것처럼 '틀렸어'보다 '입력 [100, 95, 80]에 기대 [100, 95], 실제 [95, 80]'이 훨씬 빨리 고쳐집니다. 고친 코드를 받으면 처음 테스트를 전부 다시 돌려, 한 곳을 고치다 다른 곳이 깨지지 않았는지 봅니다. 고치기 전후 코드를 텍스트 비교기에 넣으면 무엇이 바뀌었는지 정확히 볼 수 있습니다.

마지막으로 보안과 코드 밖의 점검을 합니다. 비밀 정보가 남아 있지 않은지, 입력을 검증하는지, eval이 없는지, 낯선 패키지는 확인했는지, 라이선스와 개인정보 규칙을 지켰는지 봅니다. 이 과정을 거친 코드라야 '내가 책임질 수 있는 코드'가 됩니다. 이것으로 코딩 기초 과정을 마칩니다. 이제 짧은 코드를 읽고, 시험하고, 고칠 수 있으니 AI를 조수로 두고 반복 작업을 하나씩 코드로 바꿔 보세요.

  • 목적 확인: 부탁한 일과 코드가 하는 일이 같은가
  • 한 줄씩 읽기: 입력·처리·출력, 막히는 줄은 console.log로 확인
  • 테스트: 기대값은 내가 정하고 경계값을 꼭 넣는다
  • 다시 돌리기: 고친 뒤에는 모든 테스트를 처음부터
  • 보안·코드 밖: 비밀 정보, 입력 검증, eval, 패키지, 라이선스, 개인정보

📌 핵심 정리

  • AI 코드는 흔한 입력에서 맞고 경계에서 틀릴 수 있다 — 쓰는 사람이 검증한다
  • 기대값을 내가 먼저 정하고 빈 값·0·경계값·자릿수가 다른 값을 테스트에 넣는다
  • sort()는 비교 함수가 없으면 문자열 순으로 정렬하고 원본을 바꾼다
  • 비밀 정보는 코드·프롬프트에 넣지 않고, 입력은 검증하고, 믿을 수 없는 입력에 eval을 쓰지 않는다
  • 패키지는 실제로 있고 관리되는지 확인하고, 라이선스 조건과 정책을 확인하며, 개인정보 대신 가짜 자료를 쓴다

✍️ 확인 문제

먼저 풀어 본 뒤 '정답과 해설'을 펼치세요.

Q1. [100, 95, 80].sort()의 결과는?

⭕ 정답입니다

❌ 다시 생각해 보세요

정답과 해설
정답 ③ [100, 80, 95]

비교 함수가 없으면 값을 문자열로 바꿔 사전 순으로 정렬합니다. "100" < "80" < "95" 순입니다. 숫자 정렬은 sort((a, b) => a - b)처럼 비교 함수를 줍니다.

Q2. '5만 원 이상이면 배송비 무료' 함수를 시험할 때 가장 중요한 테스트 값은?

⭕ 정답입니다

❌ 다시 생각해 보세요

정답과 해설
정답 ② 50,000원

조건이 바뀌는 경계값입니다. >와 >=를 헷갈린 버그는 정확히 50,000원에서만 드러납니다.

Q3. AI 도우미에게 오류를 물으려는데 코드에 실제 API 키가 들어 있습니다. 알맞은 행동은?

⭕ 정답입니다

❌ 다시 생각해 보세요

정답과 해설
정답 ② 키를 "YOUR_API_KEY" 같은 가짜 값으로 바꾸고 붙여 넣는다

비밀 정보는 코드에도 프롬프트에도 넣지 않습니다. 이미 노출됐다면 서비스에서 키를 폐기하고 새로 발급합니다.

Q4. AI가 처음 보는 패키지를 설치하라고 했습니다. 설치 전에 확인할 것으로 알맞지 않은 것은?

⭕ 정답입니다

❌ 다시 생각해 보세요

정답과 해설
정답 ③ AI가 자신 있게 말했는지

AI는 없는 패키지 이름도 자신 있게 지어낼 수 있습니다. 실제 존재 여부, 철자, 관리 상태, 소속 기관 정책을 직접 확인합니다.

Q5. 회사 고객 자료를 정리하는 코드를 AI에게 부탁하려 합니다. 개인정보를 지키면서 부탁하는 방법을 쓰세요.

정답과 해설
정답 실제 자료 대신 같은 모양의 가짜 자료(가짜 이름·010-0000-0001·example.com 주소 등) 몇 줄로 형식만 보여 주고, 받은 코드는 내 컴퓨터에서 실제 자료로 돌린다. 회사의 AI 사용 정책도 확인한다.

코드를 만드는 데 필요한 것은 자료의 모양입니다. 진짜 값을 붙여 넣으면 그 정보가 내 통제를 벗어납니다.

🧪 코드 실습

AI가 짠 것처럼 보이는 코드의 숨은 버그를 테스트로 찾아 고치고, 입력 검증과 개인정보 가리기 함수를 만듭니다. 테스트 결과에서 실패한 입력을 먼저 보세요.

코드는 이 브라우저 안의 격리된 공간에서만 실행되고 서버로 보내지 않습니다. 네트워크에는 접속할 수 없고, 2초가 넘으면 멈춥니다. 고친 코드는 이 브라우저에만 저장됩니다. Ctrl+Enter(⌘+Enter)로 실행하고, Tab 키는 공백 두 칸입니다(Esc 다음 Tab 은 다음 칸으로 이동).

자바스크립트가 꺼져 있어 실행할 수는 없지만, 문제와 처음 코드, 자동 검사 내용, 예시 답안은 그대로 읽을 수 있습니다.

1평균 함수의 경계 고치기

AI가 짠 average(nums)는 빈 배열에서 NaN을 돌려줍니다. 빈 배열이면 0을 돌려주고, 그 밖에는 평균을 돌려주도록 고치세요. 배열에는 숫자만 들어옵니다.

자동 검사
  • average([80,90,100])기대값 90
  • average([])기대값 0
  • average([0,0])기대값 0
  • average([-10,10,30])기대값 10
  • average([7])기대값 7
💡 힌트

함수 맨 앞에서 nums.length === 0이면 바로 return 0; 하세요.

예시 답안 보기
function average(nums) {
  if (nums.length === 0) return 0;
  let sum = 0;
  for (const x of nums) {
    sum += x;
  }
  return sum / nums.length;
}

2상위 점수 함수의 정렬 버그

AI가 짠 topScores(scores, n)은 높은 점수 n개를 큰 순서로 돌려줘야 하지만, 100점이 섞이면 틀립니다. 숫자 크기로 정렬하도록 고치고, 원래 배열은 바꾸지 마세요. n이 배열 길이보다 크면 있는 만큼만 돌려줍니다.

자동 검사
  • topScores([70,90,85], 2)기대값 [90,85]
  • topScores([100,95,80], 2)기대값 [100,95]
  • topScores([5,100,20,9], 3)기대값 [100,20,9]
  • topScores([60,70], 0)기대값 []
  • topScores([], 3)기대값 []
  • topScores([88], 5)기대값 [88]
💡 힌트

[...scores]로 복사한 뒤 sort((a, b) => b - a)로 큰 수부터 정렬하고 slice(0, n).

예시 답안 보기
function topScores(scores, n) {
  const copy = [...scores];
  copy.sort((a, b) => b - a);
  return copy.slice(0, n);
}

3주문 수량 입력 검증

함수 parseQuantity(input)을 완성하세요. 문자열 input의 앞뒤 공백을 지운 뒤, 숫자로만 된 정수이고 1 이상 99 이하이면 그 숫자를, 아니면 null을 돌려주세요. "2.5", "-1", "1e3", 빈 문자열은 모두 null입니다.

자동 검사
  • parseQuantity("3")기대값 3
  • parseQuantity(" 12 ")기대값 12
  • parseQuantity("0")기대값 null
  • parseQuantity("100")기대값 null
  • parseQuantity("2.5")기대값 null
  • parseQuantity("1e3")기대값 null
💡 힌트

/^\d+$/.test(s)로 숫자만 있는지 보고, n < 1 || n > 99이면 null입니다. Number("")는 0이라는 점도 주의하세요.

예시 답안 보기
function parseQuantity(input) {
  const s = input.trim();
  if (!/^\d+$/.test(s)) return null;
  const n = Number(s);
  if (n < 1 || n > 99) return null;
  return n;
}

4전화번호 가운데 가리기

결과를 공유할 때 개인정보를 가리는 함수 maskPhone(s)를 만드세요. s가 010-1234-5678처럼 숫자 3-4-4 모양이면 가운데 네 자리를 ****로 바꾼 010-****-5678을 돌려주고, 이 모양이 아니면 null을 돌려주세요.

자동 검사
  • maskPhone("010-1234-5678")기대값 "010-****-5678"
  • maskPhone("010-0000-0001")기대값 "010-****-0001"
  • maskPhone("01012345678")기대값 null
  • maskPhone("")기대값 null
  • maskPhone("010-12-5678")기대값 null
💡 힌트

정규식 /^\d{3}-\d{4}-\d{4}$/는 '숫자 3개-4개-4개'만 통과시킵니다. 통과하지 못하면 null.

예시 답안 보기
function maskPhone(s) {
  if (!/^\d{3}-\d{4}-\d{4}$/.test(s)) return null;
  const parts = s.split("-");
  return parts[0] + "-****-" + parts[2];
}

🤖 AI에게 이렇게 물어보세요

복사해서 [ ] 부분을 내 상황으로 바꿔 쓰세요. 답을 그대로 믿지 말고 본문과 비교해 확인하세요.

AI가 준 코드를 이해하고 싶을 때

아래 JavaScript 코드를 초보자에게 설명하듯 한 줄씩 설명해 줘. 각 줄이 끝난 뒤 주요 변수에 무엇이 들어 있는지 예시 입력 [예시 입력]으로 따라가 주고, 빈 값·0·문자열이 들어오면 어떻게 되는지도 짚어 줘.
[코드]

테스트할 경우를 빠짐없이 찾고 싶을 때

아래 함수의 목적은 [목적]이야. 평범한 경우, 경계값, 빈 값, 잘못된 입력으로 나눠 테스트할 입력 목록을 만들어 줘. 기대값은 내가 직접 정할 테니 입력과 '왜 이 경우가 중요한지'만 적어 줘.
[함수 코드]

코드의 보안·라이선스 점검을 받고 싶을 때

아래 코드를 보안 관점에서 점검해 줘. 코드에 남은 비밀 정보, 검증하지 않은 입력, `eval` 같은 위험한 기능, 사용하는 패키지가 실제로 있고 관리되는지 확인할 방법을 목록으로 정리해 줘. 오픈소스 코드를 가져온 부분이 있다면 확인해야 할 라이선스 조건도 일반적으로 알려 줘(법률 자문이 아니어도 돼). 코드의 키와 개인정보는 가짜 값으로 바꿔 두었어.
[코드]

🧰 관련 도구

이 강의에서 다룬 JSON·정규식·텍스트를 바로 확인하고 다듬어 볼 수 있는 도구입니다. 실제 개인정보나 비밀번호는 붙여 넣지 마세요.

참고
  • MDN Web Docs — Array.prototype.sort, JSON.parse, eval 참조 문서(eval 사용을 피하라는 안내 포함)
  • OWASP — 입력 검증과 비밀 정보 관리에 관한 일반적 안내
  • Open Source Initiative — 오픈소스 라이선스(MIT, Apache-2.0, GPL 등) 원문과 일반적 설명

학습 목표를 모두 이뤘다면 완료를 눌러 진도에 기록하세요.

💻 코딩 기초

  1. 1프로그램이란 — 일을 순서·조건·반복으로 쪼개는 생각
  2. 2값·변수·자료형 — 이름표를 붙여 값을 다루기
  3. 3조건문 — 상황에 따라 다른 길로 가기
  4. 4반복문 — 같은 일을 정확히 여러 번 시키기
  5. 5함수 — 이름 붙인 작은 기계로 나누기
  6. 6배열과 객체 — 데이터를 담고 다루기
  7. 7문자열·텍스트 처리 — 글자를 자르고 찾고 바꾸기
  8. 8디버깅과 오류 읽기 — 빨간 글씨를 단서로 바꾸기
  9. 9간단한 자동화 예제 — 표 계산과 텍스트 정리를 코드로
  10. 10AI가 짠 코드 읽고 검증하기 — 테스트·보안·라이선스·개인정보
📚 함께 읽으면 좋은 글
📊인공지능으로 표 계산 작업 돕기, 수식은 반드시 검증→ 💻인공지능 코딩 도우미 쓰는 법과 위험, 보안과 라이선스→ 💬외국어 회화 연습 상대로 인공지능 쓰는 법→ ⚙️업무 자동화 아이디어 찾기, 인공지능에 맡길 일 고르는 법→
← AI 시대 기초 학력 강의