20장. 교육 콘텐츠 설계와 종합 실습
수업 자료 묶기와 공유
이사할 때 상자마다 "주방 - 그릇", "욕실 - 수건"처럼 적어 두면 새집에서 바로 찾습니다. 상자 맨 위에 "깨지기 쉬움, 이쪽이 위"라는 안내문을 붙이면 옮기는 사람도 실수하지 않습니다. 수강생에게 나눠 줄 자료도 칸을 나눠 담고, 맨 위에 안내 파일을 둡니다.
그림의 네 상자가 수업 자료 묶음의 칸입니다. 여기서 이삿짐 상자가 폴더이고, 상자 위의 안내문이 README.md 입니다. 아래 띠의 requirements.txt 는 "이 짐을 풀려면 드라이버와 망치가 필요합니다"라는 쪽지와 같습니다. 비유와 다른 점도 있습니다. 이삿짐은 한 번 옮기면 끝이지만, 수업 자료는 수강생 서른 명이 저마다의 PC 에서 같은 결과를 얻어야 합니다. 그래서 버전과 씨앗을 함께 적습니다.
묶음의 짜임
| 자리 | 넣을 것 | 이 교안에서는 |
|---|---|---|
data/ | 연습 그림, 그림을 만든 코드 | data/ 와 tools/make_data.py |
code/ | 단계별 시작 코드 | code/chNN/ (실습 코드를 원고에서 뽑은 것) |
answers/ | 정답 마스크, 정답표, 채점 코드 | solutions/ 의 프로젝트 풀이 |
README.md | 목표, 준비, 실행 순서, 라이선스와 출처 | 과목의 README.md 와 "읽기 전에" |
requirements.txt | 패키지 이름과 버전 | setup.md 의 버전 표 |
라이선스와 출처 표기
| 자료 | 라이선스 | 적을 것 |
|---|---|---|
| OpenCV | Apache 2.0 (1장) | 회사 제품에도 쓸 수 있다. 라이브러리 이름과 라이선스를 적는다 |
| ultralytics (YOLO) | AGPL-3.0 (18장) | 고쳐서 서비스로 내놓으면 코드를 공개해야 한다. 수업 자료에 그렇게 적는다 |
| 직접 그린 가상 그림 | 내가 정한다 | "OpenCV 로 그린 가상 그림"이라고 밝힌다 |
| 공개 데이터(AI Hub 등) | 데이터마다 다르다 | 약관의 재배포 허용 여부를 보고, 출처와 이용 조건을 적는다 |
결과를 공유하는 법
| 나눌 곳 | 무엇을 | 형식 |
|---|---|---|
| 보고서 | 결과 표와 전후 그림, 결론 문단 | csv, png, 문서 |
| 발표 | 한 장 요약 그림과 숫자 하나 | png 한 장 |
| 수강생 | 학습지(문제 그림과 빈칸), 자료 묶음 | png, zip |
| 다른 강사 | 자료 묶음과 채점 기준표 | zip, README |
짧은 예시
지금 PC 에 깔린 패키지 버전을 읽어 requirements.txt 에 들어갈 줄을 만듭니다. 파일로 쓰는 것은 실습 5에서 합니다.
from importlib.metadata import version # metadata: 설치된 패키지의 이름·버전 정보
for pkg in ["opencv-python", "numpy", "matplotlib", "pandas"]:
# == 은 "꼭 이 버전"이라는 뜻이다. >= 로 쓰면 "이 버전 이상"이다
print(f"{pkg}=={version(pkg)}")나눠 주기 전 확인 목록
주의할 점
- 가상환경 폴더(
.venv)는 묶음에 넣지 않습니다. 수강생 PC 에서requirements.txt로 새로 만듭니다(1장). - 버전을 적지 않으면 몇 달 뒤 새 판이 나와 함수 이름이 바뀌었을 때 실습이 깨집니다. 수업에서 확인한 버전을 적어 둡니다.