관계형 데이터베이스의
기초关系型
数据库基础
내 서비스가 기억할 것을 AI와 표로 그려 봅니다.用表看看服务记住什么、怎么记住,
再和 AI 一起把自己的服务要记住的东西画成表。
은행에서 고객 정보가 새어 나갔다银行的客户信息泄露了
이번 달 뉴스에서 은행 해킹 소식을 들어 보았을 것입니다. 해커가 가져간 것은 돈이 아니라 고객의 이름, 전화번호, 소득 같은 정보였습니다. 그렇다면 이 정보들은 원래 은행의 어디에 저장되어 있었을까요?这个月的新闻里,大家可能听到过银行被黑客攻击的消息。黑客拿走的不是钱,而是客户的姓名、电话、收入这类信息。那么,这些信息原本存在银行的什么地方呢?
- 신한은행 고객 약 2만 5천 명의 이름·전화번호·연 소득·대출 한도 같은 정보가 새어 나갔다.新韩银行约 2.5 万名客户的姓名、电话、年收入、贷款额度等信息被泄露。
- 대출모집인(은행 대출을 소개하는 사람)이 쓰는 모바일 페이지로 허락받지 않은 외부인이 들어와 정보를 조회했다.未经许可的外部人员通过贷款中介人员(介绍银行贷款的人)使用的手机网页进入,查询了信息。
- 같은 시기 KB국민은행·하나은행 등에서도 고객 정보 유출이 확인되어, 금융위원회가 전 금융권 긴급회의를 열었다.同一时期,KB 国民银行、韩亚银行等也确认了客户信息泄露,金融委员会召开了全金融业紧急会议。
새어 나간 정보는 이런 표에 있었다泄露的信息,原本就在这样的表里
기사 속 정보를 은행의 데이터베이스에 넣으면 어떤 모양일까요? 고객 한 명이 가로 한 줄이 되고, 이름·전화번호·연 소득 같은 항목이 세로 칸이 됩니다. 해커가 가져간 것은 바로 이런 줄 2만 5천 개였습니다.把新闻里的信息放进银行的数据库,会是什么样子?一个客户就是横着的一行,姓名、电话、年收入这些项目是竖着的格子。黑客拿走的,正是这样的 2.5 万行。
| 고객번호客户编号 | 이름姓名 | 전화번호电话 | 연 소득年收入 | 대출 한도贷款额度 |
|---|---|---|---|---|
| C-10231 | 김○○金○○ | 010-****-1234 | 4,200만4,200 万 | 3,000만3,000 万 |
| C-10232 | 이○○李○○ | 010-****-5678 | 3,600만3,600 万 | 2,500만2,500 万 |
| C-10233 | 박○○朴○○ | 010-****-9012 | 5,100만5,100 万 | 4,000만4,000 万 |
실제 자료가 아니라 이해를 돕기 위해 지어낸 예다. 주황 줄 하나가 고객 한 명이다.不是真实资料,而是为了便于理解编的例子。橙色的一行就是一个客户。
오늘은 이런 표가 어떻게 생겼고 서로 어떻게 이어지는지 봅니다. 그리고 내 서비스는 무엇을 이런 표로 기억해야 하는지 AI와 함께 그려 봅니다.今天来看这样的表长什么样、彼此怎样连起来。然后和 AI 一起画一画:自己的服务要用这样的表记住什么。
데이터_예시.md06 폴더에 데이터_예시.md를 AI와 만들고, 그 표를 끝까지 읽고 검토하는 것입니다. 앞의 개념 설명은 그 표를 읽기 위한 준비입니다.和 AI 一起在 06 文件夹里做出 데이터_예시.md,并把那张表从头读到尾、认真检查。前面的概念讲解,是为了读懂那张表做准备。
은행은 기억하는데, 이 칸은?银行记得住,那这一栏呢?
은행은 고객 정보를 데이터베이스에 저장해 두고 기억합니다. 저장하는 곳이 없으면 어떻게 될까요?银行把客户信息存进数据库记住。要是没有保存的地方,会怎样呢?
- 두 칸에 모두 할 일을 두 개쯤 적고 추가를 누른다.在两栏里都写两三条待办,按添加。
- 키보드에서
F5를 누른다. 같은 쪽으로 다시 돌아온다.按键盘上的F5,会回到同一页。 - 왼쪽과 오른쪽 목록이 어떻게 되었는지 비교한다.比较左右两边的列表变成了什么样。
왼쪽은 사라지고 오른쪽은 남습니다. 서비스가 기억하려면 적은 것을 어딘가에 저장해 두었다가 다시 열 때 꺼내 보여 주어야 합니다. 다만 오른쪽은 이 컴퓨터의 이 브라우저 안에만 있어서 다른 컴퓨터나 친구 화면에서는 보이지 않습니다. 여러 사람의 기록을 한곳에 모아 기억하는 곳이 오늘 배우는 데이터베이스입니다.左边消失了,右边还在。服务要记住东西,就得把写下的内容保存在某个地方,再次打开时取出来显示。不过右边只存在这台电脑的这个浏览器里,换台电脑或在朋友的画面上都看不到。把很多人的记录集中保存在一处的地方,就是今天学的数据库。
데이터베이스는 서비스의 기억 장소다数据库是服务记东西的地方 핵심核心
데이터베이스(DB)는 서비스가 나중에 다시 꺼내 볼 수 있도록 정보를 모아 두는 곳입니다. 해킹당한 은행의 고객 정보도 여기에 있었습니다. 앞에서 F5를 누르자 비어 버린 연습 칸에는 이 저장하는 곳이 없었습니다.数据库(DB)是把信息存起来、让服务以后还能再取出来看的地方。被黑客攻击的银行,客户信息也存在这里。前面一按 F5 就空了的练习栏,就是缺了这个保存的地方。
Base는 「기초·바탕」이라는 뜻으로 익숙하지만, 남극 「세종기지」나 야구의 1루 베이스처럼 무언가가 모여 있고 거기서 출발하는 곳이라는 뜻도 있습니다. 그래서 Database는 자료를 한곳에 모아 두고, 서비스가 필요할 때 거기서 꺼내 쓰는 바탕입니다.Base 大家熟悉的是“基础”的意思,但它也有像南极“世宗基地”、棒球一垒垒包那样,东西聚在一起、从那里出发的地方的意思。所以 Database 就是把资料集中存放在一处,服务需要时从那里取用的基础。
이 말은 1960년대 초 미국에서 군사용 컴퓨터 시스템을 만들던 연구소(SDC)가 「data base」라고 두 단어로 띄어 쓰면서 시작되었습니다. 1963년 이 연구소가 「컴퓨터 중심 data base의 개발과 관리」라는 이름의 학술 모임을 열면서 널리 퍼졌고, 많이 쓰이자 나중에 database 한 단어로 붙여 쓰게 되었습니다.这个词始于 20 世纪 60 年代初:美国一家开发军用计算机系统的研究所(SDC)分成两个词写成“data base”。1963 年,这家研究所举办了名为“以计算机为中心的 data base 的开发与管理”的学术会议,这个词由此传开;用得多了,后来就连成一个词写作 database。
데이터베이스는 크게 두 가지다数据库大致分两类 핵심核心
데이터베이스는 정보를 저장하는 모양에 따라 크게 두 가지로 나눕니다. 표에 저장하는 RDBMS와, 표가 아닌 모양으로 저장하는 NoSQL입니다. 은행의 고객 정보처럼 항목이 정해진 기록은 대부분 표에 저장합니다.数据库按保存信息的样子,大致分成两类:存进表里的 RDBMS,和不用表来保存的 NoSQL。像银行客户信息这样项目固定的记录,大多存在表里。
정보를 표에 저장하고, 표와 표를 서로 이어 둡니다. 가장 많이 쓰이는 데이터베이스이고, 표 하나는 여러분이 아는 엑셀 표와 같은 모양입니다.把信息存进表里,并把表和表连起来。这是用得最多的数据库,一张表的样子就和大家熟悉的 Excel 表一样。
| 학년年级 | 반班 | 번호号 | 이름姓名 |
|---|---|---|---|
| 2 | 3 | 1 | 김민준金民俊 |
| 2 | 3 | 2 | 이서연李瑞妍 |
RDBMS가 아닌 데이터베이스를 모두 묶어 부르는 이름입니다. 문서, 「키 : 값」, 그래프처럼 저장하는 모양이 여러 가지이고, 쓰임에 따라 고릅니다.不是 RDBMS 的数据库,统称 NoSQL。保存的样子有很多种,比如文档、“键 : 值”、图,按用途来选。
{ "grade": 2, "class": 3,
"no": 1, "scores": [85, 92] }RDBMS의 R은 Relational, 「관계형」입니다. 왜 이런 이름인지는 학생 표와 성적 표를 직접 이어 본 뒤에 다시 봅니다. 11회에는 SQLite라는 RDBMS에 연결합니다.RDBMS 的 R 是 Relational,“关系型”。为什么叫这个名字,等亲手把学生表和成绩表连起来之后再来看。第 11 次课会连接一个叫 SQLite 的 RDBMS。
RDBMS의 표는 엑셀 성적표와 닮았다RDBMS 的表和 Excel 成绩表很像 핵심核心
엑셀로 성적표를 만들면 가로 한 줄에 학생 한 명의 점수를 적고, 세로 한 칸에는 국어·수학 같은 과목 하나를 모읍니다. 엑셀 왼쪽의 1, 2, 3이 행(row) 번호이고 위쪽의 A, B, C가 열(column)이었습니다. RDBMS의 표도 똑같이 행 하나가 기록 하나, 열 하나가 그 기록의 항목입니다.用 Excel 做成绩表时,横着一行写一个学生的分数,竖着一列放语文、数学这样的一门科目。Excel 左边的 1、2、3 是行(row)号,上面的 A、B、C 是列(column)。RDBMS 的表也一样:一行是一条记录,一列是这条记录的一个项目。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | 이름姓名 | 국어语文 | 수학数学 | 영어英语 |
| 2 | 김민준金民俊 | 85 | 92 | 78 |
| 3 | 이서연李瑞妍 | 90 | 74 | 88 |
| 4 | 김민준金民俊 | 77 | 81 | 95 |
주황 줄 = 행 하나 = 학생 한 명의 점수 파란 칸 = 열 하나 = 수학 橙色那一行 = 一行 = 一个学生的分数 蓝色那一列 = 一列 = 数学
「이 표의 한 행은 무엇인가?」에 한 문장으로 답할 수 있어야 합니다. 이 성적표라면 「학생 한 명의 점수」입니다. 그런데 2행과 4행은 이름이 같습니다. 누가 누구인지 어떻게 구별할까요? 다음 쪽에서 봅니다.要能用一句话回答“这张表的一行是什么?”。这张成绩表的答案是“一个学生的分数”。可是第 2 行和第 4 行名字一样,怎么分清谁是谁?下一页来看。
학번 20301이 한 명을 딱 집어낸다学号 20301 能准确指出一个人 핵심核心
학교에 김민준이 두 명이어도 「2학년 3반 1번」이라고 부르면 딱 한 명입니다. 이 세 숫자를 붙여 쓴 것이 학번 20301입니다. 표에서 이렇게 행 하나를 딱 집어내는 열을 기본키(PK, Primary Key)라고 하고, 학생 표에서는 학번이 기본키입니다.学校里就算有两个金民俊,只要说“2 年级 3 班 1 号”,就只指一个人。把这三个数字连起来写,就是学号 20301。表里这样能准确指出一行的列,叫主键(PK,Primary Key)。在学生表里,学号就是主键。
students| 학번学号 PK | 학년年级 | 반班 | 번호号 | 이름姓名 |
|---|---|---|---|---|
| 20301 | 2 | 3 | 1 | 김민준金民俊 |
| 20302 | 2 | 3 | 2 | 이서연李瑞妍 |
| 20401 | 2 | 4 | 1 | 김민준金民俊 |
김민준은 두 명이지만 학번이 20301과 20401로 달라서 서로 다른 학생으로 구별된다.金民俊有两个,但学号分别是 20301 和 20401,所以能分清是两个不同的学生。
Primary는 영어로 「첫째의, 가장 중요한」이라는 뜻이고, Key는 열쇠입니다. 그래서 Primary Key는 이 행을 대표하는 가장 중요한 열쇠, 기본키입니다.Primary 在英语里是“第一的、最重要的”,Key 是钥匙。所以 Primary Key 就是代表这一行的最重要的钥匙,也就是主键。
한 표 안에서 겹치지 않고, 비어 있지 않아야 합니다. 이름은 같을 수 있어서 기본키로 쓰지 않습니다.在一张表里要不重复、不为空。名字可能相同,所以不拿来当主键。
성적은 따로 표를 만들고 학번으로 잇는다成绩另做一张表,用学号连起来 핵심核心
시험을 볼 때마다 성적이 쌓이는데, 그때마다 학생 표에 이름과 반을 다시 적으면 같은 정보가 되풀이됩니다. 그래서 성적은 성적 표로 따로 만들고, 어느 학생의 성적인지는 학번만 적어 학생 표를 가리킵니다. 이렇게 다른 표의 기본키를 가져와 적은 열을 외래키(FK, Foreign Key)라고 합니다.每次考试成绩都会越积越多,要是每次都把姓名、班级重新写进学生表,同样的信息就会一再重复。所以成绩另做一张成绩表,是哪个学生的成绩,只写学号,指向学生表。像这样把别的表的主键拿过来写的列,叫外键(FK,Foreign Key)。
grades · 안 1方案 1| 학번学号 PK FK | 시험考试 PK | 국어语文 | 수학数学 | 영어英语 |
|---|---|---|---|---|
| 20301 | 1학기 중간第 1 学期期中 | 85 | 92 | 78 |
| 20301 | 1학기 기말第 1 学期期末 | 88 | 90 | 80 |
| 20302 | 1학기 중간第 1 学期期中 | 90 | 74 | 88 |
학생.학번 ← 성적.학번学生.学号 ← 成绩.学号
Foreign은 영어로 「외국의, 바깥의」라는 뜻입니다. 성적 표 안에 있지만 바깥, 곧 다른 표(학생 표)에서 가져온 열쇠라서 Foreign Key, 외래키(밖에서 온 키)입니다.Foreign 在英语里是“外国的、外面的”。它虽然在成绩表里,却是从外面、也就是从别的表(学生表)拿来的钥匙,所以叫 Foreign Key,外键(从外面来的键)。
학번 20301만으로는 중간고사인지 기말고사인지 모릅니다. 그래서 성적 표는 학번에 「어느 학기의 중간·기말」을 더한 두 칸을 합쳐 기본키로 씁니다. 이것을 복합 기본키라고 합니다.只看学号 20301,分不清是期中还是期末。所以成绩表在学号上再加“哪个学期的期中·期末”,两格合起来当主键。这叫复合主键。
과목이 바뀌면 과목도 기본키에 넣는다科目会变的话,就把科目也放进主键 핵심核心
안 1은 국어·수학·영어가 열로 고정되어 있습니다. 그런데 학년이나 학기가 바뀌면 물리학·화학처럼 과목이 달라집니다. 그래서 과목 열들을 과목·점수 두 열로 줄이고, 한 줄에 점수 하나만 적는 방법이 안 2입니다. 과목이 늘 같으면 안 1, 자주 바뀌면 안 2가 편합니다.方案 1 里,语文、数学、英语固定成了列。可年级或学期一变,就会换成物理、化学这样别的科目。所以把这些科目列缩成科目·分数两列、一行只写一个分数,就是方案 2。科目一直不变用方案 1,常变就用方案 2。
grades · 안 1方案 1| 학번学号 PK FK | 시험考试 PK | 국어语文 | 수학数学 | 영어英语 |
|---|---|---|---|---|
| 20301 | 1학기 중간第 1 学期期中 | 85 | 92 | 78 |
| 20301 | 1학기 기말第 1 学期期末 | 88 | 90 | 80 |
| 20302 | 1학기 중간第 1 学期期中 | 90 | 74 | 88 |
국어 · 수학 · 영어 세 열 ↓ 과목 · 점수 두 열语文 · 数学 · 英语 三列 ↓ 科目 · 分数 两列
grades · 안 2方案 2| 학번学号 PK FK | 시험考试 PK | 과목科目 PK | 점수分数 |
|---|---|---|---|
| 20301 | 1학기 중간第 1 学期期中 | 국어语文 | 85 |
| 20301 | 1학기 중간第 1 学期期中 | 수학数学 | 92 |
| 20301 | 2학기 중간第 2 学期期中 | 물리학物理 | 81 |
| 20301 | 2학기 중간第 2 学期期中 | 화학化学 | 87 |
| 안 1方案 1 | 안 2方案 2 | |
|---|---|---|
| 복합 기본키复合主键 | 학번 + 시험学号 + 考试 | 학번 + 시험 + 과목学号 + 考试 + 科目 |
| 한 행은一行是 | 한 학생의 한 번 시험 전체一个学生一次考试的全部 | 한 학생의 한 번 시험, 한 과목一个学生一次考试的一门科目 |
| 과목이 바뀌면科目变了的话 | 열을 새로 만든다要新建列 | 줄만 늘어난다只是多几行 |
학생 한 명에 성적 여러 줄, 1:N一个学生连着多行成绩:1:N 핵심核心
학생 표에서 김민준(20301)은 한 줄뿐이지만, 성적 표에는 20301이 적힌 줄이 시험을 볼 때마다 늘어납니다. 이렇게 한쪽의 하나에 다른 쪽 여러 개가 붙는 관계를 1:N(일 대 다)이라고 합니다. 외래키는 여러 개가 있는 쪽인 성적 표에 둡니다.学生表里金民俊(20301)只有一行,可成绩表里写着 20301 的行,每考一次就多一行。像这样一边的一个连着另一边的多个,叫 1:N(一对多)关系。外键放在“多”的那一边,也就是成绩表里。
students · 1| 학번学号 PK | 이름姓名 |
|---|---|
| 20301 | 김민준金民俊 |
| 20302 | 이서연李瑞妍 |
grades · N| 학번学号 FK | 시험考试 | 수학数学 |
|---|---|---|
| 20301 | 1학기 중간第 1 学期期中 | 92 |
| 20301 | 1학기 기말第 1 学期期末 | 90 |
| 20302 | 1학기 중간第 1 学期期中 | 74 |
| 20301 | 2학기 중간第 2 学期期中 | 95 |
학생 20301 한 줄 → 성적 20301 세 줄学生 20301 一行 → 成绩 20301 三行
학생 표에 「이 학생의 성적들」 칸을 만들면 한 칸에 점수를 여러 개 넣어야 합니다. 표의 한 칸에는 값 하나가 원칙이라 외래키는 N 쪽에 둡니다.如果在学生表里开一栏“这个学生的成绩”,一个格子就得塞好几个分数。表的一个格子原则上只放一个值,所以外键放在 N 那一边。
학번으로 두 표를 엮어서 본다用学号把两张表串起来看 핵심核心
「김민준(20301)의 수학 성적」을 보고 싶다면 어떻게 할까요? 학생 표에서 김민준의 학번 20301을 찾고, 그 학번을 들고 성적 표로 건너가 20301인 줄만 골라냅니다. 이렇게 같은 값(학번)을 따라 두 표를 엮어서 보는 것을 JOIN이라고 합니다.想看“金民俊(20301)的数学成绩”,该怎么做?先在学生表里找到金民俊的学号 20301,再拿着这个学号去成绩表,只挑出 20301 的那几行。像这样顺着同一个值(学号)把两张表串起来看,叫 JOIN。
| 학번学号 PK | 이름姓名 |
|---|---|
| 20301 | 김민준金民俊 |
| 20302 | 이서연李瑞妍 |
| 20401 | 김민준金民俊 |
| 학번学号 FK | 시험考试 | 수학数学 |
|---|---|---|
| 20301 | 1학기 중간第 1 学期期中 | 92 |
| 20301 | 1학기 기말第 1 学期期末 | 90 |
| 20301 | 2학기 중간第 2 学期期中 | 95 |
김민준 → 학번 20301 → 성적 표에서 20301인 줄만金民俊 → 学号 20301 → 成绩表里只看 20301 的行
학생과 성적을 표 두 개로 나누고, 학번이라는 같은 값으로 둘을 엮어 두었습니다. 이렇게 표와 표의 관계로 정보를 다루기 때문에 관계형(Relational) 데이터베이스, RDBMS라고 부릅니다. 이름이 같은 두 김민준도 학번이 달라 섞이지 않습니다. JOIN을 쓰는 문법(SQL)은 배우지 않습니다.把学生和成绩分成两张表,用学号这个相同的值把它们串起来。正因为用表和表之间的关系来处理信息,所以叫关系型(Relational)数据库,也就是 RDBMS。两个同名的金民俊,学号不同,也不会混在一起。不学写 JOIN 的语法(SQL)。
표는 하나로 충분한 경우가 많다很多时候一张表就够了
모든 서비스에 표를 여러 개 만들고 외래키를 넣을 필요는 없습니다. 저장할 대상이 한 종류뿐이면 표 하나가 맞는 설계입니다. 표는 학생과 성적처럼 서로 다른 대상이 섞이거나 같은 정보가 되풀이될 때만 나눕니다.不是每个服务都要建好几张表、加外键。要保存的对象只有一种时,一张表就是对的设计。只有像学生和成绩这样不同的对象混在一起,或者同样的信息一再重复时,才把表拆开。
| 서비스服务 | 표表 | 한 행은一行是 |
|---|---|---|
| 할 일 기록待办记录 | 1개 · 할 일1 张 · 待办 | 할 일 하나一件待办 |
| 하나 뽑기(6-2 예)抽一个(6-2 的例子) | 1개 · 뽑기 기록1 张 · 抽取记录 | 한 번 뽑은 결과抽一次的结果 |
| 학생 성적 정리整理学生成绩 | 2개 · 학생, 성적2 张 · 学生、成绩 | 학생 한 명 / 시험 성적 한 줄一个学生 / 一行考试成绩 |
| 계산기 · 추천 도구计算器 · 推荐工具 | 1개 · 사용 기록1 张 · 使用记录 | 한 번 넣은 값과 결과一次输入的值和结果 |
이 수업의 서비스는 사용자가 만든 의미 있는 기록을 최소 한 종류 저장하고, 다시 열었을 때 확인할 수 있어야 합니다. 결과만 보여 주는 도구라도 사용한 값과 결과를 남기면 됩니다. 저장했다는 표시를 내려고 서비스와 상관없는 값을 만들지는 않습니다.这门课的服务,至少要保存一种用户做出来的、有意义的记录,再次打开时还能看到。只显示结果的工具,也可以把用过的值和结果留下来。不要为了显得“有保存”而编造和服务无关的值。
기억할 것과 기억하지 않을 것부터 나눈다先分清要记住的和不用记住的
이제 내 서비스로 해 봅니다. 바로 표를 그리지 않고, 먼저 AI에게 내 PRD를 읽혀 이 서비스가 기억해야 할 것과 기억하지 않아도 될 것을 나누게 합니다. 나눈 결과를 내가 읽고 고친 다음, 기억해야 할 것만 표로 정리합니다.现在用自己的服务来做。不马上画表,而是先让 AI 读自己的 PRD,把这个服务要记住的和不用记住的分开。自己读过、改过分好的结果后,再只把要记住的整理成表。
- VS Code 탐색기 맨 위가
06인지 본다. 터미널 → 새 터미널을 열고 줄 끝이…\06>인지 본 뒤opencode를 입력한다.确认 VS Code 资源管理器最上方是06。打开 터미널 → 새 터미널(终端 → 新建终端),确认提示符结尾是…\06>,再输入opencode。 - 아래 ① 요청문을 보내고, 나눈 결과를 읽는다. 다르면 고쳐 달라고 말한다.发出下面的请求 ①,读一读分好的结果。不对就请它改。
PRD.md를 읽고, 이 서비스가 기억해야 할 것과 기억하지 않아도 될 것을 나눠 줘. 06 폴더에 데이터_예시.md 파일로 저장해 줘.
请读 PRD.md,把这个服务要记住的和不用记住的分开。 保存成 06 文件夹里的 데이터_예시.md 文件。
AI가 대화창에만 답하고 끝내면 「06 폴더에 데이터_예시.md 파일로 저장해 줘」를 한 번 더 보냅니다. 답이 멈추고 429가 보이면 1~2분 뒤 같은 요청을 다시 보냅니다.如果 AI 只在对话框里回答就结束了,就再发一次「保存成 06 文件夹里的 데이터_예시.md 文件」。回答停住并出现 429 时,等 1~2 分钟再发一次同样的请求。
기억해야 할 것만 표로 정리한다只把要记住的整理成表
나눈 결과에서 「기억하지 않아도 될 것」에 이름·전화번호 같은 개인정보가 들어가 있는지 먼저 봅니다. 그다음 기억해야 할 것만 표로 정리해 달라고 합니다. 열이나 키는 내가 설계하지 않고, AI가 그린 표를 오늘 배운 눈으로 읽습니다.先看分好的结果里,姓名、电话这类个人信息是不是放进了“不用记住的”。然后请 AI 只把要记住的整理成表。列和键不用自己设计,用今天学到的眼光去读 AI 画的表。
데이터_예시.md의 기억해야 할 것만 표로 정리해 줘. 표마다 예시 행을 3줄 넣고, 한 행이 무엇을 나타내는지 한 문장으로 적어 줘. 지금은 어떤 자료가 있는지 파악하는 단계야. 암호화 같은 보안은 다음에 정할 거니까, 기억할 내용만 간단히 정리해 줘. 데이터_예시.md 파일 아래에 이어서 저장해 줘.
请只把 데이터_예시.md 里要记住的整理成表。 每张表放 3 行示例,并用一句话写出一行代表什么。 现在是弄清楚有哪些资料的阶段。加密之类的安全问题以后再定,只简单整理要记住的内容。 接着保存在 데이터_예시.md 文件的下面。
데이터_예시.md에 남는 것데이터_예시.md 里留下的 | 어디에 쓰나用在哪里 |
|---|---|
| 기억해야 할 것 / 기억하지 않아도 될 것要记住的 / 不用记住的 | 7-2에서 PRD 5항 「저장해야 할 정보 · 저장하지 않을 정보」7-2 PRD 第 5 项“要保存的信息 · 不保存的信息” |
| 기억해야 할 것의 표要记住的东西的表 | 7-2에서 PRD 5항 「후보 테이블」7-2 PRD 第 5 项“候选数据表” |
미리 보기로 표를 펼쳐 본다用预览把表展开来看
탐색기에 데이터_예시.md가 생기면 눌러 엽니다. md 파일 그대로는 |와 - 기호가 섞여 읽기 어렵습니다. 6-1에서 메모를 볼 때처럼 미리 보기를 열면 칸이 나뉜 표로 보입니다.资源管理器里出现 데이터_예시.md 后点开它。md 文件原样看,夹着 | 和 - 符号,不好读。像 6-1 看备忘时那样打开预览,就能看到分好格子的表。
- 탐색기에서
데이터_예시.md를 마우스 오른쪽 단추로 누르고 미리보기 열기를 고른다.Ctrl+Shift+V를 눌러도 된다.在资源管理器中右键单击데이터_예시.md,选择 미리보기 열기(打开预览)。也可以按Ctrl+Shift+V。 - 표의 열 이름과 예시 세 줄, 그 아래 「한 행은 ~」 문장까지 끝까지 읽는다.把表的列名、三行示例,连同下面那句“一行是……”一直读到最后。

