
생성 수정
IBM * 레드햇 AX 과정 · 2강
개발 도구의 역할과 첫 실습
2026년 4월 28일(화) ~ 5월 1일(금)
7. 첫날 설치한 네 도구 — 각각 다른 범주
7.1 무작위로 고른 네 개가 아닙니다
개강 첫날 설치 목록은 Cursor · 옵시디언 · Git · GitHub였습니다. 역할이 하나도 겹치지 않는 네 개입니다. 각각 다른 범주에 속합니다.
| 도구 | 속하는 범주 | 이 범주의 정의 | 같은 범주의 다른 것 |
|---|---|---|---|
| Cursor | 에디터 (Editor) | 코드를 쓰고 고치는 곳 | VS Code, Zed, IntelliJ |
| 옵시디언 (Obsidian) | 노트 앱 (Knowledge Base) | 생각을 .md 로 쌓아두는 곳 | Notion, Logseq |
| Git | 버전 관리 도구 (VCS) | 변경 이력을 기록하는 프로그램 | (사실상 없음) |
| GitHub | 원격 저장소 (Remote Repository) | 그 기록을 올려두는 서비스 | GitLab, Bitbucket |
설치 링크:
| 도구 | 링크 |
|---|---|
| Cursor | 🔗 https://cursor.com/ |
| 옵시디언 | 🔗 https://obsidian.md/download |
| Git | 🔗 https://git-scm.com/downloads |
| GitHub | 🔗 https://github.com |
| Chrome | 🔗 https://www.google.com/chrome/ |
7.2 핵심 경계 — 실행되는가, 읽히는가
Cursor와 옵시디언은 둘 다 글자를 편집합니다. 그래서 "같은 종류 아닌가" 싶습니다. 아닙니다. 다루는 대상이 다릅니다.
| Cursor | 옵시디언 | |
|---|---|---|
| 다루는 것 | 실행될 것 (코드) | 읽힐 것 (문서) |
| 파일 | .py, .js, .json | .md |
| 결과 | 프로그램이 동작함 | 사람이 이해함 |
| 축 5 위치 | Body 쪽 (구상·실행) | Soul 쪽 (추상·의미) |
⭐ "실행되는가 / 읽히는가" 가 이 둘을 가르는 축입니다.
7.3 CLAUDE.md 가 왜 .md 인가
개강 첫날 워크숍 영상에서 CLAUDE.md 라는 파일 이야기가 나왔습니다.
AI에게 프로젝트의 규칙을 알려주는 파일입니다. "이 프로젝트는 이런 규칙으로 작업해라" 를 적어둡니다.
왜 .py 가 아니라 .md 인가 — 방금 그은 경계가 그대로 답입니다.
그건 AI가 읽을 문서이지 실행할 코드가 아니기 때문입니다.
마크다운을 쓰는 이유는 셋입니다.
| 이유 | 설명 |
|---|---|
| 사람도 읽힘 | 태그 없이 평문에 가까워 그냥 읽어도 이해됨 |
| 구조가 있음 | # 제목, - 목록, 표로 계층을 표현할 수 있음 |
| 버전 관리가 됨 | 순수 텍스트라 Git이 어느 줄이 바뀌었는지 정확히 보여줌 |
⭐ 세 번째가 결정적입니다. .docx 나 .pdf 로 규칙을 적으면 Git이 "파일이 바뀌었다"까지만 알려줍니다.
.md 는 어느 문장이 어떻게 바뀌었는지 보여줍니다. 규칙 문서야말로 이력이 중요합니다.
앞으로 다시 만납니다 마크다운(Markdown)과 마크업(Markup)의 차이 — 누구를 위한 이름표인가 — 는 3주차 에서 제대로 다룹니다. 그리고 AI에게 규칙 파일을 주는 이 방식은 나중에 하네스(Harness) 엔지니어링이라는 이름으로 다시 나옵니다. 요지는
에이전트 = 모델 + 하네스. LLM을 날것으로 쓰지 말고, 규칙 문서(가이드)와 검증 장치(센서)로 감싸라는 것입니다.
7.4 에디터 · IDE · 터미널
같이 헷갈리는 세 단어를 정리해 둡니다.
| 에디터 (Editor) | IDE | 터미널 (Terminal) | |
|---|---|---|---|
| 무엇 | 글자를 편집하는 프로그램 | 편집 + 실행 + 디버깅 + 빌드를 통합 | 글자 명령으로 컴퓨터를 다루는 창 |
| 영문 | — | Integrated Development Environment | CLI (Command Line Interface) |
| 예 | 메모장, Vim | IntelliJ, Visual Studio | PowerShell, bash |
| Cursor는 | ✅ 에디터이면서 | ✅ 확장 기능으로 IDE 역할도 함 | ✅ 안에 터미널이 내장돼 있음 |
Cursor 안에서 터미널을 열면, 에디터와 터미널이 같은 폴더를 보고 있게 됩니다. 이게 중요한 이유는 뒤에서 나옵니다 — 명령은 현재 폴더 기준으로 동작하기 때문입니다.
터미널 생존 명령어 8개만 먼저 익혀둡니다.
| 명령 | 뜻 |
|---|---|
pwd | 지금 어느 폴더에 있는지 |
ls (윈도우: dir) | 파일 목록 |
cd 폴더명 | 폴더 이동 |
mkdir 새폴더 | 폴더 생성 |
touch 파일 (윈도우: New-Item) | 파일 생성 |
rm 파일 (폴더는 rm -r) | 삭제 ⚠️ |
python 파일.py | 파이썬 파일 실행 |
git status | Git 상태 확인 |
💡 Tab 키 = 자동완성 / --help = 도움말 / ⚠️ rm -r 은 되돌릴 수 없습니다.
8. 실습 — 이번 주에 손으로 한 것
이 절은 순서대로 따라 하면 재현되도록 썼습니다. 막히는 지점에는 ⚠️ 로 표시해 두었습니다.
8.1 Cursor 설치
- 공식 홈페이지 접속 — 🔗 https://cursor.com/
Download클릭 (윈도우는.exe, 맥은.dmg)- 받은 파일 실행
- 설치 완료
설치 후 두 가지 설정
| 하는 일 | 방법 |
|---|---|
| 폴더에서 Cursor를 터미널로 열기 | 작업 폴더 안에서 Cursor를 열면, 내장 터미널이 그 폴더를 기준으로 열림 |
| 파일 아이콘 테마 적용 | 설정창의 해당 항목에 material 을 복사해 붙여넣고 화살표 아이콘 클릭 |
💡 아이콘 테마는 취향 문제로 보이지만, 파일 종류가 한눈에 구분되면 폴더 구조를 읽는 속도가 달라집니다. 앞으로 폴더가 수십 개로 늘어납니다.
8.2 크롬을 실습 환경으로 맞추기
브라우저를 그냥 쓰는 것과 작업 환경으로 세팅하는 것은 다릅니다.
- 크롬 설치 — 🔗 https://www.google.com/chrome/
- 북마크 바 표시:
Ctrl + Shift + B - AI 서비스(Claude / Gemini / ChatGPT)를 각각 열고 주소창의 별표(☆) 를 눌러 북마크
- 북마크할 때 이름을 지워서 아이콘만 남기기
- 북마크 바 빈 곳에서 우클릭 → [앱 단축키 표시]
- 드래그로 순서 변경
이름을 지우는 이유: 북마크 바의 가로 폭은 한정돼 있습니다. 이름을 지우면 아이콘만 남아 훨씬 많은 항목이 한 줄에 들어갑니다. 그리고 매일 쓰는 도구는 어차피 아이콘만으로 구분됩니다.
⭐ 세 개의 AI를 나란히 놓는 이유는 비교하며 쓰기 위해서입니다. 같은 질문을 셋에 던져보면 각 모델의 성격이 금방 드러납니다. 1.7절의 "직접 써봤는가"가 이것입니다.
8.3 Git 설치와 GitHub 가입
| 순서 | 하는 일 | 링크 |
|---|---|---|
| 1 | Git 설치 (설치 옵션은 기본값 그대로) | 🔗 https://git-scm.com/downloads |
| 2 | GitHub 가입 | 🔗 https://github.com |
| 3 | 설치 확인 | 터미널에서 git --version |
⚠️ 설치 직후 터미널에서 git 이 안 먹으면 열려 있던 터미널을 껐다 켭니다.
5.5절에서 본 것과 똑같은 원리입니다. 설치 프로그램이 PATH 를 고쳤지만, 이미 떠 있는 터미널은 모릅니다.
8.4 아나콘다 설치
가장 많이 막히는 단계입니다. 특히 경로와 환경변수입니다.
설치
- 🔗
anaconda.com/download접속 → 설치 파일 다운로드 Select Installation Type에서Just Me (recommended)선택 →Next >Choose Install Location의 Destination Folder를C:\ProgramData\Anaconda3로 지정
⚠️ 가장 흔한 함정: 설치 경로가 랜덤으로 다르게 잡히는 경우가 아주 많습니다. 화면에 뜬 경로를 반드시 눈으로 확인하고, 다르면 그 경로를 기억해 두세요. 아래 환경변수를 그 경로 기준으로 넣어야 합니다. 이 한 가지가 대부분의
conda에러의 원인입니다.
설치 확인 — 해당 폴더에 아래 폴더들이 생겼는지 봅니다.
condabin conda-meta DLLs envs etc include
Lib Library libs Menu pkgs Scripts
환경변수 설정 — 시스템 변수(S) 에 4개를 새로 만듭니다.
| 변수 이름 | 값 |
|---|---|
ANACONDA_HOME1 | C:\ProgramData\Anaconda3 |
ANACONDA_HOME2 | C:\ProgramData\Anaconda3\Scripts |
ANACONDA_HOME3 | C:\ProgramData\Anaconda3\Library\bin |
ANACONDA_HOME4 | C:\ProgramData\Anaconda3\Library\mingw-w64\bin |
이어서 Path 를 선택 → 편집(I)... → 아래 4줄을 추가하고 확인.
%ANACONDA_HOME1%
%ANACONDA_HOME2%
%ANACONDA_HOME3%
%ANACONDA_HOME4%
💡 왜 변수를 4개 만들고 다시 Path에 넣는가
경로를 Path 에 직접 4줄 박아 넣어도 동작은 합니다. 하지만 나중에 아나콘다를 다른 곳으로 옮기면 4줄을 전부 고쳐야 합니다.
변수로 한 번 감싸두면 ANACONDA_HOME1 하나만 고치면 나머지가 따라옵니다.
이게 프로그래밍에서 말하는 한 곳에서만 정의하기의 첫 사례입니다.
PATH가 하는 일 터미널에conda라고 치면, 컴퓨터는PATH에 적힌 폴더들을 위에서부터 차례로 뒤져서conda라는 실행 파일을 찾습니다. 어디에도 없으면command not found입니다. 즉PATH는 "명령어를 어느 폴더에서 찾을지 적어둔 목록" 입니다.
검증 — 터미널을 새로 열고 세 가지를 확인합니다.
conda --version
# → conda 24.1.2
conda env list
# → base C:\ProgramData\Anaconda3
python --version
# → Python 3.11.7
⚠️ conda env list 결과에 base 만 있는 것이 정상입니다. 아직 가상환경을 안 만들었기 때문입니다.
8.5 가상환경 만들기
conda create -n venv python=3.13 -y
conda init
여기서 Cursor를 완전히 종료했다가 다시 실행합니다. (창만 닫는 게 아니라 프로그램 종료)
conda activate venv
성공 신호: 프롬프트 앞이 (base) 에서 (venv) 로 바뀝니다.
(base) C:\project> → (venv) C:\project>
⚠️ 에러가 나면 그 자리에서 바로 물어보세요. 환경 문제는 뒤로 미룰수록 원인이 겹쳐서 찾기 어려워집니다.
| 증상 | 대부분의 원인 |
|---|---|
conda: command not found / 'conda'은(는) 인식되지 않습니다 | PATH 환경변수 등록 누락 (8.4) |
conda activate 가 반응 없음 | conda init 후 에디터를 재시작하지 않음 |
| 환경은 만들어졌는데 프롬프트가 안 바뀜 | 위와 같음 |
| 설치했는데 폴더가 안 보임 | 설치 경로가 다른 곳으로 잡힘 |
8.6 판다스가 이 환경에서 동작하는지 확인
가상환경을 만들었으면 거기서 실제로 라이브러리가 import 되는지 확인해야 합니다. 이 확인을 건너뛰면, 나중에 코드가 안 돌 때 코드 문제인지 환경 문제인지 구분이 안 됩니다.
준비
- 프로젝트 안
apps폴더에titanic_starter.py를 만듭니다. - 같은 폴더에
Titanic-Dataset.csv를 둡니다.
코드
from pathlib import Path
import pandas as pd
csv_path = Path(__file__).parent / "Titanic-Dataset.csv"
df = pd.read_csv(csv_path)
print(df.head())
print(df.shape)
| 줄 | 하는 일 |
|---|---|
from pathlib import Path | 경로를 다루는 표준 도구를 불러옴 |
import pandas as pd | 판다스를 pd 라는 이름으로 불러옴 |
Path(__file__).parent | 이 파이썬 파일이 있는 폴더 |
/ "Titanic-Dataset.csv" | 그 폴더 안의 CSV 파일 경로 |
pd.read_csv(...) | CSV를 읽어 DataFrame(2차원 표)으로 만듦 |
df.head() | 앞에서 5행만 보기 |
df.shape | (행 수, 열 수) |
⭐ Path(__file__).parent 를 쓰는 이유가 중요합니다.
그냥 "Titanic-Dataset.csv" 라고만 쓰면, 파일을 어느 폴더에서 실행했느냐에 따라 찾기도 하고 못 찾기도 합니다.
__file__ 기준으로 쓰면 어디서 실행하든 같은 파일을 가리킵니다.
("실행하는 위치 기준"과 "파일이 있는 위치 기준"의 차이 — 이건 나중에 .env 파일에서 다시 문제가 됩니다.)
실행 — (venv) 가 붙은 터미널에서:
python apps\titanic_starter.py
정상 출력
PassengerId Survived Pclass ... Fare Cabin Embarked
0 1 0 3 ... 7.2500 NaN S
1 2 1 1 ... 71.2833 C85 C
...
[5 rows x 12 columns]
(891, 12)
출력 읽는 법
| 보이는 것 | 뜻 |
|---|---|
PassengerId Survived Pclass ... Fare Cabin Embarked | 열 이름들 |
... | 데이터가 길어서 가운데 열을 생략한 것 (에러 아님) |
[5 rows x 12 columns] | head() 가 보여준 5행 × 전체 12열 |
(891, 12) | 전체가 891행 12열 |
검증 — CSV를 에디터로 열어 첫 데이터 행을 봅니다.
1 / 0 / 3 / Braund, Mr. Owen Harris / male / 22 ...
터미널 출력의 첫 줄(0 1 0 3 ...)과 일치하면 성공입니다.
PassengerId=1, Survived=0, Pclass=3 이 그대로 보입니다.
⭐ 이 확인이 뜻하는 것: 파이썬이 설치됐고, 가상환경이 활성화됐고, 그 환경에 판다스가 있고, 파일 경로가 맞다 — 네 가지가 한 번에 검증된 것입니다.
8.7 깃허브에 코드 올리기
저장소 만들기
github.com/[내아이디]접속 →Repositories탭 → 초록색New버튼- 입력값:
| 항목 | 값 |
|---|---|
| Repository name | example-cloud (is available. 표시 확인) |
| Visibility | Public |
| Template | No template |
| Add README | Off |
.gitignore | 없음 |
| License | 없음 |
Create repository클릭
⚠️ README·gitignore·license를 전부 끄는 이유: 이것들을 켜면 GitHub가 원격에 커밋을 하나 먼저 만듭니다.
그러면 아직 커밋이 없는 내 로컬과 이력이 어긋나서, 첫 push 가 거부됩니다.
빈 저장소로 만들어야 아래 6줄이 그대로 통합니다.
올리기
저장소를 만들면 나오는 …or create a new repository on the command line 코드 블록을 복사한 뒤,
README.md 부분을 지우고 . 으로 바꿔 실행합니다.
git init
git add .
git commit -m "첫번째 커밋"
git branch -M main
git remote add origin https://github.com/[내아이디]/example-cloud.git
git push -u origin main
성공 신호
* [new branch] main -> main
branch 'main' set up to track 'origin/main'
- 첫 줄: 원격에
main이라는 가지가 새로 생겼다 - 둘째 줄: 앞으로 로컬
main은 원격origin/main을 따라간다 (이게-u의 효과)
에러가 나면 — 대부분 신원 정보가 없어서입니다.
git config --global user.name "사용자이름"
git config --global user.email "이메일주소"
설정한 뒤 git commit 부터 다시 실행합니다.
8.8 도메인 구입
배포는 아직 멀었지만, 내 이름의 주소를 하나 확보합니다. (4.6절의 이유)
- 도메인 등록 서비스(가비아)의 도메인 검색창(
www.뒤 입력란)에 원하는 이름을 입력하고검색 - 검색 결과에서 원하는 도메인(예:
example.cloud) 행의선택클릭 → 우측 "도메인 장바구니"에 담김 → 하단신청하기 1 신청 정보 입력단계⚠️ "도메인 1" 카드의 기간 드롭다운이 기본
3년입니다. 반드시1년으로 바꾸세요. 이걸 놓치면 3년치가 결제됩니다. 가장 많이 놓치는 지점입니다.⑤ 결제 금액 계산확인 — 프로모션 도메인의 경우 예를 들면 이런 구성입니다.
| 항목 | 금액 |
|---|---|
| 도메인 1 (정가) | 50,000원 |
| 할인 | −47,500원 |
| 부가세 | 250원 |
| 결제 예상 금액 | 2,750원 |
확인 후 다음 단계
5. (선택) "새로운 기기에서 로그인 되었습니다" 확인 메일이 오면 예, 맞습니다. 클릭. 메일이 없으면 그대로 진행
6. 소유자 정보 인증
이메일에 회원가입 시 쓴 주소 입력 →인증 메일 발송- 메일함에서
[가비아] 인증번호를 안내해 드립니다.를 열어 인증번호 확인 - 입력란에 넣고
확인(⚠️ 제한시간 약 3분) 소유자명(영문)은Hong.Gil-dong형식 (성.이름)
2 서비스 비용 결제→ 완료 화면에결제가 성공적으로 완료되었습니다.표시
💡 첫 해 프로모션 가격과 갱신 가격은 다릅니다. 1년 뒤에는 정가로 갱신됩니다. 그래서 기간을 1년으로 줄여 두고, 실제로 쓸지 1년 뒤에 다시 판단하는 편이 낫습니다.
8.9 막힐 때 — 에러를 전달하는 법
이번 주부터 계속 쓰게 될 기술입니다. 명령어를 외우는 것보다 상황을 설명하는 능력이 중요합니다.
| ❌ 이렇게 말하면 | ✅ 이렇게 말하면 | |
|---|---|---|
| 예 | "안 돼요" / "오류남" | "가상환경 만들고 conda activate venv 를 실행했는데 아무 반응이 없어요" |
전달할 4요소
| # | 요소 | 예 |
|---|---|---|
| 1 | 상황 | 아나콘다 설치 후 가상환경을 만드는 중 |
| 2 | 실행한 명령 | conda activate venv |
| 3 | 오류 메시지 원문 | CommandNotFoundError: Your shell has not been properly configured... |
| 4 | 원하는 결과 | 프롬프트가 (venv) 로 바뀌는 것 |
⭐ 3번은 요약하지 말고 그대로 복사해서 붙여넣으세요.
에러 메시지의 정확한 문구가 원인을 특정하는 가장 강한 단서입니다.
"에러가 났다"는 정보가 거의 없지만, CommandNotFoundError 라는 단어 하나면 원인이 좁혀집니다.
9. 이 주의 읽을거리와 그 맥락
이 주에 함께 본 자료들입니다. 각각 왜 개강 주에 나왔는지가 중요합니다.
9.1 Claude Code 창시자 Boris의 30분 워크숍
한국어 자막이 있는 30분짜리 워크숍 영상입니다. 다룬 내용은 넷입니다.
| 주제 | 요지 |
|---|---|
| 코드베이스 Q&A | 새 프로젝트에 투입됐을 때, 코드를 읽는 대신 AI에게 물어서 온보딩 시간을 단축 |
CLAUDE.md 계층 설계 | 프로젝트 규칙을 문서로 적어두되, 폴더 계층마다 다른 규칙을 둘 수 있음 |
claude -p (SDK) | AI 호출을 Unix 유틸리티처럼 파이프에 끼워 쓰기 |
| SSH + tmux 병렬 세션 | 원격 서버에서 여러 세션을 동시에 띄워 병렬로 작업 |
왜 개강 첫날에 이게 나왔는가 — 이 수업이 무엇을 목표로 하는지를 첫날 보여주기 위해서입니다. 목표는 "AI에게 코드를 받아 쓰는 것"이 아니라 "AI를 도구로 쓰는 개발 환경 자체를 구성하는 것" 입니다.
네 주제 중 뒤의 둘(claude -p, SSH+tmux)은 지금 당장은 이해되지 않아도 됩니다.
다만 "AI는 채팅창 안에만 있는 게 아니다" 는 감각만 가져가면 됩니다.
이 영상에 나온 CLAUDE.md 방식은 나중에 하네스 엔지니어링이라는 이름으로 이 수업의 큰 줄기가 됩니다.
9.2 IBM의 AI 정의 정리
AI / 머신러닝 / 딥러닝 / 생성형 AI / AI 에이전트, 약한 AI vs 강한 AI, 그리고 윤리·거버넌스까지 이어지는 개념 계층 자료입니다.
왜 이 자료인가: 1장 전체가 이 자료의 구조를 따라갑니다. 중요한 것은 개별 정의가 아니라 정의들이 계층으로 배열되어 있다는 사실 자체입니다. IBM 같은 회사가 개념 계층 문서를 공들여 만드는 이유는, 경계가 흐려지면 계약과 규제가 성립하지 않기 때문입니다. "우리 제품은 AI입니다"와 "우리 제품은 생성형 AI입니다"는 법적으로 다른 문장이 되어 가고 있습니다.
9.3 Red Hat AI
🔗 https://www.redhat.com/ko/products/ai
오픈소스 기반의 AI 솔루션 플랫폼입니다.
왜 이 주에 나왔는가: 1.6절의 "API로 부르기 ↔ 로컬에서 돌리기" 축의 기업판입니다. 기업이 자기 데이터를 외부 AI 서비스에 보내지 않고 자기 인프라 안에서 AI를 돌리려 할 때 쓰는 종류의 제품입니다. 축 2(로컬 ↔ 원격)가 개인의 편의 문제가 아니라 기업의 보안·규제 문제가 되는 지점입니다.
9.4 「바퀴를 재발명하지 않기」
🔗 https://blex.me/@baealex/바퀴를-재발명하지-않기
왜 이 주에 나왔는가: 6.4절에서 다뤘습니다.
같은 날 import pandas 를 처음 실행했기 때문입니다.
import 한 줄을 치는 순간이 "남이 만든 것을 내 것에 들여놓는" 첫 경험입니다.
그 순간에 이 글이 배치된 것입니다.
9.5 EBS 《위대한 수업》 AI 시즌
제프리 힌튼, 얀 르쿤, 스튜어트 러셀 등의 라인업을 소개하는 쇼츠 영상입니다.
왜 이 주에 나왔는가: 개강 주는 동기를 만드는 주이기도 합니다. 그리고 이 세 사람의 이름은 1장의 계층과 직접 이어집니다. 힌튼과 르쿤은 딥러닝을 지금의 모습으로 만든 사람들이고, 러셀은 AI 안전·거버넌스를 대표하는 사람입니다. IBM 자료의 마지막 계층(윤리·거버넌스)이 왜 계층의 일부인지가 여기서 설명됩니다.
9.6 네이버 국가대표 AI 탈락 — 표절 논란
국가대표 AI 사업에서 한 기업이 탈락했고, 핵심 장치에 외부(중국산) 기술을 사용한 것이 드러나 표절 논란이 일었다는 보도입니다.
왜 이 주에 나왔는가 — 뉴스 자체가 아니라 질문 때문입니다.
"무엇을 가져다 쓰고, 무엇을 직접 만드는가?"
같은 주에 배운 "라이브러리를 import 해라(바퀴를 재발명하지 마라)"와 정면으로 부딪히는 사례입니다. 그래서 이 뉴스가 6.5절의 경계표를 만드는 계기가 됩니다.
⭐ 개강 첫 주에 이 질문을 받아두는 것이 중요합니다. 앞으로 라이브러리를 수십 개 설치하게 됩니다. 그때마다 "이건 가져다 쓰는 쪽인가, 직접 만드는 쪽인가"를 자동으로 묻게 되면, 4개월 뒤 클린 아키텍처를 배울 때 그 원 그림이 이미 머릿속에 있게 됩니다.
부록 A. 용어 사전
| 용어 | 영문 | 상위 범주 | 정의 |
|---|---|---|---|
| 인공지능 | Artificial Intelligence (AI) | — | 사람의 지적 작업을 기계가 수행하게 하는 것 전부 |
| 머신러닝 | Machine Learning (ML) | AI | 규칙을 사람이 적지 않고 데이터에서 스스로 찾아내는 AI |
| 딥러닝 | Deep Learning (DL) | 머신러닝 | 신경망을 여러 층 쌓아 특징까지 스스로 찾는 머신러닝 |
| 생성형 AI | Generative AI | 딥러닝 | 라벨이 아니라 새 콘텐츠를 만들어내는 딥러닝 |
| AI 에이전트 | AI Agent | 시스템 형태 | 목표를 위해 스스로 계획하고 도구를 쓰는 시스템 |
| 에이전트 루프 | Agent Loop | 동작 방식 | 생각 → 계획 → 실행 → 확인 → 수정의 반복 |
| 챗봇 | Chatbot | 시스템 형태 | 대화와 응답만 하는 시스템 (도구를 쓰지 않음) |
| 약한 AI | Narrow AI | AI의 성질 | 정해진 한 가지 일만 하는 AI (현존하는 전부) |
| 강한 AI | General AI (AGI) | AI의 성질 | 사람처럼 아무 일이나 하는 AI (아직 없음) |
| 특징 | Feature | ML 개념 | 판단의 근거가 되는 입력 속성 (나이·성별 등) |
| 라벨 | Label | ML 개념 | 맞혀야 하는 정답 값 |
| 지도학습 | Supervised Learning | ML 분류 | 정답이 주어진 데이터로 학습하는 방식 |
| 분류 | Classification | 지도학습 문제 | 답이 끊어진 범주인 문제 |
| 회귀 | Regression | 지도학습 문제 | 답이 이어진 숫자인 문제 |
| 이진 분류 | Binary Classification | 분류 문제 | 답이 정확히 두 개인 분류 문제 |
| 다중 분류 | Multi-class Classification | 분류 문제 | 답이 셋 이상인 분류 문제 |
| One-vs-Rest | OvR | 기법 | 다중 분류를 이진 분류 여러 개로 분해하는 방법 |
| 토큰 | Token | AI 개념 | AI가 글을 읽고 쓰기 위해 나눈 글자 조각 |
| 컨텍스트 윈도 | Context Window | AI 개념 | AI가 한 번에 펼쳐놓고 볼 수 있는 작업 공간의 크기 |
| RAG | Retrieval-Augmented Generation | 기법 | 필요한 부분만 검색해서 컨텍스트에 넣는 방식 |
| 벤치마크 | Benchmark | 평가 | 모델 성능을 재는 표준 시험 |
| 가상환경 | Virtual Environment | 격리 기법 | 프로젝트마다 독립된 파이썬 패키지 집합을 갖게 하는 장치 |
| 컨테이너 | Container | 격리 기법 | 앱 + OS 라이브러리까지 격리하는 방식 (Docker) |
| 가상 머신 | Virtual Machine (VM) | 격리 기법 | OS 전체를 통째로 격리하는 방식 |
| 의존성 지옥 | Dependency Hell | 문제 상황 | 프로젝트 간 라이브러리 버전이 충돌해 해결이 불가능해지는 상태 |
| 아나콘다 | Anaconda | 파이썬 배포판 | 파이썬 + 데이터 도구 + conda 를 묶어 배포하는 것 |
| conda | conda | 관리 도구 | 아나콘다의 환경·패키지 관리자 |
| base 환경 | base | conda 환경 | 아나콘다 설치 시 만들어지는 전역 기본 환경 |
| 패키지 | Package | 코드 단위 | 가져다 쓰는 코드 부품 |
| 의존성 | Dependency | 관계 | 내 프로젝트가 꼭 기대고 있는 부품 |
| 환경변수 | Environment Variable | OS 설정 | 프로그램이 참조하는 시스템 수준의 설정값 |
| PATH | PATH | 환경변수 | 명령어를 어느 폴더에서 찾을지 적어둔 목록 |
| 셸 | Shell | 프로그램 | 명령을 받아 OS에 전달하는 프로그램 (PowerShell, bash) |
| 터미널 | Terminal | 인터페이스 | 글자 명령으로 컴퓨터를 다루는 창 |
| CLI | Command Line Interface | 인터페이스 | 글자 명령 방식의 인터페이스 |
| 에디터 | Editor | 프로그램 | 글자를 편집하는 프로그램 |
| IDE | Integrated Development Environment | 프로그램 | 편집·실행·디버깅·빌드를 통합한 개발 환경 |
| 라이브러리 | Library | 코드 묶음 | 내가 호출해서 쓰는, 남이 만든 코드 |
| 프레임워크 | Framework | 코드 묶음 | 그쪽이 나를 호출하는 구조 중심의 뼈대 |
| 제어의 역전 | Inversion of Control (IoC) | 원리 | 호출의 주도권이 내 코드에서 프레임워크로 넘어가는 것 |
| 판다스 | pandas | 라이브러리 | 표 형태 데이터를 다루는 파이썬 라이브러리 |
| 데이터프레임 | DataFrame | 자료구조 | 행과 열로 된 2차원 표 (pandas의 핵심 타입) |
| 시리즈 | Series | 자료구조 | 열 하나. 1차원 |
| CSV | Comma-Separated Values | 파일 형식 | 쉼표로 열을 구분한 표 데이터 파일 |
| 캐글 | Kaggle | 플랫폼 | 데이터셋과 머신러닝 경진대회를 제공하는 사이트 |
| Git | Git | 버전 관리 도구 | 내 컴퓨터에서 변경 이력을 기록하는 프로그램 |
| GitHub | GitHub | 원격 저장소 서비스 | Git 저장소를 인터넷에 호스팅하는 웹 서비스 |
| 저장소 | Repository | Git 단위 | 코드와 그 전체 이력이 모여 있는 단위 |
| 커밋 | Commit | Git 개념 | 변경 사항을 하나의 기록으로 확정하는 것 |
| 스테이징 | Staging | Git 개념 | 커밋에 포함할 파일을 골라두는 중간 단계 (git add) |
| 브랜치 | Branch | Git 개념 | 본줄기에서 갈라져 나온 작업 가지 |
| main | main | Git 브랜치 | 기본 줄기. 최종본 |
| 원격 | Remote | Git 개념 | 내 컴퓨터 밖에 있는 저장소 |
| origin | origin | Git 별칭 | 첫 번째 원격 저장소에 붙이는 관습적 별명 |
| push | push | Git 동작 | 로컬 기록을 원격으로 올리기 |
| pull | pull | Git 동작 | 원격 기록을 로컬로 가져오기 |
| PR | Pull Request | 협업 절차 | 합치기 전에 검토를 요청하는 것 |
| 도메인 | Domain | 네트워크 | 사람이 읽을 수 있는 인터넷 주소 |
| 로컬 | Local | 위치 | 내 컴퓨터 안 |
| 원격·클라우드 | Remote / Cloud | 위치 | 남의 컴퓨터 안 |
| 마크다운 | Markdown | 표기법 | 사람이 읽고 쓰기 쉬운 문서 형식 (.md) |
| 마크업 | Markup | 표기법 | 태그로 구조를 표시하는 기계용 표기 (HTML) |
| CLAUDE.md | — | 설정 문서 | AI에게 프로젝트 규칙을 알려주는 마크다운 파일 |
| 하네스 | Harness | 방법론 | 모델을 규칙 문서와 검증 장치로 감싸 통제하는 체계 |
| 옵시디언 | Obsidian | 노트 앱 | 생각을 .md 파일로 쌓아두는 지식 관리 도구 |
| Cursor | Cursor | 에디터 | AI가 내장된 코드 에디터 |
| 추상 | Abstract | 축 5 | 무엇을 할지만 정하고 어떻게는 정하지 않은 것 |
| 구상 | Concrete | 축 5 | 실제로 어떻게 할지까지 정해진 것 |
| 고급 언어 | High-level Language | 언어 분류 | 사람 쪽에 가까운 언어 (어렵다는 뜻 아님) |
| 저급 언어 | Low-level Language | 언어 분류 | 기계 쪽에 가까운 언어 |
| 기계어 | Machine Code | 언어 | 0과 1로 된, 기계만 읽는 명령 |
| 불 대수 | Boolean Algebra | 수학 | 참/거짓 두 값만 다루는 대수 체계 |
부록 B. 스스로 확인하기
먼저 답해보고, 막히면 옆의 절을 펼치세요.
| # | 질문 | 답이 있는 곳 |
|---|---|---|
| 1 | 머신러닝과 딥러닝은 대등한 두 개인가, 하나가 다른 하나에 속하는가? | 1.1 |
| 2 | AI 에이전트가 AI 계열의 포함 관계에 들어가지 않는 이유는? | 1.3 |
| 3 | ChatGPT는 강한 AI인가? 왜 그런가? | 1.4 |
| 4 | 이진 분류가 "가장 기초"인 이유는 쉬워서인가? | 2.3 |
| 5 | 타이타닉 데이터에서 맞혀야 하는 컬럼과 그 값의 종류는? | 2.5 |
| 6 | "고급 언어"의 '고급'은 무슨 뜻인가? | 3.2 |
| 7 | Git과 GitHub 중 인터넷이 없어도 되는 쪽은? | 4.1 |
| 8 | 첫 push 6줄 중 인터넷이 필요한 줄은 몇 개인가? | 4.2 |
| 9 | git config --global 의 --global 은 어느 축인가? | 4.4 |
| 10 | 도메인을 개강 이틀 만에 사는 이유는? | 4.6 |
| 11 | 가상환경·컨테이너·VM을 격리 강도 순으로 놓으면? | 5.2 |
| 12 | 가상환경을 안 만들면 무슨 문제가 생기는가? | 5.3 |
| 13 | conda init 후 에디터를 재시작해야 하는 이유는? | 5.5 |
| 14 | 라이브러리와 프레임워크를 한 문장으로 구분하면? | 6.2 |
| 15 | "바퀴를 재발명하지 마라"의 세 가지 이유 중 가장 약한 것은? | 6.4 |
| 16 | 무엇을 가져다 쓰고 무엇을 직접 만드는지 판별하는 한 줄은? | 6.5 |
| 17 | Cursor와 옵시디언을 가르는 축은? | 7.2 |
| 18 | CLAUDE.md 가 .md 인 이유 세 가지는? | 7.3 |
| 19 | Path(__file__).parent 를 쓰는 이유는? | 8.6 |
| 20 | 새 저장소에서 README를 끄고 만드는 이유는? | 8.7 |
부록 C. 자주 하는 실수
| 실수 | 바로잡기 |
|---|---|
| "머신러닝과 딥러닝은 다른 두 기술" | ❌ 딥러닝은 머신러닝의 부분집합입니다 |
| "AI 에이전트는 제일 발전한 AI" | ❌ 축이 다릅니다. 기술의 종류가 아니라 시스템의 형태입니다 |
| "ChatGPT는 아무거나 하니까 강한 AI" | ❌ "텍스트 생성"이라는 한 가지 일을 하는 약한 AI입니다 |
| "이진 분류는 쉬워서 기초" | ❌ 분해되지 않는 최소 단위라서 기초입니다 |
| "분류와 회귀는 난이도 차이" | ❌ 답이 끊어져 있는가 이어져 있는가의 차이입니다 |
| "고급 언어 = 어려운 언어" | ❌ 사람 쪽에 가깝다는 뜻입니다. 어려운 쪽은 저급(기계어)입니다 |
| "HTML은 프로그래밍 언어" | ⚠️ 마크업 언어입니다. 판단·반복·분기가 없습니다 |
| "확장자를 바꾸면 형식이 바뀐다" | ❌ 확장자는 힌트일 뿐입니다 |
| "Git = GitHub" | ❌ Git은 내 컴퓨터의 프로그램, GitHub는 그 결과를 올리는 서비스입니다 |
"git add 하면 깃허브에 올라간다" | ❌ add 는 올릴 목록을 고르는 것입니다. push 해야 올라갑니다 |
| "commit 했으니 끝" | ⚠️ commit은 로컬 기록입니다. GitHub에는 아직 없습니다 |
| "첫 push가 거부됨" | ⚠️ 저장소를 만들 때 README/gitignore/license를 켠 것이 원인인 경우가 많습니다 |
| "커밋이 안 됨" | ⚠️ git config --global user.name / user.email 을 설정하지 않은 것입니다 |
"설치했는데 conda: command not found" | ⚠️ PATH 환경변수 등록 누락입니다 |
"conda activate 했는데 안 먹어요" | ⚠️ 대부분 conda init 후 터미널·에디터를 재시작하지 않은 것입니다 |
| "아나콘다 폴더가 안 보여요" | ⚠️ 설치 경로가 랜덤으로 달라진 것입니다. 실제 경로를 확인하세요 |
| "가상환경은 Docker랑 같은 것" | ⚠️ 격리 수준이 다릅니다. venv=패키지, Docker=OS 라이브러리까지 |
| "가상환경 안 만들어도 되지 않나" | ⚠️ 프로젝트가 둘만 돼도 버전 충돌이 납니다 |
"ModuleNotFoundError 는 코드 오류" | ❌ 대부분 환경 문제입니다. 활성화 → 설치 순으로 확인 |
| "CSV 경로를 파일명만 써도 된다" | ⚠️ 실행하는 폴더에 따라 못 찾습니다. Path(__file__).parent 를 쓰세요 |
"출력에 ... 이 나오면 에러" | ❌ 가운데 열이 생략된 것입니다. 정상입니다 |
| "도메인 기간은 기본값 그대로" | ⚠️ 기본이 3년입니다. 1년 으로 바꾸세요 |
| "AI가 준 코드가 안 돌아간다" | ⚠️ 코드가 아니라 필요한 패키지가 없는 것인 경우가 많습니다 |
| "AI에게 '안 돼요'라고 물어본다" | ⚠️ 상황 + 명령 + 오류 원문 + 원하는 결과 4가지를 주세요 |
| "1등 벤치마크 모델이 최고" | ⚠️ 내 작업과 시험 종목이 다를 수 있습니다. 직접 써보세요 |
부록 D. 날짜별 색인
이 장의 내용이 실제 수업에서 어느 날 다뤄졌는지입니다.
| 날짜 | 다룬 내용 | 이 장의 절 |
|---|---|---|
| 4/28 (화) | 개강. Claude Code 창시자 Boris 워크숍(코드베이스 Q&A, CLAUDE.md 계층, claude -p, SSH+tmux), 옵시디언 설치, 깃허브 가입, Git 설치, Cursor 설치 4단계, EBS 《위대한 수업》 AI 시즌 | 1.6, 7.1~7.4, 8.1, 8.3, 9.1, 9.5 |
| 4/29 (수) | 크롬 설치·북마크 바 세팅, IBM의 AI 정의 계층(AI/ML/DL/생성형/에이전트, 약한 AI vs 강한 AI), Red Hat AI, 이진 분류, 가비아 도메인 구입, Cursor 터미널 열기·아이콘 테마 | 1.1 |
| 4/30 (목) | 캐글 타이타닉 데이터, 아나콘다 설치와 환경변수, conda create/init/activate 가상환경, 판다스 import 확인, 깃허브에 코드 업로드, 「바퀴를 재발명하지 않기」, Human/Machine·Soul/Body 축 | 2.5, 3.1 |
| 5/1 (금) | 네이버 국가대표 AI 탈락 — 핵심 장치 외부 기술 사용 표절 논란 | 6.5, 9.6 |
부록 E. Gemini / NotebookLM 프롬프트
복습 문제 받기
이 1주차 교재만 근거로 7문제를 내줘. 비전공자 기준으로.
"AI 계열의 포함 관계"와 "Git vs GitHub"는 반드시 포함해줘.
답은 바로 주지 말고, 내가 답한 다음에 채점하고
틀린 이유를 교재의 어느 절을 근거로 설명해줘. 교재에 없는 내용은 꺼내지 마.
인포그래픽 ① — AI 계열의 포함 관계
「1.1 다섯 단어는 대등하지 않습니다」와 「1.3 AI 에이전트는 이 계열이 아닙니다」를 합쳐
인포그래픽 1장으로 만들어줘.
- AI ⊃ 머신러닝 ⊃ 딥러닝 ⊃ 생성형 AI 를 동심원(또는 중첩 상자)으로
- 각 층 옆에 "종차" 한 줄씩 (무엇이 새로 추가되는가)
- AI 에이전트는 그 동심원 밖에 따로 두고 "축이 다름"을 화살표로 표시
- 약한 AI / 강한 AI 는 아래쪽에 별도 축으로
- 전문용어는 한글(영문) 병기
인포그래픽 ② — 다섯 개의 판별 축
「0. 이 장의 판별 축」 표를 인포그래픽 1장으로 만들어줘.
- 축 5개를 가로 막대 5줄로, 왼쪽 끝이 0 오른쪽 끝이 1
- 각 막대 아래에 이번 주 사례를 하나씩 (AI⊃ML / Git↔GitHub / base↔venv / 0↔1 / 자연어↔기계어)
- 오른쪽 여백에 "이 축이 다시 나오는 곳"을 작은 글씨로
- 축 5(추상↔구상)를 가장 굵게 강조 — 교재 전체에서 가장 많이 쓰이는 축
인포그래픽 ③ — 첫 push 6줄과 로컬/원격 경계
「4.2 첫 push 6줄의 의미」를 세로 흐름도로 만들어줘.
- 왼쪽에 "내 컴퓨터(로컬)" 영역, 오른쪽에 "GitHub(원격)" 영역을 세로 띠로 나누고
- git init / add / commit / branch -M / remote add / push 를 순서대로 배치
- 6줄 중 5줄이 로컬 안에서 끝나고 마지막 push만 경계를 넘는다는 것을 굵은 화살표로
- 각 명령 옆에 "몇 번 하나(1번/매번)"를 배지로 표시
막힐 때
1주차에서 "___" 가 이해가 안 돼.
이 교재의 판별 축 5개(포함관계 / 로컬↔원격 / 전역↔격리 / 0↔1 / 추상↔구상)만
써서 다시 설명해줘. 교재에 없는 새 비유는 만들지 마.
미국식 분류로 다시 정리하기
이 교재에 나온 비유(작업 일지와 온라인 사무실, 도구상자와 작업장, 레시피)를 전부 걷어내고,
"이것은 무엇의 한 종류인가 / 형제 개념과 무엇으로 갈리는가" 형식으로만
머신러닝·딥러닝·생성형 AI·이진 분류·가상환경·라이브러리·프레임워크를 다시 정의해줘.
환경 문제 진단 받기
나는 1주차 교재의 8.4~8.6 절차를 따라 하는 중이야.
지금 상황은 [상황], 실행한 명령은 [명령], 오류 메시지 원문은 [원문],
내가 원하는 결과는 [결과] 야.
교재 부록 C의 "자주 하는 실수" 표에 해당하는 항목이 있는지 먼저 확인하고,
없으면 그 다음에 다른 원인을 추정해줘.
다음 장 연결 확인
이 교재에서 "앞으로 다시 만납니다"라고 표시된 부분을 전부 찾아서,
이번 장의 어떤 개념이 몇 주차에 어떤 이름으로 다시 나오는지 표로 정리해줘.
컬럼은 "1주차의 개념 / 다시 나오는 주차 / 그때의 이름" 으로.
LangTailor