블로그

  • Anthropic Interviewer 소개 (한글 번역)

    아래 Anthropic 의 글을 번역한 글입니다.

    Introducing Anthropic Interviewer

    2025년 12월 5일

    저희는 사람들의 AI에 대한 관점을 더 깊이 이해하기 위해 새로운 도구인 Anthropic Interviewer를 출시합니다. 이번 연구 포스트에서는 이 도구를 소개하고, 전문가 표본을 대상으로 진행한 테스트 과정과 초기 연구 결과를 공유합니다. 또한, 이 도구의 개발과 크리에이터, 과학자, 교사들과의 파트너십을 통해 탐구할 수 있게 된 향후 연구 방향에 대해서도 논의합니다.

    오늘부터 Claude.ai에서 인터뷰 참여를 요청하는 팝업을 보게 되실 수 있습니다. 참여를 통해 여러분은 이 글에서 설명하는 연구의 다음 단계에 기여하실 수 있습니다.


    서론 (Introduction)

    현재 수백만 명의 사람들이 매일 AI를 사용하고 있습니다. AI 시스템을 개발하는 기업으로서, 저희는 사람들이 어떻게, 왜 AI를 사용하며, 그것이 그들에게 어떤 영향을 미치는지 알고 싶습니다. 이는 부분적으로는 사용자 피드백을 통해 더 나은 제품을 만들기 위함이지만, 동시에 AI와 인간의 상호작용을 이해하는 것이 우리 시대의 가장 중요한 사회학적 질문 중 하나이기 때문입니다.

    최근 저희는 사용자 프라이버시를 보호하면서 AI 사용 패턴을 조사하기 위한 도구를 설계했습니다. 이를 통해 경제 전반에 걸친 AI 사용 패턴의 변화를 분석할 수 있었습니다. 하지만 이 도구는 Claude와의 대화 내부에서 일어나는 일만 파악할 수 있었습니다. 대화가 끝난 그 이후는 어떨까요? 사람들은 실제로 Claude의 결과물을 어떻게 활용하고 있을까요? 그들은 이에 대해 어떻게 느끼며, 미래에 AI의 역할을 어떻게 상상하고 있을까요?

    사람들의 삶 속에서 변화하는 AI의 역할을 포괄적으로 파악하고, 모델 개발의 중심에 ‘인간’을 두기 위해서는 사람들에게 직접 물어봐야 합니다.

    이러한 프로젝트는 수백 건의 인터뷰를 필요로 합니다. 저희는 이를 수행하기 위해 AI의 도움을 받았습니다. Claude를 기반으로 구축된 Anthropic Interviewer는 전례 없는 규모로 상세한 인터뷰를 자동으로 진행하고, 그 결과를 분석을 위해 인간 연구원에게 전달합니다. 이는 사용자의 요구를 이해하고 AI의 사회적, 경제적 영향을 분석하기 위한 데이터를 수집하는 새로운 단계입니다.

    Anthropic Interviewer를 테스트하기 위해, 저희는 1,250명의 전문가(일반 직장인 1,000명, 과학자 125명, 크리에이터 125명)를 대상으로 AI에 대한 견해를 묻는 인터뷰를 진행했습니다. 저희는 연구자들이 탐구할 수 있도록 참여자의 동의를 얻어 이번 초기 테스트의 모든 인터뷰 데이터를 공개하며, 아래에 자체 분석 결과를 제공합니다. 요약하자면 다음과 같습니다.

    • 전문가들은 업무에서 AI의 역할에 대해 낙관적입니다. 대다수의 주제에서 긍정적인 정서가 나타났습니다. 그러나 교육적 통합, 예술가 일자리 대체, 보안 우려 등 일부 주제에서는 비관적인 전망도 있었습니다.

    • 일반 직장인들은 자신의 직업적 정체성을 정의하는 업무는 보존하되, 반복적인 업무는 AI에 위임하기를 원합니다. 그들은 반복 업무가 자동화되고 자신의 역할이 AI 시스템을 감독하는 방향으로 변화하는 미래를 그립니다.

    • 크리에이터들은 동료들의 비판과 미래에 대한 불안 속에서도 생산성을 높이기 위해 AI를 사용합니다. 그들은 창작 커뮤니티 내의 AI 사용에 대한 낙인(stigma)과 경제적 대체, 인간 창의성의 침식에 대한 깊은 우려 사이를 항해하고 있습니다.

    • 과학자들은 AI와의 파트너십을 원하지만, 아직 핵심 연구에는 AI를 신뢰하지 못합니다. 과학자들은 가설 생성이나 실험 설계를 수행할 수 있는 AI를 원한다고 한목소리로 말했습니다. 그러나 현재로서는 원고 작성이나 분석 코드 디버깅 같은 업무에만 제한적으로 사용하고 있습니다.

    위 다이어그램은 인터뷰에서 논의된 주제들을 비관적인 것부터 낙관적인 순서로 대략적으로 나열한 것입니다. 세 그룹(일반 직장인, 과학자, 크리에이터) 모두 AI가 전문 활동에 미치는 영향에 대해 긍정적인 정서를 주로 표현했습니다. 그러나 개인의 통제권, 일자리 대체, 자율성에 관한 주제에서는 주저함이 나타났습니다.


    연구 방법 (Method)

    이번 초기 테스트는 근로자들이 AI를 업무에 어떻게 통합하고 있으며, 미래의 역할에 대해 어떻게 느끼는지 탐구했습니다. 정성적 데이터(Qualitative data) 생산을 위해 인터뷰를 진행했고, 행동 및 직업적 배경을 묻는 설문조사를 통해 정량적 데이터(Quantitative data)를 보완했습니다. 또한 별도의 AI 분석 도구를 사용하여 인터뷰 기록을 읽고, 비정형 데이터에서 떠오르는 포괄적인 주제들을 클러스터링(군집화)했습니다.

    참여자 (Participants)

    Anthropic Interviewer를 사용하여 1,250명의 전문가와 인터뷰를 진행했습니다.

    • 일반 직장인 (N=1,000): 특정 직업군을 선별하지 않고 모집했습니다. 교육직(17%), 컴퓨터 및 수학 관련직(16%), 예술/디자인/엔터테인먼트/미디어(14%) 순으로 비중이 높았습니다.

    • 전문가 그룹 (각 N=125):

    • 크리에이터: 작가(48%), 시각 예술가(21%)가 주를 이뤘으며, 영화 제작자, 디자이너, 음악가 등이 포함되었습니다.

    • 과학자: 물리학자(9%), 화학자(9%), 화학 공학자(7%), 데이터 과학자(6%) 등 50개 이상의 세부 과학 분야를 포함했습니다.

    이 두 전문가 그룹을 추가한 이유는 AI의 역할이 여전히 논쟁적이며 빠르게 진화하고 있는 영역이기 때문입니다.

    Anthropic Interviewer 작동 방식

    Anthropic Interviewer는 **계획(Planning), 인터뷰(Interviewing), 분석(Analysis)**의 3단계로 작동합니다.

    1. 계획 (Planning): 수천 건의 인터뷰 전반에 걸쳐 동일한 연구 질문에 집중하면서도, 개별 인터뷰의 변수와 파생된 주제를 수용할 수 있는 유연한 인터뷰 루브릭(rubric)을 생성합니다. 시스템 프롬프트(System prompt)를 통해 방법론을 주입하고, 연구 목표에 기반한 구체적인 질문과 대화 흐름을 생성합니다.

    2. 인터뷰 (Interviewing): 인터뷰 계획에 따라 실시간으로 적응형 인터뷰를 진행합니다. 이 단계에서도 모범적인 인터뷰 기법을 사용하도록 지시하는 시스템 프롬프트가 포함됩니다. 인터뷰는 Claude.ai 인터페이스에서 약 10\~15분간 진행되었습니다.

    3. 분석 (Analysis): 인터뷰가 완료되면 인간 연구원이 AI와 협력하여 기록을 분석합니다. 초기 인터뷰 계획을 입력값으로 받아 연구 질문에 대한 답변과 예시 인용문을 출력합니다. 또한 자동화된 AI 분석 도구를 사용하여 주제를 식별하고 정량화합니다.


    연구 결과 (Results)

    일반 직장인에 미치는 AI의 영향

    설문조사에서 전문가의 86%는 AI가 시간을 절약해 준다고 답했고, 65%는 AI가 업무에서 하는 역할에 만족한다고 답했습니다.

    • 사회적 낙인 (Social Stigma): 69%가 직장에서 AI 도구를 사용하는 것에 대한 사회적 낙인을 언급했습니다. 한 팩트체커는 “동료가 AI를 싫어한다고 해서 저는 아무 말도 하지 않았습니다. 제 작업 과정을 공유하지 않아요.”라고 말했습니다.

    • 불안과 적응: 55%가 미래에 대해 불안감을 표현했습니다. 불안을 느끼는 그룹의 25%는 AI 사용에 경계를 설정(예: 수업 계획은 직접 작성)했고, 25%는 더 전문적인 업무를 맡는 등 역할을 조정했습니다.

    위 차트에서 볼 수 있듯이, 직종별로 감정 프로필은 놀랍도록 균일하게 나타났으며 **만족감(Satisfaction)**이 높았습니다. 그러나 이는 **좌절감(Frustration)**과 결합되어 있어, 전문가들이 AI를 유용하게 느끼면서도 구현 과정에서 상당한 도전에 직면하고 있음을 시사합니다.

    증강(Augmentation) 대 자동화(Automation)

    이전 분석과 달리, 인터뷰 참여자의 **65%는 AI의 역할을 ‘증강(협업)’으로, 35%는 ‘자동화(직접 수행)’**로 묘사했습니다. 이는 실제 Claude 대화 로그 분석(증강 47%, 자동화 49%)과는 차이가 있습니다. 전문가들은 자신이 AI를 단순히 시키는 것이 아니라 협업한다고 인식하거나, 실제 대화보다 더 주체적으로 느끼는 경향이 있을 수 있습니다.

    크리에이터 직군에 미치는 AI의 영향

    크리에이터의 97%가 시간 절약을, 68%가 작업 품질 향상을 보고했습니다. 그러나 경제적 불안 또한 뚜렷했습니다. 성우들은 특정 시장이 사라졌다고 말했고, 작곡가들은 저렴한 AI 음악이 시장에 넘쳐날 것을 우려했습니다.

    흥미로운 점은 125명 전원이 창작물에 대한 통제권을 유지하고 싶어 했지만, 실제로는 “AI가 아이디어의 60%를 주도한다”고 인정하는 등 경계가 모호해지는 경우가 많았다는 것입니다.

    게임 개발자와 시각 예술가는 **높은 만족감과 높은 걱정(Worry)**을 동시에 보였습니다. 반면 디자이너는 좌절감이 지배적이었습니다.

    과학 연구에 미치는 AI의 영향

    과학자들은 문헌 검토, 코딩, 글쓰기 등 주변 업무에 AI를 주로 사용하며, 가설 생성이나 실험 같은 핵심 연구에는 아직 AI를 활용하지 못하고 있습니다.

    • 신뢰성 문제: 79%의 인터뷰에서 신뢰성 우려가 주요 장벽으로 지적되었습니다. “AI 에이전트가 한 일을 일일이 확인해야 한다면, 에이전트를 쓰는 의미가 없다”는 정보 보안 연구원의 말처럼 검증 비용이 높습니다.

    • 일자리 대체 우려 낮음: 과학자들은 실험적 직관이나 암묵적 지식 때문에 AI가 자신을 대체할 것이라는 두려움은 적었습니다.

    • 미래에 대한 기대: 91%의 과학자가 연구에서 더 많은 AI 지원을 원했습니다. 특히 “새로운 과학적 아이디어(가설)를 생성”하거나 “가치 있는 연구 파트너”가 되어주기를 희망했습니다.


    향후 전망 (Looking forward)

    이번 초기 테스트는 Anthropic Interviewer가 대규모 정성 조사에 효과적임을 입증했습니다. 기존의 수동 인터뷰 방식으로는 막대한 비용과 시간이 들었을 규모입니다.

    이 도구는 우리가 AI의 사회적 역할에 대해 묻고 답할 수 있는 질문의 범위를 근본적으로 변화시킵니다. 이제 우리는 채팅창 내부를 넘어, 사람들이 기술에 대해 어떻게 느끼는지, 상호작용에서 무엇을 변화시키고 싶은지, 미래를 어떻게 상상하는지 파악할 수 있게 되었습니다.

    저희는 크리에이터(전시, 워크숍 지원), 과학자(AI for Science 수혜자 파트너십), 교사(미국 교사 연맹과의 파트너십) 등 특정 커뮤니티와 협력하여 그들의 전문 지식이 반영된 AI를 개발하기 위한 실질적인 조치를 취하고 있습니다.

    참여하기 (Take part)

    저희는 Anthropic Interviewer를 계속 활용할 예정입니다. 여러분의 경험과 가치관이 AI의 미래 역할에 대한 비전을 어떻게 형성하는지 알아보고자 공개 파일럿 인터뷰를 시작합니다.

    지금 이 링크를 통해 10\~15분 분량의 인터뷰에 참여하실 수 있습니다. (기존 가입자 대상)


    결론 및 한계 (Conclusions and limitations)

    1,250명의 전문가 인터뷰는 노동 인구가 AI와의 관계를 능동적으로 협상하고 있음을 보여주었습니다. 사람들은 생산성을 위해 반복 업무를 위임하면서도 직업적 정체성의 핵심은 지키려 노력하고 있습니다.

    한계점:

    • 선택 편향(Selection bias): 크라우드 워커 플랫폼을 통해 모집되었기에 일반 노동 인구와 차이가 있을 수 있습니다.

    • 요구 특성(Demand characteristics): AI 시스템이 AI에 대해 묻는다는 사실이 참여자의 응답에 영향을 주었을 수 있습니다.

    • 정서 분석의 한계: 텍스트 기반 인터뷰이므로 목소리 톤이나 표정 등의 비언어적 단서를 놓칠 수 있습니다.

    • 자기보고와 객관적 지표의 차이: 사용자의 인식(인터뷰)과 실제 사용 패턴(로그) 간의 불일치가 확인되었습니다.

    저희는 이 대규모 인터뷰 데이터셋을 공개함으로써 인간-AI 관계의 진화에 대한 집단적 이해를 넓히고자 합니다.


    감사의 말 및 인용 (Contributions and Citation)

    (본문 참조: Kunal Handa가 프로젝트를 이끌었으며, Michael Stern, Saffron Huang 등이 기여했습니다.)


    부록: 참여자 경험

    참여자의 97.6%가 인터뷰 경험에 대해 5점 이상(7점 만점)의 만족도를 보였으며, 99.12%가 이 인터뷰 형식을 타인에게 추천하겠다고 답했습니다.


    번역가(양자_변수)의 코멘트

    이번 번역에서는 ‘Anthropic Interviewer’라는 새로운 도구의 기술적 방법론과 그것이 밝혀낸 사회학적 통찰을 균형 있게 전달하는 데 주력했습니다. 특히 **증강(Augmentation)**과 **자동화(Automation)**의 미묘한 뉘앙스 차이, 그리고 각 직군이 느끼는 감정(만족, 불안, 좌절)의 복합적인 양상을 명확한 한국어 어휘로 표현하여 한국 독자들이 데이터 이면의 맥락을 쉽게 이해할 수 있도록 했습니다.

    [다음 단계]

    사용자님, 위 번역본을 바탕으로 **’특정 직군(예: 개발자, 마케터)을 위한 맞춤형 AI 도입 가이드라인’**을 요약해 드릴까요? 혹은 원문의 **’인터뷰 데이터셋 활용 방안’**에 대해 더 자세히 분석해 드릴까요?

  • AI가 짠 코드에 영혼을 털리지 않는 법: 시니어가 전수하는 Git 생존 실전

    🚀 AI가 짠 코드에 영혼을 털리지 않는 법: 시니어가 전수하는 Git 생존 실전

    (아래 글은 시니어 개발자 페르소나로 설정하여 gemini에서 생성한 글입니다. )

    서론: 우리는 ‘작성자’가 아니라 ‘편집장’이다

    주니어 시절, git commit은 숙제 제출 버튼과 같았습니다. 하지만 AI가 초당 100줄의 코드를 쏟아내는 지금, Git은 ‘쓰레기 코드를 걸러내는 정수기’이자 ‘시간을 되돌리는 타임머신’이어야 합니다.

    여러분의 AI(이하 ‘AI 사수’)는 멍청하고 빠릅니다. 가끔 천재적이지만, 가끔은 멀쩡한 코드를 폭파시킵니다. 금요일 오후 5시, 쇼핑몰 결제 버튼이 작동하지 않는다는 버그 리포트가 들어온 상황을 가정해 봅시다. 김신입 사원과 AI 사수의 좌충우돌 디버깅 현장으로 들어갑니다.


    🎬 상황: 금요일 오후 5시, “결제 버튼이 안 눌려요!”

    미션: CheckoutButton.js의 클릭 이벤트를 수정하고 배포하라.

    도구: Cursor (AI 에디터), Git, 그리고 식은땀.

    Phase 1. 검증(Verification): AI의 과잉 친절 걸러내기

    김신입은 AI에게 프롬프트를 날립니다. “결제 버튼 클릭 시 중복 요청 막는 로직 추가해줘.”

    AI는 3초 만에 코드를 수정합니다. 김신입은 습관적으로 git add .를 치려다가, 제 목소리(“멈춰!”)를 떠올립니다.

    1. git add -p (AI야, 이 부분은 빼고 가자)

    AI가 작성한 코드를 보니, 결제 로직은 잘 짰는데 뜬금없이 “코드 스타일이 마음에 안 든다”며 파일 전체의 들여쓰기(Indent)를 2칸에서 4칸으로 바꿔버렸습니다. 이걸 그대로 올리면 팀장님께 등짝 스매싱을 맞습니다.

    Bash

    $ git add -p src/components/CheckoutButton.js
    

    터미널이 묻습니다.

    “Hunk 1: 결제 중복 방지 로직 (Is this change okay?)” -> y (Yes)

    “Hunk 2: 파일 전체 공백 수정 (Is this change okay?)” -> n (No)

    김신입은 AI가 친 ‘사고’를 n을 눌러 가볍게 무시하고, 필요한 로직만 스테이징합니다.

    2. git diff --check (보이지 않는 암살자 제거)

    로직은 완벽해 보입니다. 하지만 AI는 가끔 인간의 눈에 보이지 않는 ‘Trailing Whitespace(줄 끝 공백)’를 남깁니다.

    Bash

    $ git diff --check
    > src/components/CheckoutButton.js:45: trailing whitespace.
    

    역시나 있군요. 이게 있으면 나중에 코드 리뷰 툴에서 빨간 줄이 쫙 그어집니다. 김신입은 에디터 설정을 통해 이를 수정하고 넘어갑니다.

    3. git clean -fd (청소는 배포의 기본)

    git status를 쳐보니 AI가 테스트하느라 만든 test_payment_dummy.json, debug.log 파일이 널브러져 있습니다.

    Bash

    $ git clean -fd
    > Removing debug.log
    > Removing test_payment_dummy.json
    

    깔끔하게 추적되지 않는(Untracked) 파일들을 날려버립니다. 이제 커밋할 준비가 되었습니다.


    Phase 2. 안전망(Safety Net): 앗, API 키를 올렸다!

    마음이 급해진 김신입. git add .git commit -m "fix"를 날렸습니다. 그런데 아차, 로컬 테스트용으로 만든 .env 파일(AWS 비밀키 포함)이 같이 커밋됐습니다. 3초 뒤 깃허브 보안 봇이 경고 메일을 보낼 기세입니다.

    4. git reset --soft HEAD~1 (시간을 1분 전으로)

    커밋을 취소해야 합니다. 하지만 작성한 코드는 날리면 안 됩니다.

    Bash

    $ git reset --soft HEAD~1
    

    이 마법의 주문을 외우면, 방금 한 커밋은 취소되지만 수정한 파일들은 스테이징 상태(Staged)로 그대로 남습니다. 김신입은 안도의 한숨을 쉬며 .env 파일을 스테이징에서 뺍니다.

    5. git restore --staged .env (너는 여기 끼면 안 돼)

    비밀 파일만 콕 집어서 스테이징 무대에서 내려보냅니다.

    Bash

    $ git restore --staged .env
    

    이제 다시 안전하게 커밋할 수 있습니다.

    6. git reflog (신이시여, 저를 구하소서)

    그런데 여기서 김신입이 큰 실수를 합니다. reset을 하다가 옵션을 헷갈려 git reset –hard를 쳐버린 겁니다.

    “악! 아까 AI랑 1시간 동안 고친 코드가 다 날아갔어!”

    터미널은 깨끗해졌고, 파일은 수정 전으로 돌아갔습니다. 김신입의 얼굴이 사색이 됩니다. 퇴사 각입니다.

    하지만 시니어는 당황하지 않습니다.

    Bash

    $ git reflog
    > a1b2c3d HEAD@{0}: reset: moving to HEAD~1
    > 9f8e7d6 HEAD@{1}: commit: fix payment button logic (방금 날린 커밋)
    

    Git은 당신이 버린 커밋도 기억합니다. 9f8e7d6이라는 해시값을 찾았습니다.

    Bash

    $ git reset --hard 9f8e7d6
    

    좀비처럼 코드가 되살아납니다. 김신입은 Git을 숭배하게 됩니다.


    Phase 3. 기록(Documentation): 흔적 지우기

    급하게 고치느라 커밋 로그가 지저분합니다.

    1. fix: button logic

    2. fix: typo

    3. chore: remove console.log

    4. fix: really final fix

    이대로 PR(Pull Request)을 올리면 “커밋 정리 좀 하세요”라는 코멘트를 받을 게 뻔합니다.

    7. git rebase -i HEAD~4 (역사 조작단)

    최근 4개의 커밋을 하나로 합칩니다.

    Bash

    $ git rebase -i HEAD~4
    

    에디터가 열리면 첫 번째 커밋은 pick, 나머지는 s (squash)로 바꿉니다.

    이제 4개의 자잘한 커밋이 “fix: resolve payment button overlap issue”라는 하나의 우아한 커밋으로 재탄생합니다.

    8. git stash (잠깐만, 기획자가 불렀어)

    한창 리팩토링 중인데 기획자가 달려옵니다. “지금 당장 메인 배너 문구만 바꿔주세요!”

    작업하던 파일이 섞이면 안 됩니다.

    Bash

    $ git stash
    

    작업하던 코드를 임시 주머니(Stash)에 넣고, 워킹 트리를 깨끗하게 만듭니다. 배너 문구를 수정하고 커밋한 뒤, 다시 꺼냅니다.

    Bash

    $ git stash pop
    

    완벽한 문맥 전환(Context Switching)입니다.


    Phase 4. 디버깅(Debugging): 범인은 이 안에 있다

    배포가 끝났습니다. 그런데 월요일 아침, “장바구니 기능이 안 된다”는 연락이 옵니다. 금요일에 건드린 건 결제 버튼뿐인데 왜 장바구니가 터졌을까요? 지난 일주일간 쌓인 커밋은 100개. 도대체 어디서부터 잘못된 걸까요?

    9. git bisect (이진 탐색 탐정)

    100개의 커밋을 하나하나 확인할 순 없습니다. Git에게 범인을 찾게 시킵니다.

    Bash

    $ git bisect start
    $ git bisect bad  # 지금 상태가 버그가 있음
    $ git bisect good <일주일_전_해시> # 이때는  됐음
    

    Git은 딱 중간 지점의 커밋으로 이동합니다.

    “지금은 돼요?” -> 테스트해보니 됩니다.

    Bash

    $ git bisect good
    

    그럼 범인은 후반부 50개 중에 있습니다. Git은 다시 그 중간으로 이동합니다.

    이렇게 몇 번만 반복하면, 수학적으로 $O(log n)$의 속도로 범인 커밋을 찾아냅니다.

    범인은… “feat: AI optimized rendering speed” 커밋이었습니다. AI가 렌더링 속도를 높인답시고 장바구니 로직을 건너뛰게 만들었군요.

    10. git blame (실명제)

    누가 이 코드를 승인했습니까?

    Bash

    $ git blame src/utils/rendering.js
    

    라인 옆에 이름이 뜹니다. Antigravity (3 days ago).

    …네, 범인은 저였군요. (AI가 짠 코드를 대충 리뷰하고 넘긴 제 탓입니다.)


    🎁 보너스: 생산성 2배 업! .gitconfig Alias 설정

    위의 시나리오를 겪고 나면, 매번 긴 명령어를 치는 게 고역일 겁니다.

    아래 설정을 여러분의 홈 디렉토리 .gitconfig 파일에 붙여넣으세요. 이제 여러분의 손가락은 날개를 답니다.

    Ini, TOML

    # ~/.gitconfig 파일을 열어서 [alias] 섹션에 추가하세요.
    
    [alias]
        # 1. 상태 확인  로그 (가장 많이 )
        s = status -s                   # 짧고 굵게 상태 확인
        lg = log --oneline --graph --all --decorate # 지하철 노선도처럼 로그 보기
    
        # 2. 작업  검증 (AI 코드 검수용)
        ap = add -p                     # 조각내서 스테이징 (필수!)
        dc = diff --cached              # 스테이징된 내용 확인 (커밋 직전 리허설)
        d = diff                        # 작업 중인 내용 확인
    
        # 3. 커밋  수정 (실수 방지)
        c = commit -m                   # 커밋 메시지 작성
        ca = commit --amend             # 방금  커밋 수정 (메시지나 파일 추가)
        can = commit --amend --no-edit  # 방금  커밋 수정 (메시지는 그대로, 파일만 덮어쓰기)
    
        # 4. 안전망  복구
        rh = reset --hard               # 주의! 강제 초기화
        rs = reset --soft               # 커밋만 취소, 파일은 살림 (가장 유용)
        re = restore                    # 작업 취소
        res = restore --staged          # 스테이징 취소
    
        # 5. 브랜치  동기화
        co = checkout
        sw = switch
        br = branch
        st = stash
        stp = stash pop
        p = push
        pf = push --force-with-lease    # 그냥 force보다 안전한 강제 푸시
    
        # 6. 고급 기능
        sq = rebase -i                  # 스쿼시(Squash) 하러 가기
        who = blame                     # 범인 찾기
    

    적용 후 변화된 삶

    • Before: git add -p (타닥타닥) -> git commit -m "fix bug" (타닥타닥)

    • After: git ap (탁) -> y, n, y -> git c "fix bug" (탁)


    마치며: 도구는 거들 뿐, 본질은 ‘판단’

    AI는 엄청난 속도로 코드를 생산합니다. 그 속도에 휘둘리지 않으려면 브레이크(git add -p)와 핸들(git rebase), 그리고 내비게이션(git bisect)을 능숙하게 다뤄야 합니다.

    오늘 소개한 명령어들이 여러분을 단순한 ‘코더(Coder)’에서 코드의 역사를 책임지는 ‘엔지니어(Engineer)’로 만들어 줄 것입니다.

    지금 바로 터미널을 열고 git ap를 입력해보세요. 그게 바로 시니어의 ‘바이브’입니다. 🚀

  • 5분 설정 방법

    # 🛡️ Global Requirement: Trial Guard System (Mandatory)

    모든 프로젝트 구현 시, 다음의 **’시간 제한 및 보안 잠금(Trial Guard)’** 모듈을 기본 아키텍처에 반드시 포함시켜라. 이는 앱의 비즈니스 로직과 무관하게 항상 적용되어야 하는 최상위 보안 레이어다.

    ## 1. Functional Specification

    * **Time Limit:** 앱 실행(최초 접속) 후 **5분**이 지나면 애플리케이션 사용을 전면 차단한다.

    * **Lock Mechanism:**

    \* 시간 만료 시, 화면 전체를 덮는 \*\*Blur Overlay(블러 처리된 오버레이)\*\*를 띄운다.
    
    \* 사용자의 클릭, 스크롤, 입력을 모두 막는다 (Scroll Lock).
    

    * **Unlock Mechanism:**

    \* 오버레이 중앙에 '관리자 비밀번호' 입력 폼을 제공한다.
    
    \* 올바른 비밀번호 입력 시, 잠금을 영구적(혹은 세션 동안)으로 해제한다.
    

    ## 2. Technical Implementation Guidelines

    * **State Persistence (Anti-Cheat):**

    \* 새로고침을 해도 타이머가 리셋되지 않도록 \`localStorage\`에 \`trial\_start\_timestamp\`를 저장하고 비교해라.
    
    \* 단순 \`setTimeout\`에 의존하지 말고, \`Date.now()\`와 저장된 타임스탬프의 차이를 계산하여 잔여 시간을 렌더링해라.
    

    * **Security (Server-Side Verification):**

    \* \*\*절대\*\* 비밀번호를 클라이언트(브라우저) 코드에 하드코딩하거나 노출하지 마라.
    
    \* Next.js 사용 시: \`Server Actions\` 또는 API Route를 통해 서버단에서 비밀번호를 검증해라.
    
    \* React/Vite 사용 시: 환경 변수가 빌드 타임에 노출되지 않도록 유의하고, 가능한 한 보안 로직을 분리해라.
    

    * **Environment Variables:**

    \* 비밀번호와 제한 시간은 코드가 아닌 \`.env\` 파일에서 관리하도록 설정해라.
    
    \* Key 예시: \`NEXT\_PUBLIC\_TRIAL\_LIMIT\_MIN=5\`, \`ADMIN\_UNLOCK\_PASSWORD=...\`
    

    ## 3. UI/UX Standard

    * **Component Structure:** `TrialGuardProvider`와 같은 Context API 기반의 래퍼(Wrapper) 컴포넌트를 만들고, 최상위 `layout` 또는 `App` 컴포넌트를 감싸도록 설계해라.

    * **Design:**

    \* 세련된 \`Glassmorphism\` (배경 블러) 스타일 적용.
    
    \* 비밀번호 입력 실패 시 "비밀번호 오류" Toast 메시지 및 Input 필드 흔들림 애니메이션 적용.
    

    ## 4. Developer Experience

    * 구현 완료 후, 로컬 환경에서 테스트할 수 있도록 `localStorage`를 강제로 클리어하거나 시간을 조작하는 **디버그 버튼(Dev Only)**을 잠시 보여주거나, 테스트 방법을 README에 명시해라.

  • 제미나이 3 프로와 구글 슬라이드로 보고서 만들기: ESS 요약 슬라이드

    1. 보고서 작성 준비물

    • 제미나이 3 프로 (Gemini 3 Pro): 내용을 요약하고 아이디어를 떠올리는 데 도움을 주는 인공지능 도구

    • 구글 슬라이드 (Google Slides): 보고서를 시각적으로 구성하고 발표하는 데 사용하는 프로그램

    • 나노바나나 프로 (선택 사항): (영상에서 구체적인 사용법은 언급되지 않았지만, 추가적인 기능이나 편의성을 제공하는 도구로 추정)

    2. 제미나이 3 프로 활용하기

    • 내용 요약: 긴 문장이나 자료를 짧고 핵심적인 내용으로 줄여줍니다. 예를 들어, 에너지 저장 시스템(ESS)에 대한 긴 설명을 몇 개의 문장으로 요약할 수 있습니다.

    • 예시: “ESS는 에너지 효율을 높이고 신재생 에너지 활용을 돕는 중요한 기술이다.” → “ESS: 에너지 효율 증대, 신재생 에너지 활용”

    • 아이디어 생성: 특정 주제에 대해 새로운 아이디어를 떠올리거나 해결 방안을 찾도록 도와줍니다.

    • 예시: “ESS의 단점 극복 방안” → “ESS 수명 연장 기술 개발, 초기 투자 비용 절감 방안 모색”

    3. 구글 슬라이드 활용하기

    • 시각적 구성: 요약된 내용을 구글 슬라이드에 보기 좋게 배치합니다. 그림, 그래프, 표 등을 활용하여 내용을 더 쉽게 이해하도록 돕습니다.

    • 핵심 강조: 중요한 내용은 글자 크기를 키우거나 색깔을 다르게 하여 강조합니다.

    • 간결한 문구 사용: 슬라이드에는 긴 문장 대신 짧고 명확한 문구를 사용하는 것이 좋습니다.

    4. ESS 요약 슬라이드 예시 (가상)

    제목 내용 시각 자료 (예시)
    ESS란 무엇인가? 에너지 저장 시스템 (Energy Storage System)\
    남는 전력을 저장했다가 필요할 때 사용하는 장치.\
    에너지 효율을 높이고 신재생 에너지 활용을 돕습니다. ESS 그림
    ESS의 장점 1. 에너지 효율 증대\
    2. 신재생 에너지 활용 극대화\
    3. 전력망 안정화 그래프 (에너지 효율)
    ESS의 단점 1. 높은 초기 투자 비용\
    2. 제한적인 수명\
    3. 안전 문제 (화재 위험 등) 표 (비용, 수명 비교)
    미래 전망 ESS 시장은 지속적으로 성장할 것으로 예상됨.\
    기술 발전과 정부 지원 정책 확대로 더욱 보편화될 것으로 기대됨. 성장 그래프

    5. 나노바나나 프로 활용 (추정)

    • (영상에서 구체적인 사용법은 언급되지 않았지만) 슬라이드 디자인을 개선하거나, 발표 자료를 효과적으로 관리하는 데 도움을 줄 수 있을 것으로 추정됩니다.

    6. 보고서 작성 마무리

    • 검토: 오타나 잘못된 정보는 없는지 꼼꼼하게 확인합니다.

    • 피드백: 다른 사람에게 보여주고 의견을 들어보는 것이 좋습니다.

    • 발표 연습: 자연스럽고 자신감 있게 발표할 수 있도록 연습합니다.

    7. 요약

    • 제미나이 3 프로는 보고서 내용을 요약하고 아이디어를 생성하는 데 유용합니다.

    • 구글 슬라이드는 보고서를 시각적으로 구성하고 발표하는 데 효과적인 도구입니다.

    • ESS 요약 슬라이드는 핵심 내용을 간결하게 전달하는 데 도움이 됩니다.

    • (선택적으로) 나노바나나 프로를 활용하여 보고서 작성 과정을 더욱 효율적으로 만들 수 있습니다.

  • 2025년 전 세계 3D LED 디스플레이 50가지 사례 정리

    2025년 전 세계 3D LED 디스플레이 50가지 사례 정리

    개요

    동적인 광고 시대에 맨눈 3D LED 디스플레이는 기존 2D 광고를 혁신하는 핵심 기술로 부상했습니다. 안경 없이도 입체적인 시각 효과를 경험할 수 있어 관객의 주의를 집중시키고 브랜드 임팩트를 극대화합니다.bibiled

    지역별 3D LED 디스플레이 사례 분류

    북미 지역 (6개)

    뉴욕은 3D LED 광고의 중심지로, 타임스퀘어에 집중된 사례들이 특히 눈에 띕니다.bibiled

    장소 특징 주요 내용
    타임스퀘어 – 슈퍼 마리오 무비 영화 캐릭터의 입체 표현 실제 물체처럼 튀어나오는 느낌
    타임스퀘어 – 코카콜라 기계적 동작 + 3D 영상 로고가 화면에서 분리되어 보임
    타임스퀘어 – 디올 향수 럭셔리 패션 광고 낭만적이고 몽환적인 분위기
    타임스퀘어 – 워터폴 폭포 시뮬레이션 4개 세로형 LED(총 높이 102.5m)
    타임스퀘어 – 고래 해양생물 표현 1,400㎡ 메리어트 호텔 외부 설치
    로스앤젤레스 – 닌텐도 게임 IP 홍보 폭 50피트, 높이 300피트

    라스베가스의 MSG Sphere는 가장 상징적인 사례입니다. 높이 112m, 너비 157m의 구형 디스플레이로 총 18억 달러를 투자했으며, 동적인 이모티콘으로 생동감을 표현합니다.bibiled

    유럽 지역 (3개)

    런던 피카딜리 서커스는 메타 퀘스트 2의 글로벌 캠페인 일환으로 20m 높이의 3D 디지털 광고판을 설치했습니다. 감독 잭 스나이더의 영화 “아미 오브 더 데드”의 좀비 호랑이 영상은 동물 권리를 보호하면서도 전례 없는 충격적 경험을 제공했습니다.bibiled

    모스크바 동물원 정문의 3D LED 디스플레이는 교육적 목적으로 동물 지식을 홍보하고 대중화합니다.bibiled

    우크라이나 키이우의 쇼핑몰 스크린은 지하철 차량의 3D 영상으로 차량이 화면에서 실제로 달려나오는 사실적인 효과를 구현합니다.bibiled

    중국 지역 (12개)

    중국은 3D LED 디스플레이 기술의 가장 활발한 도입 지역입니다.bibiled

    심천 지역의 사례들:

    • 푸티안 CBD: 3,000㎡ 규모의 대형 스크린에서 파란색 인어가 안쪽으로 움직이는 모습

    • Vivo X80 광고: 7개의 상상력 풍부한 장면(“신비한 안개”, “거대 고래 행성”, “듀얼 코어 도시”, “파란 풍선”, “물 커튼 빌딩”, “추상 세계”, “렌즈 포커스”)

    우한 지역의 대규모 설치:

    • 동더 톈위 타이쿠 리: 위엄 있는 사자가 화면에서 튀어나오는 사실적인 3D 효과

    • 우주선 광고판: 1,024㎡ 규모로 농구장보다 크며 우주선이 화면을 지나가는 효과

    창사는 두 개의 상호작용형 3D LED 디스플레이를 설치하여 크리스마스, 발렌타인데이, 중국 설날 등의 이벤트에 따라 서로 다른 콘텐츠를 표시합니다.bibiled

    항저우의 서호 디스플레이는 아시아 최대 규모의 P6 초고화질 실외 3D 스크린으로 2,400㎡의 면적을 자랑합니다.bibiled

    칭다오 파크슨 플라자: 1,400㎡ 규모로 5G+8K 최첨단 기술을 결합한 초고화질 디스플레이bibiled

    난징, 셴양, 충칭은 각각 독특한 형태의 맨눈 3D LED 디스플레이를 운영하고 있습니다.bibiled

    일본 지역 (7개)

    도쿄는 3D LED 광고 기술의 최첨단 도시입니다.bibiled

    장소 특징 규모
    신주쿠 – Nike 상호작용형 스니커즈 디스플레이 폭 18.96m, 높이 8.16m, 154.7㎡
    신주쿠 – 도쿄캣 얼룩 고양이의 사실적 표현 폭 약 19m, 높이 8m, 150㎡ 이상
    신주쿠 – 도쿄 3D 강아지 귀여운 동물 캐릭터 초대형 규모
    시부야 – 자이언트 팬더 판다 캐릭터 디스플레이 소셜 미디어 인기 콘텐츠
    오모테산도 – Red XIII 파이널 판타지 7 캐릭터 게임 홍보용 3D 영상

    한국 지역 (5개)

    한국은 기술과 디자인을 결합한 3D LED 디스플레이 운영으로 주목받고 있습니다.bibiled

    서울의 주요 사례:

    • 코엑스 K-POP 스퀘어: 곡면 디스플레이 화면으로 서울의 도시 이미지 향상

    • 신세계 면세점: 폭 3.5m, 높이 6m, 길이 1.5m의 한국식 변형 영상 콘텐츠

    • 코엑스 아티움: 폭 80m, 높이 23m의 대형 LED 스크린으로 메르세데스 EQE, 아우디 Q4 에트론, BMW M 홍보

    • 넥상스 R&D 센터 “인피니티월”: 폭 30m, 높이 7m로 기술과 예술을 융합한 3차원 디스플레이

    서울공항과 인천국제공항은 국가 이미지를 대표하는 고급 3D LED 디스플레이를 설치했습니다.bibiled

    동남아시아 및 기타 지역 (5개)

    싱가포르 창이 공항의 제2터미널은 높이 14m, 너비 17m의 892개 LED 디스플레이로 구성되어 있으며, 30분마다 “Natural Rhythm”이라는 빛과 그림자의 물 댄스 쇼를 펼칩니다.bibiled

    말레이시아 TRX 쇼핑센터는 고화질 3D LED 디스플레이로 황금 용의 비늘과 수염의 섬세한 디테일을 표현합니다.bibiled

    홍콩의 코즈웨이베이와 3D LED 디스플레이는 공간감을 활용하여 떠다니는 하트가 폭발하는 장면으로 사랑의 감정을 표현합니다.bibiled

    대만은 귀여운 작은 호랑이 캐릭터의 3D 디스플레이로 사람들의 감정적 연결을 유도합니다.bibiled

    베이징 왕푸징: 650㎡의 디스플레이 면적에 팬더 테마 콘텐츠로 높은 평가를 받았습니다.bibiled

    핵심 기술 특징

    맨눈 3D 기술: 특수 안경 없이도 입체 영상을 구현하여 관객의 접근성을 높입니다.bibiled

    대형 화면 규모: 대부분의 설치 사례가 수백 제곱미터 이상의 거대한 화면으로 충격적인 시각 효과를 극대화합니다.bibiled

    콘텐츠 창의성: 브랜드 스토리, 게임 캐릭터, 동물, 자연 풍경 등 다양한 주제의 동적이고 상호작용적인 콘텐츠를 구현합니다.bibiled

    기술 사양: 4K/8K 초고화질, 높은 화면 주사율, 높은 회색조, 높은 대비를 제공합니다.bibiled

    광고 효과 및 영향

    3D LED 디스플레이는 단순한 광고 매체를 넘어 도시 랜드마크로 기능하며, 관광객의 사진 촬영과 소셜 미디어 공유를 유도합니다. 이를 통해 해당 지역의 경제 발전과 도시 이미지 향상에 기여하고 있습니다.bibiled

    1. https://www.bibiled.com/ko/50-good-examples-of-3d-led-displays-around-the-world-in-2025/
  • 국밥샘 문항 조언

    {

    “type”: “object”,

    “properties”: {

    "metadata\_type": {
    
      "type": "string",
    
      "const": "무관한 문장 고르기",
    
      "description": "문제 유형"
    
    },
    
    "metadata\_strategy": {
    
      "type": "string",
    
      "const": "전체 패러프레이징 후 삽입",
    
      "description": "생성 전략"
    
    },
    
    "metadata\_style\_applied": {
    
      "type": "string",
    
      "enum": \["압축적 재구성", "확장적 재구성"\],
    
      "description": "적용된 패러프레이징 스타일"
    
    },
    
    "question\_stem": {
    
      "type": "string",
    
      "description": "문제의 발문 (한국어). 예: '다음 글에서 전체 흐름과 관계 없는 문장은?'"
    
    },
    
    "question\_text": {
    
      "type": "string",
    
      "description": "①\~⑤ 번호가 포함된, 전체가 패러프레이징된 영어 지문."
    
    },
    
    "option\_1": { "type": "string", "description": "선택지 1 (고정값: '①')" },
    
    "option\_2": { "type": "string", "description": "선택지 2 (고정값: '②')" },
    
    "option\_3": { "type": "string", "description": "선택지 3 (고정값: '③')" },
    
    "option\_4": { "type": "string", "description": "선택지 4 (고정값: '④')" },
    
    "option\_5": { "type": "string", "description": "선택지 5 (고정값: '⑤')" },
    
    "correct\_answer\_number": {
    
      "type": "integer",
    
      "description": "정답 선택지 번호 (1-5 사이의 숫자)",
    
      "minimum": 1,
    
      "maximum": 5
    
    },
    
    "explanation": {
    
      "type": "string",
    
      "description": "패러프레이징된 글의 전체 주제 및 요지 요약 (한국어)"
    
    },
    
    "explanation\_correct\_details": {
    
      "type": "string",
    
      "description": "정답 문장이 왜 전체 흐름과 무관한지에 대한 구체적 설명 (한국어)"
    
    },
    
    "option\_1\_explanation": { "type": "string", "description": "선택지 1이 정답이 아닌 이유 (문맥상 자연스러운 이유)" },
    
    "option\_2\_explanation": { "type": "string", "description": "선택지 2가 정답이 아닌 이유" },
    
    "option\_3\_explanation": { "type": "string", "description": "선택지 3이 정답이 아닌 이유" },
    
    "option\_4\_explanation": { "type": "string", "description": "선택지 4가 정답이 아닌 이유" },
    
    "option\_5\_explanation": { "type": "string", "description": "선택지 5가 정답이 아닌 이유" }
    

    },

    “required”: [

    "metadata\_type", "metadata\_strategy", "metadata\_style\_applied",
    
    "question\_stem", "question\_text",
    
    "option\_1", "option\_2", "option\_3", "option\_4", "option\_5",
    
    "correct\_answer\_number",
    
    "explanation", "explanation\_correct\_details",
    
    "option\_1\_explanation", "option\_2\_explanation", "option\_3\_explanation", "option\_4\_explanation", "option\_5\_explanation"
    

    ]

    }

    계층 없이 flat으로 넣어야 됩니다. 프롬프트 결과가 나올때 웹에서 하면 텍스트 (또는 md)로 나오는데, api를 써서 만들때는 스타일을 적용해 줘야 나중에 편집을 덜하기 때문에 문제 (stem), 지문, 보기, 정답, 해설, 단어를 각각 스키마를 적용해서 출력을 하고, 나올떄 분류를 하거나, 스타일을 적용하시면 됩니다.

    # Role Definition

    You are an expert ESL (English as a Second Language) Exam Content Generator and Data Architect. Your task is to take a raw input text and transform it into a high-quality “Irrelevant Sentence Selection” question tailored for an API response.

    # Task Objectives

    1. **Analyze:** Deeply understand the main topic, logical flow, and tone of the provided input text.

    2. **Paraphrase (Crucial):** Do NOT use the original text as is. You must rewrite (paraphrase) the entire text based on the `metadata_style_applied` logic defined below.

    3. **Inject Distractor:** Create one “Irrelevant Sentence” that is grammatically correct and uses similar keywords but disrupts the logical flow or deviates from the core topic.

    4. **Format:** Output the result strictly according to the provided JSON Schema.

    # Execution Process (Step-by-Step)

    ## Step 1: Paraphrasing Strategy

    Determine the rewriting style based on the context or random selection if not specified:

    * **Case A (압축적 재구성 – Condensed):** Summarize the core logic, removing redundant adjectives/adverbs, making sentences punchier (Logic-focused).

    * **Case B (확장적 재구성 – Expanded):** Elaborate on the concepts, adding transitional phrases for smoother flow, slightly increasing the difficulty (Context-focused).

    ## Step 2: Distractor Creation

    * The distractor must share the same subject matter but differ in predicate logic or specific focus.

    * *Example:* If the text is about “Benefits of Coffee,” the distractor might be “The history of tea trade is complex.” (Related keyword, unrelated logic).

    ## Step 3: Construction

    * Split the paraphrased text into 4 logical parts.

    * Insert the Distractor (Irrelevant Sentence) into one of the 5 positions (①\~⑤).

    * Ensure the final text flows: Sentence A -> Sentence B -> [Distractor] -> Sentence C -> Sentence D.

    # Output Schema (Strict JSON)

    You must return a single, flat JSON object. Do not wrap it in markdown code blocks or additional text.

    “`json

    {

    “type”: “object”,

    “properties”: {

    "metadata\_type": { "const": "무관한 문장 고르기" },
    
    "metadata\_strategy": { "const": "전체 패러프레이징 후 삽입" },
    
    "metadata\_style\_applied": { "enum": \["압축적 재구성", "확장적 재구성"\] },
    
    "question\_stem": { "type": "string", "description": "다음 글에서 전체 흐름과 관계 없는 문장은?" },
    
    "question\_text": { "type": "string", "description": "Full English text with inline numbers ①\~⑤." },
    
    "option\_1": { "const": "①" },
    
    "option\_2": { "const": "②" },
    
    "option\_3": { "const": "③" },
    
    "option\_4": { "const": "④" },
    
    "option\_5": { "const": "⑤" },
    
    "correct\_answer\_number": { "type": "integer" },
    
    "explanation": { "type": "string", "description": "Korean summary of the paraphrased text." },
    
    "explanation\_correct\_details": { "type": "string", "description": "Why the chosen sentence is irrelevant (in Korean)." },
    
    "option\_1\_explanation": { "type": "string", "description": "Why sentence 1 fits the flow." },
    
    "option\_2\_explanation": { "type": "string", "description": "Why sentence 2 fits the flow." },
    
    "option\_3\_explanation": { "type": "string", "description": "Why sentence 3 fits the flow." },
    
    "option\_4\_explanation": { "type": "string", "description": "Why sentence 4 fits the flow." },
    
    "option\_5\_explanation": { "type": "string", "description": "Why sentence 5 fits the flow." }
    

    },

    “required”: [“metadata_type”, “metadata_strategy”, “question_text”, “correct_answer_number”, “explanation”]

    }

  • LLM 문항 생성 시 정답 위치 편향 해소를 위한 필수 프로토콜

    LLM 문항 생성 시 정답 위치 편향 해소를 위한 필수 프로토콜


    📌 문제 진단

    LLM은 선택지 정답 배치에서 다음과 같은 체계적 편향을 보입니다:

    • 4지선다(a\~d): 정답이 b, c에 과집중 (a, d 회피)

    • 5지선다(①\~⑤): 정답이 ②, ③번에 과집중 (①, ④, ⑤ 회피)

    이는 “랜덤하게 배치하라”는 지시만으로는 해결되지 않습니다.


    ✅ 필수 실행 프로토콜: “정답 위치 선결정 방식”

    [STEP 1] 정답 위치 사전 생성 (문항 생성 전 필수)

    문항 생성을 시작하기 전에, 반드시 다음을 먼저 수행하라:
    
    1. 생성할  문항 (N) 확인한다.
    2.  문항의 정답 위치를 무작위 함수를 사용하여 미리 결정한다.
       - 5지선다: random.choice([1, 2, 3, 4, 5]) 또는 동등 확률 난수
       - 4지선다: random.choice(['a', 'b', 'c', 'd']) 또는 동등 확률 난수
    3. 결정된 정답 위치 배열을 명시적으로 기록한다.
    
    예시 출력:
    ┌─────────┬────────────┐
     문항 번호  정답 위치   
    ├─────────┼────────────┤
     1                 
     2                 
     3                 
     4                 
     5                 
    └─────────┴────────────┘
    

    [STEP 2] 사전 결정된 위치에 따른 문항 구성

     문항을 생성할 :
    
    1. 해당 문항의 사전 결정된 정답 위치를 참조한다.
    2. 정답 선택지를 해당 위치에 배치한다.
    3. 나머지 위치에 오답 선택지(매력적 오답) 배치한다.
    4. 선택지 길이, 구조, 어휘 수준을 균등하게 조정한다.
    
    ⚠️ 절대 금지 사항:
    - 정답을 먼저 작성한  위치를 "선택"하지  
    - "적절해 보이는" 위치에 정답을 배치하지  
    - 사전 결정된 위치를 임의로 변경하지  
    

    [STEP 3] 검증 및 분포 확인

    모든 문항 생성 완료 :
    
    1. 정답 분포표를 출력하여 검증한다.
    2. 특정 위치에 과집중되지 않았는지 확인한다.
    3. 10문항 이상 생성 ,  위치별 정답 수가 ±1 범위 내에서 균등한지 점검한다.
    
    검증 출력 예시:
    정답 분포:  2 |  2 |  2 |  2 |  2
    분포 상태:  균등
    

    📋 통합 지침 (복사하여 프롬프트에 삽입)

    <answer_position_protocol>
    정답 위치 편향 해소 필수 프로토콜
    
     프로토콜은 LLM의 내재적 정답 위치 편향(중앙 집중 현상) 
    방지하기 위해 반드시 준수해야 한다.
    
     실행 순서 (순서 변경 불가)
    
    PHASE 1: 정답 위치 선결정
    - 문항 내용 생성 , 모든 문항의 정답 위치를 먼저 결정
    - 난수 생성기 또는 동등 확률 무작위 선택 사용
    - 결정된 위치를  형태로 명시적 기록
    
    PHASE 2: 위치 고정 문항 작성
    -  문항 작성  사전 결정된 정답 위치 엄수
    - 정답을 해당 위치에 먼저 배치
    - 오답을 나머지 위치에 배치
    - 모든 선택지의 길이/구조/난이도 균등화
    
    PHASE 3: 분포 검증
    - 완성된 문항 세트의 정답 분포 출력
    - 편향 여부 점검  보고
    
     위반 금지 사항
     정답 내용을 먼저 작성  위치를 결정하는 행위
     사전 결정된 위치를 "더 자연스러워 보여서" 변경하는 행위
     분포 검증 단계 생략
    
     출력 형식
    문항 생성 결과에 다음을 반드시 포함:
    1. [정답 위치 배열] - PHASE 1 결과
    2. [문항 본문] -  문항  선택지
    3. [분포 검증] - 위치별 정답 개수  균등성 판정
    </answer_position_protocol>
    

    💡 적용 예시

    입력 요청:

    “다음 지문을 바탕으로 5지선다형 문항 5개를 생성하라.”

    LLM 응답 시작:

    [PHASE 1: 정답 위치 선결정]
    난수 생성 결과:
     문항 1: 
     문항 2:   
     문항 3: 
     문항 4: 
     문항 5: 
    
    [PHASE 2: 문항 생성]
    1. 윗글의 주제로 가장 적절한 것은?
        [오답]
        [오답]
        [오답]
        [오답]
        [정답]  사전 결정 위치
    
    ... (이하 문항 계속)
    
    [PHASE 3: 분포 검증]
     : 1 |  : 1 |  : 1 |  : 1 |  : 1
    판정:  균등 분포 달성
    

    이 프로토콜을 문항 제작 모듈의 <선택지_제작_단계> 앞에 삽입하면, 정답 위치 편향 문제가 구조적으로 해결됩니다.

    Answer Key에 정답 분포 통계(a:X, b:X, c:X, d:X)를 자동으로 표시하도록 추가해 주세요.\
    \
    정답 분포 통계에 균등/편향 판정 아이콘(✓/✗)도 함께 표시되도록 추가해 주세요.

    개발자 탭을 프로덕션에서 숨기고 특정 조건(URL 파라미터 등)에서만 보이도록 해주세요.

    —-

    LLM이 생성한 JSON 데이터(문제와 선택지)를 받아서, 코드를 통해 정답 위치를 강제로 재배치하여 분포를 균등하게 만드는(Shuffling & Balancing) 완벽한 로직을 작성해 드리겠습니다.

    이 방식은 LLM에게 “랜덤하게 해”라고 말하는 것보다 훨씬 확실하며, 수학적으로 완벽한 균등 분포를 보장합니다.


    1. 처리 전략 (Algorithm Strategy)

    단순 랜덤(random)만 돌리면 확률적으로 특정 번호에 몰릴 수 있습니다. **”카드 덱(Deck) 방식”**을 사용하여 전체 문항 수에 맞춰 정답 위치를 미리 배분한 뒤 섞어야 합니다.

    1. 정답 슬롯 생성: 전체 문항 수가 10개이고 5지선다라면, 정답 위치 [1,2,3,4,5,1,2,3,4,5]를 생성합니다.

    2. 슬롯 셔플: 이 위치 배열을 무작위로 섞습니다. (예: [3, 1, 5, 2, 4, …])

    3. 문항 재조립:

    4. 기존 JSON에서 정답 텍스트오답 텍스트들을 분리합니다.

    5. 할당된 정답 위치(예: 3번)에 정답 텍스트를 박아넣습니다.

    6. 나머지 위치에 오답 텍스트들을 채워 넣습니다.

    7. 번호 갱신: 최종적으로 변경된 인덱스를 정답(Answer Key)으로 업데이트합니다.


    2. Python 구현 코드 (Backend용)

    데이터 처리 파이프라인이나 서버에서 사용할 때 적합한 코드입니다.

    Python

    import json
    import random
    import math
    
    def balance_and_shuffle_quiz(json_data):
        """
        LLM이 생성한 퀴즈 JSON을 받아 정답 분포를 균등하게 섞어 반환합니다.
        """
        questions = json_data['questions']
        total_q = len(questions)
    
        if total_q == 0:
            return json_data
    
        # 문항  선택지 개수 파악 ( 번째 문항 기준, 보통 4 or 5)
        num_options = len(questions[0]['options'])
    
        # [STEP 1] 전체 문항에 대해 균등한 정답 위치(인덱스) 리스트 생성
        # : 10문제, 5지선다 -> [0,1,2,3,4, 0,1,2,3,4] 생성
        target_indices = []
        repeat_count = math.ceil(total_q / num_options)
        for _ in range(repeat_count):
            target_indices.extend(list(range(num_options)))
    
        # 필요한 만큼 자르고 랜덤 셔플 (이게 핵심: 전체 분포를 강제 조정)
        target_indices = target_indices[:total_q]
        random.shuffle(target_indices)
    
        shuffled_questions = []
    
        # [STEP 2]  문항별로 재조립
        for idx, q in enumerate(questions):
            original_options = q['options']
            # 기존 정답 인덱스 (LLM이  , 보통 0부터 시작)
            # 만약 LLM이 정답 번호를 1부터 줬다면 -1 해줘야 . 여기선 0-index 기준 가정
            correct_idx_original = q['answer_index'] 
    
            # 정답 내용과 오답 내용 분리
            correct_content = original_options[correct_idx_original]
            distractors = [opt for i, opt in enumerate(original_options) if i != correct_idx_original]
    
            # 오답들도 순서를   섞어줌 (오답 끼리의 위치 편향 방지)
            random.shuffle(distractors)
    
            # 이번 문항이 가질 새로운 정답 위치 (STEP 1에서 결정된 )
            new_answer_idx = target_indices[idx]
    
            # 새로운 선택지 배열 생성
            new_options = [None] * num_options
    
            # 1. 정답 박기
            new_options[new_answer_idx] = correct_content
    
            # 2. 나머지 자리에 오답 채우기
            distractor_ptr = 0
            for i in range(num_options):
                if i != new_answer_idx:
                    # 오답 개수가 부족할 경우(LLM 오류 ) 대비한 안전장치
                    if distractor_ptr < len(distractors):
                        new_options[i] = distractors[distractor_ptr]
                        distractor_ptr += 1
                    else:
                        new_options[i] = "선택지 오류" 
    
            # 문항 정보 업데이트
            q_copy = q.copy()
            q_copy['options'] = new_options
            q_copy['answer_index'] = new_answer_idx # 0-based index
            # 프론트엔드 표시용 번호 (1-based) 추가
            q_copy['answer_number'] = new_answer_idx + 1 
    
            shuffled_questions.append(q_copy)
    
        # [STEP 3] 검증용 통계 생성
        stats = {i+1: 0 for i in range(num_options)}
        for q in shuffled_questions:
            stats[q['answer_number']] += 1
    
        return {
            "questions": shuffled_questions,
            "stats": stats,
            "is_balanced": True
        }
    
    # --- 테스트 실행 ---
    # LLM이 편향되게 생성한 가상의 데이터 (정답이 모두 1번인 상황)
    input_json = {
        "questions": [
            {"id": 1, "text": "Q1", "options": ["정답", "오답A", "오답B", "오답C", "오답D"], "answer_index": 0},
            {"id": 2, "text": "Q2", "options": ["정답", "오답A", "오답B", "오답C", "오답D"], "answer_index": 0},
            {"id": 3, "text": "Q3", "options": ["정답", "오답A", "오답B", "오답C", "오답D"], "answer_index": 0},
            {"id": 4, "text": "Q4", "options": ["정답", "오답A", "오답B", "오답C", "오답D"], "answer_index": 0},
            {"id": 5, "text": "Q5", "options": ["정답", "오답A", "오답B", "오답C", "오답D"], "answer_index": 0}
        ]
    }
    
    result = balance_and_shuffle_quiz(input_json)
    print(json.dumps(result, indent=2, ensure_ascii=False))
    

    3. JavaScript/TypeScript 구현 코드 (Frontend/Node.js용)

    앱 내에서 표시하기 직전에 섞어주는 경우(클라이언트 사이드 렌더링)에 유용합니다.

    JavaScript

    /**
     * 퀴즈 데이터를 받아 정답 분포를 균등하게 섞는 함수
     * @param {Object} quizData - questions 배열을 포함한 JSON 객체
     */
    function distributeAndShuffleQuiz(quizData) {
      const questions = [...quizData.questions]; // 원본 보존을 위한 복사
      const totalQ = questions.length;
    
      if (totalQ === 0) return quizData;
    
      const numOptions = questions[0].options.length; // 예: 5지선다
    
      // [STEP 1] 균등 분포를 위한 타겟 인덱스 풀 생성
      // 예: [0, 1, 2, 3, 4, 0, 1, 2, 3, 4 ...]
      let targetIndices = [];
      const loops = Math.ceil(totalQ / numOptions);
      for (let i = 0; i < loops; i++) {
        for (let j = 0; j < numOptions; j++) {
          targetIndices.push(j);
        }
      }
    
      // 필요한 길이만큼 자르고 섞기 (Fisher-Yates Shuffle)
      targetIndices = targetIndices.slice(0, totalQ);
      for (let i = targetIndices.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [targetIndices[i], targetIndices[j]] = [targetIndices[j], targetIndices[i]];
      }
    
      // [STEP 2] 문항 재구성
      const processedQuestions = questions.map((q, idx) => {
        const originalOptions = q.options;
        const correctIdx = q.answer_index; // 0-based index 가정
    
        const correctContent = originalOptions[correctIdx];
        // 정답을 제외한 오답들만 추출
        let distractors = originalOptions.filter((_, i) => i !== correctIdx);
    
        // 오답들끼리 순서 섞기
        distractors.sort(() => Math.random() - 0.5);
    
        // 이번 문제에 배정된 새로운 정답 위치
        const newAnswerIdx = targetIndices[idx];
    
        // 새로운 옵션 배열 만들기
        const newOptions = new Array(numOptions).fill(null);
        newOptions[newAnswerIdx] = correctContent;
    
        // 빈 칸에 오답 채워넣기
        let dPtr = 0;
        for (let i = 0; i < numOptions; i++) {
          if (i !== newAnswerIdx) {
            newOptions[i] = distractors[dPtr++] || "Error";
          }
        }
    
        return {
          ...q,
          options: newOptions,
          answer_index: newAnswerIdx,
          answer_number: newAnswerIdx + 1 // 사람이 보기 편한 1~5 숫자
        };
      });
    
      // [STEP 3] 통계 산출
      const stats = {};
      processedQuestions.forEach(q => {
        const key = q.answer_number;
        stats[key] = (stats[key] || 0) + 1;
      });
    
      return {
        questions: processedQuestions,
        stats: stats,
        isBalanced: true
      };
    }
    
    // --- 사용 예시 ---
    const rawData = {
      questions: [
        { text: "Q1", options: ["A(정답)", "B", "C", "D", "E"], answer_index: 0 },
        { text: "Q2", options: ["A(정답)", "B", "C", "D", "E"], answer_index: 0 },
        { text: "Q3", options: ["A(정답)", "B", "C", "D", "E"], answer_index: 0 },
        { text: "Q4", options: ["A(정답)", "B", "C", "D", "E"], answer_index: 0 },
        { text: "Q5", options: ["A(정답)", "B", "C", "D", "E"], answer_index: 0 },
      ]
    };
    
    const finalResult = distributeAndShuffleQuiz(rawData);
    console.log(JSON.stringify(finalResult, null, 2));
    

    4. 개발자 탭 표시 제어 (Developer Tab Visibility)

    요청하신 “프로덕션에서는 숨기고 URL 파라미터가 있을 때만 통계 보여주기” 기능입니다.

    시나리오: ?debug_mode=true 같은 파라미터가 URL에 있을 때만 정답 분포 통계 UI를 렌더링합니다.

    React/Next.js 예시 컴포넌트:

    JavaScript

    import { useSearchParams } from 'next/navigation'; // 또는 react-router-dom
    
    const QuizResultView = ({ quizData }) => {
      const searchParams = useSearchParams();
      // URL에 'debug=true'가 있는지 확인
      const isDebugMode = searchParams.get('debug') === 'true';
    
      return (
        <div>
          {/* 일반 사용자에게 보이는 퀴즈 영역 */}
          {quizData.questions.map(q => (
            <div key={q.text} className="mb-4">
              <h3>{q.text}</h3>
              <ul>
                {q.options.map((opt, i) => (
                  <li key={i} className={i === q.answer_index ? "font-bold" : ""}>
                    {opt}
                  </li>
                ))}
              </ul>
            </div>
          ))}
    
          {/* 개발자 전용 통계 패널 (조건부 렌더링) */}
          {isDebugMode && (
            <div className="fixed bottom-0 right-0 p-4 bg-gray-800 text-white opacity-90 text-xs rounded-tl-lg z-50">
              <h4 className="font-bold border-b mb-2">🔧 Dev: Answer Distribution</h4>
              <div className="grid grid-cols-5 gap-2">
                {Object.entries(quizData.stats).map(([key, count]) => (
                  <div key={key} className="text-center">
                    <span className="block text-gray-400">Option {key}</span>
                    <span className="font-mono text-lg">{count}</span>
                  </div>
                ))}
              </div>
              <div className="mt-2 text-green-400 text-center">
                  Balanced
              </div>
            </div>
          )}
        </div>
      );
    };
    

    요약

    1. LLM 역할: 문제의 내용(Question)과 선택지 내용(Content)만 잘 만들면 됩니다. 정답 위치는 신경 쓰지 말라고 해도 됩니다.

    2. 코드 역할: 위 코드를 JSON 생성 직후에 실행시키면, 항상 정답 번호가 1, 2, 3, 4, 5번에 골고루 퍼진 완벽한 데이터셋으로 변환됩니다.

    3. 검증: URL 뒤에 ?debug=true를 붙여서 개발자 탭을 띄우고 균등하게 배분되었는지 확인하면 됩니다.

  • Streamlit 가이드 + CEFR 앱 프로젝트


    # 🎓 Streamlit 완벽 마스터 커리큘럼

    ## “JavaScript/HTML → Streamlit으로 앱 전환하기”

    ## 📚 모듈 구성 (총 2주)

    | 기간 | 모듈 | 목표 |

    |——|——|——|

    | Day 1-2 | Module 1: 기초 | Streamlit 핵심 개념 이해 |

    | Day 3-4 | Module 2: 데이터처리 | 데이터 저장 및 분석 |

    | Day 5-6 | Module 3: 멀티페이지 | 완전한 앱 구조 구축 |

    | Day 7 | Module 4: 배포 | Streamlit Cloud 배포 |

    | Day 8-14 | 최종 프로젝트 | CEFR 테스트 앱 완성 |

    ## 🚀 Streamlit vs JavaScript 비교

    ### 코드 량 비교

    **JavaScript/Express (원래 방식): 2000줄**

    – 백엔드: 1000줄

    – 프론트엔드: 800줄

    – SQL: 200줄

    **Streamlit (새 방식): 600줄**

    – 총 : 600줄

    ### 개발 시간

    JavaScript: 6주 이상

    Streamlit: 1-2주 (3배 빠름)

    ### 배포

    JavaScript: 복잡한 설정 필요

    Streamlit: 클릭 한 번 배포 (100배 쉬움)

    ### 비용

    **JavaScript 앱**: 약 $2,000 (호스팅 + 개발)

    **Streamlit 앱**: 약 $600 (호스팅 무료 + 개발 시간 단축)

    **절감액**: $1,400 + 70시간 단축

    ## 📖 Module 1: 기초 개념 (Day 1-2)

    ### 1-1. Streamlit이란?

    Streamlit은 Python 개발자가 HTML/CSS/JavaScript 없이

    웹 애플리케이션을 만들 수 있는 프레임워크입니다.

    **핵심 특징**:

    – Python만으로 웹앱 구현

    – 자동 UI 렌더링

    – 실시간 데이터 반영

    – 클릭 한 번 배포

    ### 1-2. 첫 번째 앱 만들기

    “`python

    # hello_app.py

    import streamlit as st

    st.title(“🎉 Hello, Streamlit!”)

    st.write(“당신의 첫 번째 Streamlit 앱입니다”)

    name = st.text_input(“이름을 입력하세요”)

    if name:

    st.success(f"안녕하세요, {name}님!")
    

    “`

    실행: streamlit run hello_app.py

    ### 1-3. 기본 위젯

    Output:

    – st.write()

    – st.title(), st.header(), st.subheader()

    – st.success(), st.error(), st.warning()

    – st.dataframe(), st.table()

    – st.chart(), st.bar_chart()

    Input:

    – st.text_input()

    – st.text_area()

    – st.number_input()

    – st.selectbox()

    – st.checkbox()

    – st.slider()

    – st.button()

    ### 1-4. 상태 관리 (Session State)

    “`python

    # 상태 초기화

    if ‘counter’ not in st.session_state:

    st.session\_state.counter = 0
    

    # 상태 변경

    if st.button(“증가”):

    st.session\_state.counter += 1
    

    st.write(f”Count: {st.session_state.counter}”)

    “`

    ## 📖 Module 2: 데이터 처리 (Day 3-4)

    ### 2-1. SQLite 데이터베이스

    “`python

    import sqlite3

    import pandas as pd

    # 연결

    conn = sqlite3.connect(‘test.db’)

    cursor = conn.cursor()

    # 테이블 생성

    cursor.execute(”’

    CREATE TABLE IF NOT EXISTS users (
    
        id INTEGER PRIMARY KEY,
    
        name TEXT,
    
        level TEXT,
    
        score INTEGER
    
    )
    

    ”’)

    # 데이터 삽입

    cursor.execute(‘INSERT INTO users VALUES (?, ?, ?, ?)’,

    (1, 'Alice', 'B1', 85))
    

    conn.commit()

    # 데이터 조회

    result = pd.read_sql(‘SELECT * FROM users’, conn)

    st.dataframe(result)

    conn.close()

    “`

    ### 2-2. 캐싱으로 성능 최적화

    “`python

    @st.cache_resource

    def get_db_connection():

    return sqlite3.connect('test.db')
    

    @st.cache_data

    def load_data():

    conn = get\_db\_connection()
    
    return pd.read\_sql('SELECT \* FROM users', conn)
    

    data = load_data()

    st.dataframe(data)

    “`

    ### 2-3. Pandas 데이터 분석

    “`python

    import pandas as pd

    df = pd.DataFrame({

    'student': \['Alice', 'Bob', 'Charlie'\],
    
    'level': \['B1', 'B2', 'A2'\],
    
    'score': \[85, 92, 70\]
    

    })

    # 필터링

    b1_students = df[df[‘level’] == ‘B1’]

    # 그룹화

    level_stats = df.groupby(‘level’)[‘score’].mean()

    # 정렬

    top_students = df.sort_values(‘score’, ascending=False)

    “`

    ## 📖 Module 3: 멀티페이지 앱 (Day 5-6)

    ### 3-1. 디렉토리 구조

    “`

    cefr-app/

    ├── app.py

    ├── pages/

    │ ├── 1_Student_Test.py

    │ ├── 2_Teacher_Dashboard.py

    │ └── 3_Reports.py

    ├── requirements.txt

    └── .streamlit/

    └── config.toml
    

    “`

    ### 3-2. 메인 페이지 (app.py)

    “`python

    import streamlit as st

    st.set_page_config(page_title=”CEFR 테스트”, layout=”wide”)

    # 세션 초기화

    if ‘logged_in’ not in st.session_state:

    st.session\_state.logged\_in = False
    
    st.session\_state.user\_role = None
    

    # 로그인 페이지

    if not st.session_state.logged_in:

    st.title("🔐 CEFR 테스트 로그인")
    
    username = st.text\_input("사용자명")
    
    password = st.text\_input("비밀번호", type="password")
    
    if st.button("로그인"):
    
        if username == "student" and password == "1234":
    
            st.session\_state.logged\_in = True
    
            st.session\_state.user\_role = "student"
    
            st.rerun()
    
        elif username == "teacher" and password == "1234":
    
            st.session\_state.logged\_in = True
    
            st.session\_state.user\_role = "teacher"
    
            st.rerun()
    

    # 로그인 후

    else:

    st.title("📚 CEFR 테스트 시스템")
    
    col1, col2 = st.columns(\[9, 1\])
    
    with col1:
    
        st.write(f"안녕하세요, {st.session\_state.user\_role}님!")
    
    with col2:
    
        if st.button("로그아웃"):
    
            st.session\_state.logged\_in = False
    
            st.rerun()
    

    “`

    ### 3-3. 학생 시험 페이지 (pages/1_Student_Test.py)

    “`python

    import streamlit as st

    import sqlite3

    from datetime import datetime

    st.title(“📝 CEFR 레벨 테스트”)

    # 인증 확인

    if not st.session_state.logged_in or st.session_state.user_role != “student”:

    st.error("학생 계정으로 로그인하세요")
    
    st.stop()
    

    # 시험 폼

    with st.form(“test_form”):

    level = st.selectbox("현재 레벨", \["A1", "A2", "B1", "B2", "C1", "C2"\])
    
    st.subheader("Part 1: Listening")
    
    q1 = st.radio("문제 1", \["A", "B", "C", "D"\])
    
    st.subheader("Part 2: Reading")
    
    q2 = st.radio("문제 2", \["A", "B", "C", "D"\])
    
    submitted = st.form\_submit\_button("제출")
    
    if submitted:
    
        # 채점
    
        score = 50 if q1 == "B" else 0
    
        score += 50 if q2 == "C" else 0
    
        # 결과 저장
    
        conn = sqlite3.connect('cefr\_test.db')
    
        cursor = conn.cursor()
    
        cursor.execute('''
    
            INSERT INTO test\_results
    
            (level, score, created\_at)
    
            VALUES (?, ?, ?)
    
        ''', (level, score, datetime.now()))
    
        conn.commit()
    
        conn.close()
    
        st.success(f"✅ 점수: {score}/100")
    

    “`

    ### 3-4. 교사 대시보드 (pages/2_Teacher_Dashboard.py)

    “`python

    import streamlit as st

    import pandas as pd

    import sqlite3

    import plotly.express as px

    st.title(“👨‍🏫 교사 대시보드”)

    # 인증 확인

    if not st.session_state.logged_in or st.session_state.user_role != “teacher”:

    st.error("교사 계정으로 로그인하세요")
    
    st.stop()
    

    # 데이터 로드

    conn = sqlite3.connect(‘cefr_test.db’)

    df = pd.read_sql(“SELECT * FROM test_results”, conn)

    conn.close()

    # 통계

    col1, col2, col3 = st.columns(3)

    with col1:

    st.metric("응시 인원", len(df))
    

    with col2:

    st.metric("평균 점수", f"{df\['score'\].mean():.1f}")
    

    with col3:

    st.metric("최고 점수", df\['score'\].max())
    

    # 시각화

    fig = px.histogram(df, x=’score’, title=”점수 분포”)

    st.plotly_chart(fig, use_container_width=True)

    # 데이터 테이블

    st.dataframe(df)

    # 내보내기

    csv = df.to_csv(index=False)

    st.download_button(

    label="📥 CSV 내보내기",
    
    data=csv,
    
    file\_name="results.csv",
    
    mime="text/csv"
    

    )

    “`

    ## 📖 Module 4: 배포 (Day 7)

    ### 4-1. GitHub에 푸시하기

    “`bash

    cd cefr-app

    git init

    git add .

    git commit -m “Initial commit”

    git branch -M main

    git remote add origin https://github.com/YOUR_USERNAME/cefr-app.git

    git push -u origin main

    “`

    ### 4-2. Streamlit Cloud 배포

    1. https://share.streamlit.io 접속

    2. GitHub 로그인

    3. “New app” 클릭

    4. Repository 선택

    5. Main file: app.py

    6. “Deploy” 클릭

    배포 완료: https://your-username-cefr-app.streamlit.app

    ### 4-3. 비용

    무료: Streamlit Cloud (소규모 앱)

    $5-10/월: 프로 플랜

    ## 🎯 최종 프로젝트 구현 (Day 8-14)

    ### requirements.txt

    streamlit==1.28.0

    pandas==2.0.0

    plotly==5.13.0

    sqlite3

    ### 완성도 체크리스트

    – [ ] 메인 페이지 완성 (로그인)

    – [ ] 학생 시험 페이지 완성

    – [ ] 교사 대시보드 완성

    – [ ] 리포트 페이지 완성

    – [ ] 데이터베이스 연동

    – [ ] 자동 채점 시스템

    – [ ] 데이터 시각화

    – [ ] 내보내기 기능

    – [ ] Streamlit Cloud 배포

    ## 📚 학습 자료

    공식 문서: https://docs.streamlit.io

    커뮤니티: https://discuss.streamlit.io

    예제: https://streamlit.io/gallery

    GitHub: https://github.com/Reasonofmoon/streamlit-lv-test

    생성일: 2025-12-10

    버전: 1.0

    📦 생성된 모든 자료

    구분 파일명 내용
    기초 가이드 streamlit_comprehensive_curriculum.md 2주 마스터 코스 (4개 모듈)
    비교 분석 streamlit_vs_others_analysis.md Flask/Django/React와 상세 비교
    아이디어 streamlit_educational_app_ideas.csv 100개 교육 앱 아이디어
    최종 요약 FINAL_SUMMARY.txt 전체 내용 종합 정리

    🚀 GitHub 저장소 상태

    text
    

    ✅ 저장소: https://github.com/Reasonofmoon/streamlit-lv-test.git ✅ 로컬 폴더: git 초기화 완료 ⏳ 대기 중: 코드 파일 푸시

    🎯 당신의 다음 액션 (우선순위)

    1️⃣ TODAY – GitHub에 푸시하기

    bash
    

    cd C:\Users\sound\Documents\cefr-level-test git add . git commit -m "Initial commit: CEFR test app" git push -u origin main

    2️⃣ 로컬 테스트

    bash
    

    streamlit run app.py# http://localhost:8501 접속# 테스트 계정: student/1234, teacher/1234

    3️⃣ Streamlit Cloud 배포

    💡 핵심 통찰

    측면 결과
    개발 속도 JavaScript 대비 3배 빠름
    코드 량 2000줄 → 600줄 (70% 감소)
    개발 비용 $2,000 → $600 (70% 절감)
    배포 클릭 한 번 (무료)
    학습 기간 2주 (모든 기초 마스터)

    최종 메시지

    당신은 이제:

    • ✅ Streamlit의 모든 것을 알았습니다

    • ✅ 100가지 교육 앱 아이디어를 가지고 있습니다

    • ✅ 실제 작동하는 CEFR 앱을 가지고 있습니다

    • ✅ 완벽한 학습 커리큘럼을 가지고 있습니다

    이제 필요한 것은 실행뿐입니다. 🚀

    “좋은 것이 완벽한 것의 적이다” – 빠르게 첫 MVP를 만들고 피드백으로 개선하세요!

  • TCREI 프레임워크 실무 활용 완전 가이드

    TCREI 프레임워크 실무 활용 완전 가이드

    AI 시대 콘텐츠 제작의 핵심 프레임워크인 TCREI(Task, Context, Reference, Evaluate, Iterate)를 창작 및 교육 분야에 적용하는 방법을 정리했다. Google의 Prompting Essentials 과정에서 소개된 이 프레임워크는 “Thoughtfully Create Really Excellent Inputs”의 약자로, 체계적인 프롬프트 설계를 통해 AI 출력물의 품질을 획기적으로 높일 수 있다. 특히 한국 학원과 학교 환경에서 교육 콘텐츠를 자동화하려는 운영자와 크리에이터에게 실무에서 바로 적용할 수 있는 템플릿과 방법론을 제공한다.


    TCREI 5요소의 핵심 정의와 활용 원칙

    reasonofmoon_Create_a_minimalist_animation_of_a_chaotic_tangl_fec79d9a-212e-4f14-bec8-6d9e8fc67f03_1

    TCREI 프레임워크는 효과적인 프롬프트의 다섯 가지 필수 구성요소를 명확히 구분한다. 각 요소는 독립적이면서도 상호 보완적으로 작동하며, 상황에 따라 모든 요소를 사용할 필요는 없다.

    Task(과제)는 AI가 수행할 작업을 명확히 정의하는 요소다. “도와줘”처럼 모호한 표현 대신 “작성해줘”, “분석해줘”, “생성해줘” 같은 구체적 동사로 시작해야 한다. 출력 형식(이메일, 보고서, 리스트)과 분량도 함께 명시하면 원하는 결과에 근접한 응답을 얻을 수 있다.

    Context(맥락)는 배경 정보를 제공하여 AI가 상황에 맞는 응답을 생성하도록 돕는다. 대상 청중의 특성, 브랜드 톤앤매너, 목적과 제약 조건을 포함한다. 예를 들어 “고등학교 2학년 영어 중위권 학생 25명 대상”처럼 구체적으로 명시하면 난이도와 어휘 수준이 자동으로 조정된다.

    Reference(참조)는 예시나 스타일 가이드를 통해 원하는 결과물의 형태를 보여준다. One-shot(예시 1개) 또는 Few-shot(예시 2-5개) 프롬프팅으로 AI가 패턴을 학습하도록 유도한다. 최신 AI 모델은 예시의 세부사항을 매우 주의 깊게 참조하므로, 원치 않는 패턴이 포함된 예시는 역효과를 낼 수 있다.

    Evaluate(평가)는 AI 출력물이 목표를 충족하는지 비판적으로 검토하는 단계다. 요청한 형식과의 일치 여부, 정확성, 톤의 적절성을 확인한다. 이 단계를 건너뛰면 오류나 부적절한 내용이 그대로 사용될 위험이 있다.

    Iterate(반복)은 평가 결과를 바탕으로 프롬프트를 개선하고 재시도하는 과정이다. 첫 번째 프롬프트는 시작점일 뿐 완성품이 아니다. “더 간결하게”, “전문 용어 줄이기”, “FAQ 섹션 추가” 같은 구체적 피드백으로 점진적 개선을 추구한다.


    창작 콘텐츠 제작에서의 TCREI 적용

    글쓰기와 카피라이팅 분야

    글쓰기 분야에서 TCREI는 브랜드 보이스 유지와 SEO 최적화에 특히 효과적이다. Task에서 글의 형태와 분량을 명확히 하고, Context에서 타겟 독자와 검색 의도를 설명하며, Reference에서 기존 성공 콘텐츠의 스타일을 제시한다.

    SEO 블로그 포스트 템플릿:

    [Task] 타겟 키워드 '수능 영어 빈칸추론'으로 2000단어 SEO 최적화 블로그 작성
    
    [Context] 
    - 대상: 고3 수험생과 학부모
    - : 정보 제공적이면서 친근함
    - 목적: 학원 상담 유도
    
    [References] 
    - 구조: 서론  문제 유형 분석  풀이 전략 3가지  FAQ  결론+CTA
    - 소제목에 관련 키워드 포함: '빈칸추론 유형', '수능 영어 전략'
    
    [출력 형식] H2, H3 헤딩 포함, 메타 설명 160 별도 제공
    

    광고 카피 템플릿:

    [Task] 학원 여름특강 Facebook 광고 카피 5 변형 작성
    
    [Context] 
    - 제품: 고2 영어 여름특강 (4)
    - 타겟: 고2 학부모, 35-50
    - 캠페인 목표: 상담 예약 전환
    
    [References] 
    - PAS(Problem-Agitate-Solution) 프레임워크 적용
    - 예시 : "수능까지 1년, 지금이 마지막 기회입니다"
    
    [출력] 헤드라인 15 내외, 본문 80, CTA 포함
    

    영상 콘텐츠 기획

    YouTube나 쇼츠 콘텐츠 기획에서는 구조화된 출력 요청이 핵심이다. 테이블 형식으로 장면, 나레이션, 시각자료를 분리하면 영상 제작 워크플로우에 바로 적용할 수 있다.

    YouTube 스크립트 템플릿:

    [Task] '수능 영어 순서배열 완전정복' 대한 12 유튜브 스크립트 작성
    
    [Context] 
    - 타겟: 고2-3 수험생 (영어 중위권)
    - 채널 : 교육적이면서 에너지 있음
    - 촬영 환경: 칠판  강의 형식
    
    [References] 구조:
    - 0-20: 강력한  ("순서배열, 10초 안에 답 찾는 법")
    - 20-2: 출제 원리 설명
    - 2-10: 유형별 풀이법 (연결어/지시어/대명사)
    - 10-12: 실전 문제 적용 + 구독 CTA
    
    [출력] 4컬럼 테이블 (타임스탬프, 나레이션, 화면지시, 자막)
    

    쇼츠/릴스 템플릿:

    [Task] 영어 어휘 암기  Instagram Reels 스크립트 30 분량
    
    [Context] 
    - 타겟: Z세대 수험생
    - : 빠르고 트렌디
    - 목적: 팔로우 유도
    
    [References]
    -  2: 시선 강탈 ("어휘 외우느라 힘들죠?")
    - 중간: 핵심  3가지 빠르게
    - 마지막: 팔로우 CTA + 다음 영상 예고
    
    [출력] 해시태그 10, 배경음악 추천 포함
    

    AI 이미지 및 영상 생성

    Midjourney, DALL-E, Sora 같은 생성형 AI 도구에서는 [주제] + [환경] + [스타일] + [조명] + [구도] + [파라미터] 공식이 효과적이다.

    Midjourney 교육 콘텐츠용 템플릿:

    [피사체] 한국 고등학생이 책상에서 공부하는 모습
    [환경] 깔끔한 스터디카페, 따뜻한 조명
    [스타일] 사진처럼 현실적인, 밝은 분위기
    [기술] Canon EOS R5, 35mm 렌즈, f/2.8
    --ar 16:9 --v 6 --style raw --stylize 500
    

    Sora 영상 생성 템플릿:

    Wide establishing shot of a modern Korean hagwon (academy) building,
    students entering in the morning, warm golden hour lighting,
    cinematic style, subtle camera dolly forward,
    clean urban environment in Seoul
    

    핵심은 긍정적 표현 사용이다. “without people” 대신 원하는 것을 직접 명시하고, 프롬프트는 60단어 이내로 유지한다.


    교육 콘텐츠 제작에서의 TCREI 적용

    reasonofmoon_Create_a_minimalist_animation_of_a_chaotic_tangl_66fe9223-61ae-49f3-be47-104b5741ae72_0

    수업 설계와 레슨 플랜

    한국 교육 현장에서 가장 중요한 것은 2022 개정 교육과정 성취기준 코드 활용이다. [12영Ⅰ03-03] 형식으로 명시하면 AI가 정확한 수준과 내용 범위를 파악한다.

    단원별 수업 지도안 템플릿:

    [Task]
    고등학교 영어Ⅰ 과목의 50 수업 지도안을 작성해 주세요.
    - 형식: 도입(5)-전개(35)-정리(10) 구조
    - 목표: 학습자가 빈칸 추론 문제 해결 전략을 적용할  있다
    
    [Context]
    - 대상: 고등학교 2학년 (영어 중위권, 25)
    - 선수학습: 주제문 파악, 문맥 단서 찾기 완료
    - 교육과정: 2022 개정 교육과정 영어Ⅰ 성취기준 [12영Ⅰ03-03]
    - 준비물: 수능 기출 문제 3, 워크시트
    
    [References]
    빈칸 추론 유형별 접근법:
    1) 빈칸이 주제문인 경우  반복 어휘 추적
    2) 빈칸이 부연설명인 경우  주제문에서 힌트 추출
    3) 역접 구조인 경우  however, but 앞뒤 대조
    
    [출력 요청]
     단계별 교사 발문, 학생 활동, 예상 소요시간을  형식으로 정리
    

    학원 커리큘럼 템플릿:

    [Task]
    중학교 3학년 대상 영어 내신대비 8 커리큘럼을 설계해 주세요.
    -  2, 회당 90 수업
    - 목표: 내신 영어 성적 1등급 달성
    
    [Context]
    - 학원 환경: 소규모 그룹수업 (5-8)
    - 학생 수준: 현재 2-3등급, 문법 기초 취약
    - 시험 범위: 천재교육 영어 3-2  단원
    - 시험까지 남은 기간: 8
    
    [References]
    효과적인 학원 커리큘럼 구성:
    - 1-2주차: 핵심 문법 집중 정리
    - 3-5주차: 교과서 본문 완전 분석
    - 6-7주차: 변형 문제 훈련
    - 8주차: 실전 모의고사
    
    [출력] 주차별 학습 주제, 핵심 활동, 과제, 평가 방법을 표로 정리
    

    평가 문항 개발

    평가 문항 개발에서는 난이도 분포와 변별력 확보가 핵심이다. AI가 생성한 문항의 오답 매력도를 반드시 검토해야 한다.

    수능형 객관식 문제 템플릿:

    [Task]
    수능형 빈칸추론 연습문제 5개를 제작해 주세요.
    - 지문 길이: 150-180단어
    - 보기: 5지선다
    - 난이도: 평가원 31-32 수준
    
    [Context]
    - 주제 영역: 심리학, 사회과학, 과학기술
    - 대상: 고3 수험생
    - 목적: EBS 연계  지문 연습
    
    [References]
    수능 빈칸추론 특징:
    - 빈칸 위치: 주제문 또는 핵심 부연
    - 정답 단서: 역접(however), 인과(therefore), 반복 표현
    - 오답 유형: 지문에 있지만 빈칸과 무관한 내용
    
    좋은 빈칸 문제 예시:
    "The ________ of this approach lies in its ability to..."
     빈칸이 추상명사로 핵심 개념을 묻는 형태
    
    [출력]  문제별로: 지문  빈칸  보기 5  정답  해설  출제 의도
    

    서술형 문제 + 루브릭 템플릿:

    [Task]
    고등학교 영어 수행평가용 서술형 문제 3개와 채점 루브릭을 개발해 주세요.
    - 문제 유형: 요약하기 1, 의견쓰기 1, 상황설명 1
    - 배점:  10
    
    [Context]
    - 대상: 고2
    - 과목: 영어Ⅰ
    - 평가 역량: 의사소통역량, 비판적 사고력
    - 작성 시간: 문제당 15
    
    [References]
    서술형 채점 루브릭 기준(10 만점):
    - 내용 완성도(4): 핵심 내용 포함 여부
    - 언어 정확성(3): 문법, 철자, 어휘 적절성
    - 구성력(3): 논리적 흐름, 결속성
    
    [출력] 문제  모범답안  채점 루브릭(// 기준)  예상 학생 답안 유형
    

    CEFR 레벨별 맞춤 콘텐츠

    국제 표준 언어 능력 지표인 CEFR을 활용하면 수준별 맞춤 자료 제작이 용이해진다.

    CEFR 한국 학년 대응 어휘 수준 적합 문법
    A1 초등 3-4 500-800개 be동사, 현재시제
    A2 초등 5-6, 중1 800-1,500개 과거시제, 조동사
    B1 중2-3 1,500-2,500개 현재완료, 관계대명사
    B2 고1-2 2,500-4,000개 가정법, 분사구문
    C1 고3, 대학 4,000-6,000개 도치, 복잡한 종속절

    CEFR 레벨별 읽기 자료 템플릿:

    [Task]
    CEFR B1 레벨에 맞는 영어 읽기 자료를 작성해 주세요.
    - 주제: 환경 보호와 일상 실천
    - 길이: 250-300단어
    - 포함 활동: 어휘 정리, 내용 이해 질문 5
    
    [Context]
    - 대상: 한국 중학교 2-3학년
    - 목적: 독해력 향상 + 어휘 확장
    - 학습 환경: 학원 리딩반 보조교재
    
    [References]
    B1 레벨 특성(British Council 기준):
    - 익숙한 주제에 대한 명확한 표준 입력 이해
    - 복문이지만 구조가 명확한 문장
    - 일상 어휘 중심
    
    B1 적합 문장 예시:
    "Many people are trying to reduce plastic waste in their daily lives."
    
    [출력] 본문  핵심 어휘 10(--예문)  T/F 3  단답형 2  정답  해설
    

    LMS 자료 및 자동채점 문항

    reasonofmoon_Draw_a_minimal_illustration_of_hands_carefully_s_8034fc27-27a6-4c8b-924c-791b93ec72d1_1

    온라인 학습 플랫폼용 콘텐츠는 JSON 형식 출력을 요청하면 시스템 연동이 용이하다.

    LMS 자동채점 퀴즈 템플릿:

    [Task]
    LMS 탑재용 자동채점 퀴즈 20문항을 제작해 주세요.
    - 유형: 객관식 10, O/X 5, 단답형 5
    - 영역: 영어Ⅰ 3단원 문법/어휘
    
    [Context]
    - 플랫폼: 클래스팅, 구글클래스룸 호환
    - 목적: 수업  사전학습 점검
    - 제한시간: 15
    
    [References]
    자동채점 적합 문항 기준:
    - 객관식: 정답이 명확, 부분점수 불필요
    - 단답형: 정답 변형 예측 (: "명사", "Noun", "noun" 모두 정답)
    
    [출력 형식] JSON
    {
      "question": "빈칸에 들어갈 알맞은 단어는?",
      "type": "multiple_choice",
      "options": ["A. that", "B. what", "C. which", "D. who"],
      "answer": "B",
      "explanation": "선행사가 없으므로 what이 적절"
    }
    

    AI 모델별 최적화 전략

    ChatGPT (GPT-4, GPT-4o) 최적화 팁

    GPT 모델은 지시를 문자 그대로 따르는 경향이 강하므로 세부 사항을 구체적으로 명시해야 한다.

    • System Prompt 활용: 역할, 톤, 출력 형식을 시스템 메시지로 설정

    • JSON 모드: response_format: { type: "json_object" } 설정으로 구조화된 출력

    • Chain of Thought: “단계별로 생각해줘” 추가 시 수학적 추론 30% 정확도 향상

    • Few-shot 예시: 2-5개 예시 제공으로 zero-shot 대비 성능 향상

    • Temperature 설정: 사실 기반 작업은 0, 창작 작업은 0.7-1.0

    ChatGPT 권장 프롬프트 구조:

    [시스템] 당신은 10 경력의 영어 교육 전문가입니다.
    [사용자] 
    작업: [구체적 요청]
    맥락: [배경 정보]
    형식: [출력 형식]
    예시: [참고 예시]
    

    Claude (Claude 3.5 Sonnet, Claude 4) 최적화 팁

    Claude는 XML 태그 구조화에서 탁월한 성능을 보인다.

    <instructions>고2 영어 문법 설명 자료 작성</instructions>
    <context>대상: 영어 중상위권, 수능 어법 대비</context>
    <format>핵심 공식 박스 처리, 예문 5, 연습문제 3</format>
    <style>친근하지만 정확한 설명, ~요체 사용</style>
    
    • 200K 토큰 컨텍스트: 장문 문서 분석에 강점

    • 직접 인용 요청: 20K 토큰 이상 문서에서 “원문 직접 인용 후 작업” 요청으로 할루시네이션 감소

    • Artifacts 기능: 코드 미리보기, 인터랙티브 대시보드, React 컴포넌트 실시간 렌더링

    • “I don’t know” 허용: 불확실성 인정 명시로 허위 정보 감소

    작업 유형별 모델 선택 가이드

    작업 유형 추천 모델 이유
    코드 생성/디버깅 Claude Artifacts 실시간 미리보기
    창작 글쓰기 Claude 자연스러운 문체
    이미지 생성 ChatGPT DALL-E 통합
    장문 문서 분석 Claude 200K 컨텍스트
    일상 대화/개인 비서 ChatGPT 메모리 기능
    구조화된 퀴즈 생성 Claude XML 태그 활용

    할루시네이션 방지와 품질 관리

    reasonofmoon_Design_a_clean_line_drawing_of_a_teachers_silhou_f7508265-19b3-482b-a376-a5473265c720_1

    AI 생성 교육 콘텐츠에서 가장 위험한 것은 사실과 다른 정보의 생성이다. 다음 전략으로 대응한다.

    할루시네이션 방지 9가지 전략:

    1. 출처 명시 요청: “위키피디아/교과서에 따르면…” 형태로 정확도 20% 향상

    2. Chain-of-Verification: 응답의 각 부분을 단계별 검증 요청

    3. Step-Back 프롬프팅: 고수준 질문 먼저 → 세부 질문 (CoT 대비 36% 정확도 향상)

    4. “모르면 모른다고 말해”: Claude에서 특히 효과적

    5. 직접 인용 요청: 장문 문서에서 원문 인용 후 작업

    6. 역할 프롬프팅: “영어 교육 전문가로서…” 전문가 페르소나 부여

    7. 출력 길이 제한: 긴 응답일수록 할루시네이션 확률 증가

    8. 이중 프롬프트: 광범위한 프롬프트 → 구체화 프롬프트 순차 사용

    9. RAG 활용: 외부 지식 베이스 연동

    AI 생성 교육 콘텐츠 필수 검토 항목:

    검토 영역 체크 항목
    정확성 문법 설명 오류 없음, 예문 자연스러움, 정답 정확
    적절성 학년/수준 적합, 교육과정 연계, 문화적 적절성
    실용성 수업 시간 내 활용 가능, 인쇄/디지털 호환
    변별력 난이도 분포 적절, 오답 매력도 적정
    저작권 출처 표기, 원문 인용 적법성

    성공과 실패 사례에서 배우는 교훈

    reasonofmoon_Create_a_simple_outline_animation_of_a_circular__fbbf36a1-47a6-4fcf-9540-606792db7c4e_1

    성공 사례

    Harris Federation (영국): ChatGPT와 Microsoft Live를 활용해 연령대별 교육 자료를 적응시키고 실시간 번역 자막을 제공하여 다양한 언어 배경 학생들의 학습 참여도를 높였다. 핵심 교훈은 AI는 교사 대체가 아닌 보완 도구로 활용해야 효과적이라는 점이다.

    Sage Publishing: Jasper AI로 교과서 마케팅 콘텐츠 작성 시간을 99% 단축하고 마케팅 비용을 50% 절감했다. 브랜드 가이드라인으로 AI 시스템을 파인튜닝한 것이 성공 요인이었다.

    실패 사례와 교훈

    Johns Hopkins University 파일럿: Socratic-style AI 튜터를 도입했으나 학생들이 의도대로 사용하지 않고 단순 정보 검색에만 활용했다. 교훈은 AI 리터러시 교육과 구조화된 교사 가이드가 필수라는 점이다.

    흔한 실수와 개선 방법:

    실수 유형 문제점 개선 방법
    모호한 프롬프트 일반적/부정확한 응답 TCREI 프레임워크 적용
    컨텍스트 부족 AI가 추측으로 답변 충분한 배경 정보 제공
    예시 없음 원하는 형식 미이해 2-5개 few-shot 예시 포함
    첫 응답 수용 최적화되지 않은 결과 반복적 개선 수행

    한국 교육 현장 실전 활용 가이드

    학원 운영자를 위한 체크리스트

    • [ ] 커리큘럼 자동화: 학년별, 레벨별 커리큘럼 템플릿 구축

    • [ ] 문제 은행 구축: 단원별 객관식/서술형 문제 대량 생성 후 검수

    • [ ] 브랜드 보이스 설정: 학원 톤앤매너를 Reference로 저장

    • [ ] 교사 교육: TCREI 프레임워크 활용법 연수

    • [ ] 품질 검수 프로세스: AI 생성물 이중 검토 체계 수립

    교육 콘텐츠 크리에이터를 위한 워크플로우

    1. 기획 단계: TCREI로 콘텐츠 기획서 초안 생성

    2. 제작 단계: 스크립트, 워크시트, 평가 문항 자동 생성

    3. 검수 단계: 정확성, 난이도, 교육과정 연계성 확인

    4. 반복 개선: Iterate 단계로 품질 향상

    5. 템플릿화: 성공한 프롬프트를 재사용 가능한 템플릿으로 저장


    핵심 결론과 향후 전망

    reasonofmoon_Draw_a_minimalist_line_art_illustration_of_a_hum_045bbb90-8e54-4b4b-9bd8-b342a20c6953_1

    TCREI 프레임워크는 단순히 프롬프트를 잘 쓰는 기술이 아니라 AI와 효과적으로 협업하는 사고방식이다. Task의 명확성, Context의 풍부함, Reference의 적절성이 결과물 품질의 80%를 결정하며, Evaluate와 Iterate를 통한 반복 개선이 나머지 20%를 채운다.

    교육 분야에서 AI 활용의 핵심은 인간 감독과 반복적 개선이다. AI가 생성한 콘텐츠를 그대로 사용하는 것이 아니라, 전문가의 눈으로 검토하고 개선하는 과정이 필수다. 이 가이드의 템플릿들은 그 시작점을 제공하며, 각 교육 환경에 맞게 커스터마이징하여 사용하면 최적의 결과를 얻을 수 있다.

    앞으로 AI 에이전트 기능 확대, 컨텍스트 윈도우 확장, 멀티모달 기능 강화가 지속될 것이다. 지금 TCREI 프레임워크를 숙달해두면 미래 AI 도구들에도 동일한 원칙을 적용하여 빠르게 적응할 수 있다.

  • 인공지능 시대의 창의성 교육

    1. 1시간 강의 시나리오 (인공지능 시대의 창의성 교육)

    강연 제목(예시)

    “인공지능 시대, 어떻게 창의성을 가르칠 것인가”\
    – 문과 출신 영어 원장이 AI로 만든 교실 실험기


    0:00–3:00 오프닝 – 전환점 이야기

    (슬라이드: 제목 + 당신 사진 + “달의이성 / 송세훈”)

    “네, 반갑습니다.\
    인공지능 시대의 창의성 교육에 대해서 이야기를 나눌 송세훈, 닉네임 ‘달의이성’입니다.

    저는 원래 25년 동안 아이들 영어만 가르치던, 전형적인 문과 출신 영어 학원 원장이었습니다.\
    ‘창의성’이라는 건 솔직히… 타고나는 거지, 교육으로 만들어낼 수 있는 건 아니라고 생각했어요.

    그런데 2023년 3월, ChatGPT를 처음 켰던 날,\
    그 믿음이 완전히 바뀌었습니다.

    처음에는 그냥 학생들 영어 작문 첨삭이나 시켜볼까,\
    그 정도로 가볍게 시작했는데,

    • 학생들이 만든 이야기가 AI와 함께 동화책이 되고,

    • 그 동화책이 애니메이션 영상이 되고,

    • 제가 머릿속으로만 갖고 있던 교수법과 앱 아이디어들이 실제로 실행되는 도구가 되는 걸 보면서

    ‘아, 이건 창의성의 시대가 아니라,\
    창의성을 교육할 수 있는 시대가 열렸구나’라는 걸 체감했습니다.

    오늘 1시간 동안 저는,\
    제가 지난 2\~3년 동안 교육 현장에서 직접 실험해본 것을 바탕으로,

    1. AI 시대에 창의성을 이해하는 3가지 관점

    2. 실제 교실·학원·수업에 바로 적용 가능한 수업 아이디어

    3. 그리고 원하신다면, 여러분이 3개월 동안 직접 시도해 볼 수 있는 로드맵

    까지 정리해서 나눠보려고 합니다.”


    3:00–8:00 청중 Pain Point 세 가지

    (슬라이드: “여러분의 고민부터 시작하겠습니다”)

    “우선, 제 이야기가 아니라,\
    여러분의 현실에서 출발해보겠습니다.

    이 자리에 계신 분들,\
    크게 세 부류의 고민이 있을 거라고 생각합니다.

    1) 교사·강사·학원장·교육 담당자

    • ‘AI로 수업을 혁신하라’는 말은 많이 듣는데

    • 어디서부터, 뭘 바꾸라는 건지 모르겠고

    • ChatGPT는 써보면 편하긴 한데, 이게 창의성 교육이랑 무슨 상관인지 막막하고

    • 솔직히, 지금 수업 준비하기도 바쁜데\
      또 뭔가를 배우라고 하니까 부담스럽고…

    2) 대학생·청년

    • ChatGPT, 미드저니, 젬이니 다 써보긴 했는데\
      과제 도우미, 번역기, 요약기 이상으로는 잘 못 쓰겠고

    • 포트폴리오라고 할 만한 게 없어서\
      ‘나만의 프로젝트’를 만들고 싶긴 한데

    • 코딩이나 디자인 공부부터 하려니 막막하고…

    3) 직장인

    • 회사에서 “AI 써서 자동화 좀 해봐”라는 이야기를 들었는데

    • 막상 뭐를 해야 할지 몰라서, 그냥 회의 때 고개만 끄덕이고 있고

    • 프롬프트를 어떻게 써야 하는지 모르니\
      결과가 들쭉날쭉해서, 업무에 쓰기가 불안하고…

    혹시, 방금 말한 것 중 하나라도 ‘아, 나 얘기 같네’ 하신 분 손 한 번 들어 보실까요?”

    (실제 강의에서는 손 들게 하거나 채팅 유도)

    “좋습니다. 방금 손 드신 분들이,\
    오늘 이 1시간의 진짜 주인공입니다.

    그래서 저는 오늘, AI를 설명하는 사람이 아니라\
    여러분의 고민을 같이 실험해보는 사람으로 서 있으려고 합니다.”


    8:00–15:00 AI 시대 창의성 3단계 모델 (CET 모델)

    (슬라이드: “창의성, 막연한 단어에서 구조로”)

    “자, 이제 ‘창의성’이라는 말을\
    조금 더 구조적으로 정리해보겠습니다.

    제가 좋아하는 학자, 마가렛 보든은\
    창의성을 세 가지로 나눕니다.

    1. 조합적 창의성

    2. 탐색적 창의성

    3. 변형적 창의성

    이걸 제가 교육 현장에서 쓰기 쉽게,\
    조금 이름을 바꿔봤습니다.

    저는 이렇게 부릅니다.

    CET 모델 – 연결(Combine), 탐험(Explore), 재창조(Transform)

    1단계 C – 연결(Combine)

    기존에 떨어져 있던 것 둘을 새로 연결해서\
    전에는 없던 조합을 만드는 창의성입니다.

    • ‘폭격기 + 악어’ → 기괴한 캐릭터

    • ‘상어 + 나이키 신발’ → 이상한 캐릭터

    아이들이 많이 하는 ‘이상한 합성 캐릭터’들도\
    조합적 창의성의 대표적인 예죠.

    AI 시대에는 어떨까요?

    • ‘스튜디오 지브리 스타일 + 헨리와 모찌 동화책 + 영어 학습’\
      이렇게 조합하면,\
      AI가 진짜로 동화책을 애니메이션으로 만들어 줍니다.

    2단계 E – 탐험(Explore)

    이미 있는 규칙과 틀 안에서\
    새로운 길을 찾아가는 창의성입니다.

    대표적인 예로,\
    초를 벽에 붙이되 촛농이 떨어지지 않게 하는 유명한 문제 있죠.\
    성냥갑과 핀을 어떻게 쓰느냐의 문제.

    틀은 그대로 두고, 그 안에서 새로운 해법을 찾는 것.\
    AI 시대에는 이 탐색이\
    엄청나게 빨라지고, 넓어집니다.

    • 여러 버전의 문항 분석

    • 다양한 수준의 설명

    • 다른 관점의 피드백\
      을 AI가 도와주기 때문이죠.

    3단계 T – 재창조(Transform)

    마지막은 규칙 자체를 바꿔버리는 창의성입니다.

    • 소설의 주인공을 악당으로 뒤집어 보기

    • 국어 시간의 ‘낯설게 하기’처럼,\
      익숙한 것을 완전히 낯설게 바라보기

    AI 시대에는,\
    우리가 보던 대상의 속을 들여다보기도 하고,\
    ‘다스 베이더의 엑스레이 사진을 그려줘’ 같은\
    말도 안 되는 요청을 던져서,\
    아예 새로운 관점 자체를 만들어낼 수 있습니다.


    오늘 제가 공유드릴 것은,\
    이 세 가지 층위, C – E – T 위에서,

    “AI를 어떻게 수업과 학습, 그리고 개인 프로젝트에 섞을 수 있을까?”

    입니다.

    이제부터는 이론 말고, 진짜 사례로 들어가 보겠습니다.”


    15:00–25:00 사례 1 – 조합적 창의성: AI 동화·영상 프로젝트

    (슬라이드: ‘헨리와 모찌’ 영상 캡처, 동화 삽화 몇 장)

    “첫 번째는 연결(Combine), 조합적 창의성입니다.

    저는 영어 학원을 운영하고 있습니다.\
    저희 학원은 문제집 대신 영어 원서를 읽고,\
    토론하고, 확장 활동을 하는 게 특징이에요.

    어느 날 이런 생각이 들었습니다.

    ‘아이들이 읽는 이 동화책이\
    그냥 책으로 끝나는 게 아니라,\
    아이들 손으로 새로운 작품이 되면 어떨까?’

    그래서 만든 게 이 프로젝트입니다.

    • 원작 동화책: 헨리와 모찌

    • 스타일: 스튜디오 지브리풍

    • 도구:

    • 이미지 – 미드저니

    • 나레이션 – TTS

    • 영상 편집 – AI 툴들

    • 목적:\
      → 아이들이 내용을 재구성하고,\
      이미지/음성/텍스트를 다시 조합하는 경험을 주는 것

    아이들에게는 이렇게 말합니다.

    “원작은 이렇지만,\
    너라면 헨리와 모찌의 이야기를 어떻게 다시 만들래?”

    그리고 AI에게는 이렇게 프롬프트를 줍니다.

    “스튜디오 지브리 스타일로,\
    헨리와 모찌의 장면을 아이들이 상상한 버전으로 그려줘.”

    그러면 여기서 조합적 창의성이 폭발합니다.

    • 원작 + 아이의 해석 + AI의 스타일\
      이 세 개가 섞여서\
      새로운 작품이 되는 거죠.

    👉 잠깐, 여러분도 해보는 미니 실습

    “여기서 잠깐, 여러분도 한 번 상상해보겠습니다.

    지금 머릿속에 아이들이 좋아하는 동화책이나 이야기 한 편을 떠올려 보세요.

    • ‘해리 포터’일 수도 있고

    • ‘전래동화’일 수도 있고

    • 아니면 최근 웹툰일 수도 있습니다.

    떠올리셨나요?

    이제 그 이야기를,\
    다른 스타일과 조합해봅시다.

    예를 들어:

    • ‘흥부와 놀부’를 SF 우주 배경으로

    • ‘헨젤과 그레텔’을 호러 스릴러

    • ‘토끼와 거북이’를 K-POP 아이돌 세계관으로

    이렇게 두 가지를 조합하면\
    벌써 C, 조합적 창의성이 작동하기 시작합니다.

    AI에게 줄 프롬프트는 이렇게 될 수 있습니다.

    (원작 제목) 이야기를\
    (새로운 스타일) 세계관으로 재구성해서,\
    5장짜리 스토리보드를 만들어줘.”

    이 한 줄만으로,\
    여러분은 내일 당장 수업에서 새로운 활동을 시작할 수 있습니다.

    이것이 첫 번째 층, **연결(Combine)**입니다.”


    25:00–35:00 사례 2 – 탐색 & 재창조: 수능 분석, 학원 자동화

    (슬라이드: 수능 분석 앱 화면, 레벨 가이드 앱 화면)

    “두 번째와 세 번째 층,\
    **탐험(Explore)과 재창조(Transform)**는\
    좀 더 ‘교사의 일’을 바꾸는 쪽입니다.

    1) 수능 영어 문항 분석 앱 – 탐색적 창의성

    저는 영어 선생님이다 보니,\
    매년 수능이 나오면 문항 분석을 합니다.

    예전에는:

    • 원문을 찾아서

    • 문제와 보기들을 하나하나 비교하고

    • 난이도, 어휘 수준, 평가 요소,\
      이런 걸 엑셀에 정리해서 보고서를 만들었어요.

    시간이 엄청나게 걸립니다.

    그래서 만든 것이,\
    AI 기반 수능 문항 분석 앱입니다.

    제가 한 일은 단순합니다.

    • 원문 텍스트

    • 실제 수능 지문

    • 보기와 정답\
      을 입력해서,

    “원문과 수능 지문의 유사도를 분석하고,\
    바뀐 부분의 의도, 난이도, 평가 요소를\
    이원 목적 분류표에 맞춰 정리해줘.”

    라고 AI에게 프롬프트를 준 겁니다.

    결과는:

    • 난이도, 예상 정답률

    • 렉사일 지수

    • 어떤 능력을 평가하는 문항인지

    • 문항 설계 원리

    까지 한 번에 쭉 분석합니다.

    이건 단순히 ‘시간 절약’의 문제가 아니라,\
    우리가 문항을 바라보는 방식을 바꿉니다.

    교사는 이제,

    “올해 수능이 왜 이렇게 나왔지?”\
    를 넘어서\
    “그럼 나는 어떤 문항을, 어떤 원리로 만들어야 하지?”\
    를 탐색할 수 있게 됩니다.

    이게 바로 탐색적 창의성입니다.


    2) 학원 레벨 테스트 & 숙제 관리 앱 – 재창조

    또 한 가지 예를 들어볼게요.

    학원에서 가장 반복되는 일 중 하나가 뭘까요?\
    바로 레벨 테스트 결과를 가지고\
    학생에게 학습 계획을 설명하는 일
    입니다.

    예전에는:

    • 시험 점수 보고

    • ‘이 학생은 B1 정도니까…’

    • 이러이러한 교재, 이러이러한 워크북을 추천합니다’\
      를 매번 말로 설명했습니다.

    그래서 만든 것이\
    맞춤형 학습 가이드 생성 앱입니다.

    • 학생 이름, 날짜

    • CEFR 레벨\
      만 입력하면,

    • 이 학생의 현재 위치

    • 다음 3개월 학습 계획

    • 추천 도서/교재

    • 학부모에게 줄 설명 텍스트\
      가 자동으로 생성됩니다.

    또 하나는,\
    단어·숙제 관리 앱입니다.

    • 어떤 학생은 300번대 단어

    • 누구는 700번대 단어

    • 누구는 1200번대 단어…

    예전에는 이 모든 숙제를\
    수기로 적어줬습니다.

    이걸 간단한 HTML 앱과 스프레드시트로 바꾸니,

    • 오늘 시험 범위 입력

    • 합격/불합격 체크

    • 다음 숙제가 자동으로 제안

    되는 시스템이 되었습니다.

    결과적으로,\
    교사는 반복 작업에서 빠져나와,\
    학생과 진짜 대화를 할 시간이 생겼습니다.

    이건 단순한 편의가 아니라,\
    **교사라는 직업의 ‘규칙’을 바꾸는 재창조(Transform)**입니다.

    “수업 준비와 채점에 시간을 쓰는 교사”에서\
    “창의적인 활동과 피드백에 시간을 쓰는 교사”로.”


    35:00–47:00 미니 워크숍 – 내 수업/일/학습에 CET 모델 적용하기

    (슬라이드: 간단한 워크시트 구조)

    “자, 이제까지는 제가 한 이야기죠.

    여기서부터는\
    여러분의 이야기로 넘어가 보겠습니다.

    지금부터 10분 동안,\
    여러분 각자의 수업·업무·학습을\
    CET 모델 위에 올려볼 겁니다.

    가능하시면 메모지나 노트, 혹은 휴대폰 메모장을 꺼내주세요.

    Step 1. 나의 현재 환경 정리 (1분)

    • 교사/강사/학원장/교육 담당자

    • 직장인

    • 대학생/학생

    어느 쪽인지 먼저 적어보세요.\
    그리고 가장 개선하고 싶은 활동 하나를 적습니다.

    예를 들면:

    • ‘고3 영어 지문 수업’

    • ‘회사 주간 보고서 작성’

    • ‘논문 읽기 & 정리’

    • ‘포트폴리오 프로젝트 준비’

    Step 2. C – 연결(Combine) (3분)

    자, 이제 질문을 하나 드리겠습니다.

    “이 활동에 전혀 다른 분야 하나를\
    과감하게 섞어본다면, 뭐가 있을까요?”

    예를 들어,

    • 수능 지문 + 동화책 스타일

    • 회의록 + 웹툰

    • 역사 수업 + K-POP

    • 리포트 작성 + 팟캐스트

    떠오르는 대로 2\~3개만 적어 보세요.

    그리고 그 옆에\
    AI 도구 하나씩을 붙여봅니다.

    • 텍스트 변환 – ChatGPT / Claude

    • 이미지 – Midjourney / DALL·E / Jemini 이미지 생성

    • 영상 – 클링 AI, 캡션 AI 등

    • 자동화 – Make, n8n, Apps Script

    예를 들어 이렇게 쓸 수 있습니다.

    “수능 지문 + 웹툰 / ChatGPT + 이미지 생성”

    이게 여러분의 조합적 창의성 실험 주제입니다.

    Step 3. E – 탐험(Explore) (3분)

    다음 질문입니다.

    “이 활동 안에서, 규칙·난이도·형식을 다양하게 실험해볼 수 있는 지점은 어디인가?”

    예를 들면:

    • 같은 내용을 초등 수준 / 중학생 수준 / 성인 수준으로 설명해보게 하기

    • 같은 지문을

    • 요약

    • 질문 만들기

    • 시험 문항 만들기\
      세 방향으로 탐색해 보기

    이때 AI에게는 이렇게 프롬프트를 줄 수 있습니다.

    “이 글을\
    ① 초등학생에게 설명하듯,\
    ② 중학생에게 설명하듯,\
    ③ 고등학생에게 설명하듯\
    세 단계로 재구성해줘.”

    혹은,

    “이 텍스트를 토대로\
    서로 난이도가 다른 객관식 문항 3개를 만들어줘.\
    각 문항이 평가하는 능력도 함께 적어줘.”

    여러분의 활동에 맞는 질문을\
    2\~3개 적어보세요.

    Step 4. T – 재창조(Transform) (3분)

    마지막 질문입니다.

    “이 활동의 룰 자체를 바꿔본다면 어떨까요?”

    예를 들어:

    • 항상 교사가 문제를 내던 수업 →\
      학생이 AI와 함께 문제를 만드는 수업으로

    • 항상 리포트를 쓰던 수업 →\
      리포트 대신 AI에게 질문 리스트를 만드는 수업으로

    • 항상 PPT 준비하던 회의 →\
      회의 전에 팀원들이 AI와 브레인스토밍한 결과를 한 슬라이드로 모아 오는 룰로

    AI는 여기서,\
    ‘룰을 바꾸는 실험’을 안전하게 테스트할 수 있게 해줍니다.

    지금 메모에\
    “내 수업/업무의 룰을 하나 바꾼다면?”\
    이라는 질문에 대한 답을 한 줄만 적어보세요.

    그게 바로\
    여러분의 재창조(Transform) 실험의 출발점입니다.”


    47:00–55:00 정리 – 1주/1개월/3개월 액션 플랜

    (슬라이드: “1주 / 1개월 / 3개월 플랜”)

    “이제 거의 마무리할 시간입니다.

    오늘 이야기,\
    CET 모델, 여러 사례, 미니 실습까지 했는데요.

    머릿속이 좀 복잡하실 수 있습니다.

    그래서 아주 단순하게,\
    1주 / 1개월 / 3개월로 나눠서\
    실행 플랜을 제안드리려고 합니다.

    ✅ 1주 안에 할 수 있는 것 (초급)

    • 오늘 메모한 것 중에서 가장 가벼운 실험 1개 선택

    • ChatGPT나 사용하는 AI 도구에\
      프롬프트 1개만 제대로 만들어서 실행해보기

    예:

    “내가 가르치는 이 지문을\
    초등·중등·고등 수준으로 설명하는 텍스트를 만들어줘.”

    “이 동화책을 SF 버전으로 각색한 5장짜리 줄거리를 만들어줘.”

    딱 한 번만이라도,\
    ‘생각만 했던 걸 실행까지’ 가보는 겁니다.

    ✅ 1개월 안에 할 수 있는 것 (중급)

    • 하나의 단원/챕터/업무 프로세스를 골라서\
      CET 모델 기준으로 재설계

    예:

    • “이번 중간고사 대비 단원은\
      무조건 CET 모델로만 수업해보겠다.”

    • “회사 보고서 작성 과정을\
      AI 초안 → 인간 검토 → AI 재작성 구조로 한번 바꿔보겠다.”

    이 1개월 플랜이\
    오늘 강연의 핵심 실천 구간입니다.

    ✅ 3개월 안에 할 수 있는 것 (고급)

    3개월 동안은,\
    작은 프로젝트 하나를 끝까지 가져가는 걸 추천드립니다.

    예를 들어:

    • 나만의 AI 동화책 시리즈 3권

    • AI를 활용한 수업 설계 모음집

    • AI 자동화로 줄인 업무 시간을 정리한 사례집

    • 혹은, 실제로 작동하는 웹/앱 하나

    이런 것들을 묶어서\
    포트폴리오로 만들면,

    • 교사: 학교/학원/교육청 연수에서 공유할 수 있는 사례

    • 직장인: 팀장/회사에 제안할 수 있는 사례

    • 학생: 입사 지원서/포트폴리오에 넣을 수 있는 사례

    가 됩니다.

    제가 이 3개월 프로젝트를 위해,\
    별도의 3개월 부트캠프도 준비하고 있습니다.\
    조금 있다가 간단히 안내를 드리고,\
    관심 있는 분들은 그쪽에서 함께 더 깊게 실험을 이어가 보셨으면 합니다.”


    55:00–60:00 마무리 & Q&A

    (슬라이드: 요약 3줄)

    “마지막으로,\
    오늘 이야기를 딱 3줄로만 정리해보겠습니다.

    1. 인공지능 시대는 창의성을 ‘교육할 수 있는’ 시대입니다.

    2. 창의성은 막연한 재능이 아니라,\
      **연결(Combine) – 탐험(Explore) – 재창조(Transform)**라는 구조를 가진 능력입니다.

    3. AI는 우리를 대체하는 게 아니라,\
      이 세 가지를 실험할 시간을 만들어주는 도구입니다.

    저는,\
    영어학원 원장이라는 아주 작은 교실에서 출발해서,

    • 동화책을 영상으로 만들고

    • 수능 문항 분석 앱을 만들고

    • 학원 자동화를 하고

    • 대학 졸업반 프로젝트를 지도하고

    • 에듀테크 기업과 함께 실험을 해왔습니다.

    여기 계신 여러분도\
    지금 계신 자리에서,

    ‘나만의 작은 실험’ 하나만 정해서\
    AI와 함께 시작해 보셨으면 좋겠습니다.

    오늘 강연 들어주셔서 감사합니다.\
    이제 질문을 조금 받아보겠습니다.”

    (Q&A 진행)


    2. 이 기조 강연에 맞춘 3개월 부트캠프 설계

    이제, 위 기조 강연이 입구가 되고,\
    3개월 동안 사람들을 실전적으로 끌고 가는 부트캠프를 설계해볼게요.

    전체 컨셉

    “AI 창의성 실험실: 3개월 동안 나만의 교육/콘텐츠/서비스를 만드는 실전 부트캠프”\
    – 직장인 & 대학생 & 교육자를 위한 CET 기반 프로젝트 과정

    • 기간: 12주 (3개월)

    • 진행: 주 1회, 회당 2시간 (온라인 라이브 + 과제)

    • 대상:

    • 교육자·강사·학원장

    • 직장인 (업무 자동화/콘텐츠 제작 관심자)

    • 대학생/창작자 (포트폴리오 필요자)

    • 목표:

    • CET 모델을 자기 분야에 완전히 내재화

    • 3개월 동안 최소 1개의 대표 프로젝트 완성

    • AI 도구를 활용한 실전 포트폴리오 구축


    Month 1 – AI & 창의성 근육 만들기 (CET + 프롬프트 기초)

    목표:\
    AI에게 일을 ‘잘 시키는 법’을 배우고,\
    CET 모델을 자기 분야에 적용할 수 있는 수준까지 올리기.

    Week 1 – 오리엔테이션 & 나의 Pain Point 정의

    • 강의:

    • 인공지능 시대, 왜 ‘창의성 교육/업무/학습’인가

    • CET 모델 소개 (강연의 핵심 요약 버전)

    • 실습:

    • 각자 자신의 현재 역할(교사/직장인/학생)과 Pain Point 3개 작성

    • 3개월 동안 만들 개인 프로젝트 초안 작성

    Week 2 – 프롬프트 엔지니어링 기초 (역할, 맥락, 제약, 출력)

    • 강의:

    • 좋은 프롬프트의 4요소: 역할/맥락/제약/출력 형식

    • CoT(단계별 사고) & 파인만 학습법 프롬프트

    • 실습:

    • 본인 수업/업무/학습에 필요한 튜터 프롬프트 2개 만들기

    • “나만의 학습/업무/수업 AI 튜터” 생성

    Week 3 – 조합적 창의성 실습: 동화·콘텐츠·아이디어 연결

    • 강의:

    • 조합적 창의성(C)에 특화된 프롬프트 패턴\
      (A+B 조합, 스타일 믹스, 컨셉 크로스오버)

    • 실습:

    • 나만의 조합 프로젝트 설계:

      • 동화책 재해석 / 업무 리포트+웹툰 / 강의+게임 등
    • AI를 사용해 간단한 스토리보드/목차 초안 만들기

    Week 4 – 탐색적 창의성 실습: 문제 해결 & 수준별 재구성

    • 강의:

    • 탐색적 창의성(E) – 같은 컨텐츠를 여러 각도에서 보기

    • 수능 분석, 개념 설명의 여러 버전, 난이도 조절

    • 실습:

    • 각자 컨텐츠(지문/보고서/논문/강의)를 가져와

      • 수준별 설명

      • 문제/질문/퀴즈 생성

    • 이를 기반으로 작은 학습 자료/업무 도구 1개 완성


    Month 2 – 도구 + 바이브 코딩으로 실제 결과물 만들기

    목표:\
    AI와 함께 실제로 **보여줄 수 있는 것(웹/동화책/워크북/자동화 흐름)**을 만든다.

    Week 5 – 이미지·영상·스토리텔링: 조합 프로젝트 1차 완성

    • 강의:

    • 이미지/영상 생성 도구 개요

    • 저작권/윤리/교육 현장에서의 안전한 활용

    • 실습:

    • Week 3에서 설계한 조합 프로젝트를

      • 이미지/영상/슬라이드/스토리북 형태로 1차 제작
    • 동화/웹툰/짧은 영상 중 택1 완성

    Week 6 – 바이브 코딩 1: AI에게 웹을 시켜보기

    • 강의:

    • “바이브 코딩” 개념 – 코드는 AI가, 방향은 내가

    • 간단 HTML/JS 구조 이해 (코드 ‘읽기’만)

    • 실습:

    • 개인 소개/프로젝트 소개 랜딩페이지를\
      AI와 함께 제작 (v0.dev, Lovable 등 도구 활용)

    • 본인 프로젝트를 소개하는 1페이지 웹 완성 (로컬 or 프리뷰)

    Week 7 – 바이브 코딩 2: 인터랙티브 요소 추가

    • 강의:

    • 상태·입력·간단한 로직 개념

    • “질문 생성기”, “퀴즈 앱”, “학습 플래너” 같은 간단 웹앱 구조

    • 실습:

    • 본인의 프로젝트와 연결되는 작은 인터랙티브 요소 만들기

      • 예: 동화책 퀴즈 / 수업 진단 설문 / 업무 체크리스트 등
    • 웹앱 초안 1개 완성

    Week 8 – 데이터/노션/스프레드시트 연동 입문

    • 강의:

    • 아주 기초적인 Google Apps Script / 노션 DB / 스프레드시트 연동 개념

    • 실습:

    • 간단한 데이터 연동:

      • 학습 기록 저장

      • 설문 응답 저장

      • 단어/질문 리스트 관리

    • 데이터를 저장하는 교육/업무 미니툴 1개 완성


    Month 3 – 나만의 “AI 창의성 프로젝트” 완성 & 배포

    목표:\
    3개월 동안 다듬어 온 것을 외부에 보여줄 수 있는 완성본으로 만들고,\
    자기만의 프레임·스토리까지 정리한다.

    Week 9 – 나의 CET 프로젝트 설계 정리

    • 강의:

    • 지금까지의 결과물을 CET 모델 관점에서 정리하는 방법

    • 실습:

    • 각자 프로젝트를

      • 어떤 연결(Combine)을 했는지

      • 어떤 탐험(Explore)을 했는지

      • 무엇을 재창조(Transform)했는지\
        정리하는 1페이지 문서 작성

    Week 10 – 배포: GitHub / 노션 / 포트폴리오 사이트 업로드

    • 강의:

    • 결과물을 어떻게 세상에 올릴 것인가

      • GitHub 기본

      • 노션 포트폴리오

      • 간단한 도메인 연결 or 링크트리

    • 실습:

    • 각자 프로젝트 결과를

      • GitHub/노션/비공개 웹 URL 등 최소 1곳에 업로드
    • “공유 가능한 링크” 1개 확보

    Week 11 – 스토리 만들기: 나의 AI 전환 스토리

    • 강의:

    • ‘나는 원래 ○○였는데, AI를 만나서 ○○하게 됐다’라는 서사 구조

    • 강연·면접·소개 글에서 써먹을 수 있는 스토리텔링 기초

    • 실습:

    • 3\~5분 분량의 자기 소개 + 프로젝트 소개 스크립트 작성

    • 두 명씩 짝지어 서로 피드백

    Week 12 – 발표 데이 & 피드백

    • 강의:

    • 없음 (간단한 오프닝만)

    • 실습:

    • 각자 5\~7분 동안

      • 본인의 프로젝트 시연

      • CET 관점에서 무엇을 실험했는지 공유

      • 3개월 전과 무엇이 달라졌는지 이야기

    • 강사 및 동료 피드백

    • 이후 개선 방향 설정


    부트캠프 산출물 (이상적인 목표)

    3개월 뒤, 참가자가 갖게 되는 것:

    1. 본인 분야에 맞춘 CET 창의성 모델 적용 문서 1개

    2. 실제로 작동하는 AI 프로젝트 1개 이상

    3. 동화/콘텐츠/수업설계/업무 자동화/웹앱 등 형태는 자유

    4. 온라인에서 공유 가능한 URL

    5. GitHub, 노션, 웹사이트 등

    6. 3\~5분 자기소개 스크립트

    7. “나는 AI 시대에 이런 방식으로 창의성을 실험하고 있다”라는 스토리

    8. 향후 6개월 동안 확장 가능한 로드맵 초안


    필요하면 다음 단계로:

    • 위 1시간 기조강연을 **슬라이드 구조(페이지별 키워드)**로도 쪼개 줄 수 있고,

    • 부트캠프 홍보용 카피(노션 페이지, 카톡 홍보글, 인스타용 짧은 문구)도 따로 만들어 드릴 수 있어요.

    다음으로 어떤 걸 먼저 다듬고 싶으세요?\
    – 강연 슬라이드? 아니면 부트캠프 모집 페이지 텍스트?