2026년 9월 6일 일요일

[도서관·행정] 교내 도서관 희망도서 신청 - 중복 ISBN 검증과 원클릭 구매목록 뽑기



중복 없이 가장 필요한 책만 사서 담는 '도서관 희망도서 신청 & 중복 검증 시스템'

📖 교내 도서관 행정 및 학생 독서 교육 — 교직원과 학생들이 희망하는 책 제목과 ISBN을 입력하면, 파일 안에 심어둔 기존 보유 도서 목록(EMBED_BOOKS)과 실시간 대조하여 중복 신청을 즉시 차단합니다. 사서교사는 분기별 구매 목록을 원클릭 CSV로 추출하여 교무행정의 연간 도서 구매 예산 낭비를 원천 봉쇄합니다.

📖 한 줄 정의

심기 모드(데이터 임베딩): API 데이터를 미리 받아 HTML 파일 안 상수로 박아두는 방식(앱 실행 중 외부 통신 0).

학내망 원칙: 학생 개인정보(실명·의견·성적·상담 기록)의 외부 수집·저장·전송 금지(쿼리에 학생 데이터가 담기는 외부 API 호출 포함) — 일반 공개 쿼리의 외부 호출은 허용하며, 학생 배포본은 심기 폴백(EMBED 상수)을 항상 내장한다.

1. 3대 핵심 분석 비교표

무엇이 바뀌었나요? / 영역 초보자를 위한 쉬운 설명 이렇게 한번 써보세요!
ISBN 중복 즉시 검증 책 표지 뒷면의 ISBN 코드를 입력하는 순간, 보유 목록 상수와 대조하여 "이미 보유 중" 빨간 경고를 즉시 띄웁니다. 학생이 신청한 도서와 사서의 신규 구입 희망 도서가 겹치지 않도록 서버 전송 0으로 검증.
분기별 구매 목록 자동 추출 승인된 희망 도서를 분기별로 묶어 콤마 분리(CSV) 서식으로 내보내는 기능을 제공합니다. '1분기 구매 예정 15권' 목록을 클립보드 복사하거나 파일로 다운로드하여 행정 즉시 전달.
보유 도서 데이터 파일 내장 외부 데이터베이스 연동 없이, 교내 보유 도서 정보를 상수 내부에 수 백~수천 건 내장해도 브라우저 즉시 검색이 가능합니다. 초기 세팅 시 학교 보유 도서 명단이 담긴 CSV를 직접 파일 안 상수로 심는 방식.

2. 핵심 아키텍처 해설

① 보유 도서 및 신청 목록 상수

const BOOKS = [
  { isbn: "9788954623507", title: "코알라 일기", author: "정유미", year: 2018 },
  { isbn: "9788954612345", title: "가입인사", author: "기타" }
];
const WISHES = []; // 새로 신청된 희망 도서 목록

교내 보유 도서 목록을 ISBN 기준으로 파일 상단에 내장하고, 학생들의 신규 신청 요청을 배열에 담아 실시간 비교 분석합니다.

② 중복 도서 실시간 감지 로직

function checkDuplicate(isbn) {
  const exists = BOOKS.some(b => b.isbn === isbn);
  if (exists) {
    const found = BOOKS.find(b => b.isbn === isbn);
    return { dup: true, msg: `${found.title} (${found.author})은 이미 보유 중입니다.` };
  }
  return { dup: false };
}

입력된 ISBN과 내장 보유 데이터를 some() 함수로 빠르게 대조하여 중복 여부를 즉시 반환합니다.

③ 구매 확정 목록 CSV 출력

function exportCSV(approvedList) {
  const csv = "제목,저자,ISBN,신청자\n" +
    approvedList.map(b => `${b.title},${b.author},${b.isbn}`).join("\n");
  const blob = new Blob(["\ufeff" + csv], { type: "text/csv;charset=utf-8;" });
  const link = document.createElement("a");
  link.href = URL.createObjectURL(blob);
  link.download = "희망도서_구매목록.csv";
  link.click();
}

UTF-8 BOM 헤더를 붙여 엑셀에서 한글이 깨지지 않도록 안전한 CSV를 생성합니다. 학생 신청자 정보는 실명 대신 학년·반·번호와 닉네임으로 표기됩니다.

3. 초보자를 위한 바이브 코딩 실전 사용 예시

  1. 프롬프트 복사 — 아래 '제미나이 전용 에러 제로 프롬프트'를 복사합니다.
  2. 역질문 답변 — 제미나이가 묻는 교내 도서관 보유 도서 수와 학년별 신청 단위에 답합니다.
  3. HTML 파일 실행 — 메모장에 붙여넣고 희망도서신청.html로 저장하여 도서관 홈페이지에 배포합니다.

제미나이 전용 에러 제로 프롬프트

[🚨 에러 방지 기본 안전장치]
1. 단일 HTML 파일 완결성: 외부 라이브러리(CDN), 백엔드 서버 없이 순수 바닐라 HTML/CSS/JS로 완성한다.
2. 심기 모드(데이터 임베딩): const BOOKS = [...] 상수에 교내 보유 도서 10권 이상의 예시 데이터(ISBN, 제목, 저자)를 내장하여 즉시 검증 기능이 작동하도록 한다.
3. ISBN 중복 검사: 사용자가 입력한 13자리 ISBN이 기존 보유 목록과 겹치면 즉시 붉은 경고창으로 차단하고, 미보유 도서만 대기 목록에 추가한다.
4. CSV 구매목록 원클릭 내보내기: BOM 헤더를 포함한 UTF-8 CSV로 변환하여 엑셀에서도 한글이 안 깨지도록 설계한다.
5. // TODO, /* 생략 */ 등의 미완성 코드는 절대 넣지 말고 끝까지 완성한다.

[❓ 역질문 유도]
코드를 즉시 작성하지 말고, 아래 3가지 질문을 먼저 나에게 던져줘:
1. 신청자 표기는 학년·반·번호와 닉네임 기준으로 할까요? (실명 제외 권장)
2. 신청 가능한 도서 갯수에 분기별 제한(예: 1인 2권)을 둘까요?
3. 검증 화면 디자인 테마를 도서관 느낌의 페이퍼 크림 톤으로 갈까요?

🎯 에디터 한줄평

"중복으로 사진 찍힌 책이 몇 권이겠어? 싶었지만, 1년 도서 구매 예산 속 중복 구입 책이 몇십 권씩 쌓였을 때 사서교사의 안타까움은 눈물로 바뀝니다. ISBN 13자리 숫자만 입력하면 서버 통신 없이도 즉시 '보유 중'과 '신규 희망'을 가려주는 이 도구는 학교 도서관 행정의 낭비를 단기간에 끝내주는 훌륭한 스마트 워크입니다."

📚 기술·교육 참고 링크

  • 국립중앙도서관 및 교육과정 연계 : 국내 도서관 자료 협력 도우미 정보 참고
  • 교육과정 연계: 초등 3~6학년 독서 및 도서 이용 교육, 교내 도서관 활용 교육, 초등 실과 정보 처리 기초