03. [종합] 나만의 프로그램 만들기
"이제 여러분은 파이썬이라는 언어를 배웠고, 컴퓨터라는 주방을 이해했습니다. 남의 레시피를 따라 하는 단계는 지났습니다. 이제 여러분만의 요리를 시작할 차례입니다."
1. 우리가 걸어온 길 (Roadmap)
우리는 주방 세팅부터 시작해 여기까지 왔습니다. 이 모든 지식이 합쳐져서 하나의 프로그램이 됩니다.
graph TD
Step1["1부: 주방 세팅<br>(Python 설치, VS Code)"] --> Step2["2부: 재료 손질<br>(변수, 제어문, 입출력)"]
Step2 --> Step3["3부: 도구 만들기<br>(함수, 모듈)"]
Step3 --> Step4["4부: 재료 창고<br>(데이터, 행렬, 텐서)"]
Step4 --> Step5["5부: 설계하기<br>(클래스, AI 협업)"]
Step5 --> Step6["6부: 실전 요리<br>(라이브러리, 디버깅)"]
Step6 --> Goal["🏆 나만의 프로그램"]
style Goal fill:#fff9c4,stroke:#fbc02d,stroke-width:4px
2. 무엇을 만들까? (아이디어)
거창한 인공지능이나 앱을 만들려고 하지 마세요. "나의 사소한 귀찮음을 해결해주는 것"이 최고의 첫 프로젝트입니다.
- 자동화: "매일 아침 뉴스 기사 3개 긁어서 나에게 카톡 보내기"
- 파일 정리: "다운로드 폴더에 쌓인 사진 파일들을 날짜별 폴더로 자동 분류하기"
- 데이터 수집: "내가 좋아하는 가수의 콘서트 표가 나오면 알림 울리기"
AI에게 아이디어 얻기
도저히 뭐가 필요한지 모르겠다면 AI에게 물어보세요.
"나는 직장인이고 엑셀 업무가 많아. 파이썬 초보자로서 주말 동안 만들 수 있는 업무 자동화 프로젝트 아이디어 3개만 추천해줘."
3. 프로젝트 진행: AI와 설계부터 구현까지
코드는 AI가 짭니다. 하지만 그 코드가 무엇이어야 하는지는 오직 사람만이 결정할 수 있습니다. 여러분의 역할은 직접 코딩하는 것에서 1.기획, 2.설계/검토, 3.검증하는 것으로 바뀝니다.
🔄 Human-AI 협업 사이클
| 단계 | 역할 | 누가? | 하는 일 |
|---|---|---|---|
| Step 1 | 기획 (Planning) | 🧑+🤖 | 막연한 아이디어를 구체적인 PRD(제품 요구사항 정의서)로 발전 및 검토 |
| Step 2 | 설계 (Design) | 🧑+🤖 | 클래스/시퀀스 다이어그램 생성 및 검토 |
| Step 3 | 구현 (Coding) | 🤖 | 설계도에 따라 실제 파이썬 코드 작성 |
| Step 4 | 검증 (Verify) | 🧑 | 실행 결과가 기획 의도와 맞는지 확인 |
"코딩(구현)은 AI에게 맡기고, 여러분은 제대로 된 기획(Planning)과 설계(Design)에 집중해야 합니다. AI와 대화하며 PRD를 다듬고, 그것이 내가 원하는 것이 맞는지 끊임없이 확인하세요."
1단계: 기획 (Planning)
막연히 "파일 정리기 만들어줘"라고 하면 AI는 헷갈려합니다. AI와 대화하며 PRD(제품 요구사항 정의서) 수준으로 구체화하세요.
사용자: "나는 다운로드 폴더 정리가 너무 귀찮아. 아이디어 좀 줘." AI: "확장자별 자동 분류는 어때요? 아니면 오래된 파일 삭제?" 사용자: "확장자 분류가 좋겠다. 구체적인 기능을 정리해서 PRD(기획서)로 써줘."
(결과물: 기획서 텍스트)
* 기능 1: .jpg, .png는 Images 폴더로 이동
* 기능 2: 다른 파일은 건드리지 않음
* 기능 3: 이동 후 로그 출력
2단계: 구조 설계 (Class Diagram)
"어떤 녀석들(Object)이 필요한가?"를 정의합니다.
사용자: "파일 정리 프로그램을 만들 거야.
FileMover는 파일을 이동시키고,FolderScanner는 파일 목록을 가져와. 클래스 다이어그램 그려줘."
[AI가 그린 다이어그램 확인 및 수정] AI가 그려준 다이어그램을 보고 사람(Architect)이 검토해야 합니다.
사용자(피드백): "잠깐,
FolderScanner에 특정 확장자(.jpg)만 골라내는 기능이 빠졌어.filter_by_extension메서드를 추가해서 다시 그려줘."
classDiagram
class FolderScanner {
+get_files(path)
+filter_by_extension(ext)
}
class FileMover {
+move_file(file, target_folder)
}
FolderScanner ..> FileMover : 사용
3단계: 흐름 설계 (Sequence Diagram)
"시간 순서대로 누가 누구를 부르는가?"를 정의합니다. 프로그램의 시나리오를 짜는 것입니다.
사용자: "좋아. 이제 프로그램이 시작되면
FolderScanner가 파일을 찾고, 반복문을 돌면서FileMover에게 이동을 시키는 과정을 시퀀스 다이어그램으로 그려줘."
[AI가 그린 다이어그램 확인 및 수정] 시나리오가 내 생각과 맞는지 확인합니다.
사용자(피드백): "파일을 찾지 못했을 때의 처리가 빠졌어. 파일이 0개일 때 '파일 없음'을 출력하는 흐름을 추가해줘."
sequenceDiagram
participant Main as 프로그램(Main)
participant Scanner as FolderScanner
participant Mover as FileMover
Main->>Scanner: 1. 파일 목록 줘! (get_files)
Scanner-->>Main: [파일1.jpg, 파일2.txt, ...]
alt 파일이 있을 때
loop 모든 파일 반복
Main->>Mover: 2. 이 파일 옮겨줘 (move_file)
Mover-->>Main: 이동 완료!
end
else 파일이 없을 때
Main->>Main: '파일 없음' 알림
end
4단계: 구현 지시 (Code Generation)
설계도(Class & Sequence)가 완벽하게 검증되었다면, 이제 코딩을 지시합니다.
사용자: "위의 클래스 다이어그램과 시퀀스 다이어그램을 기반으로 파이썬 코드를 작성해 줘. 주석도 달아줘."
4. 실패하지 않는 법칙 (MVP)
- 목표를 작게 잡으세요: "완벽한 웹사이트" (X) -> "글자 하나 띄우는 창" (O)
- 설계도로 소통하세요: AI가 엉뚱한 코드를 짜면, 코드를 고치지 말고 다이어그램(설계)을 고쳐서 다시 시키세요.
- 일단 작동하게 만드세요: 실행되는 쓰레기(?)가 실행 안 되는 명작보다 낫습니다.