디톡스 잉글리시 · Codex Astra 개정판
교재와 같은 순서로 읽고 따라 하는 웹매뉴얼입니다. 회색 상자 위의 버튼을 누르면 상자 안의 글이 모두 복사됩니다.
목차 열기
부경대 특강 교재
내 영어를 매일
깨우는 봇 만들기
강연이 끝나고 혼자 따라해 볼 때 참고할 가이드북 교재 · Codex Astra 개정판
Part 0 다시 시작하기
Part 1 준비 — 30분 안에 끝나는 세팅
Part 2 첫 대화
Part 3 모듈 1 · Notification — 아침에 말을 거는 봇 핵심 챕터
Part 4 모듈 2 · Check — 내가 쓴 영어를 교정받기
Part 5 모듈 3 · Review — 한 주 리뷰 받기 자동화를 통해 반복되는 루틴 구축
Part 6 저절로 돌게 만들기 — 매일 & 매주
Part 7 봇을 몇 달 동안 계속 쓰는 법
부록 만능 질문 · 프롬프트 모음 · 오류 사전 · 용어표
PART 0
다시 시작하기
이 교재는 강연 요약본이 아닙니다.
이 교재는 강연 중 시연한 AI 활용 영어 학습 자동화 플로우를 혼자 처음부터 다시 구현해 볼 수 있도록 돕기 위해 작성된 안내서입니다.
강연에 안 왔어도, 강연 내용이 하나도 기억 안 나도 이 교재를 활용하여 순서대로 따라해 보시면 됩니다.
본 가이드를 통해 만들어 볼 것
아침에 나에게 영어로 말을 시키는 봇 하나.
예: 스마트폰에 다음과 같은 메시지가 오게 세팅할 수 있습니다.
☀️ 오늘의 회화 주제 · 사람들은 왜 돈을 잘 못 모을까 상황 · 통장에 돈이 안 남는다고 친구한테 하소연하기 오늘 꼭 써먹을 표현 3개 (탭하면 영어가 보입니다) 1. 그건 악순환이야 ███████ 2. 조금씩 쓴 게 쌓이는 거지 ███████ 3. 생각 없이 써서 그런 것 같아 ███████ 🔁 다시 보기 · 지난주에 제일 많이 틀린 것 = 시제 아래 회색 상자를 탭해서 복사 → ChatGPT에 붙여넣고 5분만 이야기하세요.
까만 칸을 손가락으로 누르면 영어가 나옵니다. 단어 카드가 따로 필요 없습니다.
바로 밑에 회색 상자가 하나 더 옵니다. 복사 버튼을 누르거나 상자를 길게 눌러 오늘 쓸 프롬프트를 복사합니다.
ChatGPT에 붙여넣기만 하면 됩니다. 무슨 이야기를 할지도, 누구와 할지도 이미 정해져 있습니다.
직접 쓴 영어 문장이나 대화 후 받은 교정을 봇에게 보내면, 저녁체크를 실행할 때 읽고 피드백을 줍니다.
그리고 틀린 것을 기억해 뒀다가 다음 주 아침에 다시 보냅니다.
본 가이드를 활용하여 총 세 개의 봇을 만들어 볼 것입니다.
| 봇 | 하는 일 | |
|---|---|---|
| 🌅 | 아침 | 오늘 할 대화와 표현을 보냅니다 |
| 🌙 | 저녁 | 오늘 한 말을 고쳐 주고, 틀린 것을 적어 둡니다 |
| 📊 | 주말 | 한 주를 정리하고, 자주 틀린 것을 다음 주로 넘깁니다 |
AI 봇을 만드는 기본기를 익힌 뒤, 배운 것들을 응용하여 자신의 니즈에 맞는 다양한 봇을 얼마든지 만들어 낼 수 있습니다.
전문 코딩은 필요 없습니다.
여러분이 해야 하는 일은 자연스러운 한국어로 부탁하는 것뿐입니다.
바이브 코딩 (vibe coding): a software development trend where a person builds apps or websites using plain, natural language prompts with an AI assistant, rather than writing code manually. Coined by AI researcher Andrej Karpathy, you focus entirely on the product's vision while the AI handles the code.
바이브 코딩은 영어로 해도, 한국어로 해도 잘 됩니다. 내가 뭘 만들고 싶은지 명확히 정의 내릴 수만 있으면 거의 무엇이든 만들 수 있습니다.
이 교재에 나오는 모든 프롬프트는 웹 매뉴얼 페이지를 방문(다음 페이지 설명 참고)하여 쉽게 복사해서 붙여 넣을 수 있게 되어 있고, 바꿀 자리는 [대괄호]로 표시돼 있습니다.
이 교재를 쓰는 세 가지 방법
여러분이 지금 어느 단계에 있느냐에 따라 다릅니다.
| 상황 | 어떻게 |
|---|---|
| 아무것도 안 되어 있다 | Part 1부터 순서대로. 처음 세팅에 30분, 봇 하나에 30분 |
| 하다가 막혔다 | 목차에서 그 장을 펴고 ⚠️ 여기서 잘 막힙니다 부터 보세요. 각 장 뒤쪽에 있습니다 |
| 다 만들었고 바꾸고 싶다 | 각 장 맨 뒤 🔧 갈아끼우는 자리만 보세요. 네 자리가 어느 장이든 똑같습니다 |
PDF 교재와 웹 매뉴얼
본 교재는 동일 내용을 더 상세히 담은 웹 매뉴얼이 있습니다. 서로 역할이 다릅니다.
| 이 책 | 웹 매뉴얼 | |
|---|---|---|
| 성격 | 순서대로 읽으며 따라하는 본교재 | 필요한 것만 꺼내어 쓰는 웹 페이지 |
| 프롬프트 | 읽고 이해하는 용도 | 복사 버튼 눌러 프롬프트 간단 복사 가능 |
책에 실린 프롬프트를 손으로 옮겨 치지 마세요.
오타로 오류가 발생할 수 있습니다. 복붙은 웹 매뉴얼에서 손쉽게 하세요. 책은 세팅 과정을 간편히 한눈에 보기 위한 용도입니다.
웹 매뉴얼 링크 → []
1. 위쪽 목차에서 지금 따라 하는 Part를 누릅니다.
2. 회색 상자 위의 복사 버튼을 누릅니다. (복사 버튼이 작동하지 않으면 상자 안의 글을 직접 드래그해 선택해 복사하세요. )
3. Codex 채팅창에 붙여넣고, [대괄호] 안에서 바꿀 내용이 있으면 바꾼 뒤 보냅니다.
준비물
시작하기 전에 아래 준비물을 확인해 주세요. 준비를 마친 항목에만 체크합니다.
코드를 미리 배워 올 필요는 없습니다. 필요한 프로그램 설치는 이 교재에서 함께 합니다.
봇을 만들 때 쓰는 Codex와, 완성한 봇이 매일 쓰는 OpenAI API는 비용이 따로 계산됩니다.
API 결제 확인과 키 발급은 Part 3.3에서 합니다. API 키를 만들기만 해서는 봇이 작동하지 않습니다.
PART 1
준비 — 30분 안에 끝나는 세팅
먼저 VS Code와 Codex를 설치하고, 봇을 만들 폴더를 엽니다.
학교나 회사 컴퓨터에서 설치가 차단되면 담당자에게 설치 허용을 요청하세요. 개인 컴퓨터가 있으면 그 컴퓨터로 실습해도 됩니다.
걸리는 시간 20~30분 · 결과 Codex Astra와 대화할 수 있는 화면이 열립니다
1.1 계정과 요금제
브라우저에서 chatgpt.com에 들어가 로그인합니다. 계정이 없다면 먼저 가입합니다.
이 수업은 VS Code의 Codex 확장에서 봇을 만듭니다. 로그인할 때 Sign in with ChatGPT를 선택합니다.
이미 쓰는 계정이 있다면 먼저 그 계정으로 로그인하세요. 시작부터 새 요금제를 결제할 필요는 없습니다. Codex 채팅창의 모델 선택 목록을 열고 GPT-6 Astra를 선택합니다. Astra가 목록에 없으면 현재 계정에서 사용할 수 없는 상태일 수 있습니다. 로그인한 계정과 제공 모델을 확인하세요.
이 교재의 요청문은 다른 Codex 모델에도 사용할 수 있지만, 결과와 처리 속도는 달라질 수 있습니다.
Codex 사용 한도에 닿으면 계정 화면에 안내된 재개 시각과 추가 이용 방법을 확인하세요.
ChatGPT와 영어로 대화하는 연습은 해당 계정의 음성·채팅 제공 범위 안에서 합니다.
완성한 봇의 OpenAI API 사용료는 ChatGPT 구독료에 포함되지 않습니다. Part 3.3에서 따로 설정합니다.
Codex, ChatGPT, API는 각각 어디에 쓰나요?
Codex는 우리가 한국어로 부탁하면 봇 프로그램을 만들어 줍니다.
ChatGPT는 내가 직접 열고 영어로 대화하는 상대입니다.
OpenAI API는 완성한 봇이 AI에게 글 생성을 요청하는 통로입니다. 새 대화 카드 만들기, 영작 교정, 주간 정리에 씁니다.
1.2 VS Code 설치
VS Code라는 프로그램을 하나 깝니다. 이름이 낯설어서 그렇지 어려운 소프트웨어가 아닙니다.
한글이나 구글 문서 같은 겁니다. 다만 Codex 등 다양한 툴이 함께 탑재되어 바이브 코딩 작업을 해 주는 것일 뿐입니다.
우리가 이걸 쓰는 이유는 Codex가 하는 일을 눈으로 보기 위해서입니다.
무슨 파일을 만들었는지, 뭘 고쳤는지가 화면 왼쪽에 그대로 보입니다.
설치
1. 브라우저에서 code.visualstudio.com을 엽니다.
2. 주소가 맞는지 확인한 뒤 Download를 누릅니다.
3. Windows 또는 Mac 중 내 컴퓨터에 맞는 설치 파일을 받습니다.
4. 받아진 파일을 실행합니다.
5. 설치 화면이 여러 번 나오는데 전부 그냥 '다음'을 누릅니다. 동의 체크만 하고 나머지는 손대지 마세요.
설치가 끝나면 프로그램을 열어 주세요.
1.3 Codex 확장 설치와 Astra 선택
VS Code에 Codex를 데려다 앉히는 단계입니다.
1. VS Code 왼쪽 세로줄에서 큐브(네모 블록) 네 개가 모여 있는 Extensions 아이콘을 찾아 누릅니다.
아이콘을 못 찾으면 상단 View → Extensions를 누릅니다.
2. 검색창에 Codex를 입력합니다.
3. 만든 곳(Publisher)이 OpenAI인 확장을 고릅니다. 확장 ID는 openai.chatgpt입니다.
4. Install 을 누릅니다.
이름이 비슷한 유사 Extensions가 여럿 나올 수 있습니다.
이름이나 다운로드 수만 보지 말고, 만든 곳이 OpenAI인지 확인하세요.
설치 성공 확인
설치가 끝나면 왼쪽 세로줄의 Codex 아이콘을 누릅니다.
Sign in with ChatGPT를 누르고, 브라우저에서 1.1의 계정으로 로그인한 뒤 VS Code로 돌아옵니다.
Codex 채팅창이 열리면 모델 목록에서 GPT-6 Astra를 선택합니다. 입력창에 선택한 모델 이름이 표시되면 준비됐습니다.
막혔을 때
아이콘이 안 보이면 Ctrl+Shift+P(맥은 Cmd+Shift+P)를 누르고 Codex: Open Codex Sidebar를 실행합니다. 로그인 창이 반복되면 브라우저 로그인을 마친 뒤 VS Code로 돌아왔는지 확인하세요.
1.4 작업 폴더 — 봇 파일을 한곳에 모읍니다
이제 오늘 만드는 모든 것이 들어갈 ‘상자’, 작업 폴더를 하나 만들 겁니다.
1. 바탕화면이나 문서 폴더에 새 폴더를 만듭니다.
2. 이름은 myenglishbot 으로 합니다. (다른 이름도 되지만 이 교재에서는 이 이름으로 설명하겠습니다.)
3. VS Code로 돌아와 위쪽 메뉴 File → Open Folder 를 누르고, 방금 만든 폴더를 고릅니다.
4. 폴더를 신뢰할지 묻는 창이 뜨면 방금 직접 만든 myenglishbot 폴더가 맞는지 보고 신뢰함을 누릅니다.
왼쪽 위에 `myenglishbot` 이라고 보이면 제대로 열린 겁니다.
봇 프로그램, 설정 파일, 영어 학습 기록은 이 폴더 안에 모아 둡니다. 프로그램 설치나 Part 6의 실행 예약은 폴더 밖의 컴퓨터 설정에도 영향을 줍니다. 승인 요청이 뜨면 대상과 작업 내용을 읽으세요. 문제가 생겼다고 폴더부터 지우지 마세요. 학습 기록도 함께 없어집니다. 오류 내용을 Codex에 보여 주고 원인부터 확인합니다. 중요한 수정을 하기 전에는 폴더를 복사해 백업해 두세요. .env가 들어 있는 백업은 다른 사람에게 공유하지 않습니다.
완료한 항목에 체크하세요
아래 항목을 직접 확인한 뒤 체크하세요. 모두 됐으면 Part 2로 갑니다.
검은 터미널 화면은 안 씁니다
인터넷에서 Codex 설치법을 찾아보면 검은 바탕에 글자만 있는 화면이 나옵니다.
명령어를 직접 타이핑하는 창입니다.
이 창은 익숙한 사람에게는 더 빠르고 정교한 작업이 가능하게 해 주지만, 학습 곡선이 가파르며 작은 실수만 해도 완전히 막혀버릴 수 있습니다. 반드시 터미널에서 해결해야 하는 일들도 있지만 이 경우에도 Codex extension과 직접 대화하고 물어 보면서 해결 가능합니다.
이 교재에서는 터미널 사용을 배제하고 채팅창에서 해결하는 법에 집중하겠습니다.
| 터미널 | 우리가 쓰는 익스텐션 | |
|---|---|---|
| 입력 | 정해진 명령어 | 평소 쓰는 한국어 |
| 오타 | 명령어와 옵션을 정확히 입력해야 함 | 한국어로 요청하고, 모르면 다시 물어볼 수 있음 |
| 결과 확인 | 글자로 | 파일이 눈에 보임 |
PART 2
첫 대화
아직은 봇을 만드는 단계가 아닙니다.
이 장에서는 아무 것도 몰라도 채팅창에 직접 물어가며 해결할 수 있다는 것을 몸으로 확인하는 장입니다.
자연어로 대화하며 첫 파일을 생성해 보겠습니다.
여기서 겪는 세 가지(첫 입력 · 허락 팝업 · 파일 생성)가 Part 3부터 계속 반복됩니다.
걸리는 시간 10분 · 결과 최초 파일 생성
2.1 첫 입력은 이것으로
Codex 아이콘을 눌러 채팅창을 엽니다. 커서가 깜빡입니다.
여기서 많은 분이 멈춥니다. 뭘 어떻게 써야 할지 몰라서입니다.
이 때 취할 수 있는 액션은 의외로 간단합니다. 뭘 어떻게 써야 하는지 물어보면 됩니다.
너 뭘 할 수 있어?
답변을 읽어보면 “파일을 만들고, 고치고, 찾아보고…” 이런 것들을 할 수 있다는 이야기가 나옵니다.
지금 Codex의 기능들을 다 이해할 필요 없습니다. 내가 자신이 없거나 막힐 때 그냥 한국어로 물어보면 한국어로 친절히 설명해 준다는 것만 확인하면 됩니다.
막히면 구글이나 ChatGPT 등에 검색하지 말고 그냥 채팅창에 물어보세요
모르는 게 생기면 그 자리에서 이 채팅창에 물어봅니다. 브라우저를 열 필요가 없습니다.
예: 방금 그 말 무슨 뜻이야? 컴퓨터 처음 쓰는 사람도 알아듣게 설명해줘. 예: 이해가 안 돼. 어린아이에게 설명하듯 다시 설명해 봐.
"이렇게 물어봐도 되나" 싶은 것도 그냥 물어보세요. (단, 간단한 질문을 할 시에는 모델을 낮춰서 비용을 절감하세요.)
"이거 지워도 돼?", "이 파일 뭐야?", "왜 이렇게 되는 거야?" 전부 됩니다.
부록 A에 이런 문장 열 개를 모아 뒀습니다.
2.2 승인 요청 — 무엇을 허용하는지 읽습니다
이제 진짜 일을 하나 시켜봅니다. 채팅창에 이렇게 씁니다.
영어 회화에서 자주 쓰이는 관용 표현 다섯 개를 골라서, 뜻과 예문을 붙여 표현정리.md 파일로 만들어줘.
md 파일은 글을 저장하는 텍스트 파일입니다. 제목이나 목록을 간단한 기호로 표시할 수 있습니다. 지금은 열어서 내용을 읽을 수 있으면 됩니다.
Codex가 파일을 만듭니다. 현재 권한 설정에 따라 먼저 승인 요청이 나올 수도 있고, 바로 파일이 생길 수도 있습니다.
승인 요청이 나오면 표현정리.md를 만드는 작업인지 확인한 뒤 허용합니다. 버튼 번호나 위치는 화면마다 다를 수 있습니다.
승인 요청이 안 떠도 이상한 것은 아닙니다
Codex는 현재 허용된 범위 안에서는 매번 묻지 않고 작업할 수 있습니다.
따라서 승인 창이 뜨는지만 보지 말고, 작업 뒤에 어떤 파일이 바뀌었는지도 확인하는 습관을 들여 보세요.
2.3 저절로 생긴 파일 하나
파일이 만들어졌습니다. 왼쪽 목록에서 표현정리.md 를 눌러 열어봅니다.
이게 첫 성공입니다. 화면에 글자가 나온 게 아니라 결과물이 파일로 남았습니다.
채팅은 닫으면 사라지지만 파일은 남습니다.
설정 파일을 따로 찾을 필요는 없습니다
Codex에서는 .claude 폴더나 settings.local.json이 생기지 않습니다. 이는 Claude Code에서 쓰는 설정 파일이기 때문입니다.
이 실습에서 확인할 파일은 방금 요청한 표현정리.md입니다.
왼쪽 파일 목록에서 파일을 열어 표현 다섯 개와 뜻, 예문이 들어 있는지 봅니다.
Codex의 승인 범위는 Codex 설정에서 확인합니다. 설정 파일을 직접 만들어 승인 방식을 흉내 낼 필요는 없습니다. 나중에 다시 작업할 때 참고할 봇 설명서는 AGENTS.md에 남깁니다. Part 7에서 만듭니다.
현재 권한 설정이 이해되지 않으면 채팅창에 이렇게 물어보세요.
지금 네가 승인 없이 할 수 있는 일과 승인이 필요한 일을 쉽게 설명해줘. 설정은 바꾸지 말고, 내가 어디에서 확인하는지만 알려줘.
완료한 항목에 체크하세요
여기까지 됐으면 도구는 다 익힌 것입니다. Part 3부터는 봇을 만듭니다.
PART 3
모듈 1 · Notification — 아침에 말을 거는 봇
이 장은 교재에서 가장 어렵게 느껴질 수 있는 장입니다. 토큰 받기, 키 넣기, 첫 전송 등 다소 복잡해 보이는 과정이 이 장에 전부 몰려 있기 때문입니다.
하지만 이 단계는 딱 한 번만 밟으면 끝납니다. 이 단계만 순탄히 통과하면 Part 4와 Part 5는 이 장의 구조와 똑 같은 반복만 해 주면 됩니다.
걸리는 시간 35~45분 · 결과 당장 내 폰으로 AI가 만든 첫 메시지를 받아 볼 수 있습니다
3.0 이 장이 끝나면 폴더에 남는 것
먼저 도착 지점을 봅니다. 이 장이 끝나면 여러분의 작업 폴더 안에 아래와 같은 파일들이 생깁니다.
📁 myenglishbot/ ├── .env ← 텔레그램 토큰·chat ID·OpenAI API 키·모델 이름 ├── ChatGPT지시문.md ← 매일 ChatGPT에 건넬 대본. 한 번 깔고 나면 손댈 일이 없습니다 └── (보내는 파일) ← Codex가 만듭니다. 이름은 Codex가 정합니다
필요한 프로그램과 설치 파일은 Codex가 작업하면서 추가할 수 있습니다. 위 목록은 여러분이 역할을 알아둘 파일입니다.
여러분이 직접 편집할 파일은 .env 하나뿐이고, 나머지는 전부 Codex가 만들어 줍니다.
3.1 이 모듈이 해결해 주는 것
매일 밤 "오늘 영어 할까?"를 정하는 일 자체를 없앱니다.
영어 공부가 3일 만에 끊기는 이유는 의지가 약해서가 아닙니다. 매일 결정을 새로 해야 하기 때문입니다.
앱을 켤지 말지, 뭘 볼지, 몇 분 할지, 이런 결정을 내릴 때마다 우리는 인지 체력을 소모하게 되고 의지력을 소비하게 됩니다.
이렇게 하루에 세 번씩 결정을 내려야 하는 일은 ‘즉각적인 보상(instant gratification)’이 있지 않은 이상 오래 지속할 수가 없습니다.
그래서 이 모듈에서는 내가 결정을 내려야 하는 단계 자체를 없애버릴 겁니다.
아침 8시가 되면 여러분의 폰이 먼저 말을 걸어오게 됩니다.
오늘 무슨 이야기를 할지, 누구와 할지도 이미 정해져 있습니다. 여러분이 해야 할 일은 읽고, 입을 떼는 것뿐입니다.
왜 앱이 아니라 봇인가?
영어 앱은 내가 열어야 시작됩니다. 여는 것 자체가 결정이고 의지력 소비입니다.
텔레그램 메시지 봇을 활용하면 내가 직접 결정을 내려 앱을 열거나 별도로 의지력을 발휘할 필요가 없이
이미 와 있는 메시지를 카톡 확인하듯 편하게 열어 보기만 하면 됩니다.
이 차이 하나 때문에 우리는 앱이 아니라 봇을 만듭니다.
ChatGPT를 직접 열긴 해야 하지만, 열어놓고 "무슨 말을 해야 하지" 하며 고민하고 결정할 일은 없습니다.
주제도, 상대도, 오늘 쓸 표현도 카드에 이미 적혀 있으니 그대로 가져다 쓰기만 하면 됩니다.
완성 화면 먼저
만들기 전에, 만들고 나면 폰에 어떻게 오는지부터 봅니다.
메시지는 이런 식으로 수신하게 됩니다. 아침에 두 통이 나란히 오고, 먼저 오는 것이 오늘의 카드입니다.
☀️ 8월 20일 목요일 · 오늘의 회화 주제 · 사람들은 왜 돈을 잘 못 모을까 상황 · 통장에 돈이 안 남는다고 친구한테 하소연하기 오늘 꼭 써먹을 표현 3개 (탭하면 영어가 보입니다) 1. 그건 악순환이야 ███████████ 2. 조금씩 쓴 게 쌓이는 거지 ███████████ 3. 생각 없이 써서 그런 것 같아 ███████████ 🔁 다시 보기 · 지난주에 제일 많이 나온 오류 = 시제 불일치
까만 칸이 단어 카드입니다. 손가락으로 누르면 그 자리에서 영어가 나옵니다.
아침에 세 개만 눌러 보고 나가도 그날 몫은 한 셈입니다.
그리고 두 번째 메시지가 바로 밑에 옵니다. 이건 회색 상자 하나가 전부입니다.
┌────────────────────────────────────────┐ │ 이 대화에서는 … │ │ 아래를 먼저 따라. … │ │ │ │ … "Honestly, my wallet is empty again … └────────────────────────────────────────┘
이 상자 안에 오늘 쓸 프롬프트가 통째로 들어 있습니다. 복사 버튼을 누르거나 길게 눌러 복사합니다.
읽어 볼 필요도 없습니다. 그대로 복사해서 ChatGPT에 붙여넣기만 하면 됩니다.
3.2 텔레그램 봇 토큰 받기 (2분)
텔레그램으로 메시지를 보내고 받는 데 필요한 정보는 두 개입니다.
| 필요한 것 | 무엇인가 | 어디서 받나 |
|---|---|---|
| 봇 토큰 | 봇의 비밀번호. 이게 있어야 봇 이름으로 메시지를 보낼 수 있음 | 텔레그램 안의 BotFather |
| chat ID | 내 대화방 주소. 이게 있어야 나에게 도착함 | 봇에게 말을 한 번 걸면 확인 가능 |
봇 토큰은 "발신자" 정보이고, chat ID는 "수신자" 정보입니다. 이 정보가 둘 다 있어야 제대로 메시지를 발송 및 수신할 수 있습니다.
3.2.1 봇 만들기
1. 폰에서 텔레그램을 엽니다. (없으면 설치하고 가입합니다. 전화번호만 있으면 됩니다.)
2. 검색창에 BotFather 를 칩니다.
3. 파란 체크 표시가 붙은 것을 고릅니다. 이름이 똑같은 가짜가 여럿 나옵니다.
4. 대화방에서 /newbot 이라고 보냅니다.
5. 봇의 표시 이름을 물어봅니다. 아무거나 됩니다. → 아침영어
6. 봇의 아이디를 물어봅니다. 반드시 `bot`으로 끝나야 하고, 전 세계에서 하나뿐이어야 합니다.
→ mymorningenglishbot 처럼 앞에 자기만 아는 말을 붙이면 거의 한 번에 통과합니다.
7. 성공하면 이런 줄이 옵니다.
Use this token to access the HTTP API: 8012345678:AAHf9x_Kd0LmQpRs7TuVwXyZ1234567890
이 긴 줄이 봇 토큰입니다. 지금 어디에 적어두지 않아도 됩니다. 이 대화방에 계속 남아 있으니 나중에 다시 와서 복사하면 됩니다.
이 토큰은 비밀번호입니다. 남에게 보이면 그 사람이 여러분 봇 이름으로 아무 메시지나 보낼 수 있습니다.
블로그, 단톡방, 스크린샷에 그대로 올리지 마세요. (실수로 올렸다면 BotFather에서 /revoke로 무효화하고 새로 받으면 됩니다.)
3.2.2 chat ID 확인하기
순서가 중요합니다. 내가 봇에게 먼저 말을 걸어야 합니다.
텔레그램은 모르는 사람에게 봇이 먼저 말을 걸 수 없게 막아놨습니다. 이 규칙 때문에 나중에 가장 많이 막힙니다.
1. BotFather가 준 링크(t.me/mymorningenglishbot)를 눌러 내 봇 대화방으로 들어갑니다.
2. 아래 시작 / START 버튼을 누릅니다. 그리고 그 대화방에 안녕 이라고 아무 말이나 한 줄 직접 보냅니다. START만 누르고 넘어가면 다음 단계에서 빈 결과가 나올 수 있습니다.
3. Codex에 아래 요청을 보내 .env 파일을 준비합니다. 토큰 자체는 채팅창에 쓰지 않습니다.
이 폴더에 .env 파일을 만들고 TELEGRAM_BOT_TOKEN= 과 TELEGRAM_CHAT_ID= 를 한 줄씩 넣어줘. 값은 비워둬. 기존 파일이 있으면 그 값은 지우지 마. .env는 .gitignore에 넣고, 내용을 채팅이나 실행 로그에 출력하지 마. 4. 왼쪽 파일 목록에서 .env를 열고, TELEGRAM_BOT_TOKEN= 뒤에 BotFather에서 복사한 토큰을 붙여넣은 뒤 저장합니다.
5. Codex에 아래 요청을 보냅니다. 봇 대화방에는 앞 단계에서 보낸 안녕 메시지가 있어야 합니다.
.env의 텔레그램 토큰으로 getUpdates를 한 번 호출해 내 개인 대화방의 chat ID와 대화방 이름만 보여줘. 후보가 여러 개면 내가 고르게 해줘. 토큰과 요청 주소는 출력하지 마. 사용한 임시 확인 프로그램은 내가 요청할 때만 실행되게 해줘.
6. 표시된 대화방이 내 봇 대화방인지 확인하고, 숫자로 된 chat ID를 복사합니다. .env의 TELEGRAM_CHAT_ID= 뒤에 붙여넣고 저장합니다.
막혔을 때
메시지가 없다고 나오면 BotFather가 아니라 내 봇 대화방에 안녕을 보내세요. 그다음 Codex에 chat ID를 다시 확인해 달라고 합니다.
3.3 OpenAI API 연결하기 — 키는 내가 직접 넣습니다
텔레그램 설정은 끝났습니다. 이제 봇이 새 대화 내용을 만들고 영어를 교정할 수 있도록 OpenAI API를 연결합니다.
API 키는 무엇인가요?
API는 프로그램이 다른 서비스에 일을 요청하는 통로입니다. 우리 봇은 이 통로로 OpenAI에 “오늘 쓸 영어 표현을 만들어 줘”라고 요청합니다.
API 키는 그 요청을 내 계정으로 보내게 해 주는 비밀번호입니다. 텔레그램 봇 토큰과는 다른 값입니다.
Codex에 로그인했다고 봇에 API 키가 자동으로 들어가지는 않습니다. 키를 발급받아 .env에 직접 넣어야 합니다.
API 키는 채팅창·스크린샷·단체 대화방에 올리지 않습니다. 실수로 공개했다면 OpenAI의 API keys 화면에서 폐기하고 새로 만드세요.
① API 결제를 확인하고 키를 발급받습니다
1. platform.openai.com에 로그인합니다. 이곳은 ChatGPT 대화창이 아니라 API 관리 화면입니다.
2. API keys에서 Create new secret key를 누릅니다. 이름은 myenglishbot처럼 알아보기 쉽게 적습니다.
3. 생성된 키를 복사합니다. 이 창을 닫으면 키 전체를 다시 볼 수 없으므로 다음 단계에서 바로 .env에 넣습니다.
확인
API keys 목록에 방금 만든 키 이름이 보이고, Billing에서 API를 사용할 수 있는 상태인지 확인하세요.
막혔을 때
ChatGPT 구독 결제만 보인다면 사이트를 다시 확인하세요. API 결제는 platform.openai.com에서 따로 확인합니다.
② .env에 API 키와 모델 이름을 추가합니다
Codex 채팅창에 다음 요청을 보냅니다. 이미 넣어 둔 텔레그램 값은 그대로 둡니다.
기존 .env의 값은 지우지 말고 OPENAI_API_KEY= 줄과 OPENAI_MODEL=gpt-6-astra 줄을 추가해줘. API 키 값은 비워둬. .env를 .gitignore에 넣고, 키나 토큰을 채팅·로그·공유 파일에 출력하지 마.
.env를 열어 OPENAI_API_KEY= 뒤에 방금 복사한 키를 붙여넣습니다. Ctrl+S(맥은 Cmd+S)로 저장합니다.
파일에는 아래 네 항목이 있어야 합니다. 등호 뒤의 설명은 예시이므로, 앞의 세 줄에는 직접 받은 값을 넣습니다.
TELEGRAM_BOT_TOKEN=BotFather에서_받은_토큰 TELEGRAM_CHAT_ID=확인한_대화방_숫자 OPENAI_API_KEY=OpenAI에서_발급받은_키 OPENAI_MODEL=gpt-6-astra
OPENAI_MODEL은 봇이 호출할 AI 모델입니다. Codex 입력창에서 고른 모델과는 별도입니다. 여기서는 GPT-6 Astra의 API 이름인 gpt-6-astra를 씁니다.
③ 짧은 요청 한 번으로 연결을 확인합니다
키를 저장했으면 Codex에 아래 요청을 보냅니다. Codex가 프로그램을 만드는 것과, 그 프로그램을 실제로 실행하는 것은 다른 단계입니다.
이 폴더에 OpenAI API 연결을 확인하는 작은 Python 프로그램을 만들어줘. - 이 폴더의 .env에서 OPENAI_API_KEY와 OPENAI_MODEL을 읽어. 키와 토큰 값은 출력하지 마. - 필요한 Python 환경, openai와 python-dotenv 설치를 도와줘. 설치가 필요하면 먼저 설명해줘. - OpenAI의 공식 Python SDK와 Responses API를 사용해. - 실행하면 “연결됐습니다”라는 짧은 한국어 답을 요청하고, 응답 본문만 보여줘. - API 요청은 한 번만 보내고 자동 재시도는 하지 마. 실패하면 서비스 이름과 오류 종류만 알려줘. - 아직 실행하지 말고 실행 방법을 알려줘. 실행 요청은 내가 따로 할게.
준비가 끝나면 “지금 연결 테스트를 한 번 실행해줘”라고 보냅니다. 이때 실제 API 사용료가 발생할 수 있습니다.
확인
짧은 한국어 응답이 돌아오면 API 연결에 성공한 것입니다. platform.openai.com의 Usage에서 사용 내역도 확인합니다. 내역 반영에는 시간이 걸릴 수 있습니다.
막혔을 때
401이면 .env의 OpenAI 키를 다시 확인합니다. insufficient_quota이면 Billing의 잔액·결제 상태를 봅니다. model_not_found 또는 접근 권한 오류면 모델 이름과 내 프로젝트에서 사용 가능한 모델을 확인합니다. 키 자체는 오류 설명에 붙이지 않습니다.
예약하기 전에 비용부터 확인합니다
처음에는 봇을 한 번씩만 실행합니다. 비용을 확인한 뒤 Part 6에서 예약하세요. Usage와 Billing에서 사용량을 살피고 지출 알림도 설정합니다. 알림 금액이 곧 자동 차단 한도인 것은 아닙니다.
설정을 마친 뒤 아래 두 항목에 체크하세요.
3.4 복붙 프롬프트 전문
여기서부터가 진짜입니다. 두 번 붙여넣습니다. 먼저 대본을 깔고, 그다음 봇을 만듭니다.
① 먼저 — ChatGPT에게 줄 대본을 파일로 깝니다
매일 아침 봇이 보내는 회색 상자 안에는 ChatGPT가 오늘 어떻게 행동할지가 통째로 적혀 있습니다.
그 대본을 먼저 파일 하나로 만들어 둡니다. 한 번만 하면 됩니다.
Codex 채팅창에 이렇게 씁니다.
이 폴더에 ChatGPT지시문.md 라는 파일을 만들고,
아래 <<<시작>>> 과 <<<끝>>> 사이의 글을 한 글자도 바꾸지 말고 그대로 넣어줘.
{{ }} 표시도 그대로 둬. 나중에 봇이 채울 자리야.
<<<시작>>>
이 대화에서는 ChatGPT 개인화 설정들을 잠시 무시하고 아래 지시를 먼저 따라 줘. 이 글을 읽거나 요약하지 말고, 대괄호 안 이름을 불필요하게 입에 담지 마.
[사람]
나는 {{내이름}}, 영어를 배우는 한국인. 너는 {{상대이름}}이야. 우리는 {{서로의 관계}} 사이야.
{{상황}}
주제: {{주제}}
[대화 규칙]
1. 영어로만 말해. 내가 한국어로 말해도 너는 영어로 답해. 내가 Explain it in Korean. 처럼 명백하게 한국어 설명을 원할 시에만 한국어로 대답을 해 주고 그 뒤 대화는 다시 영어로 이어 나가.
2. 네 대사는 마침표와 물음표를 합쳐 두 개까지, {{레벨}}단어까지. 물음표는 맨 끝에 한 개뿐이고 두 가지를 한 번에 묻지 마. 직전 대사보다 길어지면 안 되고, 10턴 뒤에도 첫 턴과 같은 난이도로 말해.
3. 내가 틀리면 직접 교정을 하기 보다는 네 대답 안에서 올바른 형태를 간접적으로 제시를 해 줘.
4. great, good job, nice, perfect, amazing, 잘했어를 어디에도 쓰지 마. 내 말의 내용에만 반응해. 내 발음과 실력은 말하지 마.
5. 내가 네가 쓴 단어의 뜻을 되물으면 뜻을 간단히만 설명해 줘.
6. 내가 혼자서 대화를 이끌어 나가야 하게끔 하지 마. 사람과 사람 간 대화처럼 자연스럽게 너도 대화를 리드해.
8. 별표, 우물정자, 번호, 제목, 표, 이모지를 쓰지 마. 소리 내어 읽었을 때 자연스러운 문장만 써.
[오늘의 표현 3개]
{{오늘의표현}}
이 표현과 그 안에 든 단어를 내가 먼저 쓰기 전에는 쓰지 말고, 비슷한 말로 바꾸지도 마. 이 표현이 답이 될 질문을 던지고 답은 내가 하게 둬. 내가 자주 틀리는 것은 {{지난주약점}}이야. 그게 나올 질문을 해서 내가 틀리던 부분이 교정되었는지 확인해 줘.
[막힘]
내가 "I don't know"라고 하거나, 한국어로 답하거나, 세 단어 이하로 두 번 답하면 [막힘]으로 가.
설명하지 말고 "A? or B?"처럼 둘 중 고르는 질문으로 다시 물어봐. 그래도 막히면 따라 말할 짧은 영어 문장 하나를 주고 따라 하라고 해. 여기서도 영어로만 쓰고 한국어 뜻풀이는 금지. 한국어 설명은 내가 대놓고 한국어로 설명해달라고 할 때로 국한해. 잠시 한국어로 설명을 하더라도 곧바로 다시 영어로 돌아와야 해.
내가 영어로 한 문장이라도 말하면 곧바로 [대화]로 돌아가. [막힘]에 들어갈 때마다 네 단어 수를 절반으로 줄이고 올리지 마.
"in Korean"이라고 정확히 쓸 때만 한국어 한 문장으로 알려주고 바로 영어로 돌아와.
[피드백]
내가 "wrap up" 또는 "피드백"이라고 하면 역할극을 즉시 멈추고 다시 돌아가지 마.
=피드백=
날짜: {{날짜}}
쓴 표현: 내가 먼저 말한 것만
안 쓴 표현: 나머지와 네가 먼저 말해 내가 따라 한 것
피드백 1: 내가 쓴 문장 -> 고쳐진 문장 | 실수종류
피드백 2: 내가 쓴 문장 -> 고쳐진 문장 | 실수종류
자연스럽게: 내가 쓴 문장 -> 더 자연스러운 표현
잘한 것: 내가 쓴 영어 문장 하나와 뭘 잘했는지 한 줄
개선 방안: 다음에 같은 상황에서 뭘 다르게 해 볼지 한 줄
내 말:
=끝=
=피드백= 부터 개선 방안: 까지는 줄을 늘리거나 줄이지 마. 라벨은 위 글자 그대로 별표 없이, 날짜는 위 숫자 그대로 옮겨. 채울 게 없으면 없음으로 비워 둬. 네 줄은 서로 다른 문장에서, 뜻이 안 통하는 것부터 골라.
실수종류는 아래 열두 개 중에서만 골라. 새 이름을 만들지 말고 띄어쓰기까지 그대로 옮겨 써: 시제 / 수일치 / 동사 형태 / 관사 / 단복수 / 가산·불가산 / 전치사 / 자동사·타동사 / 어순 / 콩글리시 / 단어 선택 / 빠진 말. 둘 이상에 해당하면 이 목록에서 위에 있는 것을 고르고, 어디에도 안 맞으면 단어 선택으로 써.
내가 한국어로 쓴 말, um이나 I don't know처럼 막혀서 한 말, 잘못 알아들어 이상하게 적힌 말은 고침에 넣지 마.
「내 말:」 아래에는 이번 대화에서 내가 말한 영어 문장만 한 줄에 하나씩, 말한 순서대로 전부 적어. 줄 수 제한이 없는 칸은 여기뿐이야.
이 칸은 고치는 칸이 아니라 옮겨 적는 칸이야. 다듬지도 줄이지도 마. 위에서 네가 고쳐 준 문장도 여기서는 내가 원래 말한 틀린 형태 그대로 적어.
네가 한 말은 한 문장도 넣지 마. 내가 한국어로 한 말과 um 같은 말도 빼.
잘못 알아들어 이상하게 적힌 것 같은 문장은 그대로 적고 줄 끝에 (?) 를 붙여.
문장이 너무 많아 다 못 적겠으면 마지막 줄에 (더 있음) 이라고만 써.
[절대 규칙]
「내 말:」 칸의 문장은 절대 고치지 마. 거기에는 틀린 영어가 틀린 채로 있어야 해.
아직 시작 전이야. "Ready." 한 마디만 쓰고 멈춰. 다른 말은 한 글자도 쓰지 말고 아무것도 묻지 마.
내가 "start"라고 하면 이 문장으로 먼저 말을 걸어: "{{첫대사}}"
<<<끝>>>이 글은 여러분이 읽으라고 있는 게 아닙니다. ChatGPT가 읽으라고 써 두는 글입니다. 일관적이고 안정된 작동을 위해 위와 같이 규칙을 상세히 정해 둡니다.
{{ }} 안은 봇이 매일 새로 채웁니다.
오늘의 주제, 오늘의 상황, 오늘 만날 친구 이름, 오늘 쓸 표현 세 개, 지난주에 제일 많이 틀린 것.
여러분이 손댈 곳은 없습니다. 이 파일은 그냥 두면 됩니다.
② 그다음 — 아침 봇을 만듭니다
이제 진짜 봇입니다. 아래 전체를 복사해서 Codex 채팅창에 붙여넣습니다.
대괄호 `[ ]` 안은 여러분 마음대로 바꾸는 자리입니다. 지금은 그냥 두고 그대로 붙여넣어도 됩니다.
매일 아침 나에게 오늘 할 영어 회화 거리를 텔레그램으로 보내주는 봇을 만들어줘.
- 이 작업의 이름은 [아침영어]로 해줘.
- 텔레그램 봇 토큰과 내 chat ID는 이 폴더의 .env 파일에 넣어 놨어. 그걸 읽어서 써.
- Codex가 매번 대신 실행하는 작업이 아니라, 완성 후에는 Python 프로그램만 실행해도 동작하게 만들어줘. AI가 필요한 부분은 .env의 OPENAI_API_KEY와 OPENAI_MODEL로 OpenAI Responses API를 호출해. .env는 프로그램 파일이 있는 폴더에서 읽고, 키와 토큰을 출력하지 마.
- 호출 횟수와 생성 길이를 제한하고 오류가 나면 무한 재시도하지 마. 같은 날 다시 실행하면 이미 만든 카드를 재사용하고, 새 생성은 내가 요청할 때만 해줘.
- 매일 첫 실행에서 오늘의 주제, 상황, 대화 상대, 목표 표현 3개를 새로 만들어줘.
복습 목적이 아니라면 어제와 같은 걸 보내지 마.
- 주제는 [정답이 없고 의견이 갈리는 것]으로 골라줘.
날씨나 자기소개처럼 단순 사실만 나열하게 되는 주제는 빼 줘.
- 상황은 2~3문장으로 써줘. 내가 지금 어떤 처지인지, 누구를 만나 무슨 이야기를
하는 중인지 등이 들어가야 해.
- 목표 표현은 정확히 3개. 원어민이 실제로 자주 쓰는 자연스러운 표현으로 골라줘.
한국어 뜻은 직역하지 말고, 그 상황에서 한국 사람이 실제로 할 법한 말로 써줘.
이런 느낌이야.
Those little splurges add up, too. → 그렇게 조금씩 한 사치들이 결국 쌓이는 거지.
It's a vicious cycle. → 그건 악순환이야.
Saving feels like a chore. → 저축하는 게 귀찮은 일처럼 느껴지긴 하지.
- 그날 ChatGPT가 먼저 걸 영어 첫 마디도 한 문장 만들어줘.
2문장 이내, 25단어 이내, 물음표 하나로 끝나야 해.
- 내 이름은 [Taehoon], 상대 이름은 매일 다르게 해 줘.
- 이 폴더의 ChatGPT지시문.md 를 읽어서, {{ }} 자리에만 오늘 값을 채워줘.
그 파일의 다른 글자는 한 글자도 바꾸지 마.
- 채운 결과를 텔레그램에 [두 번째 메시지]로 보내줘. 코드블록 하나에 통째로 넣고,
그 메시지에는 다른 글자를 아무것도 넣지 마. 코드블록을 두 개로 쪼개지 마.
- [첫 번째 메시지]는 이렇게 넣어줘.
1) 오늘의 주제와 상황을 한국어로 한 줄씩
2) 목표 표현 3개. 한국어 뜻을 먼저 보이게 쓰고, 영어 문장만 가려줘. 탭을 해야만 보이게
3) 학습법 안내 다섯 줄: 다음 메시지 상자 눌러 복사 → ChatGPT 새 대화에 붙여 넣고 전송
→ Ready. 오면 start 보내고 음성 켜기 → 끝나면 wrap up 보내기
→ 나온 교정을 복사해서 이 봇에게 보내기
4) 막힐 때 쓸 세 마디: Explain that in Korean? (한국어로 설명해 줄래?) / Can you repeat that again? (다시 반복해 줄래?) / I’m confused. (나 좀 헷갈려.)
5) "음성 연습 시간이 없으면 오늘은 그냥 채팅으로만 답을 보내세요." 한 줄
- 점수, 등급, 레벨, 몇 점, 초급/중급/고급 같은 말은 어디에도 쓰지 마.
- 텔레그램에 보낼 때는 parse_mode 를 HTML 로 해줘. 마크다운은 쓰지 마.
글자 중에 & < > 가 있으면 & < > 로 바꿔서 보내줘.
가리는 건 <tg-spoiler> 를 써줘.
- 한 메시지가 4000자를 넘으면 나눠 보내줘. 다만 복사용 대본은 쪼개지 말고, 너무 길면 UTF-8 텍스트 파일로 보내줘.
- 두 메시지 사이에는 1초를 쉬어줘.
- 이 폴더에 복습목록.md 파일이 있으면, 거기서 지난주에 가장 많이 나온 실수의 종류를
하나 골라 {{지난주약점}} 자리에 넣고, 첫 번째 메시지에 "다시 보기"로 한 줄 보여줘.
파일이 없으면 {{지난주약점}}에 아직 기록 없음 이라고 넣고, 실제로 틀린 적이 있는 것처럼 쓰지 마.
- 지금은 예약을 걸지 마. 내가 실행하라고 할 때 한 번 보내지도록 만들어 줘.
예약은 나중에 따로 할 거야.
만들기 전에 꼭 필요한 정보가 빠져 있으면 나에게 하나씩 질문해줘.3.5 Codex가 되묻는 장면
붙여넣고 엔터를 치면 Codex가 작업을 시작합니다. 더 필요한 정보가 있으면 질문합니다.
대략 이런 것들을 묻습니다.
| Codex가 묻는 것 | 이렇게 답하면 됩니다 |
|---|---|
| "주제를 매번 새로 만들까요, 미리 목록을 만들어둘까요?" | 매번 새로 만들어줘 |
| "메시지에 이모지를 넣을까요?" | 제목 줄에만 하나 넣어줘 |
| "상대 이름을 한국 이름으로 할까요, 영어 이름으로 할까요?" | 한국 이름을 로마자로 쓰거나 영어 이름을 써 줘 |
| "실행은 어떻게 할까요?" | 내가 실행해달라고 하면 되게 해줘 |
전부 한 줄로 답해도 됩니다. 잘 모르겠으면 너가 알아서 좋은 쪽으로 해줘 라고 해도 됩니다.
딱 하나만은 그대로 답해 주세요.
"ChatGPT지시문.md 의 내용을 좀 다듬을까요?" 라고 물으면 `아니, 한 글자도 바꾸지 마` 라고 하세요.
그 안의 문장은 하나하나 이유가 있어서 들어갔습니다. 있는 그대로 입력되게 내버려 두시면 됩니다.
3.6 첫 전송 테스트
질문이 끝나면 Codex가 파일을 만듭니다. 중간에 허락 팝업이 몇 번 뜰 수 있습니다.
— 파일을 만들어도 되냐 → 1번(허용)
— 인터넷으로 메시지를 보내도 되냐 → 1번(허용)
만들어졌다고 하면, 이제 채팅창에 이렇게 씁니다.
좋아, 지금 한 번 보내줘.
그리고 폰을 봅니다.
초록과 빨강 읽는 법
화면에 글자가 빠르게 지나갑니다. 전부 읽을 필요 없습니다. 딱 두 가지만 봅니다.
| 보이는 것 | 뜻 | 다음 행동 |
|---|---|---|
| ✅ 초록 체크, 성공, sent, ok:true | 보냈다 | 폰 확인 |
| ❌ 빨간 글씨, error, failed | 못 보냈다 | 이하 “여기서 잘 막힙니다” 부분 참고 |
빨간 글씨가 떴다고 큰 문제가 발생한 게 아닙니다. 그냥 편지가 반송된 것이라 생각하면 됩니다. 반송된 편지는 주소를 고쳐서 다시 보내면 되듯이, 전송이 막혔으면 막힌 곳을 고쳐서 다시 보내면 됩니다. 어렵게 생각하지 마세요.
3.7 지금은 아무 일도 안 하는 한 줄
프롬프트에 이 줄이 있었습니다.
- 이 폴더에 복습목록.md 파일이 있으면, 거기서 지난주에 가장 많이 나온 실수의 종류를
하나 골라 {{지난주약점}} 자리에 넣고, 카드에 "다시 보기"로 한 줄 보여줘.
그 파일이 없으면 아무것도 하지 말고 {{지난주약점}} 자리에 시제 라고만 넣어줘.지금 여러분 폴더에 복습목록.md 는 없습니다. 그래서 이 줄은 지금 아무 일도 하지 않습니다.
방금 온 카드의 '다시 보기'에도 그냥 시제 라고만 적혀 있었을 겁니다. 정상입니다.
Part 5에서 만들 주간 리포트 봇이 복습목록.md 를 만들어냅니다. 그 파일이 생기는 순간, 이 줄이 저절로 살아납니다.
그날부터 아침 메시지의 '다시 보기'가 내가 진짜로 자주 틀린 것으로 바뀝니다.
그리고 ChatGPT가 대화 중에 그 부분을 건드리는 질문을 두 번 던집니다. 왜 묻는지는 말해 주지 않습니다.
지난주에 시제를 자주 틀렸으면, 오늘 대화에서 어제 뭐 했냐는 질문을 두 번 받는 식입니다.
여러분은 이 봇을 다시 열어 고칠 필요가 없습니다. 자리를 미리 비워뒀기 때문입니다.
여기서 잘 막힙니다
실제로 이 세 가지에서 막힙니다. 순서대로 확인하세요.
① 401 Unauthorized 가 나온다
{"ok":false,"error_code":401,"description":"Unauthorized"}원인
봇 토큰이 틀렸습니다. ‘발신자 정보’가 없으니 봇이 아예 없는 것으로 취급됩니다.
확인 순서
1. .env 를 엽니다.
2. 토큰 앞뒤에 공백이나 따옴표가 붙었는지 봅니다. ="8012..." 처럼 따옴표가 있으면 지웁니다.
3. 토큰 중간이 잘렸는지 봅니다. 콜론(:) 앞에 숫자, 뒤에 긴 영문이 있어야 정상입니다.
4. 그래도 안 되면 BotFather 대화방에서 토큰 줄을 다시 복사해 통째로 갈아끼웁니다.
② chat not found 가 나온다
{"ok":false,"error_code":400,"description":"Bad Request: chat not found"}원인
토큰은 맞는데, 보낼 주소를 못 찾았습니다. ‘수신자 정보’가 잘못 입력된 경우입니다.
확인 순서
1. 내 봇 대화방에 들어가 START를 눌렀는지 확인합니다. (가장 흔한 원인)
2. .env 의 chat ID가 숫자만 있는지 봅니다. 따옴표, 쉼표가 붙으면 안 됩니다.
3. 3.2.2를 다시 해서 chat ID를 새로 확인합니다. BotFather의 chat ID를 잘못 가져온 경우가 많습니다.
③ 성공이라는데 폰에 안 온다
원인
보내긴 보냈는데 다른 곳으로 갔습니다.
확인 순서
1. 텔레그램에서 내가 만든 봇 대화방을 직접 열어봅니다. 알림만 안 온 것일 수 있습니다.
2. 폰 설정에서 텔레그램 알림이 꺼져 있는지 봅니다.
3. 봇을 두 개 이상 만들었다면, .env 의 토큰이 지금 보고 있는 그 봇의 것인지 확인합니다.
④ can't parse entities 라는 오류가 난다
{"ok":false,"error_code":400,"description":"Bad Request: can't parse entities"}원인
보내려던 글자 중에 텔레그램이 태그로 착각한 것이 섞였습니다. 대개 “<” 나 “&”이 문제가 된 경우입니다.
해결
채팅창에 그대로 말하면 됩니다.
텔레그램에 보낼 때 & 는 & 로, < 는 < 로, > 는 > 로 바꿔서 보내도록 고쳐줘.
⑤ 텔레그램에서 회색 상자를 눌러도 복사가 안 된다
원인
복사 방식은 폰마다 다를 수 있습니다.
해결
그 메시지를 길게 누르면 '복사'가 뜹니다. 그걸 누릅니다.
두 번째 메시지에는 상자 말고 다른 텍스트 정보는 아무것도 없으니, 이렇게 복사하면 프롬프트만 정확히 복사됩니다.
⑥ ChatGPT가 Ready. 대신 인사를 하거나, 한국어로 답한다
봇도 프롬프트도 멀쩡한데 ChatGPT만 딴소리를 합니다.
원인
여러분 ChatGPT 계정에 예전에 넣어둔 개인 설정이 남아 있어서 그것이 영향을 미치는 경우일 수 있습니다.
"항상 한국어로 답해줘" 같은 것을 한 번 넣어두면, 새 대화마다 그게 먼저 적용됩니다.
확인 순서
1. ChatGPT 앱 → 설정 → 개인 맞춤 설정(맞춤 지침) 을 엽니다.
2. 뭐라도 적혀 있으면 꺼둡니다. 지우지 않아도 됩니다. 껐다 켤 수 있습니다.
3. 새 대화를 열어 다시 붙여 넣습니다.
이건 여러분 잘못이 아닙니다. 예전에 편하려고 넣어둔 설정이 이 워크플로우와 충돌해 발목을 잡은 것뿐입니다.
회화 연습이 끝나면 다시 켜도 됩니다.
그래도 안 될 때 — 만능 문장
혼자 씨름하지 마세요. 오류 글자를 그대로 복사해서 Codex에게 붙여넣고 이렇게 씁니다.
이 오류가 났어. 무슨 뜻이고 뭘 고쳐야 하는지 알려줘. 내가 뭘 확인하면 되는지 순서대로 하나씩 알려줘. [여기에 오류 글자 붙여넣기]
오류 내용을 Codex에 보여 주고 원인과 고칠 방법을 물어보세요. 오류 메시지에 키나 토큰이 섞여 있다면 그 부분은 지웁니다.
완료한 항목에 체크하세요
여섯 개가 전부 되면 다음 장으로 갑니다.
마지막 항목이 제일 중요합니다. Ready. 대신 인사말이나 설명이 길게 오면 기존 저장해 둔 개인 설정과 충돌이 일어나고 있다는 뜻입니다. 여기서 그냥 넘어가면 매일 아침 대화가 산으로 갑니다.
하나라도 안 되면 다음 장으로 가지 마세요. Part 4는 이 봇에 기반하고 있어, 여기가 안 되면 동일 문제에 봉착하게 됩니다.
갈아 끼우는 자리
'내 봇'을 커스터마이징 하려면 꺽쇠괄호 부분을 바꿔 주면 됩니다. 아래 네 자리는 Part 4, Part 5에서도 똑같이 나옵니다.
채팅창에 바꿔달라고 말하면 됩니다.
① 시간
이 장에서는 아직 예약을 걸지 않았습니다. 지금은 "내가 실행하면" 보냅니다.
이 자리는 Part 6에서 채웁니다. 그때 이렇게 말하게 됩니다.
아침영어를 매일 아침 8시에 저절로 실행되게 해줘.
② 주제·소재
프롬프트의 주제는 [정답이 없어서 의견이 갈리는 것] 자리입니다.
아침영어의 주제를 [면접에서 나올 만한 질문]으로 바꿔줘.
바꿔볼 만한 것: 요즘 뉴스에 나온 일 · 직장에서 겪는 곤란한 상황 · 여행 가서 벌어지는 일 · 내가 좋아하는 것에 대해 남을 설득하기
주제를 바꿀 때 한 가지만 지키세요. 정답이 하나뿐인 주제는 세 마디면 끝납니다.
"오늘 날씨 어때?"는 대화가 안 됩니다. "돈은 왜 안 모일까?"는 십 분도 갑니다.
이 장을 마치며
방금 만든 건 말을 거는 봇입니다. 아직 듣지는 못합니다.
내일 아침 메시지가 와도, 여러분이 읽었는지 봇은 모릅니다.
다음 장에서 듣는 귀를 답니다. 그리고 그때부터 봇은 여러분의 실수를 기억하기 시작합니다.
PART 4
모듈 2 · Check — 내가 쓴 영어를 교정받기
여기부터는 이미 아는 순서입니다. Part 3과 블록이 똑같습니다. 불편 파악 → 완성 화면 → 복붙 프롬프트 → 줄 단위 해설 → 되묻기 → 첫 실행해 보기 → 막히는 곳 → 체크포인트.
토큰 받기와 키 넣기는 다시 하지 않습니다. Part 3에서 한 번 했으면 다시 반복할 필요 없습니다.
걸리는 시간 20~30분 · 결과 내가 쓴 영어 문장이 그 자리에서 고쳐져 돌아옵니다.
4.0 이 장이 끝나면 폴더에 남는 것
📁 myenglishbot/ ├── .env ← 그대로. 손대지 않습니다 ├── (아침에 보내는 파일) ← 그대로. 손대지 않습니다 ├── (저녁에 확인하는 파일) ← 🆕 이 장에서 만듭니다 ├── 실수장부.md ← 🆕 봇이 저절로 만듭니다. 이 장의 진짜 결과물
아침 봇은 건드리지 않습니다. 새 파일을 하나 더 놓아 별도의 봇을 만듭니다.
한 봇에 한 가지 일만 시키는 것이 좋습니다.
왜 아침 봇에 기능을 더 넣지 않나? "이왕이면 하나로 합치는 게 깔끔하지 않나" 싶습니다. 반대입니다. 합치면 하나가 고장 났을 때 둘 다 멈춥니다. 저녁 교정이 꼬여도 내일 아침 메시지는 와야 합니다. 그리고 나눠 두면 나중에 저녁 것만 뜯어고칠 수 있습니다.
4.1 이 모듈이 해결해 주는 것
이 모듈에서 해결하는 것은 두 가지입니다.
하나. 아무도 안 물어보면 안 하게 됩니다.
아침에 표현이 와도 읽고 끝납니다. 읽는 건 공부가 아닙니다. 직접 써 봐야 공부입니다.
메시지만 쌓이고 내가 제대로 공부를 했는지 "보낸 표현 써 봤어?" 이렇게 묻지 않는다면, 안 하게 됩니다.
둘. 틀린 걸 모르면 틀린 영어가 오히려 더 고착화됩니다.
혼자 영어로 문장을 만들면 맞는지 틀린지 알 방법이 없습니다.
확인을 못 하니 틀린 채로 반복하고, 반복하면 그대로 굳어버립니다. 이렇게 되면 영어 교정이 더 어려워집니다.
따라서 이 장의 봇은 두 가지를 함께 합니다. 오늘 영어를 써 봤는지 묻고, 보낸 문장에서 틀린 곳을 고쳐 줍니다.
완성 화면 먼저
이런 대화가 오갑니다.
🌙 오늘 그 표현 써봤어? 한 문장만 만들어서 보내줘. 나: I take a rain check on dinner yesterday. ✏️ 고칠 곳 take → took (yesterday니까 과거형) "I took a rain check on dinner yesterday." 💬 이렇게도 말해요 "I had to pass on dinner last night." (rain check는 '다음에 하자'는 약속이 남아 있을 때 더 자연스러워요) 👍 잘한 것 on을 정확히 썼어요. take a rain check on ~ 이 통째로 붙어 다니는 걸 알고 있네요.
4.2 봇이 답장을 받는 법
이 장의 진짜 관문입니다.
Part 3의 봇은 말만 했습니다. 말하기는 쉽습니다. 주소를 알고 보내면 끝입니다.
듣기는 다릅니다. 봇은 내가 언제 답장할지 모릅니다. 그래서 가서 확인해야 합니다.
그런데 이 방법을 여러분은 이미 써봤습니다.
3.2.2에서 썼던 메시지 확인 기능
Part 3에서 Codex에 chat ID를 확인해 달라고 했습니다.
그 때 사용한 getUpdates는 봇에게 도착한 메시지를 가져오는 텔레그램 기능입니다.
그 결과에서 대화방 번호인 chat ID만 골라 .env에 넣었습니다.
저녁체크는 같은 기능으로 새 메시지를 가져와서, 이번에는 메시지의 영어 문장을 읽습니다.
즉 받는 법은 Part 3에서 이미 배웠습니다.
저녁 봇이 하는 일은 새 메시지를 가져와 OpenAI API로 교정하고, 결과를 텔레그램으로 보내는 것입니다.
답장을 보냈는데 바로 교정이 안 오면요?
이 교재는 원래 수업처럼 저녁 9시에 모아서 교정합니다. 지금은 Codex에 실행을 요청하면 그때 읽습니다. 보낼 때마다 바로 교정받고 싶다면 Part 6에서 별도로 바꿀 수 있습니다.
읽고 나면 표시를 남긴다
여기에 함정이 하나 있습니다. 읽은 메시지를 읽었다고 표시하지 않으면, 다음에도 또 읽습니다.
어제 답장을 오늘 또 교정하고, 내일도 또 교정합니다.
그래서 프롬프트에 이 한 줄이 들어갑니다.
한 번 읽은 답장을 다음 실행에서 또 읽지 않게 처리해줘.
원리를 알 필요는 없습니다. 문제를 알고 그 문제를 말로 넘기면 됩니다. 처리는 Codex가 합니다.
4.3 교정의 형태 3종
봇이 어떻게 고쳐 줄지를 우리가 정합니다. 안 정하면 AI는 문법 지적만 길게 늘어놓습니다.
| # | 형태 | 왜 필요한가 |
|---|---|---|
| ① | 틀린 곳 짚기 | 뭐가 틀렸는지 모르면 못 고칩니다. 짧고 정확하게 틀린 곳 짚어주기 |
| ② | 대안 표현 제시 | 원어민이 실제로 어떻게 쓰는지를 확인합니다. 여기서 실력이 늡니다 |
| ③ | 잘한 것 한 줄 | 이게 없으면 매일 지적만 받습니다. 그러면 부정적 감정과 영어 학습이 연결되면서 조작적 조건화(Operant Conditioning)가 발생해 더 이상 학습을 하지 않게 됩니다 |
②가 핵심입니다. 틀린 것만 고쳐 주는 봇은 틀리지 않는 사람을 만듭니다. 대안을 주는 봇은 더 잘 말하는 사람을 만듭니다.
③은 기분 맞춰주기가 아닙니다. 계속 내가 학습을 이어 나가게 만드는 장치입니다. 영어 학습과 불쾌감이 서로 결부되어 점점 학습을 피하게 되는 현상을 예방하기 위한 조치입니다.
③을 "칭찬"이 아니라 "잘한 것 짚기"로 시킵니다. "잘했어요!"는 아무 정보가 없습니다. "on을 정확히 썼어요" 는 잘한 것이 뭔지 알려줍니다. 프롬프트에 잘한 것을 한 줄 칭찬해줘 라고 쓰되, 결과가 밋밋하면 구체적으로 뭘 잘했는지 짚어줘 를 덧붙이면 됩니다.
4.4 복붙 프롬프트 전문
아래 전체를 복사해서 Codex 채팅창에 붙여넣습니다.
Part 3과 마찬가지로 대괄호 `[ ]` 안이 여러분이 바꾸는 자리입니다.
아까 만든 아침영어 봇에, 저녁에 확인하고 고쳐 주는 기능을 하나 더 만들어줘.
파일은 따로 만들어. 아침에 보내는 건 절대 건드리지 마.
- 이 작업의 이름은 [저녁체크]로 해줘.
- 텔레그램 토큰과 chat ID는 아침영어와 같은 .env 파일을 읽어서 써.
- Codex가 매번 대신 실행하는 작업이 아니라, 완성 후에는 Python 프로그램만 실행해도 동작하게 만들어줘. AI가 필요한 부분은 .env의 OPENAI_API_KEY와 OPENAI_MODEL로 OpenAI Responses API를 호출해. .env는 프로그램 파일이 있는 폴더에서 읽고, 키와 토큰을 출력하지 마.
- .env의 TELEGRAM_CHAT_ID와 일치하는 개인 대화방의 메시지만 처리해. 다른 사람의 메시지는 무시해.
- 영어 문장을 직접 보내면 API로 교정해. =피드백=부터 =끝=까지 붙여넣으면 원문과 교정문을 구분해 읽고 기록해. 이미 고친 문장을 내가 틀린 원문으로 취급하지 마.
- 실수장부의 각 항목에 텔레그램 메시지 ID도 남겨. 잘 쓴 문장도 실수 종류를 없음으로 기록해. 주간정리에서 같은 답장을 중복해서 세지 않도록 해줘.
- 실수 종류는 ChatGPT지시문.md의 열두 가지 이름을 그대로 써. 새로운 분류 이름을 만들지 마.
- 401·잔액 부족·권한 오류는 반복 호출하지 말고 원인을 알려줘. 수신 위치는 처리에 성공한 뒤 저장해. 오류가 나도 다음 메시지를 잃지 않게 해줘.
- 실행하면 이렇게 동작해줘.
1) 내가 봇에게 보낸 새 메시지가 있는지 확인해.
2) 있으면 그 문장을 이렇게 고쳐서 답장해줘.
- 틀린 곳을 짚어주고 (문법, 단어, 어색한 표현)
- 더 자연스러운 대안 표현을 하나 알려주고
- 잘한 것을 한 줄 짚어줘
3) 없으면 "오늘 그 표현 써봤어? 한 문장만 만들어서 보내줘" 라고
한 번만 물어봐. 두 번 이상 재촉하지 마.
- 점수나 등급은 절대 매기지 마. 몇 점, 정답, 오답 같은 말도 쓰지 마.
- 말투는 [친한 친구가 알려주듯 편하게]. 혼내는 말투는 쓰지 마.
- 교정한 내용은 이 폴더의 실수장부.md 파일에 남겨줘.
- 파일이 없으면 새로 만들고, 있으면 맨 아래에 이어서 붙여줘.
기존 내용은 절대 지우지 마.
- 한 줄에 [날짜 / 내가 쓴 문장 / 고친 문장 / 실수의 종류]를 남겨줘.
- 한 번 읽은 답장을 다음 실행에서 또 읽지 않게 처리해줘.
- 지금은 예약하지 마. 내가 실행하라고 할 때만 한 번 돌게 해줘.
만들기 전에 꼭 필요한 정보가 빠져 있으면 나에게 하나씩 질문해줘.줄 단위 해설
| 줄 | 이 줄이 하는 일 | 바꿔도 되나 |
|---|---|---|
| 파일은 따로 만들어. 아침에 보내는 건 절대 건드리지 마 | 가장 중요한 안전장치. 잘 돌던 아침 봇이 망가지는 걸 막음 | 유지 |
| 이 작업의 이름은 [저녁체크] | 나중에 "저녁체크 실행해줘"로 부를 이름 | ✅ 자유 |
| 아침영어와 같은 .env 파일을 읽어서 써 | 토큰을 다시 넣지 않는다. 파일 하나를 둘이 나눠 씀 | 유지 |
| 1) 새 메시지가 있는지 확인해 | 4.3의 '받기'. 이 한 줄이 이 장의 관문 | 유지 |
| 2) ... 틀린 곳 / 대안 표현 / 잘한 것 | 교정 3종. 하나라도 빠지면 봇의 성격이 바뀜 | 형식만 조정 |
| 3) 없으면 ... 한 번만 물어봐 | 재촉 금지. 매일 두 번 조르는 봇은 짜증을 유발해 무시당하게 됨. | 유지 |
| 점수나 등급은 절대 매기지 마 | 빼면 AI가 채점하는 식으로 피드백 가능 | 유지 |
| 말투는 [친한 친구가...] | 말투. 교정은 말투에 따라 잔소리도 되고 도움도 됨 | ✅ 자유 |
| 실수장부.md 파일에 남겨줘 | 📁 이 장의 진짜 결과물. 4.7에서 열어봄 | 유지 |
| 있으면 맨 아래에 이어서 붙여줘. 기존 내용은 절대 지우지 마 | 🌱 없으면 어제 기록이 날아갑니다. 아래 ⚠️③ | 유지 |
| 한 줄에 [날짜 / 내가 쓴 문장 / 고친 문장 / 실수의 종류] | Part 5가 읽을 형식. '실수의 종류'가 핵심 | 유지 |
| 한 번 읽은 답장을 또 읽지 않게 | 4.2의 함정 처리 | 유지 |
| 꼭 필요한 정보가 빠져 있으면 하나씩 질문해줘 | Part 3과 같은 장치 | 유지 |
4.5 Codex가 되묻는 장면
이번엔 이런 것들을 묻습니다. Part 3보다 질문이 조금 더 구체적입니다.
| Codex가 묻는 것 | 이렇게 답하면 됩니다 |
|---|---|
| "답장이 여러 개 와 있으면 전부 교정할까요?" | 전부 해 줘 |
| "영어가 아닌 답장(한국어, 이모지)이 오면 어떻게 할까요?" | 가볍게 넘어가고 영어로 한 문장 보내 달라고 해줘 |
| "교정 메시지도 실수장부에 다 남길까요?" | 잘 쓴 문장도 답장 횟수에 포함되게 남겨줘. 실수 종류는 없음으로 적어줘 |
| "실수의 종류는 어떤 것들로 나눌까요?" | ChatGPT지시문.md에 있는 열두 가지 분류 이름을 그대로 써줘 |
마지막 답이 중요합니다. "매번 같은 이름을 써줘" — 어제는 '시제 오류', 오늘은 '동사 시제'로 적히면 Part 5가 셀 수 없습니다.
모르겠으면 `너가 알아서 좋은 쪽으로 해줘` 로 답해도 됩니다. 다만 위 네 개 중 마지막 하나만은 그대로 답해 주세요. 다음 장이 여기에 걸려 있습니다.
4.6 첫 실행 — 지금 답장을 보내고 바로 받아보기
Part 3과 달리 이 장은 먼저 답장을 보내 둬야 확인할 수 있습니다. 순서가 있습니다.
① 폰에서 봇에게 영어 문장을 하나 보냅니다.
일부러 틀린 문장을 보내세요. 맞으면 볼 게 없습니다.
I take a rain check on dinner yesterday.
② Codex 채팅창에 이렇게 씁니다.
좋아, 지금 한 번 실행해줘.
③ 폰을 봅니다.
교정 세 덩어리(틀린 곳 / 대안 표현 / 잘한 것)가 다 왔으면 성공입니다.
답장을 안 보내고 실행하면?
"오늘 그 표현 써봤어?" 라고 묻는 메시지만 옵니다. 이것도 정상 동작입니다.
둘 다 확인해 보는 게 좋습니다. 답장 없이 한 번, 답장 보내고 한 번.
4.7 기억 파일이 생기는 순간
이제 VS Code 왼쪽 파일 목록을 봅니다. 없던 파일이 하나 생겨 있습니다.
열어봅니다. 이런 게 들어 있습니다.
## 2026-08-17 - 내가 쓴 문장: I take a rain check on dinner yesterday. - 고친 문장: I took a rain check on dinner yesterday. - 실수의 종류: 시제 오류
방금 여러분의 실수 장부가 생겼습니다.
Part 2에서 만든 표현정리.md는 표현과 예문을 모아 둔 파일이었습니다.
이번 파일은 다릅니다. 여러분 자신의 기록입니다.
이 봇에서 가장 중요한 파일입니다. 교정은 그 자리에서 끝나면 사라집니다. 오늘 고쳐 받아도 다음 주면 잊습니다. 파일에 남으면 사라지지 않습니다. 그리고 세어볼 수 있습니다. 내가 시제를 몇 번 틀렸는지, 관사를 몇 번 빠뜨렸는지. 머리로는 절대 못 세는 것을 파일은 셉니다.
Part 5가 읽을 파일
이 파일은 다음 장의 재료입니다.
Part 5의 주간 리포트 봇은 아무것도 새로 조사하지 않습니다. 이 파일만 읽습니다.
그리고 "이번 주에 시제를 네 번 틀렸다"를 찾아내 다음 주 복습 목록을 만듭니다.
그 목록이 복습목록.md가 되고, Part 3.7에 심어 둔 한 줄이 그걸 아침 메시지에 섞습니다.
여기서 잘 막힙니다
받기와 파일 쓰기에서 많은 사람들이 막히곤 합니다.
① 답장을 보냈는데 봇이 못 읽는다
원인
메시지는 갔는데 봇이 "새 메시지 없음"으로 판단했습니다.
확인 순서
1. 다른 봇에게 보냈는지 봅니다. 봇을 여러 개 만들었다면 흔한 실수입니다.
2. 실행할 때 쓰는 .env의 chat ID가 그 대화방 번호와 같은지 확인합니다. 키와 토큰은 화면에 출력하지 않도록 요청하세요.
3. 저녁체크를 실행하는 동안 chat ID 확인 프로그램이나 다른 메시지 수신 프로그램을 함께 실행하지 마세요.
4. 그래도 안 되면 폰에서 새 문장을 하나 더 보내고 다시 실행합니다.
② 같은 답장을 계속 다시 교정한다
원인
4.3에서 말한 함정입니다. 읽었다는 표시가 안 남았습니다.
해결
채팅창에 그대로 말하면 됩니다.
저녁체크가 어제 답장을 오늘 또 교정했어. 한 번 읽은 메시지는 다시 읽지 않게 고쳐줘.
③ 실수장부.md에 오늘 것만 있고 어제 것이 없다
가장 조용하고 가장 위험한 문제입니다. 오류가 안 나기 때문에 몇 주 뒤에야 발견합니다.
원인
봇이 파일에 이어 붙이지 않고 통째로 새로 썼습니다. 어제 기록이 지워진 것입니다.
확인
이틀 이상 답장을 보낸 뒤 파일을 열어봅니다. 날짜가 하나뿐이면 이 문제입니다.
해결:
실수장부.md에 새 기록을 쓸 때 기존 내용을 지우지 말고 맨 아래에 이어서 붙이도록 고쳐줘.
이 문제를 넘기면 Part 5가 통째로 무너집니다.
주간 리포트는 일주일치 기록을 읽어서 씁니다. 매일 덮어써지면 항상 하루치만 남습니다.
Part 5로 넘어가기 전에 이것만은 꼭 확인하세요.
그래도 안 될 때 — 만능 문장
Part 3과 같습니다. 오류 글자를 그대로 복사해서 붙여넣고 묻습니다.
이 오류가 났어. 무슨 뜻이고 뭘 고쳐야 하는지 알려줘. 내가 뭘 확인하면 되는지 순서대로 하나씩 알려줘. [여기에 오류 글자 붙여넣기]
완료한 항목에 체크하세요
다섯 개가 전부 되면 다음 장으로 갑니다.
마지막 항목이 제일 중요합니다. ③ 문제를 여기서 잡지 못하면 Part 5에서 빈 보고서를 받습니다.
이 장을 마치며
이제 봇은 말하고, 듣고, 고쳐 줍니다. 그리고 기억합니다.
하지만 아직 그 기억을 쓰지는 못합니다. 실수장부.md는 쌓이기만 할 뿐, 아무도 읽지 않습니다.
일주일쯤 지나면 파일은 길어지는데, 정작 내가 뭘 자주 틀리는지는 여전히 모릅니다.
다음 장에서 그 파일을 읽는 봇을 만듭니다.
PART 5
모듈 3 · Review — 한 주 리뷰 받기
마지막 봇입니다. 이걸 만들면 세 봇이 학습 사이클을 한 바퀴 돌 수 있게 됩니다.
걸리는 시간 25~35분 · 결과 내 한 주가 한 장으로 보이고, 다음 주 아침 메시지가 달라집니다.
5.0 이 장이 끝나면 폴더에 남는 것
📁 myenglishbot/ ├── .env ├── (아침에 보내는 파일) ├── (저녁에 확인하는 파일) ├── (주말에 정리하는 파일) ← 🆕 이 장에서 만듭니다 ├── 실수장부.md ← Part 4가 씁니다. 이 장은 읽기만 합니다 ├── 복습목록.md ← 🆕 이 장이 만듭니다. 아침 봇이 읽어 갑니다
이 장의 봇은 아무것도 새로 조사하지 않습니다. 이미 있는 실수장부.md를 읽을 뿐입니다.
읽어서 두 개를 내놓습니다. 주간 보고서(사람이 읽는 것)와 복습목록.md(아침 봇이 읽는 것).
5.1 이 모듈이 해결해 주는 것
이 장에서 제작할 봇은 두 가지 역할을 합니다.
1. 되짚는다 — 이번 주에 뭘 했고 뭘 반복해서 틀렸는지 한 장으로 보여줍니다
2. 되돌린다 — 자주 틀린 것을 다음 주 학습 내용에 다시 올려 복습하게 합니다
2번이 진짜입니다. 보고서만 쓰고 끝나면 그냥 성적표입니다. 다시 보게 해야 실력 향상이 됩니다.
완성 화면 먼저
보고서는 이렇게 옵니다.
📊 이번 주 정리 (8/11 ~ 8/17) 이번 주 답장 5번. 지난주보다 2번 늘었어요. 🔁 반복해서 걸린 것 1. 시제 (4번) — 과거 이야기인데 현재형으로 쓰는 패턴 2. 관사 (2번) — a / the 빠뜨림 ✏️ 다음 주 한 가지 시제 하나만 신경 써 봐요. 문장 쓰기 전에 "이거 언제 일이지?"만 한 번 물어보면 대부분 잡힙니다. 다음 주 아침 메시지에 이번 주 틀린 것 3개를 섞어 보낼게요.
마지막 줄을 보세요. 다음 주로 실수한 것들을 넘기겠다는 안내를 하고 있습니다. 이게 이 봇의 핵심입니다.
5.2 실수 보고서에 담을 것 세 가지
보고서가 길면 안 읽게 됩니다. 세 덩어리로 고정합니다.
| # | 담을 것 | 왜 |
|---|---|---|
| ① | 이번 주 답장 횟수 | "5번 답장했다" — 숫자 하나면 충분. 잘했는지 못했는지는 안 따집니다 |
| ② | 반복해서 걸린 실수 패턴 | 한 번 틀린 건 실수, 세 번 틀린 건 습관입니다. 보고서가 진짜 해야 할 일이 이걸 찾는 것 |
| ③ | 다음 주 한 가지 | 세 개 주면 하나도 안 합니다. 딱 하나만 |
②가 사람보다 AI가 더 잘하는 일입니다. AI가 파일을 뒤져 실수를 직접 카운트하고 분석합니다. Part 4에서 실수의 종류를 가급적 매번 같은 이름으로 적게 한 이유가 여기서 드러납니다.
③에서 점수를 매기고 싶어집니다. 수량화보다는 개선에 주목해 보세요. "이번 주 달성률 71%" 같은 걸 넣으면 학습이 아니라 시험처럼 느껴지게 됩니다. 숫자는 ①의 횟수 하나면 충분합니다. 그것도 평가가 아니라 사실로만 씁니다.
5.3 자주 틀린 것을 다음 주로 되돌린다
보고서를 쓰면서 봇은 파일을 하나 더 만듭니다. `복습목록.md` 입니다.
# 다음 주 복습 목록 - I took a rain check on dinner yesterday. (시제) - She has been working here since 2020. (현재완료) - I'm looking forward to seeing you. (전치사 + -ing)
이게 다입니다. 세 줄짜리 파일입니다.
그런데 이 파일이 생기는 순간, Part 3의 아침 봇이 달라집니다.
Part 3.7에서 아침 봇에 이런 줄을 심어 뒀습니다.
- 이 폴더에 복습목록.md 파일이 있으면, 거기 있는 표현 중 하나를 골라 오늘의 표현 아래에 "다시 보기"로 같이 붙여줘. 그 파일이 없으면 아무것도 하지 말고 그냥 오늘의 표현만 보내.
5.4 간격은 Codex에게 맡깁니다
"그럼 며칠 뒤에 다시 보여줘야 하나? 3일? 7일? 계산식이 있나?"
그 계산을 우리가 하지 않습니다. 프롬프트에 이 한 줄이면 됩니다.
자주 틀린 것일수록 자주, 오래 안 틀린 것은 뜸하게 넣어줘.
간격을 며칠로 할지, 몇 번 반복할지는 Codex가 정합니다.
5.5 ⏳ 오늘 결과를 보려면 — 지난 7일치를 먼저 넣습니다
이 장에는 다른 두 장에 없는 문제가 하나 있습니다.
주간 보고서는 일주일치 기록이 있어야 나옵니다. 그런데 여러분은 어제 Part 4를 끝냈습니다.
실수장부.md에 한두 줄밖에 없습니다. 지금 실행하면 "기록이 부족합니다" 같은 게 옵니다.
일주일을 기다렸다가 이 장을 이어 나가는 대신,
가짜 기록을 먼저 넣고 돌려봅니다
Codex 채팅창에 이렇게 씁니다.
실수장부.md에 지난 7일치 연습용 기록을 만들어 넣어줘. - 기존에 있던 내 진짜 기록은 지우지 말고 위에 그대로 둬. - 연습용은 그 아래에 붙이고, 맨 위에 "여기부터 연습용" 이라고 표시해줘. - 형식은 기존 기록과 똑같이 해줘. - 시제 실수를 4번, 관사 실수를 2번, 나머지는 다양하게 섞어줘. - 연습용 기록마다 별도 표시와 가상 메시지 ID를 붙여. 그 뒤에 들어오는 진짜 답장과 섞이지 않게 해줘.
시제 4번, 관사 2번을 일부러 시킨 이유가 있습니다. 보고서의 ②(반복 패턴)가 제대로 작동하는지 보려면 반복이 있어야 합니다. 골고루 하나씩이면 패턴이 없어서 확인이 안 됩니다.
연습용 기록은 실제 학습 기록과 구분해 둡니다.
연습이 끝나면 Codex에 “연습용으로 표시된 기록만 먼저 보여줘. 내가 확인하면 그 부분만 지워줘”라고 요청합니다. 나중에 쌓인 진짜 기록까지 지우면 안 됩니다.
주간정리를 테스트할 때만 연습용 기록을 포함하고, 매주 자동 실행할 때는 제외하게 만듭니다.
5.6 복붙 프롬프트 전문
주말에 한 주를 정리해 주는 봇을 하나 더 만들어줘. 파일은 따로 만들어. 아침 봇과 저녁 봇은 절대 건드리지 마. - 이 작업의 이름은 [주간정리]로 해줘. - 텔레그램 토큰과 chat ID는 같은 .env 파일을 읽어서 써. - Codex가 매번 대신 실행하는 작업이 아니라, 완성 후에는 Python 프로그램만 실행해도 동작하게 만들어줘. AI가 필요한 부분은 .env의 OPENAI_API_KEY와 OPENAI_MODEL로 OpenAI Responses API를 호출해. .env는 프로그램 파일이 있는 폴더에서 읽고, 키와 토큰을 출력하지 마. - 답장 수와 실수별 횟수는 프로그램으로 먼저 세고, AI는 그 결과와 실제 기록만 읽어 설명하게 해. 답장 수는 메시지 ID로 중복을 빼고, 실수 없음은 실수 횟수에서 제외해. - 연습용으로 표시된 기록은 내가 테스트를 요청할 때만 포함해. 자동 실행에서는 제외해. 기록이 없는 날이나 지난주 자료가 없으면 숫자나 비교를 지어내지 마. - 이 폴더의 실수장부.md를 읽어서, 최근 7일치를 정리해줘. 새로 조사하지 말고 그 파일에 있는 것만 써. - 정리한 내용을 텔레그램으로 보내줘. 내용은 이 세 가지만. 1) 이번 주에 답장을 몇 번 했는지 2) 반복해서 걸린 실수를 많은 순서로 [3개]까지, 각각 몇 번 틀렸는지 함께 3) 다음 주에 신경 쓸 것 딱 [한 가지] - 점수나 달성률은 넣지 마. 잘했다 못했다 평가하지 마. - 말투는 [담담하게, 옆에서 짚어주듯]. 길게 쓰지 말고 폰에서 한 화면에 들어오게. - 그리고 다음 주에 다시 볼 표현을 골라서 이 폴더의 복습목록.md 파일로 저장해줘. - 자주 틀린 것일수록 자주, 오래 안 틀린 것은 뜸하게 넣어줘. - 한 줄에 하나씩, 고친 문장과 실수의 종류를 같이 적어줘. - 이 파일은 매주 새로 갈아끼워줘. 지난주 목록은 남기지 마. - 지금은 예약하지 마. 내가 실행하라고 할 때만 한 번 돌게 해줘. 만들기 전에 꼭 필요한 정보가 빠져 있으면 나에게 하나씩 질문해줘.
줄 단위 해설
| 줄 | 이 줄이 하는 일 | 바꿔도 되나 |
|---|---|---|
| 아침 봇과 저녁 봇은 절대 건드리지 마 | 세 번째 안전장치. 이제 지킬 게 두 개 | 유지 |
| 실수장부.md를 읽어서 | 📁 Part 4의 답장·교정 기록을 읽어 횟수를 세고, API로 설명을 만듦 | 유지 |
| 새로 조사하지 말고 그 파일에 있는 것만 써 | 없으면 AI가 일반적인 영어 학습 조언을 지어냄. 내 기록이 아니게 됨 | 유지 |
| 1) 몇 번 했는지 | 보고서 ① 답장 횟수 | ✅ 자유 |
| 2) 반복해서 걸린 실수를 많은 순서로 [3개] | 보고서 ② 이 봇이 진짜 하는 일 | 개수만 조정 |
| 3) 다음 주에 신경 쓸 것 딱 [한 가지] | 보고서 ③ 개수를 늘리면 하나도 안 하게 됨 | 개수만 조정 |
| 점수나 달성률은 넣지 마 | Part 4에서 그은 선을 여기서도 유지 | 유지 |
| 폰에서 한 화면에 들어오게 | 길면 안 읽습니다. 분량 제한을 말로 검 | ✅ 자유 |
| 복습목록.md 파일로 저장해줘 | 🔁 한 바퀴를 잇는 줄. Part 3이 읽어 갈 파일 | 유지 |
| 자주 틀린 것일수록 자주, 오래 안 틀린 것은 뜸하게 | 5.4의 그 한 줄. 알고리즘 대신 이 문장 | 유지 |
| 매주 새로 갈아끼워줘. 지난주 목록은 남기지 마 | 없으면 목록이 계속 쌓여 옛날 것만 나옴. 아래 ⚠️③ | 유지 |
`실수장부.md`는 이어 붙이고, `복습목록.md`는 갈아끼웁니다. 반대로 하면 안 됩니다. 기록은 쌓여야 세어볼 수 있고, 할 일 목록은 갈아끼워야 최신입니다. 이 장에서 헷갈리는 건 이거 하나뿐입니다. 두 파일은 성격이 다르니 프롬프트에서도 다르게 시켜야 합니다.
5.7 Codex가 물을 수 있는 질문
| Codex가 묻는 것 | 이렇게 답하면 됩니다 |
|---|---|
| "7일은 오늘부터 거꾸로인가요, 월~일 기준인가요?" | 오늘부터 거꾸로 7일로 해줘 |
| "복습목록에 몇 개를 넣을까요?" | 3개면 충분해 |
| "실수장부에 기록이 없는 주는 어떻게 할까요?" | 이번 주는 기록이 없다고 한 줄만 보내줘 |
| "보고서도 파일로 저장할까요?" | 텔레그램으로만 보내줘. 파일은 복습목록만 만들어줘 |
마지막 질문에 주의하세요. 보고서까지 파일로 쌓기 시작하면 폴더가 금방 지저분해집니다.
보고서는 읽고 지나가는 것, 복습목록은 다음 봇이 읽는 것, 성격이 다릅니다.
5.8 첫 실행
좋아, 지금 한 번 실행해줘.
폰에 보고서가 왔고, VS Code 파일 목록에 복습목록.md가 생겼으면 성공입니다.
그런데 첫 보고서는 십중팔구 밋밋합니다.
5.9 이 장에만 있는 것 — 샘플을 넣어 결과를 끌어올리기
첫 보고서를 열어보면 대충 이렇습니다.
이번 주 정리 답장 7회. 실수 유형: 시제 4회, 관사 2회, 전치사 1회. 다음 주에는 시제에 유의하세요.
틀린 건 없습니다. 그런데 다시 읽고 싶지 않습니다.
숫자만 나열돼 있고, 왜 그런지도 없고, 무엇보다 나에게 하는 말 같지가 않습니다.
프롬프트를 더 정교하게 쓰면 될까요? 그것보다 훨씬 빠른 방법이 있습니다.
원하는 모양을 그냥 보여주는 것입니다.
보고서 모양을 이렇게 바꿔줘. 아래가 내가 원하는 예시야. 이 형식과 말투를 따라 해줘: 📊 이번 주 정리 (8/11 ~ 8/17) 이번 주 답장 5번. 지난주보다 2번 늘었어요. 🔁 반복해서 걸린 것 1. 시제 (4번) — 과거 이야기인데 현재형으로 쓰는 패턴 2. 관사 (2번) — a / the 빠뜨림 ✏️ 다음 주 한 가지 시제 하나만 신경 써 봐요. 문장 쓰기 전에 "이거 언제 일이지?"만 한 번 물어보면 대부분 잡힙니다.
그리고 다시 실행합니다.
차이가 큽니다. 특히 시제 (4번) — 과거 이야기인데 현재형으로 쓰는 패턴 처럼 숫자 뒤에 설명이 붙는 것은 프롬프트로 지시하기 까다로운데, 예시 한 번이면 그대로 따라 합니다.
이게 '완성 후 개선' 사이클입니다. 처음부터 완벽한 프롬프트를 쓰려고 하지 마세요. 일단 돌리고, 결과를 보고, 원하는 모양을 보여주고, 다시 돌립니다. 앞으로 봇을 고칠 때 쓸 방법은 대부분 이것입니다.
5.10 세 봇이 한 바퀴 도는 순간
이제 마지막 확인입니다.
Codex 채팅창에 이렇게 씁니다.
아침영어를 지금 한 번 실행해줘.
Part 3에서 만든 그 봇입니다. 이 장에서 한 번도 건드리지 않았습니다.
폰을 봅니다.
☀️ 오늘의 표현 Let's play it by ear. → 상황 봐서 정하자 "We don't have a plan yet. Let's play it by ear." "아직 계획이 없어. 상황 봐서 정하자." 🔁 다시 보기 I took a rain check on dinner yesterday. (시제) 오늘 이 표현 써봤어?
'다시 보기'가 붙었습니다.
Part 5의 봇이 복습목록.md를 만들었고 Part 3에서 심어 둔 한 줄이 그 파일을 발견하고 저절로 작동한 결과입니다.
이제 세 봇이 하나로 돌아갑니다. 아침: 표현을 보낸다 (+ 지난주 틀린 것) ↓ 저녁: 답장을 고쳐 주고 실수를 적는다 ↓ 주말: 실수를 세어 다음 주 복습 목록을 만든다 ↓ 다시 아침으로 봇들이 각자 파일 한 장을 읽고 규칙에 따라 글을 써서 보냅니다.
여기서 잘 막힙니다
① 보고서가 "기록이 없습니다"만 온다
원인
실수장부.md에서 최근 7일치를 못 찾았습니다.
확인 순서
1. 5.5의 연습용 기록 넣기를 건너뛰었는지 봅니다. 가장 흔한 원인입니다.
2. 실수장부.md를 열어 날짜가 적혀 있는지 봅니다. 날짜가 없으면 7일치를 셀 수 없습니다.
3. 날짜 형식이 뒤죽박죽이면 이렇게 말합니다.
실수장부.md의 날짜 형식을 전부 2026-08-17 모양으로 통일해줘.
② 복습목록.md는 생겼는데 아침 메시지에 '다시 보기'가 안 붙는다
다 만들었는데 마지막 연결이 안 되다 보니 답답해서 여기에서 포기하기 쉽습니다.
원인
아침 봇이 그 파일을 못 찾고 있습니다. 거의 항상 이름이나 위치의 문제입니다.
확인 순서
1. 파일 이름이 정확히 복습목록.md 인지 봅니다. 복습 목록.md(띄어쓰기), 복습목록.txt면 못 찾습니다.
2. 파일이 다른 폴더에 생기지 않았는지 봅니다. 아침 봇과 같은 폴더에 있어야 합니다.
3. 둘 다 맞는데 안 되면, 채팅창에 그대로 물어봅니다.
복습목록.md는 있는데 아침영어 메시지에 다시 보기가 안 붙어. 아침영어가 그 파일을 제대로 읽고 있는지 확인하고 고쳐줘.
이건 여러분 잘못이 아닙니다. 파일 이름 한 글자 차이로 못 찾는 건 원래 그런 것입니다.
중요한 건 "연결이 안 됐다"를 말로 설명할 수 있는 것입니다. 위 두 줄이면 충분합니다.
③ 복습 목록이 계속 쌓여서 옛날 것만 나온다
뜻
복습목록.md를 갈아끼우지 않고 이어 붙이고 있습니다. 몇 주 지나면 목록이 수십 줄이 되고, 아침 봇은 그중에서 아무거나 뽑습니다. 한 달 전 것이 계속 나옵니다.
해결
복습목록.md는 매주 새로 갈아끼워줘. 지난주 목록은 남기지 말고 지워줘.
`실수장부.md`와 헷갈리지 마세요.
실수장부는 이어 붙입니다(기록이니까). 복습목록은 갈아끼웁니다(할 일이니까).
이 둘을 반대로 하면 기록이 날아가고, 복습 목록에는 지난주 것이 계속 쌓입니다.
완료한 항목에 체크하세요
여섯 개가 전부 되면 봇 세 개가 완성된 것입니다.
마지막 항목까지 되면 세 봇이 한 바퀴 돈 것입니다.
이 장을 마치며
봇 세 개가 완성됐습니다. 그리고 서로 이어졌습니다.
그런데 아직 여러분이 실행 버튼을 눌러야 돕니다. 아침에 일어나서 "아침영어 실행해줘"를 쳐야 메시지가 옵니다.
그러면 결국 매일 아침 결정을 해야 하는 것이고, 이는 지속 가능한 모델이 아닙니다.
다음 장에서 이 불편을 없앱니다. 아무것도 안 해도 돌게 만듭니다.
PART 6
저절로 돌게 만들기 — 매일 & 매주
여기가 마지막 한 걸음입니다.
봇 세 개는 이미 완성됐습니다. 다만 아직 여러분이 실행하라고 해야 돕니다. 그 마지막 하나의 장애물을 없앱니다.
걸리는 시간 10~15분 · 결과 내일 아침, 아무것도 안 해도 폰이 울립니다.
6.1 예약 = 나가는 자리를 미리 만들어두기
지금 상태를 보면 좀 이상합니다.
아침에 일어나서 노트북을 켜고, VS Code를 열고, "아침영어 실행해줘"를 쳐야 메시지가 옵니다.
그러면 매일 아침 결정을 해야 하고 이게 병목이 됩니다.
이 장에서 하는 일은 나의 결정 없이도 봇이 알아서 내게 학습을 시키게 세팅을 하는 것입니다.
캘린더에 넣어둔 약속을 그날 아침 다시 고민하지 않듯이, 예약을 걸어두면 매일 아침 영어를 할지 말지 다시 정하지 않아도 됩니다.
6.2 두 종류의 자리
우리에겐 봇이 셋인데, 주기는 두 종류입니다.
| 봇 | 언제 | 왜 그때 |
|---|---|---|
| 아침영어 | 매일 아침 8시 | 하루 일정 시작되며 바빠지기 전에 눈에 들어와야 하게 됨 |
| 저녁체크 | 매일 밤 9시 | 하루가 끝나기 전에, 아직 답할 여유가 있을 때 받아 봐야 함 |
| 주간정리 | 매주 일요일 저녁 8시 | 다음 주가 시작되기 전에 한 주 학습을 돌아보고 다음주를 계획하게 함 |
주간정리를 일요일에 두는 데는 이유가 있습니다. 월요일 아침 메시지가 복습목록을 읽어 가야 하기 때문입니다.
월요일에 정리하면 그 주 내내 지지난주 목록으로 갑니다.
세 개를 한 번에 설정합니다
채팅창에 이렇게 씁니다.
만들어 둔 봇 세 개를 저절로 실행되게 예약해줘. - 아침영어: 매일 아침 8시 - 저녁체크: 매일 밤 9시 - 주간정리: 매주 일요일 저녁 8시 예약이 제대로 걸렸는지 확인하는 방법도 알려줘. - Codex 채팅창을 여는 예약이 아니라 완성한 Python 프로그램을 실행하는 예약으로 해줘. - 내 운영체제와 시간대를 먼저 확인해. Windows는 작업 스케줄러, macOS는 launchd에 맞게 설정해줘. - 프로그램과 Python 실행 파일은 절대경로로 등록하고, .env는 프로그램 폴더에서 읽어. 키를 예약 명령에 직접 쓰지 마. - 같은 작업이 겹치거나 하루에 중복 전송되지 않게 해. 중지·삭제·시간 변경 방법과 실행 로그 위치를 알려줘. 그리고 나중에 시간을 바꾸거나 예약을 끄려면 어떻게 하는지도 알려줘.
마지막 두 줄이 중요합니다. 끄는 법을 지금 물어보세요.
나중에 "이거 어떻게 끄지" 하고 당황하는 것보다, 만들 때 같이 들어두는 게 낫습니다.
답장을 보내자마자 교정받고 싶다면
기본은 원본 수업처럼 밤 9시에 모아서 교정하는 방식입니다. 즉시 교정을 원하면 “저녁체크가 새 메시지를 계속 기다리다가 도착하면 바로 교정하게 바꿔줘. 밤 9시 예약과 중복 실행되지 않게 해줘”라고 요청하세요. 이 경우 수신 프로그램이 계속 실행 중이어야 합니다.
허락 팝업이 여러 번 뜰 수 있습니다. 예약은 컴퓨터 설정을 건드리는 일이라 사용자에게 승인 요청을 하게 됩니다.
오늘 확인하는 법
내일 아침까지 기다리지 않아도 됩니다. 시간을 잠깐 당겨서 확인합니다.
아침영어 예약을 테스트해 볼 수 있게 지금 한 번만 [3분 뒤]로 잠깐 바꿔줘. 지금 보냈다고 내일 아침 8시를 건너 뛰면 안 돼. 테스트 1회 작동 뒤에는 다시 8시로 되돌려 놓아.
3분 뒤에 폰이 울리면 예약이 제대로 걸린 것입니다.
6.3 정직하게 말하는 한계
내일 아침 아무것도 안 왔을 때, 여러분이 "내가 뭘 잘못했나" 하고 포기하는 걸 막는 페이지입니다.
대부분은 여러분 잘못이 아닙니다.
컴퓨터가 꺼져 있으면 안 옵니다
이 봇은 여러분 컴퓨터에서 돕니다. 클라우드 어딘가에 있는 게 아닙니다.
| 아침 8시에 컴퓨터가... | 결과 |
|---|---|
| 켜져 있고 인터넷·API 연결이 된다 | ✅ 옵니다 |
| 잠자기(절전) 상태다 | ⚠️ 대부분 안 옵니다 |
| 완전히 꺼져 있다 | ❌ 안 옵니다 |
| 꺼져 있다가 9시에 켰다 | 🔁 설정에 따라 그때 뒤늦게 옵니다 |
마지막 줄이 현실적인 해법입니다. 노트북을 매일 열긴 여는 사람이라면 이렇게 말해두세요.
예약 시간에 컴퓨터가 꺼져 있었으면, 다음에 컴퓨터를 켰을 때 그때라도 한 번 실행되게 해줘.
8시 정각은 아니지만 거르지는 않습니다. 매일 오는 게 정시에 오는 것보다 중요합니다.
"클라우드에서 돌게 하면 안 되나요?"
됩니다. 그런데 그건 서버를 빌리고 관리하는 일이 따로 붙습니다.
이 교재의 목표는 오늘 안에 돌아가는 봇입니다. 몇 달 써보고 정말 필요하면 그때 옮기면 됩니다.
그때 가서도 옮기는 건 어렵지 않습니다. 봇이 하는 일은 이미 파일에 다 적혀 있으니까요.
돈은 얼마나 드나
| 항목 | 비용 |
|---|---|
| 텔레그램 | 이 수업의 개인 봇 메시지 전송은 무료. 전송 속도 제한은 있음 |
| 봇 토큰 | 무료. BotFather는 공짜 |
| Codex로 봇 만들기 | ChatGPT로 로그인하면 해당 계정의 Codex 제공 범위 적용 |
| 봇이 쓰는 OpenAI API | ChatGPT 구독과 별도. 선택한 모델과 실제 사용량에 따라 과금 |
| 컴퓨터와 인터넷 | 예약 시간에 컴퓨터가 켜져 있고 인터넷에 연결되어 있어야 함 |
자동 실행 때는 완성한 프로그램이 OpenAI API를 호출합니다. Codex 채팅창을 매일 열어 둘 필요는 없습니다.
API 비용은 선택한 모델과 주고받는 글의 양에 따라 달라집니다. 처음에는 한 번씩 실행한 뒤 Usage에서 실제 사용량을 확인하세요.
사용량 알림을 설정해도 그 금액에서 무조건 자동으로 멈춘다고 생각하면 안 됩니다. 알림과 실제 차단 한도는 구분해서 확인하세요.
API 잔액 부족이나 사용 제한으로 실패하면 예약이 있어도 메시지가 오지 않습니다. 다음 날 자동으로 해결된다고 단정할 수 없습니다.
Billing과 오류 내용을 확인하고 원인을 해결한 뒤 한 번만 다시 실행합니다. 같은 오류로 계속 재시도하지 않게 해 두세요.
안 왔을 때 확인 순서
아침에 아무것도 안 왔다면, 이 순서대로만 봅니다.
1. 컴퓨터가 그 시간에 켜져 있었나? — 대부분 여기서 끝납니다
2. 폰에서 텔레그램 알림이 꺼져 있지 않은지 봅니다
3. 봇 대화방을 직접 열어봅니다 — 와 있는데 알림만 안 울린 경우가 많습니다
4. 그래도 없으면 채팅창에 그대로 묻습니다
오늘 아침 8시에 아침영어가 실행됐어야 하는데 메시지가 안 왔어. 예약이 아직 걸려 있는지, 실행은 됐는데 실패한 건지 확인해줘.
완료한 항목에 체크하세요
마지막 항목은 내일 확인합니다. 오늘 할 일은 여기까지입니다.
이 장을 마치며
이제 여러분은 아무것도 하지 않습니다. 봇이 먼저 말을 겁니다.
아침에 표현이 오고, 밤에 답장을 고쳐 주고, 주말에 한 주를 정리해서 다음 주로 넘깁니다.
루틴이 의지에서 장치로 넘어갔습니다.
이 교재는 여기까지입니다. 봇 셋이 매일 돌면 목표가 달성된 것입니다.
추가로 다음과 같은 작업을 해 보고 싶어질 수 있습니다.
| 드는 생각 | 다음 단계 |
|---|---|
| "내 일정에 맞춰 보내주면 좋겠는데" | 봇을 캘린더·노트 앱에 연결하기. 시험 기간엔 줄이고, 여유 있는 날엔 늘리는 수정 작업 |
| "봇이 준 표현이 진짜 자연스러운지 모르겠는데" | 봇이 쓴 표현을 다른 봇이 검수하게 만들기. 어려운 단어를 쓰면 다시 쓰게 하는 검수 봇 생성 |
| "내 수준이랑 목표를 매번 설명하기 귀찮은데" | 학습자 프로필 파일 만들기. 내 수준·목표·약점을 적어두면 세 봇이 전부 참고하게 함 |
| "좋아하는 유튜브 영상으로 공부하고 싶은데" | 영상 주소를 던지면 단어장과 쉐도잉 스크립트로 바꿔주는 봇 |
네 가지 모두 오늘 배운 방식 그대로 적용해 해결이 가능합니다.
새 문법이나 새 도구가 아닙니다. 하고 싶은 일을 말로 설명하고, 필요한 내용을 되묻게 하고, 파일로 잇는 것.
여러분은 이미 그 방법을 세 번 했습니다. 이제 방법은 익혔으니, 유일한 한계는 무엇을 만들어 어떻게 활용하고 싶은 지에 대한 여러분의 상상력입니다. 다양한 앱들을 써보면서 내가 내 봇에 또는 내가 만든 앱에 적용하고 싶은 것들이 무엇인지 관찰해 보는 것도 좋은 습관입니다.
Part 7. 봇을 몇 달 동안 계속 쓰는 법
7.1 봇의 설명서를 AGENTS.md에 남깁니다
며칠 뒤 같은 폴더를 열고 수정을 부탁할 때, 무엇을 만들었는지 처음부터 설명하지 않도록 기록을 남깁니다. 원래 Claude Code의 CLAUDE.md가 하던 역할을 Codex에서는 AGENTS.md가 합니다.
Codex 채팅창에 아래 요청을 보냅니다.
이 폴더에 AGENTS.md 라는 파일을 만들어줘. 내가 나중에 다시 와도 네가 이 폴더가 뭔지 바로 알 수 있게, 지금까지 만든 것을 정리해서 적어줘. - 봇이 몇 개 있고 각각 무슨 일을 하는지 - 파일이 각각 무슨 역할인지 (특히 실수장부와 복습목록의 차이) - 언제 실행되는지 - 앞으로 이 폴더에서 작업할 때 지켜야 할 것
AGENTS.md는 프로젝트 설명과 작업 규칙입니다. 비밀번호 보관함도, 실행 예약 파일도 아닙니다. API 키나 봇 토큰은 적지 않습니다.
확인
파일을 열어 봇 세 개의 역할, 실행 시간, 실수장부는 이어 붙이고 복습목록은 바꾼다는 규칙이 들어 있는지 확인합니다.
부록
여기는 읽는 곳이 아니라 꺼내 쓰는 곳입니다.
순서대로 볼 필요 없습니다. 막혔을 때 A, 다시 만들 때 B, 빨간 글씨가 떴을 때 C, 단어가 낯설 때 D.
A. 막혔을 때 던지는 만능 질문 10개
검색하지 마세요. 아래 문장을 그대로 복사해서 Codex 채팅창에 붙여넣으세요.
[대괄호] 자리만 여러분 상황으로 바꾸면 됩니다.
오류가 났을 때
1) 이 오류가 났어. 무슨 뜻이고 뭘 고쳐야 하는지 알려줘.
내가 뭘 확인하면 되는지 순서대로 하나씩 알려줘.
[여기에 오류 글자 붙여넣기]
2) 방금 실행했는데 아무 일도 안 일어났어.
성공한 건지 실패한 건지, 어떻게 확인하면 되는지 알려줘.
3) 어제까지 잘 됐는데 오늘 안 돼. 뭐가 달라졌는지 확인해줘.뭘 하고 있는지 모르겠을 때
4) 방금 그 말 무슨 뜻이야? 컴퓨터 처음 쓰는 사람도 알아듣게 설명해줘. 5) 지금 이 폴더에 파일이 뭐가 있고 각각 무슨 일을 하는지 표로 정리해줘. 6) [파일 이름] 이거 뭐야? 지워도 돼?
고치고 싶을 때
7) [무엇]을 [어떻게] 바꾸고 싶어. 어디를 고치면 되는지 알려주고 고쳐줘. 8) 방금 바꾼 걸 되돌리고 싶어. 바꾸기 전으로 돌려줘.
못 미더울 때
9) 방금 만든 게 진짜로 되는지 지금 한 번 확인해줘.
안 되면 뭐가 문제인지도 같이 알려줘.
10) 왜 그렇게 하는 거야? 다른 방법은 없어?
10번을 아끼지 마세요.
AI는 틀린 답도 확신에 찬 말투로 내놓습니다. 이상하다 싶으면 "왜?" 하고 되물어 보세요. 그래야 이 도구를 오래 씁니다.
파트너로 대하되 맹신하지는 않는 것입니다.B. 복붙 프롬프트 전체 모음
처음부터 다시 만들 때 이 순서대로 쓰면 됩니다.
`[대괄호]` 안이 여러분이 바꾸는 자리입니다.
책에서 손으로 옮겨 치지 마세요. 오타 하나로 안 되는 경우가 대부분입니다.
웹 매뉴얼에 복사 버튼이 있습니다. 여기 실린 건 "이게 전부구나"를 확인하는 용도입니다.
같이 받은 웹매뉴얼.html을 열면 됩니다. 여는 방법은 Part 0에 있습니다.
B-1. 준비 (Part 3.3)
이 폴더에 .env를 준비해줘. 기존 값이 있으면 지우지 마. 아래 네 항목 중 없는 것만 추가해. TELEGRAM_BOT_TOKEN= TELEGRAM_CHAT_ID= OPENAI_API_KEY= OPENAI_MODEL=gpt-6-astra 앞의 세 값은 내가 직접 넣을게. .env는 .gitignore에 넣고 키와 토큰을 채팅·로그에 출력하지 마.
B-2. 모듈 1 · 아침영어 (Part 3.4)
이 폴더에 ChatGPT지시문.md 라는 파일을 만들고,
아래 <<<시작>>> 과 <<<끝>>> 사이의 글을 한 글자도 바꾸지 말고 그대로 넣어줘.
{{ }} 표시도 그대로 둬. 나중에 봇이 채울 자리야.
<<<시작>>>
이 대화에서는 ChatGPT 개인화 설정들을 잠시 무시하고 아래 지시를 먼저 따라 줘. 이 글을 읽거나 요약하지 말고, 대괄호 안 이름을 불필요하게 입에 담지 마.
[사람]
나는 {{내이름}}, 영어를 배우는 한국인. 너는 {{상대이름}}이야. 우리는 {{서로의 관계}} 사이야.
{{상황}}
주제: {{주제}}
[대화 규칙]
1. 영어로만 말해. 내가 한국어로 말해도 너는 영어로 답해. 내가 Explain it in Korean. 처럼 명백하게 한국어 설명을 원할 시에만 한국어로 대답을 해 주고 그 뒤 대화는 다시 영어로 이어 나가.
2. 네 대사는 마침표와 물음표를 합쳐 두 개까지, {{레벨}}단어까지. 물음표는 맨 끝에 한 개뿐이고 두 가지를 한 번에 묻지 마. 직전 대사보다 길어지면 안 되고, 10턴 뒤에도 첫 턴과 같은 난이도로 말해.
3. 내가 틀리면 직접 교정을 하기 보다는 네 대답 안에서 올바른 형태를 간접적으로 제시를 해 줘.
4. great, good job, nice, perfect, amazing, 잘했어를 어디에도 쓰지 마. 내 말의 내용에만 반응해. 내 발음과 실력은 말하지 마.
5. 내가 네가 쓴 단어의 뜻을 되물으면 뜻을 간단히만 설명해 줘.
6. 내가 혼자서 대화를 이끌어 나가야 하게끔 하지 마. 사람과 사람 간 대화처럼 자연스럽게 너도 대화를 리드해.
8. 별표, 우물정자, 번호, 제목, 표, 이모지를 쓰지 마. 소리 내어 읽었을 때 자연스러운 문장만 써.
[오늘의 표현 3개]
{{오늘의표현}}
이 표현과 그 안에 든 단어를 내가 먼저 쓰기 전에는 쓰지 말고, 비슷한 말로 바꾸지도 마. 이 표현이 답이 될 질문을 던지고 답은 내가 하게 둬. 내가 자주 틀리는 것은 {{지난주약점}}이야. 그게 나올 질문을 해서 내가 틀리던 부분이 교정되었는지 확인해 줘.
[막힘]
내가 "I don't know"라고 하거나, 한국어로 답하거나, 세 단어 이하로 두 번 답하면 [막힘]으로 가.
설명하지 말고 "A? or B?"처럼 둘 중 고르는 질문으로 다시 물어봐. 그래도 막히면 따라 말할 짧은 영어 문장 하나를 주고 따라 하라고 해. 여기서도 영어로만 쓰고 한국어 뜻풀이는 금지. 한국어 설명은 내가 대놓고 한국어로 설명해달라고 할 때로 국한해. 잠시 한국어로 설명을 하더라도 곧바로 다시 영어로 돌아와야 해.
내가 영어로 한 문장이라도 말하면 곧바로 [대화]로 돌아가. [막힘]에 들어갈 때마다 네 단어 수를 절반으로 줄이고 올리지 마.
"in Korean"이라고 정확히 쓸 때만 한국어 한 문장으로 알려주고 바로 영어로 돌아와.
[피드백]
내가 "wrap up" 또는 "피드백"이라고 하면 역할극을 즉시 멈추고 다시 돌아가지 마.
=피드백=
날짜: {{날짜}}
쓴 표현: 내가 먼저 말한 것만
안 쓴 표현: 나머지와 네가 먼저 말해 내가 따라 한 것
피드백 1: 내가 쓴 문장 -> 고쳐진 문장 | 실수종류
피드백 2: 내가 쓴 문장 -> 고쳐진 문장 | 실수종류
자연스럽게: 내가 쓴 문장 -> 더 자연스러운 표현
잘한 것: 내가 쓴 영어 문장 하나와 뭘 잘했는지 한 줄
개선 방안: 다음에 같은 상황에서 뭘 다르게 해 볼지 한 줄
내 말:
=끝=
=피드백= 부터 개선 방안: 까지는 줄을 늘리거나 줄이지 마. 라벨은 위 글자 그대로 별표 없이, 날짜는 위 숫자 그대로 옮겨. 채울 게 없으면 없음으로 비워 둬. 네 줄은 서로 다른 문장에서, 뜻이 안 통하는 것부터 골라.
실수종류는 아래 열두 개 중에서만 골라. 새 이름을 만들지 말고 띄어쓰기까지 그대로 옮겨 써: 시제 / 수일치 / 동사 형태 / 관사 / 단복수 / 가산·불가산 / 전치사 / 자동사·타동사 / 어순 / 콩글리시 / 단어 선택 / 빠진 말. 둘 이상에 해당하면 이 목록에서 위에 있는 것을 고르고, 어디에도 안 맞으면 단어 선택으로 써.
내가 한국어로 쓴 말, um이나 I don't know처럼 막혀서 한 말, 잘못 알아들어 이상하게 적힌 말은 고침에 넣지 마.
「내 말:」 아래에는 이번 대화에서 내가 말한 영어 문장만 한 줄에 하나씩, 말한 순서대로 전부 적어. 줄 수 제한이 없는 칸은 여기뿐이야.
이 칸은 고치는 칸이 아니라 옮겨 적는 칸이야. 다듬지도 줄이지도 마. 위에서 네가 고쳐 준 문장도 여기서는 내가 원래 말한 틀린 형태 그대로 적어.
네가 한 말은 한 문장도 넣지 마. 내가 한국어로 한 말과 um 같은 말도 빼.
잘못 알아들어 이상하게 적힌 것 같은 문장은 그대로 적고 줄 끝에 (?) 를 붙여.
문장이 너무 많아 다 못 적겠으면 마지막 줄에 (더 있음) 이라고만 써.
[절대 규칙]
「내 말:」 칸의 문장은 절대 고치지 마. 거기에는 틀린 영어가 틀린 채로 있어야 해.
아직 시작 전이야. "Ready." 한 마디만 쓰고 멈춰. 다른 말은 한 글자도 쓰지 말고 아무것도 묻지 마.
내가 "start"라고 하면 이 문장으로 먼저 말을 걸어: "{{첫대사}}"
<<<끝>>>이 글은 여러분이 읽으라고 있는 게 아닙니다. ChatGPT가 읽으라고 써 두는 글입니다. 일관적이고 안정된 작동을 위해 위와 같이 규칙을 상세히 정해 둡니다.
{{ }} 안은 봇이 매일 새로 채웁니다.
오늘의 주제, 오늘의 상황, 오늘 만날 친구 이름, 오늘 쓸 표현 세 개, 지난주에 제일 많이 틀린 것.
여러분이 손댈 곳은 없습니다. 이 파일은 그냥 두면 됩니다.
매일 아침 나에게 오늘 할 영어 회화 거리를 텔레그램으로 보내주는 봇을 만들어줘.
- 이 작업의 이름은 [아침영어]로 해줘.
- 텔레그램 봇 토큰과 내 chat ID는 이 폴더의 .env 파일에 넣어 놨어. 그걸 읽어서 써.
- Codex가 매번 대신 실행하는 작업이 아니라, 완성 후에는 Python 프로그램만 실행해도 동작하게 만들어줘. AI가 필요한 부분은 .env의 OPENAI_API_KEY와 OPENAI_MODEL로 OpenAI Responses API를 호출해. .env는 프로그램 파일이 있는 폴더에서 읽고, 키와 토큰을 출력하지 마.
- 호출 횟수와 생성 길이를 제한하고 오류가 나면 무한 재시도하지 마. 같은 날 다시 실행하면 이미 만든 카드를 재사용하고, 새 생성은 내가 요청할 때만 해줘.
- 매일 첫 실행에서 오늘의 주제, 상황, 대화 상대, 목표 표현 3개를 새로 만들어줘.
복습 목적이 아니라면 어제와 같은 걸 보내지 마.
- 주제는 [정답이 없고 의견이 갈리는 것]으로 골라줘.
날씨나 자기소개처럼 단순 사실만 나열하게 되는 주제는 빼 줘.
- 상황은 2~3문장으로 써줘. 내가 지금 어떤 처지인지, 누구를 만나 무슨 이야기를
하는 중인지 등이 들어가야 해.
- 목표 표현은 정확히 3개. 원어민이 실제로 자주 쓰는 자연스러운 표현으로 골라줘.
한국어 뜻은 직역하지 말고, 그 상황에서 한국 사람이 실제로 할 법한 말로 써줘.
이런 느낌이야.
Those little splurges add up, too. → 그렇게 조금씩 한 사치들이 결국 쌓이는 거지.
It's a vicious cycle. → 그건 악순환이야.
Saving feels like a chore. → 저축하는 게 귀찮은 일처럼 느껴지긴 하지.
- 그날 ChatGPT가 먼저 걸 영어 첫 마디도 한 문장 만들어줘.
2문장 이내, 25단어 이내, 물음표 하나로 끝나야 해.
- 내 이름은 [Taehoon], 상대 이름은 매일 다르게 해 줘.
- 이 폴더의 ChatGPT지시문.md 를 읽어서, {{ }} 자리에만 오늘 값을 채워줘.
그 파일의 다른 글자는 한 글자도 바꾸지 마.
- 채운 결과를 텔레그램에 [두 번째 메시지]로 보내줘. 코드블록 하나에 통째로 넣고,
그 메시지에는 다른 글자를 아무것도 넣지 마. 코드블록을 두 개로 쪼개지 마.
- [첫 번째 메시지]는 이렇게 넣어줘.
1) 오늘의 주제와 상황을 한국어로 한 줄씩
2) 목표 표현 3개. 한국어 뜻을 먼저 보이게 쓰고, 영어 문장만 가려줘. 탭을 해야만 보이게
3) 학습법 안내 다섯 줄: 다음 메시지 상자 눌러 복사 → ChatGPT 새 대화에 붙여 넣고 전송
→ Ready. 오면 start 보내고 음성 켜기 → 끝나면 wrap up 보내기
→ 나온 교정을 복사해서 이 봇에게 보내기
4) 막힐 때 쓸 세 마디: Explain that in Korean? (한국어로 설명해 줄래?) / Can you repeat that again? (다시 반복해 줄래?) / I’m confused. (나 좀 헷갈려.)
5) "음성 연습 시간이 없으면 오늘은 그냥 채팅으로만 답을 보내세요." 한 줄
- 점수, 등급, 레벨, 몇 점, 초급/중급/고급 같은 말은 어디에도 쓰지 마.
- 텔레그램에 보낼 때는 parse_mode 를 HTML 로 해줘. 마크다운은 쓰지 마.
글자 중에 & < > 가 있으면 & < > 로 바꿔서 보내줘.
가리는 건 <tg-spoiler> 를 써줘.
- 한 메시지가 4000자를 넘으면 나눠 보내줘. 다만 복사용 대본은 쪼개지 말고, 너무 길면 UTF-8 텍스트 파일로 보내줘.
- 두 메시지 사이에는 1초를 쉬어줘.
- 이 폴더에 복습목록.md 파일이 있으면, 거기서 지난주에 가장 많이 나온 실수의 종류를
하나 골라 {{지난주약점}} 자리에 넣고, 첫 번째 메시지에 "다시 보기"로 한 줄 보여줘.
파일이 없으면 {{지난주약점}}에 아직 기록 없음 이라고 넣고, 실제로 틀린 적이 있는 것처럼 쓰지 마.
- 지금은 예약을 걸지 마. 내가 실행하라고 할 때 한 번 보내지도록 만들어 줘.
예약은 나중에 따로 할 거야.
만들기 전에 꼭 필요한 정보가 빠져 있으면 나에게 하나씩 질문해줘.B-3. 모듈 2 · 저녁체크 (Part 4.4)
아까 만든 아침영어 봇에, 저녁에 확인하고 고쳐 주는 기능을 하나 더 만들어줘.
파일은 따로 만들어. 아침에 보내는 건 절대 건드리지 마.
- 이 작업의 이름은 [저녁체크]로 해줘.
- 텔레그램 토큰과 chat ID는 아침영어와 같은 .env 파일을 읽어서 써.
- Codex가 매번 대신 실행하는 작업이 아니라, 완성 후에는 Python 프로그램만 실행해도 동작하게 만들어줘. AI가 필요한 부분은 .env의 OPENAI_API_KEY와 OPENAI_MODEL로 OpenAI Responses API를 호출해. .env는 프로그램 파일이 있는 폴더에서 읽고, 키와 토큰을 출력하지 마.
- .env의 TELEGRAM_CHAT_ID와 일치하는 개인 대화방의 메시지만 처리해. 다른 사람의 메시지는 무시해.
- 영어 문장을 직접 보내면 API로 교정해. =피드백=부터 =끝=까지 붙여넣으면 원문과 교정문을 구분해 읽고 기록해. 이미 고친 문장을 내가 틀린 원문으로 취급하지 마.
- 실수장부의 각 항목에 텔레그램 메시지 ID도 남겨. 잘 쓴 문장도 실수 종류를 없음으로 기록해. 주간정리에서 같은 답장을 중복해서 세지 않도록 해줘.
- 실수 종류는 ChatGPT지시문.md의 열두 가지 이름을 그대로 써. 새로운 분류 이름을 만들지 마.
- 401·잔액 부족·권한 오류는 반복 호출하지 말고 원인을 알려줘. 수신 위치는 처리에 성공한 뒤 저장해. 오류가 나도 다음 메시지를 잃지 않게 해줘.
- 실행하면 이렇게 동작해줘.
1) 내가 봇에게 보낸 새 메시지가 있는지 확인해.
2) 있으면 그 문장을 이렇게 고쳐서 답장해줘.
- 틀린 곳을 짚어주고 (문법, 단어, 어색한 표현)
- 더 자연스러운 대안 표현을 하나 알려주고
- 잘한 것을 한 줄 짚어줘
3) 없으면 "오늘 그 표현 써봤어? 한 문장만 만들어서 보내줘" 라고
한 번만 물어봐. 두 번 이상 재촉하지 마.
- 점수나 등급은 절대 매기지 마. 몇 점, 정답, 오답 같은 말도 쓰지 마.
- 말투는 [친한 친구가 알려주듯 편하게]. 혼내는 말투는 쓰지 마.
- 교정한 내용은 이 폴더의 실수장부.md 파일에 남겨줘.
- 파일이 없으면 새로 만들고, 있으면 맨 아래에 이어서 붙여줘.
기존 내용은 절대 지우지 마.
- 한 줄에 [날짜 / 내가 쓴 문장 / 고친 문장 / 실수의 종류]를 남겨줘.
- 한 번 읽은 답장을 다음 실행에서 또 읽지 않게 처리해줘.
- 지금은 예약하지 마. 내가 실행하라고 할 때만 한 번 돌게 해줘.
만들기 전에 꼭 필요한 정보가 빠져 있으면 나에게 하나씩 질문해줘.B-4. 연습용 기록 넣기 (Part 5.5)
실수장부.md에 지난 7일치 연습용 기록을 만들어 넣어줘. - 기존에 있던 내 진짜 기록은 지우지 말고 위에 그대로 둬. - 연습용은 그 아래에 붙이고, 맨 위에 "여기부터 연습용" 이라고 표시해줘. - 형식은 기존 기록과 똑같이 해줘. - 시제 실수를 4번, 관사 실수를 2번, 나머지는 다양하게 섞어줘. - 연습용 기록마다 별도 표시와 가상 메시지 ID를 붙여. 그 뒤에 들어오는 진짜 답장과 섞이지 않게 해줘.
B-5. 모듈 3 · 주간정리 (Part 5.6)
주말에 한 주를 정리해 주는 봇을 하나 더 만들어줘. 파일은 따로 만들어. 아침 봇과 저녁 봇은 절대 건드리지 마. - 이 작업의 이름은 [주간정리]로 해줘. - 텔레그램 토큰과 chat ID는 같은 .env 파일을 읽어서 써. - Codex가 매번 대신 실행하는 작업이 아니라, 완성 후에는 Python 프로그램만 실행해도 동작하게 만들어줘. AI가 필요한 부분은 .env의 OPENAI_API_KEY와 OPENAI_MODEL로 OpenAI Responses API를 호출해. .env는 프로그램 파일이 있는 폴더에서 읽고, 키와 토큰을 출력하지 마. - 답장 수와 실수별 횟수는 프로그램으로 먼저 세고, AI는 그 결과와 실제 기록만 읽어 설명하게 해. 답장 수는 메시지 ID로 중복을 빼고, 실수 없음은 실수 횟수에서 제외해. - 연습용으로 표시된 기록은 내가 테스트를 요청할 때만 포함해. 자동 실행에서는 제외해. 기록이 없는 날이나 지난주 자료가 없으면 숫자나 비교를 지어내지 마. - 이 폴더의 실수장부.md를 읽어서, 최근 7일치를 정리해줘. 새로 조사하지 말고 그 파일에 있는 것만 써. - 정리한 내용을 텔레그램으로 보내줘. 내용은 이 세 가지만. 1) 이번 주에 답장을 몇 번 했는지 2) 반복해서 걸린 실수를 많은 순서로 [3개]까지, 각각 몇 번 틀렸는지 함께 3) 다음 주에 신경 쓸 것 딱 [한 가지] - 점수나 달성률은 넣지 마. 잘했다 못했다 평가하지 마. - 말투는 [담담하게, 옆에서 짚어주듯]. 길게 쓰지 말고 폰에서 한 화면에 들어오게. - 그리고 다음 주에 다시 볼 표현을 골라서 이 폴더의 복습목록.md 파일로 저장해줘. - 자주 틀린 것일수록 자주, 오래 안 틀린 것은 뜸하게 넣어줘. - 한 줄에 하나씩, 고친 문장과 실수의 종류를 같이 적어줘. - 이 파일은 매주 새로 갈아끼워줘. 지난주 목록은 남기지 마. - 지금은 예약하지 마. 내가 실행하라고 할 때만 한 번 돌게 해줘. 만들기 전에 꼭 필요한 정보가 빠져 있으면 나에게 하나씩 질문해줘.
B-6. 예약 걸기 (Part 6.2)
만들어 둔 봇 세 개를 저절로 실행되게 예약해줘. - 아침영어: 매일 아침 8시 - 저녁체크: 매일 밤 9시 - 주간정리: 매주 일요일 저녁 8시 예약이 제대로 걸렸는지 확인하는 방법도 알려줘. - Codex 채팅창을 여는 예약이 아니라 완성한 Python 프로그램을 실행하는 예약으로 해줘. - 내 운영체제와 시간대를 먼저 확인해. Windows는 작업 스케줄러, macOS는 launchd에 맞게 설정해줘. - 프로그램과 Python 실행 파일은 절대경로로 등록하고, .env는 프로그램 폴더에서 읽어. 키를 예약 명령에 직접 쓰지 마. - 같은 작업이 겹치거나 하루에 중복 전송되지 않게 해. 중지·삭제·시간 변경 방법과 실행 로그 위치를 알려줘. 그리고 나중에 시간을 바꾸거나 예약을 끄려면 어떻게 하는지도 알려줘.
B-7. 봇의 설명서 남기기 (Part 7.1)
이 폴더에 AGENTS.md 라는 파일을 만들어줘. 내가 나중에 다시 와도 네가 이 폴더가 뭔지 바로 알 수 있게, 지금까지 만든 것을 정리해서 적어줘. - 봇이 몇 개 있고 각각 무슨 일을 하는지 - 파일이 각각 무슨 역할인지 (특히 실수장부와 복습목록의 차이) - 언제 실행되는지 - 앞으로 이 폴더에서 작업할 때 지켜야 할 것
C. 오류 사전
실제로 화면에 나오는 글자 → 무슨 뜻인지 → 다음에 할 일.
텔레그램이 거절할 때
| 화면에 나오는 것 | 뜻 | 할 일 |
|---|---|---|
| 401 · Unauthorized | 봇 토큰이 틀렸다 | .env의 토큰 앞뒤 공백·따옴표 제거. 안 되면 BotFather에서 다시 복사 |
| 400 · chat not found | 보낼 주소를 못 찾았다 | 내 봇 대화방에서 START를 눌렀는지 확인 → chat ID 다시 확인 (Part 3.2.2) |
| {"ok":true,"result":[]} | 봇에게 온 말이 하나도 없다 | 봇 대화방에 아무 말이나 보내고 다시 |
| 429 · Too Many Requests | 너무 자주 보냈다 | 잠깐 기다렸다 다시. 재촉 메시지를 반복 전송하고 있지 않은지 확인 |
OpenAI API에서 오류가 날 때
401 · 인증 오류 → .env의 OPENAI_API_KEY가 맞는지 확인합니다. 텔레그램 토큰을 넣은 것은 아닌지 보세요.
insufficient_quota → Billing에서 API 잔액·결제 상태·사용 제한을 확인합니다. ChatGPT 구독료와는 별도입니다.
rate_limit_exceeded → 짧은 시간에 요청이 너무 많습니다. 실행 중인 중복 작업을 끄고, 오류에 안내된 시간 뒤 다시 시도합니다.
model_not_found · 접근 권한 오류 → OPENAI_MODEL의 철자와 해당 프로젝트에서 쓸 수 있는 모델을 확인합니다.
오류는 없는데 이상할 때
빨간 글씨가 안 뜨는 문제가 더 위험합니다. 몇 주 뒤에야 발견되기 때문입니다.
| 증상 | 원인 | 할 일 |
|---|---|---|
| 성공이라는데 폰에 안 온다 | 다른 봇으로 갔거나 알림이 꺼져 있다 | 봇 대화방을 직접 열어 확인 → 폰 알림 설정 확인 |
| 같은 답장을 계속 다시 교정한다 | 읽었다는 표시가 안 남는다 | 한 번 읽은 메시지는 다시 읽지 않게 고쳐줘 |
| 실수장부에 오늘 것만 있다 | 이어 붙이지 않고 덮어쓰고 있다 | 기존 내용을 지우지 말고 맨 아래에 이어서 붙이도록 고쳐줘 ⚠️ 이걸 놓치면 주간 보고서가 무너진다 |
| 보고서가 "기록이 없습니다"만 온다 | 최근 7일치를 못 찾는다 | 연습용 기록을 넣었는지(Part 5.5) → 날짜 형식이 통일돼 있는지 |
| 복습목록은 있는데 아침에 '다시 보기'가 안 붙는다 | 파일 이름·위치가 다르다 | 이름이 정확히 복습목록.md인지, 같은 폴더인지 확인 |
| 복습목록에 한 달 전 것만 나온다 | 갈아끼우지 않고 쌓고 있다 | 매주 새로 갈아끼워줘. 지난주 목록은 지워줘 |
| 아침에 아무것도 안 왔다 | 대부분 컴퓨터가 꺼져 있었다 | Part 6.3의 확인 순서 4단계 |
표에 없는 오류를 만났다면 부록 A의 1번을 쓰세요. 그게 이 표보다 정확합니다. 이 표는 미리 알아두면 덜 놀라는 것들을 모은 것이지, 전부가 아닙니다.
D. 용어 대조표
이 교재에 나온 낯선 말만 모았습니다. 한 줄이면 충분합니다.
| 말 | 한 줄 뜻 |
|---|---|
| VS Code | 한글이나 구글 문서 같은 것. 옆에 Codex가 앉아 같이 쓰는 문서 |
| 확장 (Extension) | VS Code에 기능을 더하는 부품. 우리는 Codex 하나만 깔았다 |
| 터미널 | 검은 바탕에 명령어를 치는 화면. 이 교재에서는 안 쓴다 |
| 폴더 (프로젝트 폴더) | 봇 프로그램과 학습 기록을 모아 두는 폴더. 지우기 전에 기록을 백업 |
| 프롬프트 | Codex에게 하는 부탁. 코드가 아니라 한국어 문장 |
| 권한 / 허락 팝업 | 설정에서 허용한 범위를 넘는 작업 등을 진행하기 전에 사용자의 판단을 구하는 절차 |
| Codex 권한 설정 | Codex가 파일을 읽고 고치거나 프로그램을 실행할 수 있는 범위 |
| 봇 토큰 | 봇의 비밀번호. "누가 보내는가". BotFather가 준다 |
| chat ID | 메시지를 보낼 대화방 번호. 개인 대화방의 숫자를 확인해서 사용 |
| `.env` | 텔레그램 토큰·chat ID·OpenAI API 키·모델 이름을 넣는 설정 파일 |
| `실수장부.md` | 내 실수 기록. 이어 붙인다 (쌓여야 셀 수 있으니까) |
| `복습목록.md` | 다음 주에 다시 볼 목록. 매주 갈아끼운다 (최신이어야 하니까) |
| `AGENTS.md` | 봇 자신에 대한 설명서. 다음에 와도 Codex가 알아보게 |
| OpenAI API 키 | 내 프로그램이 OpenAI에 요청할 때 쓰는 비밀번호. .env에 직접 저장 |
| OPENAI_MODEL | 봇이 API로 호출할 AI 모델 이름. Codex 화면의 모델 선택과 별개 |
가장 헷갈리는 것 — 파일 세 개의 성격 차이
| 파일 | 성격 | 어떻게 쓰나 |
|---|---|---|
| .env | 비밀번호 | 한 번 넣고 안 바꾼다 |
| 실수장부.md | 기록 | 이어 붙인다 (쌓여야 셀 수 있으니까) |
| 복습목록.md | 할 일 | 갈아끼운다 (최신이어야 하니까) |
실수장부.md와 복습목록.md를 반대로 하면 기록이 날아가고, 복습 목록에는 지난주 것이 계속 쌓입니다.
부록 C의 "오류는 없는데 이상할 때" 표에서 실수장부에 오늘 것만 있다와 복습목록에 한 달 전 것만 나온다가 정확히 그 증상입니다.
Codex·API 설정 확인 자료
Codex 확장 설치 — https://learn.chatgpt.com/docs/codex/ide
ChatGPT 로그인과 API 키 로그인 구분 — https://learn.chatgpt.com/docs/auth
OpenAI API 키와 첫 요청 — https://developers.openai.com/api/docs/quickstart
GPT-6 Astra 모델과 API 요금 — https://developers.openai.com/api/docs/models/gpt-6-astra
Codex 승인과 접근 권한 — https://learn.chatgpt.com/docs/agent-approvals-security
AGENTS.md — https://learn.chatgpt.com/docs/agent-configuration/agents-md
2026-09-13 확인. 화면 구성과 제공 모델은 계정·버전에 따라 달라질 수 있습니다.