네 가지를 읽고, 다르면 다시 말한다读这四件事,不对就再告诉 AI 핵심核心
AI가 그린 표는 출발점입니다. 아래 네 가지를 내 눈으로 확인하고, 다르면 AI에게 다시 말해 고치게 합니다. AI가 파일을 고쳐도 괜찮습니다. 고친 뒤에 다시 끝까지 읽는 것이 오늘의 연습입니다.AI 画的表只是起点。用自己的眼睛确认下面四件事,不对就再告诉 AI,让它改。AI 改文件没关系。改完之后再从头读到尾,就是今天的练习。
| 읽고 확인할 것要读并确认的 | 다르면 이렇게 말한다不对就这样说 |
|---|---|
| 한 행은 무엇인가 — 「한 행은 ~」 문장이 내 서비스의 기록 하나를 말하나一行是什么 — “一行是……”这句话说的是不是自己服务的一条记录 | 「한 행이 무엇인지 더 쉬운 말로 다시 적어 줘.」「请用更简单的话重新写一行代表什么。」 |
기본키 — 표마다 한 행을 집어낼 열(id나 여러 칸의 조합)이 있나主键 — 每张表有没有能指出一行的列(id 或几格的组合) | 「표마다 기본키가 무엇인지 알려 주고, 없으면 넣어 줘.」「请告诉我每张表的主键是什么,没有就加上。」 |
| 실제 개인정보 — 예시에 진짜 이름·전화번호·주소가 들어갔나真实个人信息 — 示例里有没有真实的姓名、电话、地址 | 「예시에서 실제 개인정보를 빼 줘.」「请把示例里的真实个人信息删掉。」 |
| 표의 수 — 섞인 대상이 있거나 표가 세 개를 넘나表的数量 — 有没有混在一起的对象,表是不是超过三张 | 「표를 하나로 줄일 수 있는지 이유와 함께 알려 줘.」「请告诉我能不能减成一张表,并说明理由。」 |
표가 둘 이상이면 외래키 열이 여러 개가 붙는 쪽에 있는지도 봅니다. 데이터_예시.md는 제출물이 아니고, 7-2에서 PRD의 5항을 쓸 때 AI와 내가 함께 보는 재료입니다.如果有两张以上的表,还要看外键列是不是在“多”的那一边。데이터_예시.md 不是提交物,而是 7-2 写 PRD 第 5 项时,自己和 AI 一起看的材料。
이럴 때는 이렇게 한다遇到这些情况这样做 필요할 때需要时
연습 칸을 해 보고 AI에게 표를 맡기다 보면 막히는 자리가 비슷합니다. 내 상황과 같은 줄을 찾아 오른쪽대로 해 봅니다. 그래도 안 되면 손을 듭니다.试练习栏、把表交给 AI 时,卡住的地方都差不多。找到和自己情况一样的那一行,照右边做。还不行就举手。
F5를 눌렀더니 교과서 첫 쪽으로 간다按了 F5,教材跳回了第一页 | 목차에서 「사라지는 것」을 눌러 연습 칸으로 돌아갑니다. 목록이 비어 있으면 맞게 한 것입니다.在目录里点“消失的东西”,回到练习栏。列表是空的,就说明做对了。 |
F5를 눌렀는데 입력칸에 글자가 남아 있다按了 F5,输入框里还有字 | 브라우저가 입력칸 글자만 잠깐 기억해 둔 것입니다. 추가한 목록이 사라졌는지 봅니다.是浏览器暂时记住了输入框里的字。看看添加的列表有没有消失。 |
AI가 PRD.md를 찾지 못한다고 한다AI 说找不到 PRD.md | 터미널 줄 끝이 …\06>인지 봅니다. 아니라면 06 폴더를 다시 열고 새 터미널에서 OpenCode를 엽니다.看终端提示符结尾是不是 …\06>。不是的话,重新打开 06 文件夹,在新终端里打开 OpenCode。 |
미리 보기에 표가 아니라 | 기호가 그대로 보인다预览里不是表,而是原样显示 | 符号 | 「데이터_예시.md의 표를 Markdown 표 형식으로 고쳐 줘」를 보내고 미리 보기를 다시 봅니다.发「请把 데이터_예시.md 里的表改成 Markdown 表格式」,再看一次预览。 |
| AI가 열을 너무 많이 만들었다AI 建的列太多了 | 「꼭 필요한 열만 남겨 다섯 개 이하로 줄여 줘」를 보냅니다.发「请只留下必要的列,减到五个以内」。 |
FreeUsageLimitError나 429가 나오고 답이 멈춘다出现 FreeUsageLimitError 或 429,回答停住 | 무료 모델의 사용량이 잠깐 찬 것입니다. 1~2분 기다렸다가 같은 요청을 다시 보냅니다. 계속되면 손을 듭니다.是免费模型的用量暂时满了。等 1~2 分钟再发一次同样的请求。一直这样就举手。 |
오늘 남길 것今天要记住的
오늘은 서비스가 정보를 표에 나누어 기억하고, 보여 줄 때 합친다는 것을 보았습니다. 그리고 내 서비스가 기억할 것을 AI와 표로 그려 직접 읽고 검토했습니다. 다음 시간에는 이 표를 보며 PRD의 5. 데이터를 씁니다.今天看到了服务把信息分在几张表里记住、显示时再合起来。还和 AI 一起把自己的服务要记住的东西画成表,亲自读过、检查过。下节课就看着这张表写 PRD 第 5 项「数据」。
- 새로 고침하면 사라지는 서비스는 아무것도 저장하지 않은 것이다. 기억하려면 데이터베이스에 저장한다.一刷新就消失的服务,是什么都没保存。要记住,就要存进数据库。
- 표의 한 행은 기록 하나, 열은 그 기록의 항목이다. 먼저 「한 행은 무엇인가」를 말한다.表的一行是一条记录,列是这条记录的项目。先说出“一行是什么”。
- 기본키(Primary Key, 가장 중요한 열쇠)는 학번 20301처럼 행 하나를 집어낸다. 두 칸 이상을 합치면 복합 기본키다.主键(Primary Key,最重要的钥匙)像学号 20301 那样准确指出一行。两格以上合起来就是复合主键。
- 되풀이되는 정보는 표를 나누고, 외래키(Foreign Key, 다른 표에서 가져온 열쇠)로 다른 표의 기본키를 가리킨다. 1:N이면 외래키는 N 쪽에 둔다.重复的信息就拆表,用外键(Foreign Key,从别的表拿来的钥匙)指向另一张表的主键。1:N 时外键放在 N 那一边。
- JOIN은 학번처럼 같은 값을 따라 나눠 둔 표를 엮어서 보는 것이다. 표는 하나로 충분한 경우가 많다.JOIN 就是顺着学号这样的相同值,把分开的表串起来看。很多时候一张表就够了。
저장하고 다음 차시를 준비한다保存,准备下一课时
06 폴더에 남은 파일을 확인하고 닫습니다. 탭 이름 옆에 동그라미(●)가 있으면 저장하지 않은 것이니 Ctrl+S를 누릅니다. 7-2는 같은 폴더에서 이어서 합니다.确认 06 文件夹里留下的文件后再关掉。标签页名旁有圆点(●)就是还没保存,按 Ctrl+S。7-2 在同一个文件夹里接着做。
데이터_예시.md— 오늘 AI와 그린 표. 7-2에서 PRD 5항의 재료로 쓴다. 제출물은 아니다.데이터_예시.md— 今天和 AI 画的表。7-2 写 PRD 第 5 项时当材料用,不是提交物。PRD.md— 8회에 제출할 PRD. 7-2에서 5항을 채운다.PRD.md— 第 8 次课要提交的 PRD。7-2 填第 5 项。mockup·기획_메모.md·.agents·opencode.json— 지우지 않는다.mockup·기획_메모.md·.agents·opencode.json— 都不要删。
다음 차시에는 은행 해킹에서 이어 개인정보를 지키는 암호화를 짧게 보고, 같은 PRD.md를 다시 열어 5. 데이터를 채웁니다.下一课时接着银行黑客事件,简单看看保护个人信息的加密,再重新打开同一个 PRD.md,填好第 5 项「数据」。