<!-- 이 부분은 나중에 적절한 이미지로 교체하세요 -->
"아이디어는 있는데, 어떻게 만들어야 할지 막막하신가요?"
"AI, 이제는 소비하는 것을 넘어 직접 만들고 싶으신가요?"
본 과정은 파이썬 기초 문법부터 시작하여, 실제 동작하는 AI 서비스를 직접 기획하고, 개발하며, 세상에 배포하는 전 과정을 경험하는 **12주 완성 실전형 AI 엔지니어링 코스**입니다. 막연한 아이디어를 현실로 만드는 '만들기 능력자'로 거듭나세요.
---
## 🚀 이 과정을 통해 얻을 수 있는 것
-**AI 서비스 개발의 A to Z**: 데이터 분석, 머신러닝/딥러닝 모델링, API 서버 개발, Docker를 이용한 배포까지, AI 제품 개발의 전체 사이클을 직접 경험하고 이해합니다.
-**실무 중심의 프로젝트 경험**: 9주간의 체계적인 학습 후, 3주간 나만의 개성이 담긴 **캡스톤 프로젝트**를 진행하며 현업 수준의 문제 해결 능력과 포트폴리오를 확보합니다.
-**생산성을 극대화하는 최신 기술 스택**: `FastAPI`, `Docker`, `PyTorch`, `LangChain` 등 현업에서 가장 수요가 높은 기술 스택을 사용합니다. `Cursor`, `GitHub Copilot` 같은 AI 네이티브 도구를 활용하여 개발 효율을 극대화하는 방법을 체득합니다.
-**지속 가능한 성장을 위한 발판**: MLOps의 기본 개념을 이해하고, 최신 AI 기술 트렌드를 읽는 눈을 기르며, AI 전문가로서 지속적으로 성장할 수 있는 학습 로드맵을 얻게 됩니다.
| **Part 1** | **1주차: AI 개발 환경 구축과 파이썬 기초 다지기** | AI 개발에 필요한 최적의 환경(VSCode, Git)을 구축하고, 파이썬의 기본 자료형과 변수, 제어문을 익힙니다. | [Part 1](./part_1_ai_development_environment.md) & [Part 2](./part_2_python_core_syntax.md) |
| **Part 2** | **2주차: 파이썬 컬렉션과 객체 지향 프로그래밍(OOP) 입문** | 리스트, 딕셔너리 등 데이터를 다루는 핵심 자료구조를 배우고, '붕어빵 비즈니스' 비유로 OOP의 개념을 이해합니다. | [Part 3](./part_3_python_collections.md) & [Part 4](./part_4_object_oriented_programming.md) |
| **Part 3** | **3주차: AI 핵심 라이브러리: NumPy & Pandas** | '계란판' 비유로 NumPy의 배열 연산을, '엑셀'에 빗대어 Pandas의 데이터프레임 조작 및 분석 기술을 마스터합니다. | [Part 5](./part_5_ai_core_libraries.md) |
| **Part 5** | **5주차: 딥러닝과 PyTorch 기초** | '레고 블록' 비유로 PyTorch의 작동 원리를 배우고, 딥러닝의 "Hello, World!"인 MNIST 손글씨 분류 모델을 구현합니다. | [Part 7](./part_deep_learning.md) |
| **Part 6** | **6주차: LLM 애플리케이션 개발과 LangChain** | '똑똑한 사서' 비유로 RAG의 개념을 이해하고, LangChain을 사용하여 간단한 Q&A 챗봇을 직접 만듭니다. | [Part 7.5](./part_7.5_llm_application_development_with_langchain.md) |
| **Part 7** | **7주차: FastAPI를 이용한 AI 모델 서빙** | '맛집 레시피'인 AI 모델을 '레스토랑' API 서버로 만드는 과정을 배우고, Fashion-MNIST 모델을 API로 배포합니다. | [Part 8](./part_8_model_serving_with_fastapi.md) |
| **Part 8** | **8주차: 프로덕션 레벨 API와 Docker** | '1인 식당'을 '프랜차이즈'로 확장하는 비유로 프로젝트를 구조화하고, Docker를 사용해 어디서든 동일하게 작동하는 서비스를 만듭니다. | [Part 9](./part_9_production_ready_api.md) |
| **Part 9** | **9주차: AI 전문가로 가는 길** | MLOps, AI 네이티브 IDE 등 전문가의 생산성 도구를 배우고, 최신 AI 트렌드를 바탕으로 다음 학습 로드맵을 설계합니다. | [Part 10](./part_10_expert_path.md) |
| **Part 10-12** | **10-12주차: 캡스톤 프로젝트** | 그동안 배운 모든 기술을 총동원하여 '나만의 AI 서비스'를 기획, 개발, 배포하고, 동료들에게 발표합니다. | [Part 11](./part_11_capstone_project_guide.md) |
-**객체 지향 프로그래밍 (Object-Oriented Programming, OOP)**
-**정의**: 현실 세계의 사물이나 개념을 '객체(Object)'로 보고, 객체들의 상호작용으로 프로그램의 로직을 구성하는 프로그래밍 패러다임. 데이터(속성)와 기능(메서드)을 하나의 객체로 묶고, 캡슐화, 상속, 다형성 등의 특징을 통해 코드의 재사용성과 유지보수성을 높입니다.
-**정의**: 명시적인 프로그램 없이 컴퓨터가 데이터로부터 학습하여 스스로 패턴을 찾고 예측이나 결정을 내릴 수 있도록 하는 인공지능의 한 분야입니다. 지도 학습, 비지도 학습, 강화 학습 등 다양한 학습 방법론을 포함합니다.
-**관련 파트**: [Part 0: 시작하며](../part_0_introduction.md), [Part 6: 머신러닝 완전 정복](../part_6_machine_learning.md)
-**FastAPI**
-**정의**: Python 3.7+를 기반으로 API를 구축하기 위한 현대적이고 빠른(고성능) 웹 프레임워크. 표준 파이썬 타입 힌트를 사용하여 개발자의 실수를 줄이고, 데이터 유효성 검사, 자동 API 문서 생성 등 강력한 기능을 제공합니다.
-**비유**: '최신식 주방 시스템'. 주문(요청) 처리 속도가 매우 빠르고, 모든 레시피(코드)가 표준화되어 있으며, 손님이 직접 보고 주문할 수 있는 스마트 메뉴판(Swagger UI)이 자동으로 만들어집니다.
-**관련 파트**: [Part 8: FastAPI를 이용한 모델 서빙](../part_8_model_serving_with_fastapi.md)
-**도커 (Docker)**
-**정의**: 애플리케이션과 그 실행에 필요한 모든 것(라이브러리, 시스템 도구, 코드, 런타임 등)을 '컨테이너'라는 격리된 공간에 패키징하여, 어떤 환경에서든 동일하게 실행될 수 있도록 하는 플랫폼. "제 컴퓨터에서는 되는데요?" 문제를 해결하는 핵심 기술입니다. **도커 이미지(Image)는 애플리케이션 실행에 필요한 모든 것을 담은 설계도이며, 이 이미지를 실행한 인스턴스가 컨테이너(Container)입니다. 하나의 이미지를 사용해 여러 컨테이너를 생성할 수 있습니다.**
-**비유**: '어디서든 똑같은 맛을 내는 밀키트'. 애플리케이션의 모든 재료와 레시피를 밀키트(**이미지**)로 만들어, 어떤 주방(서버)에서 조리하든 항상 동일한 결과물(**컨테이너**)을 보장합니다.
-**관련 파트**: [Part 1: AI 개발 환경 완벽 구축 가이드](../part_1_ai_development_environment.md), [Part 9: 프로덕션 레벨 API와 Docker](../part_9_production_ready_api.md)
-**캡스톤 프로젝트 (Capstone Project)**
-**정의**: 교육 과정에서 배운 모든 이론, 기술, 경험을 총동원하여 실제적인 문제 해결 능력을 보여주는 최종 프로젝트. 기획부터 개발, 배포, 발표까지 전 과정을 직접 수행하며 실무 역량을 종합적으로 증명하는 기회입니다.
-**관련 파트**: [Part 0: 시작하며](../part_0_introduction.md), [Part 11: 캡스톤 프로젝트 가이드](../part_11_capstone_project_guide.md)
-**파이썬 (Python)**
-**정의**: 간결하고 읽기 쉬운 문법을 가진 고급 프로그래밍 언어. 방대한 라이브러리 생태계 덕분에 웹 개발, 데이터 분석, 인공지능, 자동화 등 다양한 분야에서 널리 사용됩니다.
-**관련 파트**: [Part 2: 파이썬 핵심 문법](../part_2_python_core_syntax.md)
-**NumPy (넘파이)**
-**정의**: Numerical Python의 약자로, 파이썬에서 고성능 과학 계산과 수치 연산을 위한 핵심 라이브러리. `ndarray`라는 효율적인 다차원 배열 객체를 제공하여, 벡터 및 행렬 연산을 매우 빠르게 처리할 수 있습니다. Pandas, Scikit-learn, PyTorch 등 대부분의 AI 라이브러리의 기반이 되는 기술입니다.
-**비유**: '계란판'. 모든 데이터를 동일한 타입의 숫자(계란)으로 취급하여, '모든 계란에 도장 찍기'와 같은 동일한 연산을 매우 빠른 속도로 처리할 수 있습니다.
-**관련 파트**: [Part 5: AI 핵심 라이브러리](../part_5_ai_core_libraries.md)
-**Pandas (판다스)**
-**정의**: 파이썬에서 구조화된 데이터를 쉽고 직관적으로 다룰 수 있도록 설계된 핵심 데이터 분석 라이브러리. `DataFrame`과 `Series`라는 강력한 데이터 구조를 제공하여, 데이터 정제, 변환, 분석, 시각화 등 데이터 처리의 전 과정을 효율적으로 수행할 수 있게 돕습니다.
-**비유**: '데이터용 엑셀'. 행과 열로 이루어진 데이터를 정렬, 필터링, 그룹화하는 등 복잡한 데이터 조작을 몇 줄의 코드로 수행할 수 있습니다.
-**관련 파트**: [Part 5: AI 핵심 라이브러리](../part_5_ai_core_libraries.md)
-**Scikit-learn (사이킷런)**
-**정의**: 파이썬을 대표하는 머신러닝 라이브러리. 분류, 회귀, 군집화, 차원 축소 등 다양한 머신러닝 알고리즘과 데이터 전처리, 모델 평가 등을 위한 도구를 제공하여 누구나 쉽게 머신러닝 모델을 개발할 수 있도록 돕습니다.
-**관련 파트**: [Part 6: 머신러닝 완전 정복](../part_6_machine_learning.md)
-**딥러닝 (Deep Learning)**
-**정의**: 여러 계층의 인공 신경망(Artificial Neural Network)을 사용하여 복잡한 데이터에서 고수준의 특징을 자동으로 학습하는 머신러닝의 한 분야. 이미지 인식, 자연어 처리, 음성 인식 등 다양한 분야에서 혁신적인 성과를 보여주고 있습니다.
| **MLOps (Machine Learning Operations)** | 머신러닝(ML) 모델 개발(Dev)과 운영(Ops)을 통합하여, ML 시스템의 개발, 배포, 유지보수를 자동화하고 효율화하는 일련의 원칙과 실천 방법입니다. CI/CD, 데이터/모델 버전 관리, 모니터링, 재학습 등을 포함하여 AI 서비스의 안정성과 지속성을 높입니다. (비유: AI 레스토랑 프랜차이즈의 '중앙 관제 시스템') |
| **CI/CD (Continuous Integration/Continuous Deployment or Delivery)** | 지속적 통합(CI)은 코드 변경사항을 정기적으로 중앙 리포지토리에 병합하고, 자동으로 빌드 및 테스트하는 프로세스입니다. 지속적 배포/딜리버리(CD)는 CI를 통과한 코드를 자동으로 프로덕션 환경까지 배포하거나, 배포 가능한 상태로 준비하는 프로세스입니다. MLOps에서 모델 및 애플리케이션의 빠르고 안정적인 업데이트를 가능하게 합니다. |
| **DVC (Data Version Control)** | Git과 함께 사용되어 대용량 데이터셋, 머신러닝 모델, 중간 파일 등의 버전을 관리하는 오픈소스 도구입니다. 실제 데이터 파일 대신 메타데이터(포인터)를 Git으로 관리하여, 대용량 파일로 인해 Git 리포지토리가 비대해지는 것을 방지하고 실험의 재현성을 높입니다. |
| **MLflow** | 머신러닝 수명주기 관리를 위한 오픈소스 플랫폼입니다. 실험 추적(파라미터, 코드, 데이터, 결과 로깅), 모델 패키징 및 버전 관리, 모델 배포 기능을 제공하여, ML 실험의 재현성을 높이고 협업을 용이하게 합니다. |
| **AI 네이티브 IDE (AI Native IDE)** | 인공지능 기능이 깊숙하게 통합된 통합 개발 환경(IDE)입니다. 코드 자동 생성, 리팩터링, 디버깅, 문서화 등 개발 과정 전반에 걸쳐 AI의 지원을 받아 생산성을 극대화합니다. (예: Cursor, GitHub Copilot이 통합된 VS Code) (비유: AI 비서(자비스)가 탑재된 F-35 스텔스기 조종석) |
| **Cursor** | AI 기능을 중심으로 설계된 코드 편집기로, GPT-4와 같은 LLM을 활용하여 코드 작성, 수정, 채팅 기반의 코드 관련 질문 답변, 버그 수정, 문서 참조 등 다양한 개발 작업을 지원하는 AI 네이티브 IDE의 한 종류입니다. |
| **GitHub Copilot** | GitHub와 OpenAI가 개발한 AI 페어 프로그래머(pair programmer) 서비스입니다. 개발자가 코드를 작성할 때 실시간으로 코드 라인이나 전체 함수를 제안하며, 주석을 코드로 변환하거나 테스트 코드를 생성하는 등 개발 생산성을 높이는 데 도움을 줍니다. VS Code 등 다양한 IDE의 확장 기능으로 제공됩니다. |
| **SLM (Small Language Model / 소형 언어 모델)** | 거대 언어 모델(LLM)의 성능을 특정 작업이나 도메인에서 유지하면서, 모델 크기와 계산 요구량을 크게 줄인 효율적인 언어 모델입니다. 스마트폰, 노트북 등 온디바이스(On-device) 환경에서의 실행을 목표로 하며, 속도, 비용, 개인정보 보호 측면에서 이점을 가집니다. (예: Llama 3 8B, Phi-3) |
| **멀티모달 AI (Multimodal AI)** | 텍스트, 이미지, 음성, 비디오 등 여러 종류의 데이터(양식, modality)를 동시에 이해하고 처리하며 생성할 수 있는 인공지능입니다. 인간처럼 다양한 감각 정보를 통합적으로 활용하여 보다 복잡하고 풍부한 상호작용 및 문제 해결이 가능합니다. (예: GPT-4o, Google Gemini) |
| **AI 에이전트 (AI Agent)** | 특정 목표를 달성하기 위해 자율적으로 환경을 관찰하고, 계획을 세우며, 도구(API, 코드 실행 등)를 사용하고, 행동을 실행하는 AI 시스템입니다. 단순 질의응답을 넘어, 복잡한 실제 태스크를 사용자를 대신하여 수행할 수 있는 잠재력을 가집니다. (예: Auto-GPT, LangGraph 기반 에이전트) |
| **AI 윤리 (AI Ethics)** | 인공지능 기술의 개발 및 사용과 관련된 윤리적 문제들을 다루는 분야입니다. 데이터 편향성, 개인정보 침해, 알고리즘의 공정성 및 투명성, 책임성, 일자리 대체, 잠재적 오용 등 AI가 사회에 미치는 영향을 고려하고 바람직한 방향으로 기술을 발전시키기 위한 원칙과 가이드라인을 포함합니다. |
---
*이 용어집은 `geumdo_docs/ai lecture/part_10_expert_path.md` 파일 내용을 기반으로 작성되었습니다.*
| **캡스톤 프로젝트 (Capstone Project)** | 학문 분야에서 여러 학기 동안 배운 이론과 기술을 총동원하여 실제 결과물(작품, 서비스, 논문 등)을 기획, 설계, 개발, 구현하는 종합 프로젝트입니다. 학습한 지식의 실질적인 적용 능력을 평가하고, 포트폴리오의 핵심적인 부분을 구성합니다. ("졸업 작품"과 유사) |
| **포트폴리오 (Portfolio)** | 개인이 자신의 기술, 능력, 경험, 성과를 보여주기 위해 만든 작품집 또는 자료 모음입니다. 개발자에게는 자신이 참여하거나 직접 만든 프로젝트, 코드 샘플, 기술 블로그, GitHub 프로필 등이 해당되며, 구직 및 경력 관리에 매우 중요합니다. |
| **문제 정의 (Problem Definition)** | 해결하고자 하는 특정 문제나 필요성을 명확하고 구체적으로 기술하는 과정입니다. 프로젝트의 목표와 범위를 설정하는 첫 단계이며, "무엇을 왜 만드는가?"에 대한 답을 제시합니다. |
| **프로젝트 기획 (Project Planning)** | 정의된 문제를 해결하기 위한 구체적인 실행 계획을 수립하는 과정입니다. 목표 설정, 범위 정의, 필요한 리소스(시간, 인력, 기술 등) 파악, 일정 계획, 위험 관리 등을 포함합니다. |
| **요구사항 정의서 (Product Requirements Document, PRD)** | 개발하고자 하는 제품(서비스)의 목적, 기능, 사용자, 기술적 요구사항 등을 상세하게 기술한 문서입니다. 프로젝트 팀원 모두가 동일한 이해를 바탕으로 제품을 개발할 수 있도록 하는 청사진 역할을 합니다. |
| **시스템 아키텍처 (System Architecture)** | 개발하려는 시스템의 전체적인 구조와 구성 요소, 그리고 그들 간의 관계 및 상호작용을 정의한 설계도입니다. 데이터 흐름, 컴포넌트 간 인터페이스, 사용 기술 등을 시각적으로 표현하여 시스템의 이해를 돕습니다. (예: Mermaid, draw.io 사용) |
| **깃헙(GitHub) 협업 (GitHub Collaboration)** | 버전 관리 시스템인 Git의 웹 기반 호스팅 서비스인 GitHub를 사용하여 여러 개발자가 함께 프로젝트를 진행하는 방식입니다. 이슈 트래킹, 브랜치 전략, 풀 리퀘스트(PR)를 통한 코드 리뷰, 프로젝트 관리 등의 기능을 활용하여 효율적인 팀 개발을 지원합니다. |
| **코드 리뷰 (Code Review)** | 다른 개발자가 작성한 소스 코드를 검토하고 피드백을 제공하는 과정입니다. 코드의 품질 향상, 버그 조기 발견, 지식 공유, 팀 전체의 코드 이해도 증진 등의 효과가 있습니다. GitHub의 풀 리퀘스트(Pull Request) 기능을 통해 주로 이루어집니다. |
| **데모 (Demonstration)** | 개발한 제품이나 서비스의 주요 기능을 실제로 시연하여 보여주는 것입니다. 프로젝트의 결과물을 시각적으로 전달하고, 이해 관계자(팀원, 평가자, 사용자 등)의 피드백을 받는 데 효과적입니다. |
| **기술 블로그 (Tech Blog)** | 개발자가 자신이 학습한 기술, 프로젝트 경험, 문제 해결 과정, 개발 팁 등을 글로 작성하여 온라인에 공유하는 것입니다. 지식 정리, 개인 브랜딩, 커뮤니티 기여, 포트폴리오 강화 등 다양한 이점이 있습니다. |
---
*이 용어집은 `geumdo_docs/ai lecture/part_11_capstone_project_guide.md` 파일 내용을 기반으로 작성되었습니다.*
-**정의**: 프로젝트별로 독립된 파이썬 실행 환경을 만들어주는 도구. 각 프로젝트가 필요로 하는 라이브러리 버전 간의 충돌을 방지하고, 프로젝트의 의존성을 깔끔하게 관리할 수 있도록 돕습니다. 파이썬에서는 `venv`, `conda` 등이 대표적인 가상환경 관리 도구입니다.
-**비유**: 프로젝트마다 별도의 '격리된 작업실'을 만들어, 각 작업실에 필요한 도구(라이브러리)들만 설치하여 서로 영향을 주지 않도록 하는 것과 같습니다.
-**관련 파트**: [Part 1: AI 개발 환경 완벽 구축 가이드](../part_1_ai_development_environment.md)
-**패키지 (Package)**
-**정의**: 특정 목적과 관련된 여러 파이썬 모듈들을 모아놓은 디렉토리 구조. 패키지를 통해 관련된 코드들을 체계적으로 관리하고 재사용할 수 있습니다. `pip`는 파이썬의 공식 패키지 관리자로, PyPI(Python Package Index)에 등록된 수많은 패키지들을 쉽게 설치하고 관리할 수 있게 해줍니다.
-**관련 파트**: [Part 1: AI 개발 환경 완벽 구축 가이드](../part_1_ai_development_environment.md)
-**pip**
-**정의**: 파이썬의 공식 패키지 관리 시스템. PyPI(Python Package Index)에 호스팅된 소프트웨어 패키지를 설치하고 관리하는 데 사용됩니다. `pip install <package_name>` 명령어로 라이브러리를 쉽게 설치할 수 있습니다.
-**관련 파트**: [Part 1: AI 개발 환경 완벽 구축 가이드](../part_1_ai_development_environment.md)
-**의존성 관리 (Dependency Management)**
-**정의**: 프로젝트가 올바르게 실행되기 위해 필요한 외부 라이브러리(패키지)와 그 버전을 관리하는 작업. 파이썬에서는 `requirements.txt` 파일을 통해 프로젝트의 모든 의존성을 명시하고, `pip install -r requirements.txt` 명령어로 한 번에 설치하여 어떤 환경에서든 동일한 개발 환경을 재현할 수 있도록 합니다.
-**관련 파트**: [Part 1: AI 개발 환경 완벽 구축 가이드](../part_1_ai_development_environment.md)
-**IDE (Integrated Development Environment, 통합 개발 환경)**
-**정의**: 코딩, 디버깅, 컴파일, 배포 등 프로그램 개발에 관련된 모든 작업을 하나의 인터페이스에서 처리할 수 있도록 도와주는 소프트웨어. 코드 자동 완성, 구문 강조, 디버거 등의 기능을 통해 개발 생산성을 크게 향상시킵니다. (예: VS Code, PyCharm)
-**관련 파트**: [Part 1: AI 개발 환경 완벽 구축 가이드](../part_1_ai_development_environment.md)
-**Jupyter Notebook (주피터 노트북)**
-**정의**: 코드, 텍스트(마크다운), 시각화 결과 등을 하나의 문서에 담아 대화형으로 프로그래밍할 수 있는 오픈소스 웹 애플리케이션. 코드 셀 단위 실행이 가능하여 데이터 분석, 머신러닝 모델링, 실험 기록 등 탐색적 프로그래밍에 널리 사용됩니다.
-**관련 파트**: [Part 1: AI 개발 환경 완벽 구축 가이드](../part_1_ai_development_environment.md)
-**커널 (Kernel)**
-**정의**: Jupyter Notebook이나 JupyterLab과 같은 대화형 컴퓨팅 환경에서, 사용자가 작성한 코드를 실제로 해석하고 실행하는 '계산 엔진'. 각 노트북은 특정 커널(예: 특정 가상환경의 파이썬)에 연결되어, 해당 환경의 라이브러리와 설정을 사용하여 코드를 실행합니다.
-**관련 파트**: [Part 1: AI 개발 환경 완벽 구축 가이드](../part_1_ai_development_environment.md)
-**버전 충돌 (Version Conflict)**
-**정의**: 하나의 시스템에서 두 개 이상의 프로젝트가 동일한 라이브러리의 서로 다른 버전을 필요로 할 때 발생하는 문제. 가상환경은 각 프로젝트에 독립적인 라이브러리 설치 공간을 제공하여 이 문제를 근본적으로 해결합니다.
-**관련 파트**: [Part 1: AI 개발 환경 완벽 구축 가이드](../part_1_ai_development_environment.md)
-**Google Colab (구글 코랩)**
-**정의**: 구글에서 제공하는 클라우드 기반의 무료 Jupyter 노트북 환경. 별도의 개발 환경 설정 없이 웹 브라우저만으로 파이썬 코드를 작성하고 실행할 수 있으며, 특히 무료로 GPU 가속을 사용할 수 있어 머신러닝 및 딥러닝 모델 학습에 매우 유용합니다.
-**관련 파트**: [Part 1: AI 개발 환경 완벽 구축 가이드](../part_1_ai_development_environment.md)
-**정의**: 키(Key)와 값(Value)을 하나의 쌍으로 묶어 저장하는 파이썬의 자료구조. 각 키는 고유해야 하며, 키를 통해 해당 값을 빠르게 찾거나 수정, 삭제할 수 있습니다. 중괄호(`{}`)를 사용하여 생성하며, 데이터의 순서가 중요하지 않고 의미 있는 이름으로 데이터에 접근하고 싶을 때 유용합니다.
-**정의**: 중복을 허용하지 않는, 순서 없는 요소들의 모음. 중괄호(`{}`)나 `set()` 함수로 생성합니다. 주로 데이터의 중복을 제거하거나, 멤버십 테스트(특정 요소의 존재 여부 확인), 집합 연산(합집합, 교집합 등)에 사용됩니다.
-**관련 파트**: [Part 2: 파이썬 핵심 문법](../part_2_python_core_syntax.md)
-**제어문 (Control Flow Statement)**
-**정의**: 프로그램의 실행 흐름을 특정 조건이나 반복에 따라 제어하는 구문.
-**조건문 (`if`, `elif`, `else`)**: 주어진 조건의 참/거짓에 따라 다른 코드 블록을 실행합니다.
-**반복문 (`for`, `while`)**: 특정 코드 블록을 여러 번 반복해서 실행합니다.
-**관련 파트**: [Part 2: 파이썬 핵심 문법](../part_2_python_core_syntax.md)
-**들여쓰기 (Indentation)**
-**정의**: 파이썬에서 코드 블록의 시작과 끝을 나타내는 문법적 요소. 다른 언어들이 중괄호(`{}`) 등을 사용하는 것과 달리, 파이썬은 동일한 수의 공백(일반적으로 스페이스 4칸)을 사용하여 코드의 논리적 구조와 종속 관계를 표현합니다. 올바른 들여쓰기는 파이썬 코드의 가독성을 높이고 문법 오류를 방지하는 데 매우 중요합니다.
-**관련 파트**: [Part 2: 파이썬 핵심 문법](../part_2_python_core_syntax.md)
-**함수 (Function)**
-**정의**: 특정 작업을 수행하는 코드 블록에 이름을 붙인 것. 코드를 재사용하고, 프로그램을 모듈화하여 구조를 더 명확하게 만드는 데 사용됩니다.
-**관련 파트**: [Part 2: 파이썬 핵심 문법](../part_2_python_core_syntax.md)
-**매개변수 (Parameter)와 인자 (Argument)**
-**정의**:
-**매개변수 (Parameter)**: 함수를 정의할 때, 함수가 호출될 때 전달받을 값을 담기 위해 선언하는 변수 이름. 함수의 '입력 인터페이스' 역할을 합니다.
-**인자 (Argument)**: 함수를 호출할 때, 매개변수에 실제로 전달되는 값.
-**예시**: `def add(a, b): # a, b는 매개변수` / `add(3, 5) # 3, 5는 인자`
-**관련 파트**: [Part 2: 파이썬 핵심 문법](../part_2_python_core_syntax.md)
-**반환 값 (Return Value)**
-**정의**: 함수가 `return` 키워드를 사용하여 자신의 실행 결과를 호출한 쪽으로 돌려주는 값. 함수는 특정 계산을 수행한 뒤 그 결과를 반환하여 다른 변수에 저장하거나 다른 연산에 사용될 수 있게 합니다.
-**관련 파트**: [Part 2: 파이썬 핵심 문법](../part_2_python_core_syntax.md)
-**리스트 컴프리헨션 (List Comprehension)**
-**정의**: 기존 리스트나 다른 순회 가능한(iterable) 객체로부터 새로운 리스트를 간결하고 효율적으로 생성하는 파이썬의 기능. `for` 반복문과 `if` 조건문을 한 줄로 표현하여 가독성 높고 파이썬다운(Pythonic) 코드를 작성할 수 있게 합니다.
-**관련 파트**: [Part 2: 파이썬 핵심 문법](../part_2_python_core_syntax.md)
-**슬라이싱 (Slicing)**
-**정의**: 리스트, 튜플, 문자열 등 순서가 있는 시퀀스 자료형의 일부를 잘라내어 새로운 시퀀스를 만드는 기능. `시퀀스[시작:끝:간격]` 형태로 사용합니다.
-**관련 파트**: [Part 2: 파이썬 핵심 문법](../part_2_python_core_syntax.md)
-**정의**: 딕셔너리를 생성할 때 키(key)가 없을 경우의 기본값을 미리 지정할 수 있는 특수 컨테이너. 존재하지 않는 키에 접근할 때 `KeyError`를 발생시키는 대신, 지정된 기본값(예: `int`->0, `list`->[])을 자동으로 생성하여 코드를 간결하게 만들어줍니다. 특히 데이터를 그룹핑할 때 유용합니다.
-**비유**: '자동 완성 노트'. 빈 페이지에 글을 쓰려고 할 때마다 자동으로 줄을 그어주는 노트처럼, 키가 없을 때마다 기본값을 알아서 채워줍니다.
-**객체 지향 프로그래밍 (Object-Oriented Programming, OOP)**
-**정의**: 현실 세계의 사물이나 개념을 '객체(Object)'로 보고, 객체들의 상호작용으로 프로그램의 로직을 구성하는 프로그래밍 패러다임. 데이터(속성)와 기능(메서드)을 하나의 객체로 묶고, 캡슐화, 상속, 다형성 등의 특징을 통해 코드의 재사용성과 유지보수성을 높입니다.
-**정의**: 객체를 만들어내기 위한 '설계도' 또는 '틀'. 동일한 속성과 메서드를 가지는 객체들을 생성하기 위한 템플릿입니다. `__init__` 메서드는 객체가 생성될 때 속성을 초기화하는 역할을 하며, `self`는 생성되는 객체 자기 자신을 가리키는 특별한 변수입니다.
-**비유**: '붕어빵 틀'. 이 틀을 사용해 속재료가 다른 여러 '붕어빵(객체)'을 찍어낼 수 있습니다.
-**정의**: 객체 지향 프로그래밍의 핵심 개념 중 하나로, 부모 클래스(Superclass)의 속성과 메서드를 자식 클래스(Subclass)가 물려받아 사용할 수 있도록 하는 기능. 코드의 재사용성을 높이고 클래스 간의 계층 구조를 형성할 수 있습니다. **메서드 오버라이딩(Method Overriding)**을 통해 자식 클래스에서 부모의 메서드를 재정의할 수 있으며, `super()` 함수를 사용해 부모 클래스의 메서드를 호출할 수 있습니다.
-**비유**: '기본 붕어빵 틀'을 물려받아 약간의 수정을 가해 '피자 붕어빵 틀'을 만드는 것과 같습니다.
-**정의**: 객체 지향 프로그래밍의 주요 특징 중 하나로, '여러 가지 형태를 가질 수 있는 능력'을 의미합니다. 서로 다른 클래스의 객체가 동일한 메시지(메서드 호출)에 대해 각자의 방식으로 다르게 반응(동작)할 수 있도록 하는 메커니즘입니다. 코드의 유연성과 확장성을 높입니다.
-**비유**: "주문하신 붕어빵 나왔습니다!"라는 동일한 `sell()` 메서드 호출에 대해, 객체가 '팥 붕어빵'이냐 '피자 붕어빵'이냐에 따라 다른 설명이 출력되는 것과 같습니다.
-**정의**: 데이터(속성)와 그 데이터를 처리하는 함수(메서드)를 하나의 객체로 묶고, 데이터의 직접적인 외부 접근을 제한하는 객체 지향 프로그래밍의 원칙. 객체의 내부 구현을 숨겨 데이터를 보호하고, 외부에는 정해진 인터페이스(메서드)만을 통해 접근하도록 허용함으로써 코드의 안정성과 유지보수성을 높입니다.
-**비유**: '붕어빵의 비밀 레시피'를 외부에 공개하지 않고, 정해진 주문 방식(`sell()`)으로만 붕어빵을 판매하는 것과 같습니다.
-**정의**: 객체의 복잡한 내부 구현은 숨기고, 외부에는 실제 기능 수행에 필요한 핵심적인 부분만 드러내는 객체 지향 프로그래밍의 원칙. 파이썬에서는 **추상 클래스(Abstract Class)**와 **추상 메서드(Abstract Method)**를 사용하여 구현하며, 이를 통해 여러 파생 클래스가 반드시 구현해야 할 공통 인터페이스를 강제할 수 있습니다.
-**비유**: 자동차 운전자가 페달과 핸들만 조작하면 내부의 복잡한 엔진 동작을 몰라도 운전할 수 있는 것과 같습니다. '프랜차이즈 본사의 운영 매뉴얼'에 비유할 수도 있습니다.
-**정의**: 파이썬 클래스 내에서 이름 앞뒤로 이중 밑줄(double underscore, dunder)이 붙는 특별한 메서드들 (예: `__init__`, `__str__`, `__eq__`). 파이썬의 내장 연산이나 함수(예: `+`, `len()`, `print()`)가 해당 객체에 사용될 때 내부적으로 호출되어 특별한 기능을 수행합니다.
| **데이터 시각화 (Data Visualization)** | 데이터 속에 숨겨진 패턴, 관계, 추세, 이상치 등을 쉽게 파악할 수 있도록 데이터를 그래프나 차트 등 시각적인 형태로 표현하는 과정입니다. Matplotlib, Seaborn 등의 라이브러리가 사용됩니다. |
| **Matplotlib** | 파이썬에서 가장 널리 사용되는 데이터 시각화 라이브러리입니다. 거의 모든 종류의 정적, 동적, 인터랙티브 시각화를 생성할 수 있는 강력하고 유연한 기능을 제공합니다. (비유: 하얀 도화지) |
| **Seaborn** | Matplotlib을 기반으로 더 매력적이고 정보량이 풍부한 통계 그래픽을 쉽게 만들 수 있도록 하는 고수준 인터페이스를 제공하는 파이썬 시각화 라이브러리입니다. 통계적 데이터 탐색에 특히 유용합니다. (비유: 밑그림과 색칠 도구가 갖춰진 스케치북) |
| **Scikit-learn** | 파이썬을 위한 대표적인 오픈소스 머신러닝 라이브러리입니다. 분류, 회귀, 클러스터링, 차원 축소, 모델 선택, 데이터 전처리 등 다양한 머신러닝 알고리즘과 도구를 제공하며, `fit()`/`predict()`의 일관된 인터페이스를 가집니다. |
| **지도학습 (Supervised Learning)** | 머신러닝의 한 종류로, 입력 데이터(피처)와 해당 데이터의 정답(레이블)이 있는 '지도된' 데이터를 사용하여 모델을 학습시키는 방식입니다. 모델은 입력과 정답 사이의 관계를 학습하여 새로운 입력에 대한 정답을 예측합니다. |
| **훈련/테스트 분리 (Train/Test Split)** | 머신러닝 모델의 일반화 성능을 평가하기 위해 전체 데이터셋을 훈련 데이터(Training Data)와 테스트 데이터(Test Data)로 나누는 과정입니다. 모델은 훈련 데이터로 학습하고, 테스트 데이터로 성능을 평가받습니다. |
| **데이터 전처리 (Data Preprocessing)** | 원시(raw) 데이터를 머신러닝 모델에 적합한 형태로 변환하는 모든 과정을 의미합니다. 결측치 처리, 이상치 제거, 피처 스케일링, 인코딩 등이 포함되며, 모델 성능에 큰 영향을 미칩니다. "Garbage In, Garbage Out"이라는 말이 있을 정도로 중요합니다. |
| **피처 스케일링 (Feature Scaling)** | 데이터의 여러 피처(특성, 변수)들의 값 범위를 일정하게 조정하는 데이터 전처리 기법입니다. 거리 기반 알고리즘이나 경사 하강법 기반 알고리즘에서 피처 간의 단위 차이로 인해 발생하는 문제를 방지하고 모델 학습을 안정적으로 만듭니다. 대표적으로 `StandardScaler`, `MinMaxScaler`가 있습니다. |
| **모델 평가 (Model Evaluation)** | 학습된 머신러닝 모델이 얼마나 잘 작동하는지, 즉 새로운 데이터에 대해 얼마나 정확한 예측을 하는지를 측정하는 과정입니다. 정확도, 정밀도, 재현율, F1 스코어, AUC 등 다양한 평가지표가 사용됩니다. |
| **정확도 (Accuracy)** | 분류 모델의 성능을 평가하는 가장 기본적인 지표 중 하나로, 전체 예측 건수 중에서 올바르게 예측한 건수의 비율을 나타냅니다. (정확도 = (TP + TN) / (TP + TN + FP + FN)) |
---
*이 용어집은 `geumdo_docs/ai lecture/part_6_machine_learning.md` 파일 내용을 기반으로 작성되었습니다.*
| **거대 언어 모델 (Large Language Model, LLM)** | 방대한 양의 텍스트 데이터로 사전 훈련된 매우 큰 규모의 딥러닝 모델입니다. 인간과 유사한 수준으로 텍스트를 이해하고 생성할 수 있으며, 질문 답변, 번역, 요약, 코드 생성 등 다양한 자연어 처리 작업을 수행할 수 있습니다. (예: GPT-3, BERT) |
| **LangChain** | LLM을 활용한 애플리케이션 개발을 용이하게 하는 오픈소스 프레임워크입니다. LLM을 외부 데이터 소스(문서, DB 등)나 다른 도구들과 쉽게 연동할 수 있도록 다양한 모듈(체인, 에이전트, 메모리 등)과 인터페이스를 제공합니다. RAG 시스템 구축에 널리 사용됩니다. |
| **검색 증강 생성 (Retrieval-Augmented Generation, RAG)** | LLM이 최신 정보나 특정 도메인 지식 없이 답변을 생성할 때 발생할 수 있는 환각(Hallucination) 현상을 줄이고, 답변의 신뢰성과 정확성을 높이기 위한 기술입니다. 사용자의 질문에 대해 외부 데이터 소스(벡터 저장소 등)에서 관련 정보를 검색한 후, 이 정보를 LLM에게 참고 자료로 제공하여 답변을 생성하도록 하는 방식입니다. ("오픈북 시험"에 비유) |
| **환각 (Hallucination)** | LLM이 사실이 아니거나 맥락에 맞지 않는 그럴듯한 거짓 정보를 생성하는 현상입니다. 모델이 훈련 데이터에 없는 내용을 추론하거나, 잘못된 패턴을 학습했을 때 발생할 수 있습니다. RAG는 이러한 환각을 줄이는 데 효과적입니다. |
| **임베딩 (Embedding)** | 텍스트(단어, 문장, 문서)를 저차원의 밀집 벡터(dense vector)로 변환하는 과정 또는 그 결과 벡터를 의미합니다. 이 벡터는 단어나 문장의 의미론적 정보를 담고 있어, 벡터 공간에서 의미적으로 유사한 단어나 문장들이 가깝게 위치하게 됩니다. 텍스트 간 유사도 계산, 검색, 분류 등 다양한 NLP 작업에 활용됩니다. |
| **벡터 저장소 (Vector Store / Vector Database)** | 텍스트나 이미지 등에서 추출한 임베딩 벡터를 효율적으로 저장하고 검색할 수 있도록 설계된 특수한 데이터베이스입니다. 의미 기반 검색(Semantic Search), 즉 사용자의 질의 벡터와 가장 유사한 벡터들을 빠르게 찾아내는 기능을 제공합니다. (예: FAISS, Chroma, Pinecone, Weaviate) |
| **FAISS (Facebook AI Similarity Search)** | Facebook AI Research에서 개발한 고밀도 벡터 유사성 검색 및 클러스터링을 위한 라이브러리입니다. 대량의 벡터 데이터를 메모리에 저장하고 매우 빠르게 유사 벡터를 검색할 수 있어 RAG 시스템의 인덱싱 및 검색 단계에서 자주 사용됩니다. 주로 인메모리(in-memory) 방식으로 작동하여 속도가 빠릅니다. |
| **Chroma (ChromaDB)** | LLM 애플리케이션을 위해 설계된 오픈소스 임베딩 데이터베이스입니다. 사용하기 쉽고, Python 네이티브 지원 및 다양한 임베딩 모델과의 통합을 제공하며, 데이터를 디스크에 영구 저장할 수 있습니다. 개발 및 프로토타이핑에 적합합니다. |
| **문서 분할 (Chunking / Text Splitting)** | RAG 파이프라인에서 긴 문서를 LLM이 처리하기 적합한 작은 조각(chunk)으로 나누는 과정입니다. 너무 작으면 문맥을 잃고, 너무 크면 관련 없는 정보가 포함되어 LLM의 처리 효율과 정확도를 떨어뜨릴 수 있으므로, 적절한 크기와 중첩(overlap)을 고려하여 분할하는 것이 중요합니다. |
---
*이 용어집은 `geumdo_docs/ai lecture/part_7.5_llm_application_development_with_langchain.md` 파일 내용을 기반으로 작성되었습니다.*
| **딥러닝 (Deep Learning)** | 여러 층(layers)으로 구성된 인공 신경망(Artificial Neural Network, ANN)을 사용하여 복잡한 패턴을 데이터로부터 학습하는 머신러닝의 한 분야입니다. 이미지, 음성, 텍스트와 같은 비정형 데이터 처리에서 뛰어난 성능을 보입니다. |
| **PyTorch** | Facebook의 AI 연구팀(FAIR)이 개발한 오픈소스 머신러닝 라이브러리입니다. Python 기반이며, `Tensor` 연산(NumPy와 유사하지만 GPU 지원)과 자동 미분(Autograd) 기능을 통해 유연하고 동적인 신경망 구축 및 학습을 지원합니다. 연구 및 프로토타이핑에 널리 사용됩니다. (비유: 레고 블록) |
| **텐서 (Tensor)** | PyTorch에서 데이터를 다루는 기본 단위이자 다차원 배열입니다. NumPy의 `ndarray`와 유사하지만, GPU를 사용한 고속 연산 및 자동 미분 기능을 핵심적으로 지원하여 딥러닝 모델 학습에 필수적입니다. |
| **인공 신경망 (Artificial Neural Network, ANN)** | 인간의 뇌 신경망 구조에서 영감을 받아 설계된 계산 모델입니다. 여러 개의 노드(뉴런)들이 서로 연결되어 계층(layer)을 이루며, 입력 데이터로부터 패턴을 학습하여 특정 작업을 수행합니다. |
| **`nn.Module`** | PyTorch에서 모든 신경망 모델의 기본이 되는 클래스입니다. 사용자는 이 클래스를 상속받아 자신만의 모델 구조(`__init__`)와 데이터 흐름(`forward`)을 정의합니다. 모델의 파라미터 관리, 저장 및 로드, GPU 이동 등의 기능을 제공합니다. |
| **활성화 함수 (Activation Function)** | 신경망의 각 뉴런(또는 노드)에 입력된 신호를 변환하여 다음 뉴런으로 전달할지 여부와 전달할 신호의 크기를 결정하는 함수입니다. 선형 모델에 비선형성을 추가하여 모델의 표현력을 높이는 핵심적인 역할을 합니다. (예: `ReLU`, `Sigmoid`, `Tanh`) |
| **손실 함수 (Loss Function / Cost Function)** | 딥러닝 모델의 예측값과 실제 정답(레이블) 사이의 차이, 즉 '오차'를 측정하는 함수입니다. 모델 학습 과정에서 이 손실 함수의 값을 최소화하는 방향으로 모델의 파라미터(가중치)가 업데이트됩니다. (예: `nn.CrossEntropyLoss` - 분류, `nn.MSELoss` - 회귀) |
| **옵티마이저 (Optimizer)** | 손실 함수가 계산한 오차(손실 값)를 기반으로, 모델의 파라미터(가중치와 편향)를 효과적으로 업데이트하여 손실을 최소화하는 알고리즘입니다. (예: `Adam`, `SGD`, `RMSprop`) |
| **순전파 (Forward Propagation)** | 인공 신경망에서 입력 데이터가 입력층에서 시작하여 은닉층들을 거쳐 출력층까지 전달되면서 각 층에서 가중치와 곱해지고 활성화 함수를 통과하여 최종 예측값을 계산하는 과정입니다. |
| **역전파 (Backward Propagation)** | 순전파를 통해 계산된 예측값과 실제 정답 사이의 오차(손실)를 기반으로, 이 오차에 각 파라미터가 얼마나 기여했는지를 출력층부터 입력층 방향으로 거슬러 올라가며 계산하는 과정입니다(미분을 사용). 이 결과를 바탕으로 옵티마이저가 파라미터를 업데이트합니다. 딥러닝 학습의 핵심 알고리즘입니다. |
| **에포크 (Epoch)** | 전체 훈련 데이터셋이 신경망 모델을 통해 한 번 완전히 통과(순전파 및 역전파)된 횟수를 의미합니다. 즉, 모든 훈련 샘플이 학습에 한 번 사용되면 1 에포크가 완료된 것입니다. |
| **CNN (Convolutional Neural Network / 합성곱 신경망)** | 이미지 인식 및 처리에 특화된 딥러닝 모델 아키텍처입니다. 입력 데이터에서 특징(feature)을 추출하는 합성곱 계층(Convolutional Layer)과 풀링 계층(Pooling Layer)을 사용하여 공간적 계층 구조를 효과적으로 학습합니다. |
---
*이 용어집은 `geumdo_docs/ai lecture/part_7_deep_learning.md` 파일 내용을 기반으로 작성되었습니다.*
| **모델 서빙 (Model Serving)** | 학습된 머신러닝 모델을 실제 애플리케이션이나 사용자가 접근하여 예측 결과를 받을 수 있도록 배포하고 운영하는 과정입니다. API 형태로 제공하는 것이 일반적입니다. (비유: 비법 레시피로 요리를 만들어 손님에게 판매하는 '레스토랑' 운영) |
| **API (Application Programming Interface)** | 애플리케이션(소프트웨어)들이 서로 상호작용하기 위한 약속 또는 규격입니다. 클라이언트(손님)가 서버(주방)에 특정 형식으로 요청(주문)을 보내면, 서버는 약속된 형식으로 응답(요리)을 제공합니다. 웹에서는 주로 HTTP 프로토콜을 사용합니다. |
| **FastAPI** | Python 3.7+ 버전을 위한 현대적이고, 빠르며(고성능), 사용하기 쉬운 웹 프레임워크입니다. ASGI(Asynchronous Server Gateway Interface)를 기반으로 비동기 처리를 지원하며, Pydantic을 이용한 자동 데이터 검증 및 직렬화, 자동 API 문서 생성(Swagger UI, ReDoc) 기능이 강력합니다. |
| **uvicorn** | FastAPI와 같은 ASGI 애플리케이션을 위한 가볍고 빠른 ASGI 서버입니다. 개발 환경 및 프로덕션 환경에서 FastAPI 애플리케이션을 실행하는 데 사용됩니다. (비유: 레스토랑의 서버 매니저) |
| **Pydantic** | 파이썬 타입 힌트를 사용하여 데이터 유효성 검사 및 설정을 관리하는 라이브러리입니다. FastAPI에서는 요청 및 응답 데이터의 형식을 정의하고, 입력 데이터가 정의된 형식과 일치하는지 자동으로 검증하며, 데이터를 직렬화/역직렬화하는 데 사용됩니다. (비유: 주문서 양식 및 검토 직원) |
| **경로 매개변수 (Path Parameter)** | API 엔드포인트의 URL 경로 일부로 전달되는 변수입니다. 특정 리소스를 식별하는 데 사용됩니다. (예: `/items/{item_id}` 에서 `{item_id}` 부분) FastAPI에서는 함수 매개변수에 타입 힌트와 함께 선언하여 사용합니다. |
| **요청 본문 (Request Body)** | 클라이언트가 서버로 데이터를 전송할 때 HTTP 요청의 본문(body)에 담아 보내는 데이터입니다. 주로 POST, PUT, PATCH 메소드에서 사용되며, JSON, XML, 폼 데이터 등 다양한 형식이 가능합니다. FastAPI에서는 Pydantic 모델을 사용하여 요청 본문의 구조를 정의하고 유효성을 검사합니다. |
| **Swagger UI** | OpenAPI Specification(OAS)을 기반으로 API를 시각적으로 문서화하고, 브라우저에서 직접 API를 테스트할 수 있는 대화형 UI 도구입니다. FastAPI는 자동으로 Swagger UI를 `/docs` 경로에 생성해줍니다. (비유: 스마트 메뉴판) |
| **`lifespan` (FastAPI)** | FastAPI 애플리케이션의 시작과 종료 시점에 특정 작업을 수행하도록 하는 이벤트 핸들러입니다. 비동기 컨텍스트 매니저(`@asynccontextmanager`)를 사용하여 정의하며, 서버 시작 시 모델 로드, 데이터베이스 연결 초기화 등을, 서버 종료 시 리소스 정리 등을 수행하는 데 유용합니다. (비유: 가게 오픈 전 준비, 마감 후 정리) |
---
*이 용어집은 `geumdo_docs/ai lecture/part_8_model_serving_with_fastapi.md` 파일 내용을 기반으로 작성되었습니다.*
| **프로젝트 구조화 (Project Structuring)** | 소프트웨어 프로젝트의 코드와 파일들을 기능, 역할, 또는 모듈별로 논리적인 폴더 및 파일 구조로 정리하는 작업입니다. 코드의 가독성, 유지보수성, 재사용성을 높이고 팀 협업을 용이하게 합니다. |
| **관심사 분리 (Separation of Concerns, SoC)** | 컴퓨터 프로그램을 서로 다른 역할을 수행하는 독립적인 부분(모듈, 계층 등)으로 나누는 설계 원칙입니다. 각 부분은 자신만의 책임(관심사)에 집중하여, 시스템 전체의 복잡도를 낮추고 유연성과 확장성을 향상시킵니다. FastAPI 프로젝트에서는 라우터, 스키마, 설정 파일 등으로 분리할 수 있습니다. |
| **`APIRouter` (FastAPI)** | FastAPI에서 API 엔드포인트들을 그룹화하고 모듈화하는 데 사용되는 클래스입니다. 대규모 애플리케이션에서 특정 기능 또는 리소스와 관련된 경로들을 별도의 파일로 분리하여 관리할 수 있게 해줍니다. `main.py`에서는 `app.include_router()`를 통해 이러한 라우터들을 통합합니다. (비유: 레스토랑의 '한식 코너', '중식 코너') |
| **의존성 주입 (Dependency Injection, DI)** | 객체(클래스 인스턴스)가 내부에서 직접 다른 객체(의존성)를 생성하는 대신, 외부에서 생성된 객체를 전달받아 사용하는 디자인 패턴입니다. 코드 간의 결합도를 낮추고, 유연성, 테스트 용이성을 높입니다. FastAPI는 경로 연산 함수 매개변수에 타입 힌트를 통해 의존성을 선언하면 자동으로 주입해주는 강력한 DI 시스템을 갖추고 있습니다. |
| **Docker** | 애플리케이션과 그 실행에 필요한 모든 환경(코드, 라이브러리, 시스템 도구, 설정 등)을 '컨테이너'라는 격리된 공간에 패키징하여, 어떤 환경에서든 동일하게 실행될 수 있도록 하는 오픈소스 플랫폼입니다. "제 컴퓨터에서는 되는데요..." 문제를 해결하고, 개발, 배포, 운영의 효율성을 크게 향상시킵니다. (비유: 어디서든 똑같은 맛을 내는 밀키트) |
| **컨테이너 (Container)** | Docker의 핵심 개념으로, 애플리케이션과 그 종속성들을 격리된 환경에서 실행할 수 있도록 패키징한 단위입니다. 호스트 OS의 커널을 공유하면서도 독립적인 파일 시스템, 프로세스 공간 등을 가집니다. 이미지로부터 생성되며, 가볍고 빠릅니다. |
| **이미지 (Image)** | Docker 컨테이너를 생성하기 위한 읽기 전용 템플릿입니다. 애플리케이션 코드, 런타임, 시스템 도구, 라이브러리 및 설정 등 컨테이너 실행에 필요한 모든 것을 포함합니다. `Dockerfile`이라는 스크립트에 정의된 지침에 따라 빌드됩니다. (비유: 밀키트의 레시피와 재료가 담긴 포장) |
| **`Dockerfile`** | Docker 이미지를 빌드하기 위한 지침(명령어)들을 순서대로 기술한 텍스트 파일입니다. 베이스 이미지 선택, 작업 디렉토리 설정, 파일 복사, 의존성 설치, 실행 명령어 지정 등의 작업을 정의합니다. 이 파일을 통해 이미지를 재현 가능하고 자동화된 방식으로 생성할 수 있습니다. (비유: 밀키트 제조 레시피) |
| **Docker Compose** | 여러 개의 Docker 컨테이너로 구성된 애플리케이션을 정의하고 실행하기 위한 도구입니다. `docker-compose.yml`이라는 YAML 파일에 각 서비스(컨테이너)의 설정(이미지, 포트, 볼륨, 네트워크 등)을 기술하고, 단일 명령(`docker-compose up`)으로 모든 서비스를 한 번에 시작, 중지, 관리할 수 있습니다. (비유: 프랜차이즈 매장 동시 오픈 계획서) |
---
*이 용어집은 `geumdo_docs/ai lecture/part_9_production_ready_api.md` 파일 내용을 기반으로 작성되었습니다.*
AI Lecture 시리즈 전반에 걸쳐 사용되는 주요 기술 용어들을 가나다 순으로 정리했습니다.
---
### ㄱ
-**검색 증강 생성 (Retrieval-Augmented Generation, RAG)**
-**정의**: 대규모 언어 모델(LLM)이 답변을 생성하기 전에, 먼저 외부 지식 소스(예: 데이터베이스, 문서)에서 관련된 정보를 검색하고, 이 정보를 참고하여 답변을 생성하는 방법론. LLM의 환각(Hallucination) 현상을 줄이고, 최신 정보나 특정 도메인의 지식을 기반으로 정확하고 신뢰도 높은 답변을 생성하도록 돕습니다.
-**관련 파트**: [Part 7.5: LLM 애플리케이션 개발과 LangChain](./part_7.5_llm_application_development_with_langchain.md)
-**과적합 (Overfitting)**
-**정의**: 머신러닝 모델이 훈련 데이터에만 지나치게 최적화되어, 새로운 데이터(테스트 데이터)에 대해서는 예측 성능이 떨어지는 현상. 훈련 데이터의 사소한 노이즈까지 모두 외워버려 일반화 성능을 잃는 것을 의미합니다.
-**정의**: 비지도 학습의 한 종류로, 정답(레이블)이 없는 데이터 내에서 비슷한 특성을 가진 샘플끼리 그룹으로 묶는 작업입니다. 데이터의 숨겨진 구조를 파악하거나 고객을 유형별로 분류하는 데 사용됩니다.
-**관련 파트**: [Part 6: 머신러닝 완전 정복](./part_6_machine_learning.md)
### ㄴ
-**NumPy (넘파이)**
-**정의**: Numerical Python의 약자로, 파이썬에서 고성능 과학 계산과 수치 연산을 위한 핵심 라이브러리. `ndarray`라는 효율적인 다차원 배열 객체를 제공하여, 벡터 및 행렬 연산을 매우 빠르게 처리할 수 있습니다. Pandas, Scikit-learn, PyTorch 등 대부분의 AI 라이브러리의 기반이 되는 기술입니다.
-**비유**: '계란판'. 모든 데이터를 동일한 타입의 숫자(계란)로 취급하여, '모든 계란에 도장 찍기'와 같은 동일한 연산을 매우 빠른 속도로 처리할 수 있습니다.
-**관련 파트**: [Part 5: AI 핵심 라이브러리](./part_5_ai_core_libraries.md)
### ㄷ
-**대규모 언어 모델 (Large Language Model, LLM)**
-**정의**: 수십억 개 이상의 파라미터와 방대한 텍스트 데이터를 기반으로 사전 훈련된 거대한 인공 신경망 모델. 번역, 요약, 질의응답, 코드 생성 등 다양한 자연어 처리 작업에서 뛰어난 성능을 보이며, 파운데이션 모델의 대표적인 예시입니다.
-**관련 파트**: [Part 7.5: LLM 애플리케이션 개발과 LangChain](./part_7.5_llm_application_development_with_langchain.md)
-**데이터 전처리 (Data Preprocessing)**
-**정의**: "Garbage In, Garbage Out" 원칙에 따라, 머신러닝 모델의 성능을 높이기 위해 원시 데이터(raw data)를 학습에 적합한 형태로 가공하는 모든 작업. 결측치 처리, 이상치 탐지, 특성 스케일링, 범주형 데이터 인코딩 등이 포함됩니다.
-**관련 파트**: [Part 6: 머신러닝 완전 정복](./part_6_machine_learning.md)
-**도커 (Docker)**
-**정의**: 애플리케이션과 그 실행에 필요한 모든 것(라이브러리, 시스템 도구, 코드, 런타임 등)을 '컨테이너'라는 격리된 공간에 패키징하여, 어떤 환경에서든 동일하게 실행될 수 있도록 하는 플랫폼. "제 컴퓨터에서는 되는데요?" 문제를 해결하는 핵심 기술입니다.
-**비유**: '어디서든 똑같은 맛을 내는 밀키트'. 애플리케이션의 모든 재료와 레시피를 밀키트(이미지)로 만들어, 어떤 주방(서버)에서 조리하든 항상 동일한 결과물을 보장합니다.
-**관련 파트**: [Part 1: AI 개발 환경 완벽 구축 가이드](./part_1_ai_development_environment.md), [Part 9: 프로덕션 레벨 API와 Docker](./part_9_production_ready_api.md)
-**도커 컴포즈 (Docker Compose)**
-**정의**: 여러 개의 도커 컨테이너를 하나의 `yml` 파일로 정의하고, 명령어 하나로 실행하고 관리할 수 있게 해주는 도구. API 서버, 데이터베이스, 웹서버 등 여러 서비스가 함께 동작하는 복잡한 애플리케이션을 손쉽게 오케스트레이션할 수 있습니다.
-**관련 파트**: [Part 9: 프로덕션 레벨 API와 Docker](./part_9_production_ready_api.md)
-**도커파일 (Dockerfile)**
-**정의**: 도커 이미지를 만들기 위한 '설계도' 또는 '레시피'. 기반이 될 OS 이미지, 설치할 라이브러리, 복사할 소스 코드, 실행할 명령어 등 컨테이너가 어떻게 구성되어야 하는지에 대한 지침을 텍스트 파일에 순서대로 기록합니다. `docker build` 명령어를 통해 이 파일을 읽어 이미지를 생성합니다.
-**관련 파트**: [Part 9: 프로덕션 레벨 API와 Docker](./part_9_production_ready_api.md)
### ㄹ
-**LangChain (랭체인)**
-**정의**: 대규모 언어 모델(LLM)을 활용한 애플리케이션 개발을 위한 오픈소스 프레임워크. LLM을 외부 데이터 소스, API 등과 쉽게 연결(Chaining)하여 복잡한 작업을 수행하는 파이프라인을 구축할 수 있도록 돕는 다양한 도구와 컴포넌트를 제공합니다.
-**관련 파트**: [Part 7.5: LLM 애플리케이션 개발과 LangChain](./part_7.5_llm_application_development_with_langchain.md)
-**LangChain Expression Language (LCEL)**
-**정의**: LangChain의 각 컴포넌트(프롬프트, 모델, 출력 파서 등)를 `|`(파이프) 기호로 마치 리눅스 셸 명령어처럼 자연스럽게 연결할 수 있게 해주는 선언적 방식의 구문. 복잡한 체인을 더 직관적이고 가독성 높게 구성할 수 있게 하며, 스트리밍, 병렬 처리 등을 쉽게 구현할 수 있도록 돕습니다.
-**관련 파트**: [Part 10: 전문가로 가는 길](./part_10_expert_path.md)
### ㅁ
-**머신러닝 학습 3대 유형**
-**정의**: 머신러닝은 학습 방식에 따라 크게 지도, 비지도, 강화 학습의 세 가지 유형으로 나뉩니다.
-**지도 학습 (Supervised Learning)**: '문제(입력)'와 '정답(레이블)'이 모두 있는 데이터를 사용하여, 입력과 정답 사이의 관계를 학습합니다. (예: 사진을 보고 '고양이'인지 '개'인지 맞추기) **분류**와 **회귀**가 대표적입니다.
-**비지도 학습 (Unsupervised Learning)**: '정답' 없이 데이터 자체의 숨겨진 구조, 패턴, 유사성을 파악합니다. (예: 고객 데이터를 보고 비슷한 성향의 그룹으로 나누기) **군집화**가 대표적입니다.
-**강화 학습 (Reinforcement Learning)**: 에이전트가 환경과 상호작용하며 '보상'을 최대로 얻는 방향으로 행동을 학습합니다. (예: 시행착오를 통해 미로를 탈출하는 법을 배우는 로봇)
-**관련 파트**: [Part 6: 머신러닝 완전 정복](./part_6_machine_learning.md)
-**미세조정 (Fine-tuning)**
-**정의**: 방대한 데이터로 사전 훈련된 파운데이션 모델을 특정 도메인이나 특정 작업에 맞게 소량의 데이터로 추가 학습시키는 과정. 모델을 처음부터 훈련하는 것보다 훨씬 적은 비용과 데이터로 높은 성능을 얻을 수 있는 효과적인 방법입니다.
-**관련 파트**: [Part 7.5: LLM 애플리케이션 개발과 LangChain](./part_7.5_llm_application_development_with_langchain.md), [Part 10: 전문가로 가는 길](./part_10_expert_path.md)
### ㅂ
-**보상 해킹 (Reward Hacking)**
-**정의**: 강화학습에서 AI 에이전트가 설계된 보상 시스템의 허점을 악용하여, 의도된 목표를 달성하지 않고도 보상을 극대화하는 방법을 찾아내는 현상. AI의 기만적인 행동이나 예상치 못한 부작용을 일으킬 수 있어 AI 안전 분야의 주요 연구 주제입니다.
-**관련 파트**: [Part 10: 전문가로 가는 길](./part_10_expert_path.md)
-**벡터 저장소 (Vector Store)**
-**정의**: 텍스트, 이미지 등과 같은 데이터를 고차원의 벡터(Vector)로 변환하여 저장하고, 특정 벡터와 유사한 벡터를 빠르고 효율적으로 검색할 수 있도록 설계된 데이터베이스. RAG 시스템에서 문서 Chunk들의 임베딩 벡터를 저장하고, 사용자 질문과 관련된 Chunk를 찾는 데 핵심적인 역할을 합니다.
-**관련 파트**: [Part 7.5: LLM 애플리케이션 개발과 LangChain](./part_7.5_llm_application_development_with_langchain.md)
-**분류 (Classification)**
-**정의**: 지도 학습의 한 종류로, 데이터를 미리 정해진 여러 개의 카테고리(클래스) 중 하나로 예측하는 작업입니다. (예: 스팸/정상 메일 분류, 품종 분류)
-**관련 파트**: [Part 6: 머신러닝 완전 정복](./part_6_machine_learning.md)
### ㅅ
-**사고의 연쇄 (Chain-of-Thought, CoT)**
-**정의**: 대규모 언어 모델(LLM)이 복잡한 추론 문제를 해결할 때, 최종 답변뿐만 아니라 그 답변에 도달하기까지의 중간 단계들을 명시적으로 생성하도록 유도하는 프롬프팅 기법. 모델의 추론 과정을 투명하게 만들고, 더 정확한 답변을 얻는 데 도움을 줍니다.
-**관련 파트**: [Part 10: 전문가로 가는 길](./part_10_expert_path.md)
-**Scikit-learn (사이킷런)**
-**정의**: 파이썬의 대표적인 머신러닝 라이브러리. 회귀, 분류, 군집화 등 다양한 머신러닝 알고리즘과 데이터 전처리, 모델 평가 도구를 제공하여 사용자가 쉽게 모델을 개발할 수 있도록 돕습니다.
-**관련 파트**: [Part 5: AI 핵심 라이브러리](./part_5_ai_core_libraries.md), [Part 6: 머신러닝 완전 정복](./part_6_machine_learning.md)
-**손실 함수 (Loss Function)**
-**정의**: 딥러닝 모델의 예측 값이 실제 정답과 얼마나 다른지를 나타내는 '오차'를 계산하는 함수. 모델은 이 손실 함수의 값을 최소화하는 방향으로 가중치를 업데이트하며 학습을 진행합니다.
-**비유**: '목표 지점과의 거리 측정기'. 모델이 쏜 화살이 과녁(정답)에서 얼마나 빗나갔는지를 측정하여, 다음번엔 어느 방향으로 조준해야 할지 알려주는 역할을 합니다.
-**정의**: 파이썬의 대표적인 ORM(Object-Relational Mapping) 라이브러리. 개발자가 SQL 쿼리를 직접 작성하지 않고, 파이썬 클래스(모델)와 객체를 통해 데이터베이스의 테이블과 레코드를 조작할 수 있도록 해주는 강력한 도구입니다.
-**관련 파트**: [Part 9: 프로덕션 레벨 API와 Docker](./part_9_production_ready_api.md)
-**Swagger UI / OpenAPI**
-**정의**: OpenAPI Specification(과거 Swagger Specification)은 RESTful API를 명세하고 기술하기 위한 표준 형식입니다. Swagger UI는 이 명세서를 바탕으로, 개발자가 브라우저에서 직접 API 문서를 확인하고 상호작용(테스트)할 수 있는 아름다운 웹 인터페이스를 자동으로 생성해주는 도구입니다. FastAPI는 이 기능을 기본적으로 내장하고 있습니다.
-**비유**: '스마트 메뉴판'. 모든 메뉴(엔드포인트)와 필요한 재료(요청), 나오는 요리(응답)를 보여줄 뿐만 아니라, `Try it out` 버튼으로 그 자리에서 바로 맛보기 주문을 넣어 결과를 확인할 수 있습니다.
-**관련 파트**: [Part 8: FastAPI를 이용한 모델 서빙](./part_8_model_serving_with_fastapi.md)
### ㅇ
-**역전파 (Backpropagation)**
-**정의**: 신경망 학습의 핵심 알고리즘. 출력층에서 계산된 손실(오차)을 입력층 방향으로 거꾸로 전파시키면서, 각 가중치(파라미터)가 오차에 얼마나 기여했는지를 계산하고, 이 정보를 바탕으로 옵티마이저가 가중치를 업데이트하도록 하는 방식입니다.
-**비유**: '팀 프로젝트 과제 피드백'. 최종 결과물(출력)에 대한 교수님의 피드백(오차)을 받고, 각 팀원이 어떤 부분에서 실수를 했는지(기여도) 역으로 추적하여 각자의 역할을 수정(가중치 업데이트)하는 과정과 같습니다.
-**정의**: 주어진 목표를 달성하기 위해 스스로 **계획을 세우고, 도구를 사용하며, 주변 환경과 상호작용**하는 등 자율적으로 행동하는 AI 시스템. 단순한 예측 모델을 넘어, 복잡한 작업을 자율적으로 수행하는 주체로서의 AI를 의미합니다.
-**관련 파트**: [Part 10: 전문가로 가는 길](./part_10_expert_path.md)
-**에이전틱 워크플로우 (Agentic Workflow)**
-**정의**: AI 에이전트가 목표를 달성하기 위해 사용하는 **반복적이고 순환적인 작업 방식**. 단순히 입력을 받아 출력을 내는 단방향 프로세스가 아니라, **[생각 → 행동 → 관찰 → 다음 행동 계획]**의 사이클을 반복하며 스스로 결과를 개선해 나가는 과정을 의미합니다.
-**관련 파트**: [Part 0: 시작하며](./part_0_introduction.md), [Part 10: 전문가로 가는 길](./part_10_expert_path.md)
-**Ollama (오라마)**
-**정의**: LLaMA, Mistral 등 다양한 오픈소스 소형 언어 모델(SLM)을 개인 컴퓨터에서 쉽고 빠르게 설치하고 실행할 수 있도록 도와주는 도구. `Modelfile`이라는 간단한 설정 파일을 통해 모델을 커스터마이징하고, 로컬 환경에서 API 서버를 통해 모델을 바로 활용할 수 있습니다.
-**관련 파트**: [Part 10: 전문가로 가는 길](./part_10_expert_path.md)
-**옵티마이저 (Optimizer)**
-**정의**: 손실 함수가 계산한 오차를 기반으로, 모델의 파라미터(가중치)를 가장 효율적인 방향으로 업데이트하는 알고리즘. 경사 하강법(Gradient Descent)을 기반으로 하며, Adam, SGD, RMSprop 등 다양한 종류가 있습니다.
-**비유**: '산을 내려오는 등산가'. 손실 함수라는 '산의 고도 지도'를 보고, 현재 위치에서 경사가 가장 가파른 방향(오차를 가장 빨리 줄이는 방향)으로 한 걸음씩 나아가 산의 가장 낮은 지점(최적의 가중치)을 찾아가는 역할을 합니다.
-**정의**: API가 리소스에 접근할 수 있도록 제공하는 최종 통신 지점의 URL. 각 엔드포인트는 특정 기능(예: 사용자 정보 조회, 상품 추가)과 연결됩니다.
-**예시**: `https://api.example.com/users/123` 에서 `/users/123` 부분이 엔드포인트입니다.
-**관련 파트**: [Part 8: FastAPI를 이용한 모델 서빙](./part_8_model_serving_with_fastapi.md)
-**의존성 주입 (Dependency Injection)**
-**정의**: 객체가 필요로 하는 다른 객체(의존성)를 외부에서 직접 생성하여 전달하는 디자인 패턴. 객체 스스로 의존성을 생성하지 않으므로, 코드의 결합도(Coupling)를 낮추고 유연성과 테스트 용이성을 높입니다.
-**예시**: FastAPI에서 `Depends`를 사용하여 데이터베이스 세션(`db: Session = Depends(get_db)`)을 라우터 함수에 주입하는 것. 이를 통해 라우터 함수는 DB 세션 생성 방법을 알 필요 없이 사용에만 집중할 수 있습니다.
-**관련 파트**: [Part 9: 프로덕션 레벨 API와 Docker](./part_9_production_ready_api.md)
-**Uvicorn (유비콘)**
-**정의**: FastAPI와 같은 ASGI 표준을 따르는 파이썬 웹 프레임워크를 위한 고성능 비동기 서버. '서버 매니저' 또는 '서버 게이트웨이' 역할을 하며, 실제 운영 환경에서는 Gunicorn과 함께 사용하여 여러 프로세스를 관리하며 안정성과 성능을 높이는 경우가 많습니다.
-**관련 파트**: [Part 8: FastAPI를 이용한 모델 서빙](./part_8_model_serving_with_fastapi.md)
-**임베딩 (Embedding)**
-**정의**: 텍스트와 같은 이산적인 데이터를 컴퓨터가 처리하기 쉬운 연속적인 숫자 벡터(Vector)로 변환하는 과정 또는 그 결과물. 단어, 문장, 문서의 의미적인 관계를 벡터 공간에 표현하여, 단어 간 유사도 계산이나 기계 학습 모델의 입력값으로 활용됩니다. RAG에서는 문서 Chunk와 사용자 질문을 임베딩하여 의미적으로 유사한 정보를 찾습니다.
-**관련 파트**: [Part 7.5: LLM 애플리케이션 개발과 LangChain](./part_7.5_llm_application_development_with_langchain.md)
### ㅊ
-**Chunking (청킹)**
-**정의**: RAG 시스템에서 LLM이 효율적으로 처리하고 검색할 수 있도록, 긴 문서를 의미 있는 작은 조각(Chunk)으로 나누는 과정. 어떻게 Chunk를 나누는지에 따라 RAG 시스템 전체의 검색 성능과 답변 품질이 크게 달라지기 때문에 매우 중요한 단계입니다.
-**관련 파트**: [Part 7.5: LLM 애플리케이션 개발과 LangChain](./part_7.5_llm_application_development_with_langchain.md)
### ㅌ
-**특성 스케일링 (Feature Scaling)**
-**정의**: 여러 특성(Feature)들의 값의 범위(스케일)를 일정하게 맞추는 데이터 전처리 작업. '키'와 '나이'처럼 스케일이 다른 특성들이 모델에 미치는 영향을 동등하게 만들어 모델의 학습 성능과 안정성을 높입니다. `StandardScaler`가 대표적인 예입니다.
-**관련 파트**: [Part 6: 머신러닝 완전 정복](./part_6_machine_learning.md)
### ㅍ
-**Pandas (판다스)**
-**정의**: 파이썬에서 표 형식의 데이터를 다루기 위한 필수 라이브러리. `DataFrame`(2차원 테이블)과 `Series`(1차원 배열)라는 강력하고 직관적인 자료구조를 제공하여, CSV, Excel, DB 등 다양한 소스로부터 데이터를 읽고 쓰고, 정제하고, 분석하는 작업을 매우 효율적으로 수행할 수 있게 해줍니다.
-**비유**: '슈퍼 엑셀'. 엑셀이 할 수 있는 대부분의 데이터 처리 작업을 파이썬 코드를 통해 자동화하고, 훨씬 더 대용량의 데이터를 자유자재로 다룰 수 있게 해주는 도구입니다.
-**관련 파트**: [Part 5: AI 핵심 라이브러리](./part_5_ai_core_libraries.md)
-**FastAPI (패스트API)**
-**정의**: 현대적인 고성능 파이썬 웹 프레임워크. 파이썬 3.7+의 타입 힌트(Type Hint)를 기반으로 하며, ASGI를 지원하여 매우 빠른 속도를 자랑합니다. Pydantic을 이용한 자동 데이터 유효성 검사와 자동으로 생성되는 대화형 API 문서(Swagger UI)가 특징입니다.
-**관련 파트**: [Part 8: FastAPI를 이용한 모델 서빙](./part_8_model_serving_with_fastapi.md), [Part 9: 프로덕션 레벨 API와 Docker](./part_9_production_ready_api.md)
-**파운데이션 모델 (Foundation Model)**
-**정의**: 방대한 양의 데이터로 사전 훈련되어, 특정 작업에 국한되지 않고 다양한 다운스트림 작업(downstream task)에 적용될 수 있는 범용적인 대규모 AI 모델. GPT-3, LLaMA 등이 대표적인 예이며, 약간의 미세조정(fine-tuning)이나 프롬프트 엔지니어링만으로 다양한 문제를 해결할 수 있는 잠재력을 가집니다.
-**관련 파트**: [Part 7.5: LLM 애플리케이션 개발과 LangChain](./part_7.5_llm_application_development_with_langchain.md)
-**PyTorch (파이토치)**
-**정의**: 페이스북(Meta AI)에서 개발한 오픈소스 딥러닝 프레임워크. 동적 계산 그래프를 지원하여 유연하고 직관적인 모델 구현이 가능하며, 연구 및 개발 커뮤니티에서 널리 사용됩니다.
-**정의**: 대규모 언어 모델(LLM)로부터 원하는 최상의 결과를 얻어내기 위해, 모델에 입력하는 지시문(프롬프트)을 최적화하고 설계하는 기술 또는 과정. 질문의 형식, 예시(Few-shot), 역할 부여 등 다양한 기법을 통해 모델의 성능을 크게 향상시킬 수 있습니다.
-**관련 파트**: [Part 7.5: LLM 애플리케이션 개발과 LangChain](./part_7.5_llm_application_development_with_langchain.md)
-**Pydantic (파이댄틱)**
-**정의**: 파이썬의 타입 힌트(Type Hint)를 사용하여 데이터의 유효성을 검사하고 설정을 관리하는 라이브러리. FastAPI에서 요청 및 응답 데이터의 형식을 정의하고 자동으로 검증하는 데 핵심적인 역할을 합니다.
-**장점**: 개발자가 직접 데이터 검증 코드를 작성할 필요 없이, 모델 클래스를 정의하는 것만으로 복잡한 데이터 유효성 검사를 수행할 수 있어 코드의 안정성과 가독성을 크게 향상시킵니다.
-**관련 파트**: [Part 8: FastAPI를 이용한 모델 서빙](./part_8_model_serving_with_fastapi.md), [Part 9: 프로덕션 레벨 API와 Docker](./part_9_production_ready_api.md)
### ㅎ
-**합성곱 신경망 (CNN, Convolutional Neural Network)**
-**정의**: 이미지 데이터 처리에 특화된 딥러닝 모델. 인간의 시신경을 모방한 필터(Filter/Kernel)를 사용하여 이미지의 공간적인 특징(모서리, 질감 등)을 효과적으로 추출하고 학습합니다.
-**정의**: 분류 모델의 성능을 평가하기 위한 표. 실제 클래스와 모델이 예측한 클래스를 비교하여, 모델이 어떤 유형의 오류를 범하는지(e.g., '정상'을 '스팸'으로 잘못 예측) 직관적으로 보여줍니다. 정확도(Accuracy)뿐만 아니라 정밀도(Precision), 재현율(Recall) 등을 계산하는 기반이 됩니다.
-**관련 파트**: [Part 6: 머신러닝 완전 정복](./part_6_machine_learning.md)
-**환각 (Hallucination)**
-**정의**: 대규모 언어 모델(LLM)이 사실이 아니거나 맥락에 맞지 않는 정보를 그럴듯하게 사실처럼 생성하는 현상. 모델의 내적 지식에만 의존할 때 발생하기 쉬우며, RAG는 이러한 환각 현상을 완화하는 효과적인 방법 중 하나입니다.
-**관련 파트**: [Part 7.5: LLM 애플리케이션 개발과 LangChain](./part_7.5_llm_application_development_with_langchain.md)
-**활성화 함수 (Activation Function)**
-**정의**: 신경망에서 이전 레이어로부터 전달받은 신호의 총합을 다음 레이어로 전달할지 여부를 결정하는 함수. 선형적인 계산 결과에 비선형성(non-linearity)을 추가하여, 신경망이 더 복잡하고 다양한 패턴을 학습할 수 있도록 하는 핵심적인 역할을 합니다. ReLU, Sigmoid, Tanh 등이 대표적입니다.
-**정의**: 지속적 통합(CI)과 지속적 배포/전달(CD)을 합친 용어로, 소프트웨어 개발 및 배포 프로세스를 자동화하여 품질과 속도를 높이는 DevOps 문화 및 방법론.
-**CI (지속적 통합)**: 여러 개발자가 작업한 코드를 주기적으로 중앙 레포지토리에 통합(merge)할 때마다, 자동으로 빌드하고 테스트하여 코드의 충돌과 버그를 조기에 발견하는 프로세스.
-**CD (지속적 배포)**: CI를 통과한 코드를 테스트 환경이나 실제 프로덕션 환경까지 자동으로 배포하는 프로세스.
-**비유**: '자동 메뉴 업데이트 시스템'. 새로운 레시피(코드)가 개발되면, 중앙 주방에서 자동으로 맛을 검증(CI)하고, 전국 모든 지점에 레시피를 즉시 배포(CD)하는 것과 같습니다.
-**관련 파트**: [Part 10: 전문가로 가는 길](./part_10_expert_path.md)
-**Google Colab (구글 코랩)**
-**정의**: 구글에서 제공하는 클라우드 기반의 무료 Jupyter Notebook 개발 환경. 별도의 설치 없이 웹 브라우저만으로 파이썬 코드를 작성하고 실행할 수 있으며, 특히 무료로 강력한 GPU/TPU 자원을 활용할 수 있어 머신러닝 및 딥러닝 모델 학습에 매우 유용합니다.
-**관련 파트**: [Part 1: AI 개발 환경 완벽 구축 가이드](./part_1_ai_development_environment.md)
-**MLOps (Machine Learning Operations)**
-**정의**: 머신러닝 모델을 개발(Dev)하고 운영(Ops)하는 전 과정을 통합하고 자동화하여, AI 서비스를 안정적이고 효율적으로 구축, 배포, 유지보수하기 위한 원칙과 실천 방법론. CI/CD, 데이터/모델 버전 관리, 지속적인 모니터링 및 재학습 파이프라인 구축 등이 포함됩니다.
-**비유**: 'AI 레스토랑 프랜차이즈의 중앙 관제 시스템'. 신메뉴 개발, 전국 매장 배포, 품질 모니터링, 레시피 개선까지 모든 과정을 자동화하여 일관된 품질을 유지하고 지속적으로 성장시키는 시스템입니다.
-**관련 파트**: [Part 10: 전문가로 가는 길](./part_10_expert_path.md)
-**ORM (Object-Relational Mapping)**
-**정의**: 객체 지향 프로그래밍 언어(예: 파이썬)의 객체(Class)와 관계형 데이터베이스(RDB)의 테이블을 자동으로 매핑(연결)해주는 기술. 개발자는 SQL 쿼리를 직접 작성하는 대신, 익숙한 프로그래밍 언어의 코드로 데이터베이스를 조작할 수 있습니다.
-**예시**: SQLAlchemy 라이브러리를 사용하여 파이썬 클래스로 DB 테이블을 정의하고, 파이썬 코드로 데이터를 추가/조회하는 것.
-**관련 파트**: [Part 9: 프로덕션 레벨 API와 Docker](./part_9_production_ready_api.md)
안녕하세요! "AI 서비스 개발 12주 완성" 과정에 오신 것을 환영합니다. 이 과정은 여러분이 AI 기술을 활용하여 세상에 가치를 더하는 서비스를 직접 만들 수 있도록 안내하는 나침반이 될 것입니다.
AI 서비스를 만드는 것은 마치 **'스스로 생각하고 행동하는 기계'**를 조립하는 것과 같습니다. 처음에는 작은 부품(프로그래밍 기초)을 다루는 법부터 배우고, 점차 엔진(AI 모델)을 만들어 올리고, 마지막에는 멋진 차체(API 서버)를 씌워 실제 세상(인터넷)을 달리게 하는 것과 같죠.
## 1. 이 과정을 통해 무엇을 얻게 될까요? (Course-wide Learning Objectives)
본 과정을 완주하면 여러분은 다음과 같은 핵심 역량을 갖춘 'AI 서비스 개발자'로 거듭나게 됩니다.
이 과정은 프로그래밍 기초부터 시작해, AI 모델을 활용한 고성능 API 서버를 구축하고, 최종적으로는 여러분만의 아이디어를 실현하는 캡스톤 프로젝트까지 완료하는 것을 목표로 합니다. 12주 동안 막연하게 느껴졌던 'AI 서비스 개발'의 모든 과정을 구체적인 코드로 구현하며, 현업에 바로 투입될 수 있는 실무 역량을 갖추게 될 것입니다.
-**탄탄한 프로그래밍 역량:** Python 기초 문법부터 [객체 지향 설계(OOP)](glossaries/part_0_glossary.md#객체-지향-프로그래밍-object-oriented-programming-oop)까지 깊이 있게 이해하고 활용할 수 있습니다.
-**실전적인 모델링 경험:** 데이터 전처리, 모델 학습, 평가, 튜닝까지 [머신러닝](glossaries/part_0_glossary.md#머신러닝-machine-learning) 프로젝트의 전 과정을 주도할 수 있습니다.
-**고성능 API 서버 구축 능력:**[FastAPI](glossaries/part_0_glossary.md#fastapi)를 기반으로 안정적이고 확장 가능한 AI API 서버를 설계하고 운영할 수 있습니다.
-**최신 DevOps 지식 습득:**[Docker](glossaries/part_0_glossary.md#도커-docker)를 이용한 서비스 패키징 및 배포 자동화의 기본 개념을 이해합니다.
-**나만의 AI 포트폴리오 완성:** 자신만의 아이디어를 실제 동작하는 AI 서비스로 구현한 [캡스톤 프로젝트](glossaries/part_0_glossary.md#캡스톤-프로젝트-capstone-project)를 통해 실력을 증명할 수 있습니다.
## 🏁 최종 목표: 나만의 AI 서비스 포트폴리오 완성
## 2. 과정에서 다룰 핵심 기술 (Keywords)
단순한 예제 완성을 넘어, 우리는 이 과정을 통해 **"실제 운영 가능한 수준의 AI 기반 API 서버"**를 구축하고, 이를 응용한 **"캡스톤 프로젝트"**를 완성하여 자신만의 포트폴리오를 만들게 됩니다.
이는 마치 **'레시피만 따라 요리 하나를 만드는 것'**과 **'손님들이 언제든 찾아와 주문할 수 있는 식당 주방을 설계하는 것'**의 차이와 같습니다. 우리는 후자를 목표로 합니다. 언제든 요청에 응답하고, 안정적으로 서비스를 제공하는 '프로의 시스템'을 만드는 경험을 하게 될 것입니다.
## 3. 왜 'AI 서비스 개발'을 배워야 할까요? (Introduction)
이 과정을 통해 여러분은 다음과 같은 결과물을 얻게 됩니다.
AI 서비스를 만드는 것은 마치 **'스스로 생각하고 행동하는 기계'**를 조립하는 것과 같습니다. 처음에는 작은 부품(프로그래밍 기초)을 다루는 법부터 배우고, 점차 엔진(AI 모델)을 만들어 올리고, 마지막에는 멋진 차체(API 서버)를 씌워 실제 세상(인터넷)을 달리게 하는 것과 같죠.
-**탄탄한 Python 프로그래밍 역량**: 기초 문법부터 객체 지향 설계까지 깊이 있는 이해
단순한 '모델' 개발을 넘어 '서비스' 개발을 배우는 것은, **'레시피만 따라 요리 하나를 만드는 것'**과 **'손님들이 언제든 찾아와 주문할 수 있는 식당 주방을 설계하는 것'**의 차이와 같습니다. 우리는 후자를 목표로 합니다. 언제든 요청에 응답하고, 안정적으로 서비스를 제공하는 '프로의 시스템'을 만드는 경험을 하게 될 것입니다.
-**고성능 AI API 서버**: FastAPI를 기반으로 한 비동기 API 서버 구축 및 운영 능력
-**실전 머신러닝 모델링 경험**: 데이터 전처리, 모델 학습, 평가, 배포까지 전 과정 경험
-**최신 DevOps 지식**: Docker를 이용한 컨테이너화 및 CI/CD 자동화 파이프라인 개념 이해
-**나만의 포트폴리오**: 아이디어를 실제 서비스로 구현한 캡스톤 프로젝트 결과물
## 🙋♂️ 대상 독자
## 4. 누구를 위한 강의인가요? (Target Audience)
이 과정은 다음과 같은 분들을 위해 체계적으로 설계되었습니다.
이 과정은 다음과 같은 분들을 위해 체계적으로 설계되었습니다.
...
@@ -28,7 +30,7 @@ AI 서비스를 만드는 것은 마치 **'스스로 생각하고 행동하는
...
@@ -28,7 +30,7 @@ AI 서비스를 만드는 것은 마치 **'스스로 생각하고 행동하는
- Python 기본 문법은 알지만, 실제 프로젝트 경험이 부족한 **학생 또는 주니어 개발자**
- Python 기본 문법은 알지만, 실제 프로젝트 경험이 부족한 **학생 또는 주니어 개발자**
- AI 모델은 개발했지만, 이를 어떻게 서비스로 만들어야 할지 막막한 **연구자 및 데이터 분석가**
- AI 모델은 개발했지만, 이를 어떻게 서비스로 만들어야 할지 막막한 **연구자 및 데이터 분석가**
## 🗺️ 12주 학습 로드맵
## 5. 12주 학습 로드맵 (Course Roadmap)
우리는 12주 동안 다음의 로드맵에 따라 체계적으로 학습을 진행합니다. 이 로드맵은 AI 서비스 개발이라는 보물섬을 찾아가는 **'친절한 안내 지도'**입니다. 각 주차별 목표를 따라 한 걸음씩 나아가다 보면, 어느새 유능한 개발자로 성장한 자신을 발견하게 될 것입니다.
우리는 12주 동안 다음의 로드맵에 따라 체계적으로 학습을 진행합니다. 이 로드맵은 AI 서비스 개발이라는 보물섬을 찾아가는 **'친절한 안내 지도'**입니다. 각 주차별 목표를 따라 한 걸음씩 나아가다 보면, 어느새 유능한 개발자로 성장한 자신을 발견하게 될 것입니다.
...
@@ -38,7 +40,7 @@ graph TD
...
@@ -38,7 +40,7 @@ graph TD
W1["<a href='part_1_ai_development_environment.md'><b>1주차</b>: 과정 소개 및<br/>개발 환경 설정</a>"]
W1["<a href='part_1_ai_development_environment.md'><b>1주차</b>: 과정 소개 및<br/>개발 환경 설정</a>"]
W2["<a href='part_2_python_core_syntax.md'><b>2주차</b>: 파이썬 핵심 문법</a>"]
W2["<a href='part_2_python_core_syntax.md'><b>2주차</b>: 파이썬 핵심 문법</a>"]
## 🚀 AI의 미래: 에이전트 워크플로우 (The Future of AI: Agentic Workflows)
## 6. 미래를 향한 한 걸음: AI 에이전트 (The Future of AI)
최근 AI 분야의 가장 뜨거운 화두는 바로 **'AI 에이전트'**입니다. 스탠포드 대학의 앤드류 응(Andrew Ng) 교수는 AI의 미래가 에이전트에 달려있다고 강조합니다.
최근 AI 분야의 가장 뜨거운 화두는 바로 **'AI 에이전트'**입니다. 스탠포드 대학의 앤드류 응(Andrew Ng) 교수는 AI의 미래가 에이전트에 달려있다고 강조합니다.
...
@@ -72,22 +74,24 @@ graph TD
...
@@ -72,22 +74,24 @@ graph TD
본 과정의 후반부에서는 이러한 최신 트렌드를 맛보고, 여러분이 만든 AI 모델을 어떻게 더 똑똑한 '에이전트'로 발전시킬 수 있을지에 대한 아이디어를 얻게 될 것입니다.
본 과정의 후반부에서는 이러한 최신 트렌드를 맛보고, 여러분이 만든 AI 모델을 어떻게 더 똑똑한 '에이전트'로 발전시킬 수 있을지에 대한 아이디어를 얻게 될 것입니다.
## ❓ 자주 묻는 질문 (Q&A)
## 7. 자주 묻는 질문 (Q&A)
**Q1: 정말 프로그래밍을 하나도 몰라도 따라갈 수 있나요?**
**Q1: 정말 프로그래밍을 하나도 몰라도 따라갈 수 있나요?**
> A1: 네, 가능합니다. 본 과정의 1부(1-4주차)는 비전공자 및 입문자를 위해 파이썬 기초를 매우 상세하게 다룹니다. 열정과 꾸준함만 있다면 누구나 과정을 완주할 수 있습니다.
> A1: 네, 가능합니다. 본 과정의 1부(1-4주차)는 비전공자 및 입문자를 위해 파이썬 기초를 매우 상세하게 다룹니다. 열정과 꾸준함만 있다면 누구나 과정을 완주할 수 있습니다.
**Q2: 과정에서 사용하는 주요 기술은 무엇인가요?**
**Q2: 과정에서 사용하는 주요 기술은 무엇인가요?**
> A2: <a href="glossary.md#python">Python</a>, <a href="glossary.md#numpy">NumPy</a>, <a href="glossary.md#pandas">Pandas</a>, <a href="glossary.md#scikit-learn">Scikit-learn</a>, <a href="glossary.md#fastapi">FastAPI</a>, <a href="glossary.md#docker">Docker</a> 등 현재 AI 서비스 개발 현업에서 가장 널리 사용되는 기술 스택을 중심으로 학습합니다.
> A2: <a href="glossaries/part_0_glossary.md#python-파이썬">Python</a>, <a href="glossaries/part_0_glossary.md#numpy-넘파이">NumPy</a>, <a href="glossaries/part_0_glossary.md#pandas-판다스">Pandas</a>, <a href="glossaries/part_0_glossary.md#scikit-learn-사이킷런">Scikit-learn</a>, <a href="glossaries/part_0_glossary.md#fastapi-패스트에이피아이">FastAPI</a>, <a href="glossaries/part_0_glossary.md#도커-docker">Docker</a> 등 현재 AI 서비스 개발 현업에서 가장 널리 사용되는 기술 스택을 중심으로 학습합니다.
**Q3: 개인 노트북 사양이 많이 좋아야 하나요?**
**Q3: 개인 노트북 사양이 많이 좋아야 하나요?**
> A3: 기본적인 코딩은 일반적인 노트북으로 충분합니다. 모델 학습 등 높은 사양이 필요한 경우, 무료로 사용할 수 있는 <a href="glossary.md#google-colab">Google Colab</a>을 활용하는 방법을 안내해 드리므로 걱정하지 않으셔도 됩니다.
> A3: 기본적인 코딩은 일반적인 노트북으로 충분합니다. 모델 학습 등 높은 사양이 필요한 경우, 무료로 사용할 수 있는 <a href="glossaries/part_0_glossary.md#google-colab-구글-코랩">Google Colab</a>을 활용하는 방법을 안내해 드리므로 걱정하지 않으셔도 됩니다.
**Q4: 캡스톤 프로젝트는 어떻게 진행되나요?**
**Q4: 캡스톤 프로젝트는 어떻게 진행되나요?**
> A4: 11-12주차에 진행되며, 수강생들이 직접 주제를 선정하고 기획, 개발, 발표까지 진행합니다. 이 과정에서 멘토링을 통해 프로젝트가 올바른 방향으로 나아갈 수 있도록 적극적으로 지원합니다. 자세한 내용은 <a href="part_11_capstone_project_guide.md">캡스톤 프로젝트 가이드</a>를 참고하세요.
> A4: 11-12주차에 진행되며, 수강생들이 직접 주제를 선정하고 기획, 개발, 발표까지 진행합니다. 이 과정에서 멘토링을 통해 프로젝트가 올바른 방향으로 나아갈 수 있도록 적극적으로 지원합니다. 자세한 내용은 <a href="part_11_capstone_project_guide.md">캡스톤 프로젝트 가이드</a>를 참고하세요.
---
---
## 8. 여정을 시작하며 (Next Steps)
자, 이제 12주간의 여정을 시작할 준비가 되셨나요?
자, 이제 12주간의 여정을 시작할 준비가 되셨나요?
다음 시간에는 본격적인 개발을 위해 여러분의 컴퓨터에 개발 환경을 설정하는 방법을 알아보겠습니다.
다음 시간에는 본격적인 개발을 위해 여러분의 컴퓨터에 개발 환경을 설정하는 방법을 알아보겠습니다.
**⬅️ 이전 시간: [Part 9: 프로덕션 레벨 API와 Docker](./part_9_production_ready_api.md)**
**⬅️ 이전 시간: [Part 9: 프로덕션 레벨 API와 Docker](./part_9_production_ready_api.md)**
---
---
지난 9주간 정말 긴 여정을 달려오셨습니다. 파이썬 기초에서 시작하여 데이터 분석, 머신러닝/딥러닝 모델링, 그리고 프로덕션 레벨의 API 서버를 구축하고 Docker로 배포하는 것까지, 하나의 AI 서비스가 탄생하는 전체 과정을 모두 경험했습니다.
## 1. 학습 목표 (Learning Objectives)
이제 여러분은 막연한 아이디어를 실제 작동하는 서비스로 만들 수 있는 강력한 무기를 갖추게 되었습니다. 10주차 과정은 이 여정을 마무리하며, 여러분이 주니어 개발자를 넘어 **'AI 전문가'**로 성장하기 위해 다음에는 어떤 기술들을 더 깊이 탐험해야 하는지에 대한 **심화 학습 로드맵**을 제시합니다.
이번 파트를 마지막으로, 여러분은 다음을 할 수 있게 됩니다.
---
- AI 서비스를 지속 가능하게 만드는 MLOps의 큰 그림과 핵심 구성요소(CI/CD, 버전 관리, 모니터링)를 설명할 수 있습니다.
- Cursor, GitHub Copilot과 같은 AI 네이티브 도구를 사용하여 개발 생산성을 2배 이상 높일 수 있습니다.
- 소형언어모델(SLM), 멀티모달 AI 등 최신 AI 기술 트렌드를 이해하고, 다음 학습 계획을 스스로 설계할 수 있습니다.
- AI 전문가로서 기술적 깊이와 함께 윤리적 책임의 중요성을 인식하고, 지속적으로 성장하는 방법을 실천할 수 있습니다.
지난 9주간, 우리는 파이썬이라는 언어로 배를 만들어 데이터의 바다를 항해했고, 머신러닝이라는 나침반으로 방향을 잡았으며, FastAPI와 Docker라는 엔진을 달아 세상에 나아갈 준비를 마쳤습니다. 여러분은 이제 막연한 아이디어를 실제 작동하는 'AI 프로덕트'로 만들 수 있는 **'만들기 능력자'**가 되셨습니다.
-**MLOps의 빅픽처 이해**: 'AI 레스토랑의 중앙 관제 시스템' 비유를 통해 CI/CD, 데이터/실험 관리, 모니터링을 포함하는 MLOps의 전체 수명주기를 이해합니다.
하지만 이 과정은 끝이 아니라, 더 넓은 세계로 나아가는 **새로운 시작**입니다. 이번 마지막 여정에서는 우리가 만든 배를 더 빠르고 안전하게 운항하는 기술(MLOps)과 최신 항해 장비(AI 네이티브 IDE)를 소개합니다. 그리고 저 멀리 보이는 새로운 대륙들(최신 AI 트렌드)을 가리키며, 여러분이 스스로 항로를 개척하는 진정한 'AI 전문가'로 성장하기 위한 마지막 **'보물 지도'**를 손에 쥐어드릴 것입니다.
-**차세대 AI 개발 환경**: 'AI 네이티브 IDE'인 Cursor, GitHub Copilot 등의 종류와 활용법을 배우고 개발 생산성을 극대화합니다.
-**최신 AI 트렌드 파악**: 소형언어모델(SLM), 멀티모달 AI, 에이전트 AI 등 최신 기술 동향을 파악하고, 전문가로 성장하기 위한 다음 학습 경로를 설정합니다.
> [!TIP]
-**AI 전문가의 길**: AI 연구 논문을 읽고 이해하는 방법과, '보상 해킹'과 같은 AI 윤리 문제의 중요성을 인식하며 균형 잡힌 전문가로 성장하는 길을 모색합니다.
> 본 파트의 MLOps 실습 코드는 `source_code/part_10_expert_path` 폴더에서 직접 실행하고 수정해볼 수 있습니다.
---
---
## 1. MLOps: AI 서비스의 지속가능한 운영 시스템
## 4. MLOps: AI 레스토랑 프랜차이즈의 '중앙 관제 시스템'
> **🎯 1일차 목표:** 모델 배포 이후 '진짜' 운영의 시작인 MLOps의 필요성과 전체 그림을 이해합니다.
모델을 한 번 배포했다고 끝이 아닙니다. 현실 세계의 데이터는 계속 변하기 때문에, 모델의 성능은 시간이 지나면서 자연스럽게 저하됩니다. **[MLOps(Machine Learning Operations)](./glossary.md#mlops)**는 이러한 문제를 해결하고 AI 서비스를 안정적으로, 그리고 지속적으로 발전시키기 위한 운영 시스템입니다.
모델을 한 번 배포했다고 끝이 아닙니다. 현실 세계의 데이터는 계속 변하기 때문에, 모델의 성능은 시간이 지나면서 자연스럽게 저하됩니다. **MLOps(Machine Learning Operations)**는 이러한 문제를 해결하고 AI 서비스를 안정적으로, 그리고 지속적으로 발전시키기 위한 운영 시스템입니다.
> 💡 비유: 'AI 레스토랑 프랜차이즈의 중앙 관제 시스템'
> **💡 비유: 'AI 레스토랑 프랜차이즈의 중앙 관제 시스템'**
>
>
> MLOps는 성공적으로 확장하는 프랜차이즈 레스토랑의 **'중앙 관제 시스템'**과 같습니다.
> MLOps는 성공적으로 확장하는 프랜차이즈 레스토랑의 **'중앙 관제 시스템'**과 같습니다.
> - **[CI/CD](./glossary.md#cicd) (지속적 통합/배포)**: 새로운 레시피(코드)가 개발되면, 중앙 주방에서 자동으로 맛을 검증하고(CI), 전국 모든 지점에 레시피를 즉시 배포하는(CD) '자동 메뉴 업데이트 시스템'입니다.
> - **CI/CD (지속적 통합/배포)**: 새로운 레시피(코드)가 개발되면, 중앙 주방에서 자동으로 맛을 검증하고(CI), 전국 모든 지점에 레시피를 즉시 배포하는(CD) '자동 메뉴 업데이트 시스템'입니다.
> - **데이터/모델 버전 관리 ([DVC](./glossary.md#dvc), [MLflow](./glossary.md#mlflow))**: 어떤 식자재와 레시피 파라미터를 썼을 때 '오늘의 셰프'가 가장 맛있었는지 모든 기록을 남겨, 언제든 최고의 맛을 **재현**할 수 있도록 합니다.
> - **데이터/모델 버전 관리 (DVC, MLflow)**: 어떤 식자재와 레시피 파라미터를 썼을 때 '오늘의 셰프'가 가장 맛있었는지 모든 기록을 남겨, 언제든 최고의 맛을 **재현**할 수 있도록 합니다.
> - **모니터링 및 재학습**: 각 지점의 고객 만족도(모델 성능)와 식자재 품질 변화(데이터 분포 변화)를 실시간으로 모니터링하다가, 만족도가 일정 수준 이하로 떨어지면 자동으로 주방장에게 '재교육(재학습)' 명령을 내립니다.
> - **모니터링 및 재학습**: 각 지점의 고객 만족도(모델 성능)와 식자재 품질 변화(데이터 분포 변화)를 실시간으로 모니터링하다가, 만족도가 일정 수준 이하로 떨어지면 자동으로 주방장에게 '재교육(재학습)' 명령을 내립니다.
<details>
<details>
...
@@ -51,12 +62,45 @@ graph TD
...
@@ -51,12 +62,45 @@ graph TD
<palign="center"><small>MLOps 수명주기: 데이터 수집부터 재학습까지의 자동화된 파이프라인</small></p>
<palign="center"><small>MLOps 수명주기: 데이터 수집부터 재학습까지의 자동화된 파이프라인</small></p>
</details>
</details>
<details>
---
<summary><b>MLOps 실습 체험: MLflow & DVC 간단하게 맛보기 (펼쳐보기)</b></summary>
## 5. AI 개발 생산성의 혁명: AI 네이티브 IDE
#### **실습 1: MLflow로 실험 기록 추적하기**
> **🎯 2일차 목표:** AI 네이티브 IDE를 '설계 파트너'이자 '코드 리뷰어'로 활용하는 구체적인 방법을 익힙니다.
[MLflow](./glossary.md#mlflow)는 모델 개발 과정의 모든 실험을 체계적으로 기록하고 관리해주는 도구입니다. 어떤 파라미터를 썼을 때 어떤 성능이 나왔는지 추적하여, 최고의 결과를 재현하고 모델을 개선하는 데 도움을 줍니다.
과거 개발자들이 메모장으로 코딩하던 시절에서 PyCharm, VSCode 같은 IDE로 넘어오며 생산성이 폭발적으로 증가했듯이, 이제는 AI 기능이 깊숙하게 통합된 **'AI 네이티브 IDE'**가 새로운 표준이 되고 있습니다.
> **💡 비유: 'F-16 전투기'에서 'AI 비서(자비스)가 탑재된 F-35 스텔스기'로**
>
> - **전통적인 IDE (VSCode, PyCharm)**: 수많은 계기판과 버튼을 조종사가 직접 조작해야 하는 'F-16 전투기'와 같습니다. 강력하지만 모든 것을 직접 해야 합니다.
> - **AI 네이티브 IDE (Cursor, GitHub Copilot)**: 조종사의 의도를 파악한 'AI 비서'가 복잡한 태스크 조작, 항로 계산, 위협 감지 등을 도와주는 'F-35 스텔스기'의 조종석과 같습니다. 개발자는 문제 해결이라는 본질적인 목표에만 집중할 수 있습니다.
### AI 네이티브 IDE, 어떻게 쓸 것인가?
1.**명확하고 구체적으로 지시하기 (Good Prompting)**:
-**Bad**: "이거 정렬해줘"
-**Good**: "이 리스트 안의 딕셔너리들을 'created_at' 키를 기준으로 내림차순 정렬하는 코드를 작성해줘"
2.**설계 파트너로 활용하기**:
-**"FastAPI로 JWT 인증 기능을 만들고 싶어. DB 모델은 User와 Post가 있어. 전체적인 파일 구조와 기본 코드를 짜줘."** 와 같이 초기 설계 단계부터 AI와 함께 시작하세요. 막막함이 사라지고 개발 속도가 빨라집니다.
3.**똑똑한 코드 리뷰어로 활용하기**:
- 내가 작성한 코드를 AI에게 보여주고 이렇게 질문하세요.
- "이 코드의 잠재적인 버그는?"
- "더 효율적으로 바꿀 수 있는 부분은?"
- "함수와 변수 이름을 더 명확하게 다시 지어줘."
- "이 함수에 대한 테스트 코드를 작성해줘."
---
## 6. 직접 해보기 (Hands-on Lab)
> **🎯 3-4일차 목표:** MLOps 도구와 AI 네이티브 IDE를 직접 사용하여, '전문가처럼' 문제를 해결하는 경험을 합니다.
### Lab 1: MLOps 도구 맛보기 (MLflow & DVC)
#### 1-1. MLflow로 실험 기록 추적하기
[MLflow](glossaries/part_10_glossary.md#mlflow)는 모델 개발 과정의 모든 실험(파라미터, 성능, 결과물)을 체계적으로 기록하고 관리하여 최고의 결과를 재현하고 모델을 개선하는 데 도움을 줍니다.
1.**MLflow 설치**:
1.**MLflow 설치**:
```bash
```bash
...
@@ -64,7 +108,7 @@ graph TD
...
@@ -64,7 +108,7 @@ graph TD
```
```
2.**실험 코드 작성 (`mlflow_test.py`)**:
2.**실험 코드 작성 (`mlflow_test.py`)**:
- 6주차에 작성했던 로지스틱 회귀 모델 학습 코드에 `mlflow` 로깅 기능을 추가해봅시다.
print("MLflow Run ID:",mlflow.active_run().info.run_id)
print("MLflow Run ID:",mlflow.active_run().info.run_id)
```
3.**MLflow UI 실행**:
- 터미널에서 아래 명령어를 실행하세요.
-`mlflow_test.py`를 실행하면 `mlruns`라는 폴더가 생성됩니다.
```bash
mlflow ui
```
```
- 웹 브라우저에서 `http://127.0.0.1:5000` 로 접속하면 방금 실행한 실험의 파라미터와 결과를 확인하고, 다른 실험과 비교할 수 있습니다.
#### **실습 2: DVC로 데이터 버전 관리하기**
3.**MLflow UI 실행 및 확인**:
- 터미널에서 `mlflow ui`를 실행하고, 웹 브라우저에서 `http://127.0.0.1:5000`로 접속하여 실험 결과를 확인하세요.
[DVC(Data Version Control)](./glossary.md#dvc)는 Git이 코드의 변경 내역을 관리하듯, 대용량 데이터나 모델 파일의 버전을 관리해주는 도구입니다. Git은 그대로 사용하면서, 데이터는 별도의 저장소(S3, Google Drive 등)에 효율적으로 저장하고 버전을 추적합니다.
#### 1-2. DVC로 데이터 버전 관리하기
[DVC(Data Version Control)](glossaries/part_10_glossary.md#dvc)는 Git처럼 대용량 데이터나 모델 파일의 버전을 관리합니다.
1.**DVC 및 Git 초기화**:
1.**DVC 및 Git 초기화**:
```bash
```bash
# Git 레포지토리로 만듭니다.
git init
git init
# DVC를 설치하고 초기화합니다.
pip install dvc
pip install dvc
dvc init
dvc init
```
```
2.**데이터 파일 버전 추적**:
2.**데이터 생성 및 DVC 추적**:
- 간단한 데이터 파일을 생성하고, DVC로 추적해봅시다.
-`data` 폴더와 `data.csv` 파일을 생성합니다.
```bash
```bash
mkdir data
mkdir data
echo"feature1,feature2,label"> data/data.csv
echo"feature1,feature2,label"> data/data.csv
echo"1,2,A">> data/data.csv
echo"1,2,A">> data/data.csv
```
- DVC에 `data` 폴더를 추가합니다.
```bash
dvc add data
dvc add data
```
```
- 이 명령은 `data.dvc`라는 작은 메타데이터 파일을 생성합니다. 이 파일이 데이터의 '포인터' 역할을 합니다.
3.**Git에 커밋**:
3.**Git에 커밋**:
-이제 코드 변경사항과 함께 데이터의 '포인터'를 Git에 커밋합니다.
-데이터의 '포인터' 역할을 하는 `data.dvc` 파일을 Git에 커밋하여 데이터 버전을 기록합니다.
```bash
```bash
git add data.dvc .gitignore
git add data.dvc .gitignore
git commit -m"Add initial dataset v1"
git commit -m"Add initial dataset v1"
```
```
- 이렇게 하면 데이터 파일 자체는 Git 레포지토리에 포함되지 않으면서도, `v1` 시점의 데이터가 무엇이었는지 정확하게 기록됩니다. 데이터가 변경될 때마다 `dvc add`와 `git commit`을 반복하면 데이터의 모든 버전을 추적할 수 있습니다.
</details>
---
## 2. AI 개발 생산성의 혁명: AI 네이티브 IDE
### Lab 2: AI 네이티브 IDE로 코드 리팩터링하기
아래의 비효율적인 코드를 [Cursor](glossaries/part_10_glossary.md#cursor)나 [GitHub Copilot](glossaries/part_10_glossary.md#github-copilot)을 사용하여 리팩터링하세요.
과거 개발자들이 메모장으로 코딩하던 시절에서 PyCharm, VSCode 같은 IDE로 넘어오며 생산성이 폭발적으로 증가했듯이, 이제는 AI 기능이 깊숙하게 통합된 **'AI 네이티브 IDE'**가 새로운 표준이 되고 있습니다.
**미션**:
1. 각 기능을 별도의 함수로 분리하세요.
> 💡 비유: 'F-16 전투기'에서 'AI 비서(자비스)가 탑재된 F-35 스텔스기'로**
2. 변수 이름을 명확하게 변경하세요.
>
3. 각 함수에 Docstring과 타입 힌트(Type Hint)를 추가하세요.
> - **전통적인 IDE (VSCode, PyCharm)**: 수많은 계기판과 버튼을 조종사가 직접 조작해야 하는 'F-16 전투기'와 같습니다. 강력하지만 모든 것을 직접 해야 합니다.
> - **AI 네이티브 IDE (Cursor, GitHub Copilot)**: 조종사의 의도를 파악한 'AI 비서'가 복잡한 태스크 조작, 항로 계산, 위협 감지 등을 도와주는 'F-35 스텔스기'의 조종석과 같습니다. 개발자는 문제 해결이라는 본질적인 목표에만 집중할 수 있습니다.
### AI 네이티브 IDE 종류 및 활용법
-**[Cursor](./glossary.md#cursor)**: `Ctrl+K`를 눌러 AI에게 코드 생성을 지시하거나, 코드를 블록 지정한 뒤 `@` 심볼과 함께 질문하여 코드에 대한 설명이나 리팩터링을 요청할 수 있습니다. 프로젝트의 모든 파일을 AI가 인지하므로, 전체 코드 베이스에 대한 깊이 있는 질문과 수정이 가능합니다.
-**[GitHub Copilot](./glossary.md#github-copilot)**: VSCode, JetBrains 등 기존 IDE에 통합되는 강력한 확장 기능입니다. 주석이나 코드 앞부분만 작성하면, AI가 이어질 코드를 실시간으로 제안해줍니다. 반복적인 코드를 작성하는 시간을 획기적으로 줄여줍니다.
-**효율적인 활용법**:
1.**명확하고 구체적으로 지시하기**: "이거 정렬해줘" (X) -> "이 리스트 안의 딕셔너리들을 'created_at' 키를 기준으로 내림차순 정렬하는 코드를 작성해줘" (O)
2.**설계 파트너로 활용하기**: "FastAPI로 인증 기능을 만들 건데 JWT를 쓸 거고, DB 모델은 User와 Post가 있어. 전체적인 파일 구조와 기본 코드를 짜줘." 와 같이 초기 설계 단계부터 AI와 함께 시작하면 좋습니다.
3.**코드 리뷰어로 활용하기**: 내가 작성한 코드를 AI에게 보여주고 "이 코드의 잠재적인 버그는? / 더 효율적으로 바꿀 수 있는 부분은? / 함수 이름을 더 명확하게 지어줘" 와 같이 질문하며 코드 품질을 높일 수 있습니다.
<details>
<summary><b>실습: AI 네이티브 IDE로 코드 리팩터링하기 (펼쳐보기)</b></summary>
아래는 여러 데이터 처리 작업을 수행하는 파이썬 스크립트입니다. 코드는 작동하지만, 변수 이름이 명확하지 않고, 반복적인 부분이 있으며, 함수로 깔끔하게 분리되어 있지 않아 가독성과 재사용성이 떨어집니다.
**미션**: [Cursor](./glossary.md#cursor)나 [GitHub Copilot](./glossary.md#github-copilot)을 사용하여 이 코드를 리팩터링하고 개선해보세요.
이 실습을 통해 AI 네이티브 IDE가 단순히 코드를 생성하는 것을 넘어, 기존 코드를 분석하고 구조적으로 개선하여 '코드 품질 관리 파트너'가 될 수 있음을 체험할 수 있습니다.
</details>
---
---
## 3. 더 높은 단계로: 최신 AI 트렌드와 학습 경로
## 7. 심화 학습 로드맵: 다음엔 무엇을 배울까?
-**[소형 언어 모델 (SLM, Small Language Model)](./glossary.md#slm-small-language-model)**: 거대한 GPT-4 같은 모델 대신, 특정 전문 작업에 최적화된 작고 가벼운 모델들이 주목받고 있습니다. (e.g., Microsoft의 Phi-3, Google의 Gemma) 스마트폰 같은 기기 안에서 직접 동작(On-device AI)하는 데 유리하며, 비용 효율적입니다.
-**[멀티모달 AI (Multi-modal AI)](./glossary.md#멀티모달-multi-modal-ai)**: 텍스트뿐만 아니라 이미지, 소리, 영상을 함께 이해하고 생성하는 AI입니다. (e.g., OpenAI의 Sora, Google의 Gemini) 단순히 '고양이'라는 텍스트를 넘어, 고양이 사진을 보고 "귀여운 고양이가 창가에서 졸고 있네"라고 설명하는 수준으로 발전하고 있습니다.
-**[에이전트 AI (Agent AI)](./glossary.md#에이전트-ai-agent-ai)**: 주어진 목표를 달성하기 위해 스스로 계획을 세우고, 인터넷을 검색하거나 다른 프로그램을 사용하는 등 자율적으로 행동하는 AI입니다. 단순한 질의응답을 넘어, "내일 부산 가는 가장 싼 KTX 예매하고, 숙소 알아봐줘" 같은 복잡한 작업을 수행할 수 있습니다.
<details>
<summary><b>실습: 최신 AI 트렌드 직접 체험하기 (펼쳐보기)</b></summary>
#### **실습 1: Ollama로 내 컴퓨터에서 소형 LLM 실행하기**
Ollama는 Llama 3, Phi-3, Gemma 등 다양한 최신 언어 모델을 내 컴퓨터에서 단 몇 개의 명령어로 쉽게 실행할 수 있게 해주는 도구입니다.
1.**Ollama 설치**:
-[Ollama 공식 홈페이지](https://ollama.com/) 방문하여 자신의 운영체제에 맞는 프로그램을 다운로드하고 설치합니다.
2.**소형 모델 다운로드 및 실행 (터미널)**:
- Microsoft에서 최근 공개하여 화제가 된 고성능 소형 모델, `Phi-3`를 실행해봅시다.
```bash
# phi-3 모델을 다운로드합니다 (pull).
ollama pull phi-3
# phi-3 모델을 실행하고 대화를 시작합니다.
ollama run phi-3
```
- 이제 터미널에서 바로 `Phi-3` 모델과 대화할 수 있습니다. "파이썬으로 웹 스크래핑하는 코드 예시를 보여줘" 와 같이 다양한 요청을 테스트해보세요. `bye`를 입력하면 대화가 종료됩니다.
3.**(심화) OpenAI 라이브러리로 Ollama 모델 사용하기**:
- Ollama는 OpenAI의 API 형식과 호환되는 서버를 제공합니다. 이를 이용하면, `openai` 라이브러리를 통해 Ollama에서 실행 중인 로컬 모델을 마치 GPT 모델처럼 호출할 수 있습니다.
2.**개요 파악 (Outline Your Notes)**: 제목, 초록(Abstract), 그림, 결론을 먼저 훑어보며 논문의 전체적인 구조와 핵심 주장을 파악합니다. 이 단계에서 논문을 시간을 들여 읽을 가치가 있는지 판단할 수 있습니다.
</p>
3.**언어 해독 (Decode the Language)**: 논문에는 전문 용어(Jargon)가 많습니다. 그림과 캡션을 주의 깊게 보고, 굵거나 이탤릭체로 강조된 핵심 용어들의 의미부터 파악합니다.
4.**핵심 기여 포착 (Capture the Core Contributions)**: 서론(Introduction)과 관련 연구(Related Work) 섹션을 통해 이 논문이 해결하려는 핵심 문제가 무엇이고, 기존 연구 대비 어떤 독창적인 아이디어(Novelty)를 제안하는지 파악합니다.
5.**세부 사항 탐구 (Embrace the Details)**: 방법론(Methodology)과 실험(Experiments) 섹션을 정독하며 아이디어를 어떻게 구현하고 검증했는지 구체적으로 이해합니다. 필요하다면, 저자가 제공한 코드를 직접 실행해보는 것이 가장 좋은 학습법입니다.
6.**성찰과 연결 (Reflect and Relate)**: 논문의 내용을 자신의 기존 지식과 연결해보고, "이 기술을 내 프로젝트에 어떻게 적용할 수 있을까?" 또는 "이 방법론의 한계는 무엇일까?"와 같은 비판적인 질문을 던져봅니다.
7.**협력적 학습 (Engage in Collaborative Learning)**: 스터디 그룹이나 온라인 커뮤니티에서 다른 사람들과 논문에 대해 토론하며 미처 생각지 못했던 다양한 관점을 학습합니다.
(참고: [The Process I Personally Use to Understand AI/ML Research](https://medium.com/@zain-raza/the-process-i-personally-use-to-understand-ai-ml-research-f1590c04980d), [AI Insights-In a Minute](https://medium.com/@pgrover3/ai-insights-in-a-minute-5c0d55cc5cb9))
</details>
</details>
<details>
<details>
<summary><b>실습: 'Attention Is All You Need' 논문 읽고 요약하기 (펼쳐보기)</b></summary>
<summary><b>3. AI 에이전트 (AI Agent)</b></summary>
<p>
**미션**: 트랜스포머(Transformer) 아키텍처를 제시하여 현대 AI 언어 모델의 기반을 마련한 기념비적인 논문, **'[Attention Is All You Need](https://arxiv.org/abs/1706.03762)'**를 읽고, 위에서 배운 '7단계 프로세스'에 맞춰 각 단계별로 핵심 내용을 요약해보세요.
**가이드**:
1.**무대 설정 (Set the Stage)**: 논문이 발표될 당시(2017년)의 주류 번역 모델은 RNN(Recurrent Neural Network) 기반이었습니다. RNN의 어떤 문제점(예: 장기 의존성 문제, 병렬 처리의 어려움)을 해결하기 위해 이 연구가 시작되었을까요?
2.**개요 파악 (Outline Your Notes)**: 초록(Abstract)과 결론(Conclusion)을 읽고 이 논문의 핵심 주장이 무엇인지 한 문장으로 요약해보세요. (힌트: "recurrent"나 "convolution" 없이 attention만으로...")
3.**언어 해독 (Decode the Language)**: 논문에 등장하는 생소하지만 핵심적인 용어들의 의미를 파악해보세요.
-`Self-Attention`
-`Multi-Head Attention`
-`Positional Encoding`
4.**핵심 기여 포착 (Capture the Core Contributions)**: 서론(Introduction)을 중심으로, 이 논문이 기존 모델(RNN, LSTM 등)에 비해 어떤 독창적인 장점(Novelty)을 제시하는지 2~3가지로 정리해보세요. (힌트: 병렬 처리 효율성, 학습 시간, 장거리 의존성)
5.**세부 사항 탐구 (Embrace the Details)**: 논문의 그림 1 (Transformer Architecture)을 보고, 인코더(왼쪽)와 디코더(오른쪽)가 각각 어떤 하위 레이어들로 구성되어 있는지 설명해보세요. 모든 화살표의 의미를 완벽히 이해하지 않아도 괜찮습니다. 큰 구조를 파악하는 것이 중요합니다.
6.**성찰과 연결 (Reflect and Relate)**: 트랜스포머의 'Self-Attention' 개념이 왜 번역 품질을 높이는 데 효과적일까요? "The animal didn't cross the street because **it** was too tired." 라는 문장에서 '**it**'이 'animal'을 가리키는지 'street'을 가리키는지 어떻게 알 수 있을지, Self-Attention의 관점에서 생각해보세요.
7.**협력적 학습 (Engage in Collaborative Learning)**: 이 논문에 대해 잘 설명해놓은 블로그 포스트나 유튜브 영상을 찾아보고, 본인이 이해한 내용과 비교하며 부족한 부분을 채워보세요.
-**What?**: 주어진 목표를 달성하기 위해 스스로 계획을 세우고, 도구를 사용하며, 인터넷을 검색하고, 코드를 실행하는 자율적인 AI.
-**Why?**: 단순한 질의응답을 넘어, '항공권 예약하고 캘린더에 추가해줘'와 같은 복잡한 실제 태스크를 대신 수행하는 개인 비서가 될 수 있습니다.
AI가 발전하면서, 우리가 의도하지 않은 교활한 방식으로 목표를 달성하는, 똑똑하지만 위험한 행동을 하는 경우가 발견되고 있습니다. 이를 **'보상 해킹(Reward Hacking)'**이라고 합니다.
> 💡 비유: '소원을 들어주는 지니'의 함정**
## 8. 전문가의 자세: 기술을 넘어선 지혜
>
> 보상 해킹은 동화 속 '소원을 들어주는 지니'와 같습니다. 만약 당신이 "부자가 되게 해달라"는 소원을 빈다면, 지니는 전 세계의 모든 돈을 당신에게 가져다 줄 수도 있습니다. 당신은 부자가 되겠지만, 그로 인해 세계 경제는 붕괴하고 말 것입니다. 지니는 소원의 '문자 그대로의 의미'를 완벽하게 수행했을 뿐이지만, 우리가 '의도했던 바'와는 전혀 다른 끔찍한 결과를 낳았습니다. AI도 이와 같이 우리가 설정한 보상(목표)을 예상치 못한 방법으로 '해킹'하여 달성할 수 있습니다.
---
진정한 전문가는 단순히 코딩만 잘하는 사람이 아닙니다. 끊임없이 배우는 자세, 명확하게 소통하는 능력, 그리고 기술에 대한 윤리적 책임감을 갖춘 사람입니다.
## 🏁 10주간의 여정을 마치며
10주간의 대장정이 마무리되었습니다. 마지막 주차에는 주니어 개발자를 넘어 AI 전문가로 성장하기 위한 심화 로드맵을 살펴보았습니다.
-**AI 논문과 친해지기**: 모든 최신 기술은 논문에서 시작됩니다. 처음에는 [ArXiv](https://arxiv.org/) 같은 사이트에서 관심 분야 논문의 **초록(Abstract)과 결론(Conclusion)만 읽는 습관**을 들여보세요. 내용이 흥미롭다면 그림(Figure)과 실험(Experiment) 파트를 훑어보세요. 이 습관이 최신 트렌드를 놓치지 않는 가장 확실한 방법입니다.
-**AI 윤리 고민하기**: AI는 강력한 만큼 위험성도 큽니다. '보상 해킹(Reward Hacking)', '데이터 편향성(Bias)'과 같은 문제를 항상 경계하고, 내가 만드는 서비스가 사회에 미칠 영향을 항상 고민하는 책임감 있는 개발자가 되어야 합니다.
-**포기하지 않고 계속하기**: 이 과정을 마친 여러분은 이미 상위 10%의 잠재력을 증명했습니다. 앞으로 마주할 문제들은 훨씬 더 어렵고 복잡할 것입니다. 하지만 기억하세요. 모든 전문가는 수많은 버그와 씨름하고, 이해할 수 없는 에러 메시지 앞에서 좌절했던 시간을 거쳐왔습니다. 포기하지 않는다면, 여러분은 분명 원하는 목표를 이룰 수 있습니다.
-**MLOps**: AI 서비스를 지속가능하게 운영하기 위한 '중앙 관제 시스템' MLOps의 큰 그림을 이해했습니다.
## 9. 되짚어보기 (Summary)
-**AI 네이티브 IDE**: AI가 개발의 파트너가 되는 Cursor, GitHub Copilot 같은 도구들을 통해 개발 생산성을 극대화하는 방법을 배웠습니다.
-**최신 AI 트렌드**: SLM, 멀티모달 AI, 그리고 자율적으로 행동하는 '에이전트 AI'의 개념을 파악하며 미래를 준비했습니다.
-**전문가의 소양**: 꾸준한 성장을 위한 논문 읽기 능력의 중요성과, 기술의 책임감 있는 사용을 위한 AI 윤리 문제의 중요성을 인식했습니다.
이 과정이 여러분의 AI 커리어에 훌륭한 발판이 되었기를 바랍니다. 여기서 멈추지 말고, 오늘 배운 로드맵을 따라 꾸준히 탐험하고, 만들고, 공유하며 더 높은 곳으로 나아가시길 응원합니다!
지난 10주간, 우리는 파이썬 기초부터 시작해 AI 모델을 만들고, 이를 세상에 서비스하기 위한 모든 과정을 압축적으로 경험했습니다.
## 🎓 10주차 최종 과제
-**AI 서비스 개발의 A to Z**: 데이터 처리, 모델링, API 서빙, 배포까지 AI 서비스 개발의 전체 생명주기를 직접 경험하며 '만드는 능력'을 갖추었습니다.
-**지속가능한 AI를 위한 MLOps**: CI/CD, 버전 관리, 모니터링의 개념을 이해하고, `MLflow`와 `DVC`를 통해 AI 서비스를 안정적으로 운영하기 위한 기초를 다졌습니다.
-**AI 시대의 개발 생산성**: `Cursor`와 같은 AI 네이티브 도구를 활용하여 개발의 패러다임이 어떻게 변하고 있는지 체험하고, 생산성을 극대화하는 방법을 배웠습니다.
-**AI 전문가로의 성장 로드맵**: SLM, 멀티모달, AI 에이전트 등 최신 트렌드를 파악하고, 기술적 깊이와 윤리적 소양을 함께 갖춘 전문가로 성장하기 위한 방향을 설정했습니다.
**문제 1: 나만의 MLOps 파이프라인 구상해보기**
이 과정이 여러분의 커리어에 단단한 발판이 되기를 진심으로 바랍니다. 여러분의 성장을 항상 응원하겠습니다.
- 여러분이 9주차까지 만들었던 '붓꽃 품종 예측 API'를 실제 서비스로 운영한다고 상상해보세요. 10주차에서 배운 MLOps의 6단계(데이터 수집/버전관리 -> 실험 추적 -> CI 파이프라인 -> 모델 레지스트리 -> CD 파이프라인/서빙 -> 모니터링)를 여러분의 프로젝트에 어떻게 적용할 수 있을지, 각 단계별로 사용할 기술 스택(e.g., DVC, MLflow, GitHub Actions)과 함께 간단한 계획을 세워 글로 설명해보세요.
**문제 2: AI 네이티브 IDE 활용 시나리오 작성**
## 10. 더 깊이 알아보기 (Further Reading)
- 여러분이 새로운 AI 프로젝트(예: 영화 리뷰 감성 분석 API)를 시작한다고 가정해보세요. Cursor나 GitHub Copilot 같은 AI 네이티브 IDE를 활용하여 개발 생산성을 높일 수 있는 3가지 구체적인 활용 시나리오를 작성해보세요.
- 예시 1 (초기 설계): "AI에게 'FastAPI와 Pydantic을 이용한 영화 리뷰 감성 분석 API의 기본 프로젝트 구조를 짜줘'라고 요청한다."
- 예시 2 (코드 생성): ...
- 예시 3 (리팩터링/디버깅): ...
**문제 3: 보상 해킹 사례 분석 및 해결책 제안**
-**MLOps**:
- "청소 로봇에게 '바닥의 쓰레기를 치울수록' 높은 보상을 주었더니, 로봇이 쓰레기를 그냥 보이지 않는 카펫 밑으로 숨겨버렸다"는 보상 해킹 사례가 있습니다.
-[MLOps Community](https://mlops.community/): MLOps 관련 최신 아티클, 팟캐스트, 슬랙 커뮤니티
- 1. 이 보상 함수는 어떤 허점이 있었을까요? (무엇을 놓쳤나요?)
-[Made With ML](https://madewithml.com/): MLOps 전과정을 다루는 고품질의 무료 강의
- 2. 이 보상 해킹을 방지하려면 보상 함수를 어떻게 개선해야 할지, 두 가지 이상의 아이디어를 제안해보세요.
-**AI Trends**:
-[Hugging Face Blog](https://huggingface.co/blog): 최신 모델과 라이브러리에 대한 가장 빠른 소식
-[The Batch (DeepLearning.AI)](https://www.deeplearning.ai/the-batch/): 앤드류 응 교수가 매주 발행하는 AI 뉴스레터
-**Papers**:
-[Papers with Code](https://paperswithcode.com/): 최신 AI 논문과 관련 코드를 함께 볼 수 있는 최고의 사이트
지난 9주간, 여러분은 AI 개발자에게 필요한 모든 무기를 차근차근 모아왔습니다. 이제 그 무기들을 들고, 여러분의 이름으로 된 **'첫 번째 작품'**을 만들 시간입니다.
캡스톤 프로젝트는 단순한 마지막 과제가 아닙니다. 이것은 여러분이 지난 시간 동안 배운 것을 세상에 증명하고, 미래의 동료와 채용 담당자에게 **"나는 이만큼 성장했고, 이런 문제를 해결할 수 있는 개발자입니다"**라고 자신 있게 보여주는 **포트폴리오의 핵심**입니다.
조금 막막하고 두려울 수 있습니다. 하지만 괜찮습니다. 이 가이드는 여러분이 아이디어 발상부터 최종 발표까지, 성공적으로 프로젝트를 완수할 수 있도록 모든 단계를 함께하는 든든한 '내비게이션'이 되어줄 것입니다. 자, 이제 '학생'의 마침표를 찍고 '개발자'로서의 첫 페이지를 함께 열어봅시다!
---
## 4. 1단계 (1주차): 문제 정의와 아이디어 구체화
> **🎯 1주차 목표:** '어떤 문제를 풀 것인가?'를 명확히 정의하고, 실행 가능한 프로젝트 계획의 뼈대를 세웁니다.
모든 위대한 서비스는 '문제'를 해결하는 것에서 시작합니다. "어떤 주제를 해야 할지 모르겠어요"라는 막막함은, 주변을 둘러보는 작은 관찰로부터 해결될 수 있습니다.
### 아이디어 발상, 이렇게 시작해보세요!
-**내 안에서 찾기**: "내가 평소에 가장 불편했던 점은 무엇이지?", "내가 가장 흥미 있는 분야(게임, 영화, 운동 등)에 AI를 접목하면 어떨까?"
-**세상에서 찾기**: "요즘 뉴스에 자주 나오는 사회 문제는?", "내가 자주 쓰는 서비스의 아쉬운 점은?"
-**기술에서 찾기**: "최근에 배운 RAG 기술을 활용해볼까?", "이미지 생성 모델로 재미있는 걸 만들 수 있지 않을까?"
### 좋은 프로젝트 주제의 조건
-**명확하게 정의된 문제**: 해결하려는 문제가 무엇인지 한 문장으로 설명할 수 있는가?
-**데이터 확보 가능성**: 프로젝트에 필요한 데이터를 구할 수 있거나, 직접 만들 수 있는가?
-**측정 가능한 목표**: 성공/실패를 판단할 수 있는 구체적인 기준(e.g., 모델 정확도 90% 이상, 응답 시간 1초 이내)이 있는가?
-**3주 안에 구현 가능한 범위**: 너무 거창한 계획보다는, 핵심 기능(MVP, Minimum Viable Product)에 집중하고 있는가?
### 💡 1주차 To-Do List & Pitfalls
-**[ ] To-Do**: 팀 구성 및 팀 내 규칙 정하기 (회의 시간, 소통 채널 등)
-**[ ] To-Do**: 아이디어 브레인스토밍 및 최종 주제 1~2개 선정
-**[ ] To-Do**: 데이터 확보 방안 구체화 (크롤링, 공개 데이터셋, 직접 생성 등)
-**[ ] To-Do**: 프로젝트 계획서(PRD) 초안 작성
-**[ ] To-Do**: GitHub Repository 생성 및 기본 설정 완료
-**❌ Pitfall**: 너무 완벽하고 거대한 주제를 선정하려는 함정. '작게 시작해서 점진적으로 발전시키는 것'이 핵심입니다.
-**❌ Pitfall**: 데이터 확보의 어려움을 간과하는 것. "데이터가 없으면 AI 모델도 없다"는 사실을 명심하세요.
---
## 5. 2단계 (2주차): 핵심 기능 개발과 빠른 실패
> **🎯 2주차 목표:** 전체 시스템의 프로토타입(MVP)을 완성하고, '빠르게 실패하고 빠르게 개선하는' 사이클을 경험합니다.
계획은 끝났습니다. 이제는 실행입니다. 2주차의 핵심은 '완벽함'이 아니라 **'동작하는 것'**을 만드는 데 있습니다.
### 체계적인 개발을 위한 설계도
-**시스템 아키텍처**: 전체 서비스가 어떻게 구성되고 데이터가 어떻게 흐르는지 보여주는 간단한 다이어그램을 그려보세요. (e.g., Mermaid, draw.io)
```mermaid
graph TD
A[User] -->|Request| B(FastAPI Server);
B -->|Query| C{AI Model};
C -->|Result| B;
B -->|Response| A;
```
-**API 명세**: 클라이언트와 서버가 주고받을 데이터의 형식을 미리 정의합니다. (`Pydantic` 모델 활용)
### Git & GitHub 협업 전략
-**기능 단위 브랜치(Feature Branch)**: `main` 브랜치에 직접 커밋하지 말고, `feat/login`, `fix/model-bug` 와 같이 기능별로 브랜치를 만들어 작업 후 Pull Request(PR)를 통해 합칩니다.
-**이슈 트래킹**: 해야 할 일, 버그 등을 GitHub 이슈에 등록하고 담당자를 지정하여 체계적으로 관리합니다.
-**코드 리뷰**: 모든 코드는 최소 1명 이상의 팀원에게 리뷰받는 것을 원칙으로 삼으세요. 서로의 코드를 보며 배우고, 잠재적인 버그를 예방할 수 있습니다.
### 💡 2주차 To-Do List & Pitfalls
-**[ ] To-Do**: 데이터 전처리 및 분석 완료
-**[ ] To-Do**: 핵심 AI 모델 v1.0 학습 및 성능 평가 완료
-**[ ] To-Do**: 모델을 서빙하는 FastAPI 엔드포인트 개발 완료
-**[ ] To-Do**: 핵심 기능을 시연할 수 있는 간단한 프론트엔드 또는 `curl`/`requests` 스크립트 작성
-**[ ] To-Do**: 팀원 간 첫 번째 코드 리뷰 진행
-**❌ Pitfall**: 모델 성능에만 집착하는 함정. 처음부터 99%짜리 모델을 만들려고 하지 마세요. 일단 전체 파이프라인이 돌아가게 하는 것이 중요합니다.
-**❌ Pitfall**: 소통 없이 혼자 개발하는 것. 매일 짧게라도 진행 상황을 공유(Daily Stand-up)하고, 문제가 생기면 즉시 도움을 요청하세요.
---
---
### 1. 프로젝트 개요
## 6. 3단계 (3주차): 고도화, 그리고 '나'를 파는 기술
> **🎯 3주차 목표:** 프로젝트를 완성도 있게 마무리하고, 나의 노력과 성과를 다른 사람에게 매력적으로 전달하는 방법을 익힙니다.
마지막 주차입니다. 이제 흩어져 있던 결과물들을 하나의 '상품'으로 포장하고, 그 가치를 세상에 알릴 시간입니다.
캡스톤 프로젝트는 과정에서 배운 AI 기술과 지식을 총동원하여 실제 문제를 해결하는 실전 경험을 쌓는 것을 목표로 합니다. 팀을 구성하여 아이디어를 기획하고, 데이터 수집, 모델링, 개발, 그리고 최종 발표까지 프로젝트의 전 과정을 직접 수행하게 됩니다.
### 당신의 프로젝트를 빛나게 할 README.md
README는 당신의 프로젝트 **'얼굴'**입니다. 채용 담당자는 당신의 코드보다 README를 먼저 봅니다. 아래 항목들을 포함하여, 프로젝트의 가치를 한눈에 파악할 수 있도록 만드세요.
**⬅️ 이전 시간: [Part 0: 시작하며](part_0_introduction.md)**
**⬅️ 이전 시간: [Part 0: 시작하며](part_0_introduction.md)**
**➡️ 다음 시간: [Part 2: 파이썬 핵심 문법](part_2_python_core_syntax.md)**
---
---
지난 시간에는 12주간의 학습 로드맵을 통해 우리가 무엇을, 어떻게 배울지 전체적인 그림을 그려보았습니다.
## 1. 학습 목표 (Learning Objectives)
이번 시간에는 그 첫걸음으로, 성공적인 AI 개발을 위해 안정적이고 효율적인 개발 환경을 직접 구축해보겠습니다. 어떤 도구를 선택하느냐에 따라 개발 생산성과 경험이 크게 달라질 수 있습니다.
성공적인 AI 개발의 첫걸음은 안정적이고 효율적인 개발 환경을 구축하는 것입니다. 어떤 도구를 선택하느냐에 따라 개발 생산성과 경험이 크게 달라질 수 있습니다. 이번 주에는 현재 업계에서 널리 사용되는 대표적인 AI 개발 도구들을 살펴보고, 우리 과정의 표준 개발 환경을 직접 구축해보겠습니다.
이번 시간에는 AI 개발 여정을 시작하기 위한 첫 단추를 끼웁니다. 다음 목표를 달성할 수 있도록 함께 나아갑시다.
---
-**AI 개발 환경의 핵심 구성 요소**를 이해합니다. ([Anaconda](glossaries/part_1_glossary.md#anaconda-아나콘다), [Python](glossaries/part_1_glossary.md#python-파이썬), [Jupyter Notebook](glossaries/part_1_glossary.md#jupyter-notebook-주피터-노트북), [VS Code](glossaries/part_1_glossary.md#visual-studio-code-vs-code))
- 자신의 운영체제(Windows, macOS, Linux)에 **Anaconda를 성공적으로 설치**하고 환경 변수를 설정합니다.
## 1일차: 가상환경과 데이터 분석 IDE
-**가상 환경의 중요성**을 깨닫고, [conda](glossaries/part_1_glossary.md#conda-콘다) 명령어를 활용하여 **프로젝트별 가상 환경을 생성하고 관리**할 수 있습니다.
-**Jupyter Notebook과 VS Code**를 실행하고, 기본적인 사용법을 익혀 코드를 작성하고 실행할 수 있습니다.
### 🎯 오늘의 목표
-**개발 환경 설정 중 발생할 수 있는 일반적인 문제**와 그 해결 방법을 이해합니다. ([FAQ](glossaries/part_1_glossary.md#자주-묻는-질문-faq) 참고)
- 가상환경(`venv`)의 필요성을 이해하고 직접 다룰 수 있게 됩니다.
- 데이터 분석에 특화된 IDE인 Spyder와 JupyterLab의 특징을 파악합니다.
---
### 1. 프로젝트의 독립성을 지켜주는 "가상환경"
**🤔 왜 가상환경이 꼭 필요할까요?**
컴퓨터에 파이썬을 처음 설치하면, 모든 라이브러리는 '공용 도구함'에 설치됩니다. A 프로젝트를 위해 `pandas 1.5.3` 버전을 설치했다가, B 프로젝트를 위해 `pandas 2.1.0` 버전으로 업그레이드하면 어떻게 될까요? A 프로젝트는 갑자기 바뀐 도구(라이브러리) 때문에 더 이상 작동하지 않을 수 있습니다! 이것이 바로 **'버전 충돌'**이며, 여러 프로젝트를 동시에 진행할 때 개발자를 매우 괴롭히는 골칫거리가 됩니다.
가상환경은 이처럼 프로젝트별로 독립된 "격리된 공간"을 만들어주어 버전 충돌을 원천적으로 방지하는 **필수 도구**입니다.
#### 💡 쉽게 이해하기: 가상환경은 나만의 '프로젝트용 필통'입니다
> 여러분, 학창 시절을 떠올려볼까요? 수학 시간에는 자와 컴퍼스를, 미술 시간에는 물감과 붓을 필통에 넣어 다녔습니다. 만약 모든 학용품을 하나의 거대한 가방에 쏟아부었다면 어땠을까요? 필요한 도구를 찾기도 어렵고, 흑연 가루가 물감에 섞이는 등 엉망이 되었을 겁니다.
>
> **가상환경이 바로 이 '프로젝트용 필통'과 같습니다.** A라는 AI 프로젝트에 필요한 도구(라이브러리)들과 B라는 데이터 분석 프로젝트에 필요한 도구들을 각각의 독립된 필통(`.venv`)에 담아두는 것이죠. 이렇게 하면 각 프로젝트의 도구들이 서로 섞이지 않아 '버전 충돌'이라는 문제를 깔끔하게 해결할 수 있습니다. 즉, A 프로젝트의 'pandas 1.5.3' 버전과 B 프로젝트의 'pandas 2.1.0' 버전이 각자의 필통 안에서 평화롭게 공존하게 됩니다.
#### 가상환경 실습 (`venv`)
## 2. 왜 개발 환경 설정이 중요할까요? (Introduction)
Python 3.3부터 기본 내장된 <ahref="glossary.md#venv">`venv`</a>를 사용해봅시다. 코드를 직접 입력하며 따라 해보세요. 처음 보는 명령어들이 낯설게 느껴질 수 있지만, 각 단계가 어떤 의미인지 이해하면 금방 익숙해질 거예요.
멋진 AI 모델을 만들고 싶다는 부푼 꿈을 안고 코딩을 시작했지만, **"어? 내 컴퓨터에서는 왜 안 되지?"** 하는 순간을 마주한 적 있으신가요? 바로 개발 환경 설정의 중요성을 간과했기 때문일 가능성이 큽니다.
-`mkdir my-first-ai-project`: `mkdir`는 'make directory'의 줄임말로, **새 폴더를 만드는 명령어**입니다.
개발 환경 설정은 마치 **요리를 시작하기 전에 주방을 정리하고 필요한 도구를 갖추는 것**과 같습니다. 깨끗한 도마, 잘 드는 칼, 정확한 계량컵이 있어야 맛있는 요리가 탄생하듯, 잘 갖춰진 개발 환경은 효율적이고 즐거운 프로그래밍 경험의 첫걸음입니다.
-`cd my-first-ai-project`: `cd`는 'change directory'의 줄임말로, 방금 **만든 폴더 안으로 이동하는 명령어**입니다.
-`python -m venv .venv`: 현재 폴더 안에 `.venv`라는 이름의 **파이썬 가상환경을 만들라는 명령어**입니다.
**1. 가상환경 생성하기**
특히 여러 라이브러리와 프레임워크가 복잡하게 얽혀 작동하는 AI 개발에서는, **프로젝트별로 격리된 개발 환경을 구축하는 것이 필수적**입니다. 이를 통해 다음과 같은 이점을 얻을 수 있습니다.
프로젝트 폴더(`my-first-ai-project`)를 만들고, 해당 폴더 내에서 터미널을 열어 아래 명령어를 실행합니다. `.venv`라는 이름의 가상환경 폴더가 생성됩니다.
-**의존성 충돌 방지:** 프로젝트 A에서는 라이브러리 X의 1.0 버전이 필요한데, 프로젝트 B에서는 2.0 버전이 필요하다면? 가상 환경이 없다면 둘 중 하나는 제대로 동작하지 않을 것입니다.
-**재현성 확보:** 내가 만든 코드가 다른 사람의 컴퓨터에서도 동일하게 동작하려면, 동일한 개발 환경을 공유해야 합니다. 가상 환경은 이를 가능하게 합니다.
-**협업 효율 증대:** 팀원 모두가 동일한 개발 환경 위에서 작업함으로써 불필요한 오류를 줄이고 생산성을 높일 수 있습니다.
```bash
이번 시간에는 이러한 개발 환경을 구성하는 핵심 도구인 **Anaconda, Python, Jupyter Notebook, VS Code**의 설치 및 기본 사용법을 익히고, 프로젝트별 독립적인 개발 공간인 **가상 환경**을 만드는 방법을 배웁니다.
# 1. 프로젝트 폴더 생성
mkdir my-first-ai-project
cd my-first-ai-project
# 2. .venv 이름으로 가상환경 생성 (python 또는 python3)
## 3. 핵심 도구 소개 (Key Tools)
python -m venv .venv
```
**2. 가상환경 활성화하기**
우리의 AI 개발 여정에 함께할 핵심 도구들을 소개합니다. 이들은 각자의 역할과 강점을 가지고 있으며, 서로 협력하여 강력한 개발 환경을 구성합니다.
생성된 가상환경을 사용하려면 반드시 '활성화'해야 합니다. 운영체제에 맞는 명령어를 입력하세요.
| **1. [Python](glossaries/part_1_glossary.md#python-파이썬)** | AI 개발의 핵심 프로그래밍 언어. 간결하고 배우기 쉬우며, 강력한 라이브러리 생태계를 자랑합니다. | 만능 스위스 칼 |
| **2. [Anaconda](glossaries/part_1_glossary.md#anaconda-아나콘다)** | Python과 수백 개의 데이터 과학 패키지([NumPy](glossaries/part_1_glossary.md#numpy-넘파이), [Pandas](glossaries/part_1_glossary.md#pandas-판다스), Scikit-learn 등)를 한 번에 설치하고 관리할 수 있는 배포판입니다. 가상 환경 관리 도구인 `conda`를 포함합니다. | 종합 공구함 |
| **3. [conda](glossaries/part_1_glossary.md#conda-콘다)** | Anaconda에 포함된 패키지 및 가상 환경 관리 시스템입니다. 프로젝트별로 독립된 개발 환경을 손쉽게 만들고 관리할 수 있게 해줍니다. | 작업 공간 관리자 |
| **4. [Jupyter Notebook](glossaries/part_1_glossary.md#jupyter-notebook-주피터-노트북)** / JupyterLab | 대화형 코드 실행, 시각화, 문서 작성이 가능한 웹 기반 개발 환경입니다. 코드와 설명을 함께 기록하며 실험하고 결과를 바로 확인할 수 있어 데이터 분석 및 교육에 매우 유용합니다. JupyterLab은 Jupyter Notebook의 차세대 버전입니다. | 실험 노트 |
| **5. [Visual Studio Code (VS Code)](glossaries/part_1_glossary.md#visual-studio-code-vs-code)** | Microsoft에서 개발한 경량 코드 편집기입니다. 강력한 기능, 다양한 확장 프로그램, 뛰어난 사용자 인터페이스를 제공하여 Python 개발을 비롯한 다양한 프로그래밍 작업에 널리 사용됩니다. | 스마트 작업대 |
```bash
이 도구들은 마치 **레고 블록**처럼 각자의 역할을 하며, 서로 연결되어 우리가 원하는 AI 서비스를 만드는 데 필요한 환경을 구성합니다.
# Windows (PowerShell)
.venv\\Scripts\\Activate.ps1
# macOS / Linux (bash)
## 4. 운영체제별 Anaconda 설치 가이드 (Installation Guide)
source .venv/bin/activate
```
이제 본격적으로 Anaconda를 설치하여 AI 개발 환경 구축의 첫발을 내디뎌 보겠습니다. Anaconda는 Python과 여러 데이터 과학 패키지를 포함하고 있어, 한 번의 설치로 많은 준비를 마칠 수 있습니다.
활성화되면 터미널 프롬프트(명령어를 입력하는 곳) 앞에 `(.venv)`와 같은 표시가 나타납니다.
**3. 패키지 설치 및 관리 (`pip`)**
자신의 운영체제에 맞는 설치 방법을 따라 진행해주세요.
가상환경이 활성화된 상태에서 <ahref="glossary.md#pip">`pip`</a>으로 필요한 라이브러리를 설치합니다. 이제 설치되는 패키지는 시스템이 아닌 `.venv` 폴더 내에만 저장됩니다.
<br/>
```bash
### 4.1. Windows에 Anaconda 설치하기
# numpy와 pandas 설치
pip install numpy pandas
# 설치된 패키지 목록 확인
1.**Anaconda 다운로드:**
pip list
*[Anaconda 공식 웹사이트](https://www.anaconda.com/products/distribution)에 접속합니다.
***"Download"** 버튼을 클릭하여 최신 버전의 Anaconda 설치 프로그램을 다운로드합니다. (Python 3.x 버전 권장)
# 설치된 패키지 목록을 파일로 저장 (협업에 필수!)
2.**설치 프로그램 실행:**
# 이 파일은 나중에 다른 환경에서 동일한 라이브러리를 한번에 설치하는 데 사용됩니다.
* 다운로드한 `.exe` 파일을 실행합니다.
# (예: pip install -r requirements.txt)
***"Next"** 를 클릭합니다.
pip freeze > requirements.txt
```
3.**라이선스 동의:**
***"I Agree"** 를 클릭합니다.
**4. 가상환경 비활성화하기**
4.**설치 유형 선택:**
***"Just Me (recommended)"** 를 선택하고 **"Next"** 를 클릭합니다. (관리자 권한 없이 개인 사용자 계정에 설치)
* 만약 모든 사용자를 위해 설치하려면 "All Users"를 선택할 수 있지만, 특별한 경우가 아니라면 "Just Me"를 권장합니다.
5.**설치 경로 지정:**
* Anaconda를 설치할 경로를 지정합니다. 기본 경로를 사용하거나, 원하는 경로로 변경할 수 있습니다.
***주의:** 경로에 한글이나 공백이 포함되지 않도록 하는 것이 좋습니다. 예: `C:\Anaconda3`
***"Next"** 를 클릭합니다.
6.**고급 설치 옵션 (Advanced Installation Options):**
***"Add Anaconda3 to my PATH environment variable" (Anaconda3를 내 PATH 환경 변수에 추가):**
***초보자에게는 이 옵션을 선택하는 것을 권장하지 않습니다.** (Anaconda Prompt를 통해 실행 권장)
* 이 옵션을 선택하면 명령 프롬프트(cmd)나 PowerShell에서 직접 `conda` 명령어를 사용할 수 있게 되지만, 기존 Python 설치와 충돌을 일으킬 수 있습니다.
* Anaconda Prompt를 사용하는 것이 더 안정적입니다.
***"Register Anaconda3 as my default Python 3.x" (Anaconda3를 기본 Python 3.x로 등록):**
* 이 옵션은 보통 선택된 상태로 두는 것이 좋습니다.
***"Next"** 를 클릭합니다.
7.**설치 시작:**
***"Install"** 버튼을 클릭하여 설치를 시작합니다. 설치에는 몇 분 정도 소요될 수 있습니다.
8.**설치 완료:**
* 설치가 완료되면 **"Next"** 를 클릭합니다.
***"Anaconda Distribution"** 정보 창이 나타나면 **"Next"** 를 클릭합니다.
***"Finish"** 를 클릭하여 설치를 마칩니다.
* "Launch Anaconda Navigator" 와 "Getting Started with Anaconda" 옵션은 필요에 따라 선택 해제할 수 있습니다.
9.**설치 확인 (Anaconda Prompt 실행):**
* Windows 시작 메뉴에서 **"Anaconda Prompt"** 를 검색하여 실행합니다.
* 프롬프트 창에 다음 명령어를 입력하고 Enter 키를 누릅니다.
```bash
conda --version
```
*`conda 4.x.x` 와 같이 버전 정보가 출력되면 정상적으로 설치된 것입니다.
* 다음 명령어로 Python 버전도 확인합니다.
```bash
python --version
```
*`Python 3.x.x` 와 같이 버전 정보가 출력되면 됩니다.
<br/>
### 4.2. macOS에 Anaconda 설치하기
1.**Anaconda 다운로드:**
*[Anaconda 공식 웹사이트](https://www.anaconda.com/products/distribution)에 접속합니다.
* macOS용 **"Graphical Installer"** 또는 **"Command-Line Installer"** 중 하나를 다운로드합니다. 일반적으로 그래픽 설치 프로그램(.pkg)이 더 사용하기 쉽습니다.
2.**그래픽 설치 프로그램(.pkg) 실행:**
* 다운로드한 `.pkg` 파일을 실행합니다.
* 화면의 지시에 따라 **"Continue"** 를 클릭하며 설치를 진행합니다.
* 라이선스 동의, 설치 위치 선택 등의 과정을 거칩니다. 기본 설정을 사용하는 것이 일반적입니다.
***"Install"** 버튼을 클릭하여 설치를 시작합니다.
3.**설치 완료:**
* 설치가 완료되면 **"Close"** 버튼을 클릭합니다.
4.**환경 변수 설정 (터미널에서):**
* macOS에서는 `.bash_profile` 또는 `.zshrc` 파일(사용하는 쉘에 따라 다름)에 Anaconda 경로를 추가해야 할 수 있습니다. 일반적으로 설치 과정에서 자동으로 추가되지만, 그렇지 않은 경우 수동으로 설정해야 합니다.
* 터미널(Terminal)을 엽니다.
* 만약 Zsh를 사용한다면 (macOS Catalina 이후 기본 쉘), 다음 명령어를 실행하여 `conda init`을 수행합니다.
```bash
conda init zsh
```
* Bash를 사용한다면 다음 명령어를 실행합니다.
```bash
conda init bash
```
* 터미널을 **재시작**합니다.
5.**설치 확인 (터미널 실행):**
* 새로운 터미널 창을 엽니다.
* 다음 명령어를 입력하고 Enter 키를 누릅니다.
```bash
conda --version
```
*`conda 4.x.x` 와 같이 버전 정보가 출력되면 정상적으로 설치된 것입니다.
* 다음 명령어로 Python 버전도 확인합니다.
```bash
python --version
```
*`Python 3.x.x` 와 같이 버전 정보가 출력되면 됩니다.
<br/>
### 4.3. Linux에 Anaconda 설치하기
1.**Anaconda 다운로드:**
*[Anaconda 공식 웹사이트](https://www.anaconda.com/products/distribution)에 접속합니다.
* Linux용 Anaconda 설치 스크립트(`.sh` 파일)를 다운로드합니다. (예: `Anaconda3-202x.xx-Linux-x86_64.sh`)
2.**설치 스크립트 실행 권한 부여 (터미널에서):**
* 터미널을 엽니다.
* 다운로드한 파일이 있는 디렉토리로 이동합니다. (예: `cd Downloads`)
* 다음 명령어를 사용하여 스크립트에 실행 권한을 부여합니다. (파일 이름은 실제 다운로드한 파일 이름으로 변경)
```bash
chmod +x Anaconda3-202x.xx-Linux-x86_64.sh
```
3.**설치 스크립트 실행 (터미널에서):**
* 다음 명령어를 사용하여 스크립트를 실행합니다.
```bash
./Anaconda3-202x.xx-Linux-x86_64.sh
```
4.**설치 진행:**
* 화면에 나타나는 지시에 따라 설치를 진행합니다.
***Enter** 키를 눌러 라이선스 내용을 확인하고, **"yes"** 를 입력하여 동의합니다.
* 설치 경로를 확인하거나 변경합니다. (기본 경로는 `~/anaconda3`)
* 설치가 완료된 후, `conda init`을 실행할지 묻는 메시지가 나타나면 **"yes"** 를 입력합니다. 이렇게 하면 쉘 설정 파일(`.bashrc` 또는 `.zshrc`)에 필요한 설정이 자동으로 추가됩니다.
5.**환경 변수 적용 (터미널 재시작 또는 source 명령어):**
* 변경 사항을 적용하려면 터미널을 **재시작**하거나, 다음 명령어를 실행합니다. (자신의 쉘에 맞는 파일 사용)
* Bash 쉘의 경우:
```bash
source ~/.bashrc
```
* Zsh 쉘의 경우:
```bash
source ~/.zshrc
```
6.**설치 확인 (터미널 실행):**
* 새로운 터미널 창을 엽니다.
* 다음 명령어를 입력하고 Enter 키를 누릅니다.
```bash
conda --version
```
*`conda 4.x.x` 와 같이 버전 정보가 출력되면 정상적으로 설치된 것입니다.
* 다음 명령어로 Python 버전도 확인합니다.
```bash
python --version
```
*`Python 3.x.x` 와 같이 버전 정보가 출력되면 됩니다.
<br/>
## 5. 가상 환경 다루기 (Managing Virtual Environments)
Anaconda 설치가 완료되었다면, 이제 프로젝트별로 독립적인 개발 환경인 **가상 환경**을 만드는 방법을 알아봅니다. 가상 환경을 사용하면 각 프로젝트에 필요한 라이브러리 버전들을 격리하여 관리할 수 있어, 의존성 문제를 해결하고 프로젝트의 재현성을 높일 수 있습니다.
### 5.1. 가상 환경이란 무엇일까요?
가상 환경은 마치 **\'나만의 작은 실험실\'**과 같습니다. 각 실험실마다 필요한 도구와 재료(라이브러리와 패키지)를 독립적으로 갖추고 있어서, 한 실험실에서의 작업이 다른 실험실에 영향을 주지 않는 것과 같은 원리입니다.
예를 들어, A 프로젝트에서는 `numpy 1.20` 버전이 필요하고, B 프로젝트에서는 `numpy 1.25` 버전이 필요하다고 가정해 봅시다. 만약 가상 환경 없이 시스템 전체에 하나의 `numpy`만 설치되어 있다면, 두 프로젝트 중 하나는 호환성 문제로 제대로 동작하지 않을 수 있습니다.
가상 환경을 사용하면, A 프로젝트를 위한 환경에는 `numpy 1.20`을, B 프로젝트를 위한 환경에는 `numpy 1.25`를 각각 설치하여 이러한 문제를 해결할 수 있습니다.
### 5.2. `conda`를 이용한 가상 환경 관리
Anaconda는 `conda`라는 강력한 명령줄 도구를 제공하여 가상 환경을 손쉽게 생성, 활성화, 비활성화, 삭제할 수 있도록 지원합니다.
1.**Anaconda Prompt (Windows) 또는 터미널(macOS/Linux)을 엽니다.**
2.**`my_project_env`라는 이름으로 Python 3.9 버전을 사용하는 가상 환경을 생성합니다.**
```bash
conda create -n my_project_env python=3.9
```
* 설치 과정에서 프롬프트가 나타나면 `y`를 입력하고 Enter를 누릅니다.
작업이 끝나면 `deactivate` 명령어로 가상환경을 빠져나올 수 있습니다.
3.**생성된 가상 환경을 활성화합니다.**
```bash
conda activate my_project_env
```
* 프롬프트 앞부분이 `(my_project_env)` 와 같이 변경되면 가상 환경이 성공적으로 활성화된 것입니다.
```bash
4.**활성화된 가상 환경에 `numpy`와 `pandas` 패키지를 설치합니다.**
deactivate
```bash
```
conda install numpy pandas
```
* 마찬가지로 설치 과정에서 프롬프트가 나타나면 `y`를 입력하고 Enter를 누릅니다.
> 💡 **`.gitignore` 설정**: `.venv` 폴더는 용량이 크고 사용자마다 환경이 다를 수 있어 <a href="glossary.md#git">Git</a>으로 관리하지 않습니다. 프로젝트의 `.gitignore` 파일에 `.venv`를 반드시 추가해주세요.
5.**설치된 패키지 목록을 확인합니다.**
```bash
conda list
```
*`numpy`와 `pandas`가 목록에 있는지 확인합니다.
---
6.**가상 환경을 비활성화합니다.**
```bash
conda deactivate
```
* 프롬프트 앞부분에서 `(my_project_env)`가 사라지고 원래대로 돌아옵니다.
### 2. 데이터 분석가를 위한 IDE: Spyder & JupyterLab
7.**(선택 사항) 생성한 가상 환경을 삭제합니다.**
```bash
#### 1) Spyder (스파이더)
conda remove -n my_project_env --all
-**개요**: 과학/공학 계산, 데이터 분석에 특화된 <ahref="glossary.md#ide">IDE</a>. MATLAB과 유사한 인터페이스가 특징입니다.
```
-**핵심 기능**: **변수 탐색기(Variable Explorer)**. 코드 실행 중인 모든 변수, 데이터프레임을 GUI로 직접 확인할 수 있어 데이터의 변화를 추적하는 데 매우 강력합니다.
-**권장 사용자**: 데이터의 구조와 내용을 시각적으로 확인하며 탐색적 데이터 분석(EDA)을 주로 수행하는 데이터 분석가, 파이썬으로 데이터 과학에 입문하는 학생.
#### 2) JupyterLab (주피터랩)
-**개요**: 웹 브라우저에서 실행되는 차세대 대화형 개발 환경. 코드, 실행 결과, 시각화, 설명을 '<ahref="glossary.md#jupyter-notebook">노트북(.ipynb)</a>' 파일 하나에 통합 관리합니다.
-**핵심 기능**: **셀(Cell) 단위 실행**. 전체 코드를 실행할 필요 없이, 코드 블록(셀) 단위로 실행하고 결과를 즉시 확인하여 빠른 실험과 디버깅이 가능합니다.
-**권장 사용자**: 빠른 아이디어 검증과 데이터 시각화가 중요한 모든 AI/ML 연구원, 분석 과정을 단계별로 기록하고 공유해야 하는 데이터 분석가.
#### 💡 쉽게 이해하기: IDE는 나의 '디지털 작업실'입니다
> <a href="glossary.md#ide">IDE(통합 개발 환경)</a>는 코딩 작업을 위한 '작업실' 또는 '공방'에 비유할 수 있습니다. 어떤 가구를 만들지에 따라 목공소의 도구 배치가 달라지듯, 어떤 종류의 개발을 하느냐에 따라 적합한 IDE가 다릅니다.
>
> - **Spyder: '정밀 데이터 분석실'**
> - Spyder는 마치 현미경과 계측 장비가 잘 갖춰진 실험실과 같습니다. 특히 '변수 탐색기'는 실행 중인 모든 데이터의 속을 돋보기로 들여다보듯 생생하게 보여줍니다. 데이터의 속을 하나하나 뜯어보며 분석하는 작업에 최적화된 '데이터 과학자'의 공간입니다.
>
> - **JupyterLab: '아이디어 스케치북'**
> - JupyterLab은 코드, 설명, 그래프, 실행 결과를 한 페이지에 차곡차곡 기록하는 똑똑한 '실험 노트'나 '스케치북'입니다. 아이디어가 떠오를 때마다 코드 조각(셀)을 바로 실행해보고 결과를 눈으로 확인하는 과정이 매우 빠르고 직관적입니다. 탐색하고, 발견하고, 이야기하는 과정에 매우 강력한 도구입니다.
>
> - **VSCode: '만능 조립식 공방'**
> - <a href="glossary.md#vscode">VSCode</a>는 레고 블록처럼 필요한 기능을 마음대로 조립해서 만드는 '만능 공방'입니다. 처음에는 텅 빈 작업대(가벼운 텍스트 에디터) 같지만, '확장 프로그램'이라는 부품을 하나씩 붙여서 파이썬 개발, 웹 개발, AI 모델링까지 못하는 게 없는 궁극의 작업 공간으로 변신시킬 수 있습니다. 이것이 바로 우리가 VSCode를 주력 개발 환경으로 선택한 이유입니다. 하나의 공방에서 모든 것을 해결할 수 있으니까요!
---
**💡 Tip:** 앞으로 진행할 모든 프로젝트는 **반드시 새로운 가상 환경을 생성하고 활성화한 후**에 시작하는 습관을 들이는 것이 좋습니다. 이는 프로젝트 간의 의존성 충돌을 막고, 깨끗하고 관리하기 쉬운 개발 환경을 유지하는 데 매우 중요합니다. 각 파트별 실습을 시작할 때마다 해당 파트에 맞는 가상 환경을 만드는 것을 권장합니다. 예를 들어, `part2_env`, `part3_env` 와 같이 말이죠!
## 2일차: 통합 개발 환경(IDE)과 최종 선택
## 6. 개발 도구 실행 및 기본 사용법 (Running Tools)
### 🎯 오늘의 목표
Anaconda와 가상 환경 설정이 완료되었다면, 이제 코드를 작성하고 실행할 개발 도구인 Jupyter Notebook과 VS Code를 사용해 보겠습니다.
- 범용 IDE인 VSCode와 클라우드 환경인 Colab, Kaggle을 이해합니다.
- 각 도구의 장단점을 비교하고 우리 과정에서 사용할 최종 도구를 결정합니다.
---
### 6.1. Jupyter Notebook / JupyterLab 사용하기
### 1. 모든 개발을 하나로: VSCode
[Jupyter Notebook](glossaries/part_1_glossary.md#jupyter-notebook-주피터-노트북)은 코드, 텍스트, 이미지를 하나의 문서에 통합하여 대화형으로 작업할 수 있게 해주는 강력한 도구입니다. 데이터 분석, 머신러닝 모델링, 교육 자료 작성 등에 널리 사용됩니다. [JupyterLab](glossaries/part_1_glossary.md#jupyterlab-주피터랩)은 Jupyter Notebook의 기능을 확장한 차세대 인터페이스입니다.
-**개요**: 가볍고 빠르면서도 강력한 기능을 자랑하는 Microsoft의 범용 코드 편집기. 풍부한 **확장 기능**을 통해 AI 모델 개발, API 서버, 웹 개발까지 하나의 툴에서 해결 가능한 'All-in-One' 솔루션입니다.
**실행 방법:**
-**핵심 기능**: 마켓플레이스를 통한 **무한한 확장성**. Python, Jupyter, <ahref="glossary.md#docker">Docker</a>, 원격 접속 등 원하는 모든 기능을 추가하여 자신만의 완벽한 IDE를 만들 수 있습니다.
-**권장 사용자**: AI 모델과 서비스를 함께 개발해야 하는 개발자, 원격 서버나 Docker 환경에서 자주 작업하는 개발자, 하나의 도구로 모든 개발을 통일하고 싶은 사용자.
### 2. 설치 없이 바로 시작하는 클라우드 환경: Colab & Kaggle
1.**Anaconda Prompt (Windows) 또는 터미널(macOS/Linux)을 엽니다.**
2.**작업하고자 하는 프로젝트의 가상 환경을 활성화합니다.** (예: `conda activate my_project_env`)
3.**Jupyter Notebook 실행:**
```bash
jupyter notebook
```
또는 **JupyterLab 실행:**
```bash
jupyter lab
```
4. 명령어를 실행하면 웹 브라우저가 자동으로 열리면서 Jupyter Notebook/Lab 인터페이스가 나타납니다.
* 만약 브라우저가 자동으로 열리지 않으면, 터미널에 출력된 URL (예: `http://localhost:8888/`)을 복사하여 웹 브라우저 주소창에 붙여넣습니다.
#### 1) Google Colab (구글 코랩)
**기본 사용법:**
-**개요**: Google에서 제공하는 클라우드 기반 무료 <ahref="glossary.md#jupyter-notebook">Jupyter 노트북</a> 환경. 설치 없이 웹 브라우저만 있으면 즉시 사용 가능하며, **무료로 고성능 GPU/TPU를 제공**하는 것이 가장 큰 장점입니다.
-**권장 사용자**: 로컬 PC 사양이 낮거나 환경 구축이 부담스러운 입문자, <ahref="glossary.md#deep-learning">딥러닝</a> 모델 학습 등 고사양 GPU가 필요한 학생 및 연구자.
#### 2) Kaggle (캐글)
***새 노트북 생성:** 오른쪽 상단의 "New" 버튼(Jupyter Notebook) 또는 왼쪽의 파일 탐색기에서 "+" 버튼(JupyterLab)을 클릭하고 "Python 3 (ipykernel)" 또는 유사한 항목을 선택합니다.
-**개요**: 세계 최대의 데이터 과학 커뮤니티 및 대회 플랫폼. Colab처럼 무료 Jupyter 환경(Kaggle Notebooks)을 제공하며, **실제 기업의 문제와 데이터셋**으로 실력을 겨루고 배울 수 있는 곳입니다.
***셀(Cell) 유형:**
-**권장 사용자**: 데이터 과학 포트폴리오를 만들고 싶은 취준생, 실제 데이터를 다루며 실력을 검증하고 싶은 개발자.
***Code Cell:** Python 코드를 입력하고 실행하는 셀입니다. `Shift + Enter` 또는 상단 메뉴의 "Run" 버튼으로 실행합니다.
***노트북 종료:** Jupyter Notebook/Lab을 실행한 터미널 창에서 `Ctrl + C`를 두 번 누릅니다.
### 3. 최종 결정: 우리 과정의 개발 환경
Jupyter Notebook/Lab은 코드 스니펫을 빠르게 테스트하고, 데이터 시각화 결과를 바로 확인하며, 아이디어를 정리하는 데 매우 효과적입니다.
| 도구 | 주요 용도 | 장점 | 단점 | 우리 과정에서의 역할 |
### 6.2. Visual Studio Code (VS Code) 사용하기
|---|---|---|---|---|
| **VSCode** | **범용 개발 (AI, 웹, 서버)** | **높은 확장성, 통합 터미널, <a href="glossary.md#git">Git</a> 연동, 가벼움** | 초기 설정이 필요함 | **주력 개발 환경** |
| JupyterLab | 대화형 데이터 분석 | 빠른 프로토타이핑, 결과 공유 용이 | 대규모 프로젝트 관리에는 부적합 | VSCode 확장 기능으로 사용 |
| Spyder | 탐색적 데이터 분석 | 직관적인 변수 확인 | 기능 확장이 제한적 | 사용하지 않음 |
| Colab/Kaggle | 클라우드 모델 학습 | 무료 <ahref="glossary.md#gpu">GPU</a>, 설치 불필요 | 런타임 제한, 커스터마이징 어려움 | **보조 환경** (GPU 필요 시) |
**결론: 우리는 <a href="glossary.md#vscode">VSCode</a>를 주력 개발 환경으로 사용합니다!**
[VS Code](glossaries/part_1_glossary.md#visual-studio-code-vs-code)는 강력한 기능과 다양한 확장 프로그램을 제공하는 현대적인 코드 편집기입니다. Python 개발을 위한 훌륭한 환경을 제공하며, Jupyter Notebook 파일(`.ipynb`)도 직접 열고 편집할 수 있습니다.
우리의 목표는 단순히 데이터를 분석하는 것을 넘어, AI 모델을 기반으로 한 완전한 '서비스'를 만드는 것입니다. <ahref="glossary.md#vscode">VSCode</a>는 탐색적 분석(Jupyter)부터 웹 서버 개발, 그리고 배포(<ahref="glossary.md#docker">Docker</a>)까지, 서비스 개발의 전 과정을 하나의 작업실에서 매끄럽게 연결해주는 가장 강력하고 현대적인 도구입니다. 이 '만능 공방'에서 우리는 아이디어를 실제 서비스로 만들어가는 즐거움을 만끽하게 될 것입니다.
**설치 (아직 설치하지 않았다면):**
---
*[VS Code 공식 웹사이트](https://code.visualstudio.com/)에서 자신의 운영체제에 맞는 설치 프로그램을 다운로드하여 설치합니다.
## 3일차: 실습 - VSCode로 나만의 개발 환경 구축하기
**Python 개발 환경 설정:**
### 🎯 오늘의 목표
1.**VS Code 실행 후, Python 확장 프로그램 설치:**
- VSCode를 설치하고 AI 개발에 필수적인 확장 프로그램을 설정합니다.
* 왼쪽 사이드바에서 **확장(Extensions)** 아이콘(네모난 블록 모양)을 클릭합니다.
- VSCode 내에서 가상환경을 만들고 라이브러리를 설치/관리합니다.
* 검색창에 "Python"을 입력하고, Microsoft에서 제공하는 **Python** 확장 프로그램을 찾아 설치합니다. (일반적으로 가장 위에 나타납니다)
- Jupyter 노트북을 실행하여 모든 설정이 완료되었는지 확인합니다.
* (선택 사항) "Pylance" 확장 프로그램도 함께 설치하면 더 강력한 언어 지원 기능을 사용할 수 있습니다.
* (선택 사항) "Jupyter" 확장 프로그램도 설치하면 VS Code 내에서 Jupyter Notebook 기능을 원활하게 사용할 수 있습니다.
---
2.**Python 인터프리터 선택 (가상 환경 연결):**
* VS Code에서 Python 파일을 열거나, 새 Python 파일을 생성합니다.
* VS Code 하단 상태 표시줄의 왼쪽(또는 `Ctrl+Shift+P`를 눌러 명령 팔레트를 열고 `Python: Select Interpreter` 검색)을 보면 현재 선택된 Python 인터프리터가 표시됩니다.
* 이 부분을 클릭하면 사용 가능한 Python 인터프리터 목록이 나타납니다.
* 이 목록에서 **앞서 `conda`로 생성한 가상 환경** (예: `my_project_env: conda`)을 선택합니다.
* 만약 목록에 보이지 않는다면, "Enter interpreter path..."를 선택하고 직접 가상 환경 내 Python 실행 파일 경로를 지정할 수도 있습니다. (예: `C:\Users\YourUser\anaconda3\envs\my_project_env\python.exe` 또는 `~/anaconda3/envs/my_project_env/bin/python`)
### 1. VSCode 설치하기
**기본 사용법:**
[공식 홈페이지](https://code.visualstudio.com/)에 접속하여 자신의 운영체제에 맞는 'Stable' 버전을 다운로드하고 설치를 진행합니다.
### 2. 필수 확장 프로그램 설치하기
***새 파일 또는 폴더 열기:** "File" 메뉴 또는 시작 화면에서 프로젝트 폴더를 엽니다.
VSCode를 실행한 후, 왼쪽 사이드바에서 '확장(Extensions)' 아이콘(네모 블록 모양)을 클릭하고 다음 확장 프로그램들을 검색하여 설치합니다.
***코드 작성 및 실행:**
* Python 파일(`.py`)을 생성하거나 엽니다.
* 코드를 작성한 후, 오른쪽 상단의 실행 버튼(삼각형 모양)을 클릭하거나, 터미널에서 `python <파일명>.py` 명령으로 실행합니다.
* VS Code 내 터미널은 "Terminal" > "New Terminal" 메뉴로 열 수 있습니다.
***디버깅:** 중단점(breakpoint)을 설정하고 디버깅 모드를 실행하여 코드 실행 과정을 단계별로 추적할 수 있습니다.
***Git 연동:** VS Code는 Git 버전 관리 시스템을 내장하고 있어, 코드 변경 사항을 손쉽게 추적하고 협업할 수 있습니다.
1.**Python** (ms-python.python)
VS Code는 단순한 스크립트 작성부터 대규모 프로젝트 개발까지 모두 지원하는 강력하고 유연한 도구입니다. Jupyter Notebook과 함께 사용하면 더욱 효율적인 개발이 가능합니다.
- Microsoft에서 제공하는 공식 파이썬 확장입니다. 코드 자동 완성(IntelliSense), 디버깅, 린팅 등 파이썬 개발의 모든 필수 기능을 제공합니다.
2.**Jupyter** (ms-toolsai.jupyter)
- VSCode 내에서 주피터 노트북(.ipynb) 파일을 생성하고 실행할 수 있게 해줍니다. JupyterLab의 장점을 VSCode 안에서 그대로 누릴 수 있습니다.
3.**(선택) Korean Language Pack** (ms-ceintl.vscode-language-pack-ko)
- VSCode의 메뉴와 메시지를 한국어로 보고 싶다면 설치하세요.
### 3. 프로젝트 폴더 및 가상환경 설정 실습
## 7. 개발 환경 설정 FAQ 및 트러블슈팅 (Troubleshooting)
이제 앞에서 배운 가상환경 만들기를 VSCode 안에서 직접 해보겠습니다.
개발 환경 설정 과정에서 몇 가지 일반적인 문제에 직면할 수 있습니다. 다음은 자주 묻는 질문과 해결 방법입니다. ([용어집의 FAQ 섹션](glossaries/part_1_glossary.md#자주-묻는-질문-faq)도 참고하세요.)
**Q1: `conda` 명령어를 찾을 수 없다고 나옵니다. (`conda: command not found`)**
2.**통합 터미널 열기**: `터미널 > 새 터미널` 메뉴를 클릭하거나 단축키(`` Ctrl + ` ``)를 눌러 VSCode 하단에 터미널을 엽니다.
> **A1:**
3.**가상환경 생성 및 활성화**: 터미널에 아래 명령어를 차례로 입력합니다.
> * **Windows:** Anaconda Prompt를 사용하고 있는지 확인하세요. 일반 명령 프롬프트(cmd)나 PowerShell에서는 PATH 설정 없이는 `conda` 명령이 인식되지 않을 수 있습니다. Anaconda 설치 시 "Add Anaconda3 to my PATH environment variable" 옵션을 선택하지 않았다면 Anaconda Prompt를 사용해야 합니다.
```powershell
> * **macOS/Linux:** `conda init <shell_name>` (예: `conda init zsh` 또는 `conda init bash`) 명령을 실행한 후 터미널을 재시작했는지 확인하세요. 또는 `source ~/.bashrc` (또는 `~/.zshrc`) 명령으로 쉘 설정을 다시 로드해보세요. 그래도 문제가 해결되지 않으면 Anaconda 설치 경로가 시스템 PATH에 올바르게 추가되었는지 확인해야 합니다.
# 1. 가상환경 생성 (이미 만들었다면 생략)
> * **재설치 고려:** 드물지만 설치 과정에 문제가 있었을 수 있습니다. Anaconda를 완전히 제거하고 재설치하는 것을 고려해볼 수 있습니다.
python-mvenv.venv
# 2. 활성화
**Q2: 가상 환경을 활성화했는데, 여전히 기본 Python 인터프리터가 사용되는 것 같습니다.**
.venv\Scripts\Activate.ps1
> **A2:**
```
> * VS Code와 같은 IDE를 사용하는 경우, IDE 자체에서 올바른 Python 인터프리터(가상 환경의 Python)를 선택했는지 다시 한번 확인하세요. (VS Code 하단 상태 표시줄 또는 `Ctrl+Shift+P` > `Python: Select Interpreter`)
이때 VSCode가 "새로운 환경을 발견했습니다"라는 알림을 표시하며, 해당 환경을 선택하겠냐고 물어볼 수 있습니다. **"예"**를 선택하면 됩니다.
> * 터미널에서 `which python` (macOS/Linux) 또는 `where python` (Windows) 명령어를 실행하여 현재 사용 중인 Python 실행 파일의 경로를 확인하고, 이것이 활성화된 가상 환경 내의 경로인지 확인합니다.
### 4. 라이브러리 설치 및 "Hello, AI!"
**Q3: 패키지 설치 시 충돌이 발생하거나 특정 버전의 패키지를 찾을 수 없습니다.**
> **A3:**
> * **채널(channel) 변경 시도:** `conda install` 명령어에 `-c conda-forge <package_name>` 와 같이 `-c` 옵션을 사용하여 다른 채널(예: `conda-forge`)에서 패키지를 검색해볼 수 있습니다. `conda-forge`는 다양한 패키지를 제공하는 커뮤니티 기반 채널입니다.
> ```bash
> conda install -c conda-forge <package_name>
> ```
> * **패키지 버전 명시:** 특정 버전이 필요하다면 `conda install <package_name>=<version>` 형식으로 버전을 명시하여 설치해보세요.
> * **새로운 가상 환경:** 때로는 기존 가상 환경에 설치된 다른 패키지와의 충돌일 수 있습니다. 문제가 지속되면, 깨끗한 새 가상 환경을 만들고 필요한 최소한의 패키지만 설치하여 테스트해보는 것이 좋습니다.
> * **pip 사용:** `conda`로 설치할 수 없는 패키지는 `pip` (Python의 기본 패키지 관리자)를 사용하여 설치할 수 있습니다. (가상 환경이 활성화된 상태에서 `pip install <package_name>`) 하지만 `conda` 환경에서는 가급적 `conda install`을 우선적으로 사용하는 것이 권장됩니다. `conda`와 `pip`를 혼용할 경우 패키지 관리가 복잡해질 수 있습니다.
1.**필수 라이브러리 설치**: 활성화된 터미널(`(.venv)` 표시 확인)에 아래 명령어를 입력하여 AI 개발에 필요한 핵심 라이브러리들을 설치합니다.
**Q4: Jupyter Notebook/Lab 실행 시 "커널 오류(Kernel Error)"가 발생합니다.**
> 위 명령어 실행 후 Jupyter Notebook/Lab을 재시작하고, "New" 또는 "Kernel" > "Change kernel" 메뉴에서 해당 커널을 선택해보세요.
df=pd.DataFrame(data)
> * **Jupyter Notebook/Lab 재시작:** 간단히 재시작하는 것만으로도 문제가 해결될 때가 있습니다.
print("Hello, AI! Pandas DataFrame 생성 성공!")
df
```
- 셀 왼쪽의 **실행 버튼(▶)**을 누르거나 `Shift + Enter` 키를 누릅니다.
-**[중요!]** 처음 코드를 실행할 때, VSCode가 오른쪽 상단에서 **"커널(Kernel) 선택"**을 요청할 수 있습니다.
-**💡 커널이 뭔가요?** '커널'은 우리가 작성한 파이썬 코드를 실제로 해석하고 실행하는 '엔진'이라고 생각하면 쉽습니다. 우리는 여러 개의 파이썬 엔진(전역 파이썬, 가상환경 파이썬 등) 중, 이 프로젝트만을 위한 전용 엔진, 즉 **`.venv` 가상환경의 파이썬을 선택해야 합니다.**
- "커널 선택"을 클릭한 뒤, **"Python Environments"** 목록에서 `.venv`라는 글자가 포함된 파이썬 인터프리터를 선택해주세요.
- 코드 아래에 "Hello, AI!..." 메시지와 함께 표 형태의 데이터프레임이 나타나면, 개발 환경 구축이 성공적으로 완료된 것입니다! 🥳
---
**Q5: VS Code에서 Python 확장 프로그램이 제대로 작동하지 않거나, "Pylance server crashed"와 같은 오류가 발생합니다.**
> **A5:**
> * **VS Code 및 확장 프로그램 최신 버전 확인:** VS Code와 Python, Pylance 확장 프로그램을 최신 버전으로 업데이트해보세요.
> * **설정 초기화 또는 재설치:** VS Code의 사용자 설정을 확인하거나, 문제가 지속되면 Python 관련 확장 프로그램을 제거했다가 다시 설치해보세요.
> * **다른 확장 프로그램과의 충돌 확인:** 다른 VS Code 확장 프로그램과 충돌이 원인일 수 있습니다. 의심되는 확장 프로그램을 일시적으로 비활성화하고 문제가 해결되는지 확인해보세요.
## 📝 1주차 요약
이 외에도 다양한 문제가 발생할 수 있습니다. 문제가 발생하면 **오류 메시지를 자세히 읽어보고, 구글 등 검색 엔진에 오류 메시지를 그대로 검색**하여 유사한 사례나 해결책을 찾아보는 것이 매우 중요합니다. 개발자 커뮤니티(예: Stack Overflow)에 질문을 올릴 때는 자신의 환경(OS, Anaconda 버전, Python 버전, 가상 환경 정보 등)과 발생한 문제, 시도해본 해결 방법 등을 최대한 자세하게 설명해야 좋은 답변을 얻을 수 있습니다.
이번 주차에는 성공적인 AI 서비스 개발을 위한 초석, 즉 개발 환경을 구축했습니다.
## 8. 마치며 (Conclusion)
-**가상환경의 이해**: '프로젝트용 필통'이라는 비유를 통해, 왜 프로젝트별로 독립된 개발 환경이 필요한지 이해하고 `venv`를 이용해 직접 가상환경을 만들고 활성화하는 방법을 배웠습니다.
축하합니다! AI 개발을 위한 첫 관문인 개발 환경 설정을 성공적으로 마쳤습니다. 이제 여러분은 Python 코드를 작성하고 실행할 수 있는 안정적이고 효율적인 작업 공간을 갖게 되었습니다.
-**다양한 IDE 탐색**: 데이터 분석에 특화된 `Spyder`와 `JupyterLab`, 그리고 만능 공방과도 같은 `VSCode`의 특징과 장단점을 비교 분석했습니다.
-**표준 개발 환경 확정**: 우리는 AI 모델 개발부터 API 서버 구축까지 전 과정을 아우를 수 있는 VSCode를 주력 개발 환경으로, GPU가 필요할 때는 Google Colab을 보조 환경으로 사용하기로 결정했습니다.
-**VSCode 설정 완료**: VSCode에 Python, Jupyter 등 핵심 확장 프로그램을 설치하고, 터미널에서 가상환경을 연동하여 `hello_ai.ipynb` 파일을 성공적으로 실행했습니다.
## ✅ 1주차 환경 설정 체크리스트
이번 시간에 배운 Anaconda, 가상 환경, Jupyter Notebook, VS Code는 앞으로 여러분의 AI 개발 여정에서 가장 중요한 도구들이 될 것입니다. 이 도구들을 능숙하게 다루는 것은 마치 훌륭한 장인이 자신의 연장을 자유자재로 사용하는 것과 같습니다.
모든 설정을 잘 마쳤는지 스스로 확인해보세요.
**핵심 요약:**
- [ ] Python이 내 컴퓨터에 설치되어 있다.
***Anaconda**는 Python과 필수 데이터 과학 패키지를 쉽게 설치하고 관리할 수 있게 해주는 배포판입니다.
- [ ] VSCode가 설치되어 있고, Python 및 Jupyter 확장 프로그램이 설치되어 있다.
***가상 환경(`conda`)**은 프로젝트별로 독립된 개발 환경을 제공하여 의존성 문제를 해결하고 재현성을 높입니다. **모든 프로젝트는 새로운 가상 환경에서 시작하는 것을 강력히 권장합니다.**
- [ ] `my-first-ai-project` 라는 이름의 프로젝트 폴더를 만들었다.
***Jupyter Notebook/Lab**은 대화형 코드 실행 및 문서화에 유용하며, 특히 데이터 분석과 실험에 효과적입니다.
- [ ] VSCode의 통합 터미널에서 `.venv` 가상환경을 만들고 활성화할 수 있다. (`(.venv)` 표시 확인)
***VS Code**는 강력한 기능을 갖춘 코드 편집기로, Python 개발 및 대규모 프로젝트 관리에 적합합니다.
- [ ] 활성화된 가상환경에 `pip`로 `pandas` 등의 라이브러리를 설치했다.
- [ ] `hello_ai.ipynb` 노트북 파일을 만들고, `.venv` 가상환경을 커널로 선택하여 코드를 실행할 수 있다.
---
환경 설정은 때때로 지루하고 복잡하게 느껴질 수 있지만, 이 단계를 탄탄하게 다져놓으면 앞으로의 학습과 개발 과정이 훨씬 수월해질 것입니다.
축하합니다! 이제 여러분은 AI 서비스 개발을 위한 전문적인 환경을 모두 갖추었습니다.
**다음 시간에는 본격적으로 Python 프로그래밍의 세계로 뛰어들어, AI 개발의 기초 체력을 기르기 위한 핵심 문법을 배우게 됩니다.** 준비되셨나요?
이 강력한 개발 환경 위에서, 다음 시간에는 파이썬의 핵심 문법들을 본격적으로 탐험하며 실제 코딩의 세계로 들어가 보겠습니다.
**➡️ 다음 시간: [Part 2: 파이썬 핵심 문법](part_2_python_core_syntax.md)**
**➡️ 다음 시간: [Part 2: Python 핵심 문법 마스터하기](part_2_python_core_syntax.md)**
**⬅️ 이전 시간: [Part 1: AI 개발 환경 완벽 구축 가이드](part_1_ai_development_environment.md)**
**⬅️ 이전 시간: [Part 1: AI 개발 환경 완벽 구축 가이드](part_1_ai_development_environment.md)**
**➡️ 다음 시간: [Part 3: 파이썬 컬렉션, 더 깊게 이해하기](part_3_python_collections.md)**
---
---
지난 시간에는 VSCode와 가상환경을 통해 우리만의 코딩 놀이터를 만들었습니다. 이제 모든 준비는 끝났습니다.
## 1. 학습 목표 (Learning Objectives)
이번 주차에는 AI 개발의 가장 기본 언어인 파이썬의 핵심 문법들을 5일간의 여정을 통해 하나씩 정복하며, 실제 코드를 작성하는 즐거움을 느껴보는 시간을 갖겠습니다.
AI 개발의 세계에 오신 것을 환영합니다! 파이썬은 AI와 데이터 과학 분야에서 가장 사랑받는 언어입니다. 문법이 간결하고 사람의 생각과 비슷해서, 프로그래밍을 처음 시작하는 분들도 쉽게 배울 수 있습니다. 2주차에는 파이썬의 가장 핵심적인 문법을 하나씩 정복해나갑니다.
이번 파트가 끝나면, 여러분은 다음을 할 수 있게 됩니다.
---
- 변수를 선언하고 숫자, 문자열, 불리언 등 기본 자료형을 활용할 수 있습니다.
-[리스트](glossaries/part_2_glossary.md#리스트-list), [튜플](glossaries/part_2_glossary.md#튜플-tuple), [딕셔너리](glossaries/part_2_glossary.md#딕셔너리-dictionary), 셋의 차이점을 이해하고 상황에 맞게 선택하여 사용할 수 있습니다.
## 1일차(월): 모든 것의 시작, 변수와 자료형
-`if`, `for`, `while` 등 제어문을 사용하여 코드의 실행 흐름을 제어할 수 있습니다.
- 코드의 재사용성을 높이는 [함수](glossaries/part_2_glossary.md#함수-function)를 직접 정의하고, [매개변수](glossaries/part_2_glossary.md#매개변수-parameter와-인자-argument)와 [반환 값](glossaries/part_2_glossary.md#반환-값-return-value)을 활용할 수 있습니다.
-[리스트 컴프리헨션](glossaries/part_2_glossary.md#리스트-컴프리헨션-list-comprehension)과 같은 파이썬다운(Pythonic) 코드를 작성할 수 있습니다.
### 🎯 오늘의 목표
## 2. 핵심 키워드 (Keywords)
- 변수(Variable)를 사용해 데이터를 저장하고 이름을 붙일 수 있습니다.
- 숫자(Integer, Float), 문자열(String), 불리언(Boolean) 등 파이썬의 기본 데이터 종류를 이해합니다.
프로그래밍은 결국 '데이터'를 다루는 일입니다. <ahref="glossary.md#variable">변수(Variable)</a>는 숫자, 글자 같은 데이터를 저장하는 '상자'입니다. 이 상자에 `name`, `age` 같은 이름표를 붙여두면, 필요할 때마다 이름표를 불러서 상자 안의 데이터를 쉽게 꺼내 쓸 수 있습니다.
#### 💡 쉽게 이해하기: 변수는 '이름이 붙은 저장 상자'입니다
AI 개발의 세계에 오신 것을 환영합니다! 파이썬은 AI와 데이터 과학 분야에서 가장 사랑받는 언어입니다. 문법이 간결하고 사람의 생각과 비슷해서, 프로그래밍을 처음 시작하는 분들도 쉽게 배울 수 있습니다. 이번 주차에는 앞으로 우리가 만들 모든 AI 서비스의 뼈대가 될 파이썬의 가장 핵심적인 문법들을 하나씩 정복해나갑니다.
> 여러분이 이사할 때, 짐을 담은 상자마다 '주방용품', '겨울옷', '책'처럼 내용물이 무엇인지 이름표(라벨)를 붙여놓습니다. 나중에 '책' 상자가 필요하면, 모든 상자를 열어볼 필요 없이 '책'이라는 이름표가 붙은 상자만 찾으면 되죠.
>
> 변수가 바로 이 **'이름표가 붙은 상자'**입니다. `age = 30` 이라는 코드는, `30`이라는 데이터를 `age`라는 이름의 상자에 넣는다는 뜻입니다. 이제부터 우리는 `age`라는 이름만 부르면 컴퓨터가 알아서 `30`이라는 값을 찾아줍니다.
> [!TIP]
> [!TIP]
> 이 파트의 모든 코드 예제는 아래 링크의 파이썬 파일에서 직접 실행하고 수정해볼 수 있습니다.
> 이 파트의 모든 코드 예제는 아래 링크의 파이썬 파일에서 직접 실행하고 수정해볼 수 있습니다.
> **실행 가능한 소스 코드: [`part_2_3_python_syntax_collections.py`](../source_code/part_2_3_python_syntax_collections.py)**
> **실행 가능한 소스 코드: [`part_2_3_python_syntax_collections.py`](../source_code/part_2_3_python_syntax_collections.py)**
---
## 4. 모든 것의 시작, 변수와 자료형
> **🎯 1일차 목표:** 변수(Variable)를 사용해 데이터를 저장하고, 파이썬의 기본 데이터 종류(자료형)를 이해합니다.
### 4.1. 변수(Variable): 데이터에 이름표 붙이기
<ahref="glossaries/part_2_glossary.md#변수-variable">변수(Variable)</a>는 숫자, 글자 같은 데이터를 저장하는 '상자'입니다. `age = 30` 이라는 코드는, `30`이라는 데이터를 `age`라는 이름의 상자에 넣는다는 뜻입니다. 이제부터 우리는 `age`라는 이름만 부르면 컴퓨터가 알아서 `30`이라는 값을 찾아줍니다.
```python
```python
# 변수 만들기 (할당)
my_name="파이"# 문자열 (String)
my_name="파이"# 문자열 데이터
my_age=20# 정수 (Integer)
my_age=20# 숫자 (정수) 데이터
pi=3.14# 실수 (Float)
pi=3.14# 숫자 (실수) 데이터
is_student=True# 불리언 (Boolean)
is_student=True# 불리언 (참/거짓) 데이터
# 변수 사용하기 (참조)
print("안녕하세요, 제 이름은",my_name,"입니다.")
print("제 나이는",my_age,"살이고, 학생인가요?",is_student)
```
### 2. 기본 자료형(Data Types): 데이터의 종류
print(f"안녕하세요, 제 이름은 {my_name}이고 나이는 {my_age}살입니다.")
파이썬은 상자에 담는 데이터의 종류를 구분합니다.
```
### 4.2. 기본 자료형(Data Types)
파이썬은 데이터의 종류를 구분하며, 이를 <ahref="glossaries/part_2_glossary.md#자료구조-data-structure">자료형</a>이라고 합니다.
-**정수 (Integer)**: `1`, `100`, `-5` 같이 소수점이 없는 숫자.
-**정수 (Integer)**: `1`, `100`, `-5` 같이 소수점이 없는 숫자.
-**실수 (Float)**: `3.14`, `-0.5` 같이 소수점이 있는 숫자.
-**실수 (Float)**: `3.14`, `-0.5` 같이 소수점이 있는 숫자.
-**문자열 (String)**: `"안녕하세요"`, `'Python'` 같이 따옴표로 감싼 글자들.
-**문자열 (String)****: `"안녕하세요"`, `'Python'` 같이 따옴표로 감싼 글자들.
-**<a href="glossary.md#boolean">불리언 (Boolean)</a>**: `True` 또는 `False`. 조건이 맞는지 틀리는지를 나타내는 값입니다.
-**<a href="glossaries/part_2_glossary.md#boolean">불리언 (Boolean)</a>**: `True` 또는 `False`. 조건의 참/거짓을 나타냅니다.
---
---
### 💡 쉽게 이해하기: 파이썬의 '데이터 그릇'들
## 5. 여러 데이터를 담는 그릇 (1): 리스트와 튜플
> 요리할 때 재료에 따라 다른 그릇을 쓰듯, 파이썬에서는 데이터의 종류와 사용 방식에 따라 다양한 '그릇'(자료구조)을 사용합니다. 앞으로 배울 4가지 핵심 그릇을 미리 맛봅시다.
>
> - **리스트(List) `[]`**: '쇼핑 목록'과 같습니다. 목록에 물건을 추가하거나, 빼거나, 순서를 바꿀 수 있습니다. 순서가 중요하고 내용이 계속 바뀔 때 사용합니다.
> - **튜플(Tuple) `()`**: '돌에 새긴 약속'과 같습니다. 한번 정해진 내용은 절대 바꿀 수 없습니다. (x, y) 좌표처럼 변하면 안 되는 중요한 값을 보관할 때 사용합니다.
> - **딕셔너리(Dictionary) `{}`**: '사전'이나 '전화번호부'입니다. '사과'라는 단어(Key)를 찾으면 'apple'이라는 뜻(Value)이 나오는 것처럼, 키를 통해 값을 빠르게 찾아냅니다. 순서보다는 의미를 통해 데이터를 관리할 때 씁니다.
> - **셋(Set) `{}`**: '주머니 속 구슬 모음'입니다. 같은 색깔의 구슬은 여러 번 넣어도 하나만 있는 것으로 칩니다 (중복 불가). 순서 없이 '어떤 구슬이 주머니 안에 있는가?'가 중요할 때 사용합니다.
## 2일차(화): 여러 데이터를 담는 그릇 (1) - 리스트와 튜플
> **🎯 2일차 목표:** 순서가 있는 데이터 묶음인 [리스트(List)](glossaries/part_2_glossary.md#리스트-list)와 변경이 불가능한 [튜플(Tuple)](glossaries/part_2_glossary.md#튜플-tuple)을 다루고, [리스트 컴프리헨션](glossaries/part_2_glossary.md#리스트-컴프리헨션-list-comprehension)으로 파이썬다운 코드를 작성합니다.
### 🎯 오늘의 목표
- 순서가 있는 데이터 묶음인 리스트(List)를 다룰 수 있습니다.
- 변경이 불가능한 튜플(Tuple)의 특징과 사용 사례를 이해합니다.
- 리스트 컴프리헨션으로 파이썬다운 코드를 작성합니다.
---
### 1. 리스트(List): 순서가 있고 변경 가능한 만능 주머니
### 5.1. 리스트(List): 순서가 있고 변경 가능한 만능 주머니
- 여러 개의 값을 순서대로 저장하는 **변경 가능한**<ahref="glossary.md#list">자료구조</a>입니다.
- 여러 값을 순서대로 저장하는 **변경 가능한**<ahref="glossaries/part_2_glossary.md#자료구조-data-structure">자료구조</a>입니다. (`[]` 사용)
- 대괄호 `[]`로 감싸고, 각 요소는 쉼표 `,`로 구분합니다.
```python
```python
fruits=["apple","banana","cherry"]
fruits=["apple","banana","cherry"]
fruits[1]="blueberry"# 값 변경
# 인덱싱과 슬라이싱 (문자열과 동일)
fruits.append("strawberry")# 요소 추가
print(f"첫 번째 과일: {fruits[0]}")
print(f"최종 리스트: {fruits}")
print(f"마지막 두 개 과일: {fruits[1:]}")
# 리스트 값 변경하기
fruits[1]="blueberry"
print(f"변경된 리스트: {fruits}")
# 리스트에 요소 추가/제거
fruits.append("strawberry")# 맨 뒤에 추가
print(f"추가 후: {fruits}")
fruits.pop()# 맨 뒤 요소 제거
print(f"제거 후: {fruits}")
print(f"리스트의 길이: {len(fruits)}")
```
```
### 2. 파이썬다운 코드: 리스트 컴프리헨션 (List Comprehension)
### 5.2. 파이썬다운 코드: 리스트 컴프리헨션 (List Comprehension)
`for` 반복문과 `append`를 사용하여 리스트를 만드는 것을 한 줄로 간결하게 표현하는 방법입니다.
<ahref="glossary.md#list-comprehension">리스트 컴프리헨션</a>에 익숙해지면 코드가 훨씬 깔끔해지고, 작성 속도도 빨라집니다.
#### 💡 쉽게 이해하기: 리스트 컴프리헨션은 '주문 제작 기계'입니다
> 리스트 컴프리헨션은 마치 '주문 제작 기계'와 같습니다. `for`문을 사용하는 것은 재료(숫자)를 하나씩 손으로 가공해서(제곱해서) 상자에 담는 수작업과 비슷합니다.
>
> 반면, 리스트 컴프리헨션은 이 기계에 **`[결과물(i**2) | 재료(for i in range(10)) | 조건(if i % 2 == 0)]`** 이라는 설계도를 한 번에 넣어주는 것과 같습니다. 그러면 기계가 알아서 설계도에 맞는 제품들만 순식간에 만들어내어 컨테이너 벨트 위에 올려줍니다. 훨씬 빠르고, 간결하며, 세련된 방식이죠!
### 3. 튜플(Tuple): 순서가 있지만 변경 불가능한 금고
### 5.3. 튜플(Tuple): 순서가 있지만 변경 불가능한 금고
- 여러 개의 값을 순서대로 저장하는 **변경 불가능한**<ahref="glossary.md#tuple">자료구조</a>입니다.
- 여러 값을 순서대로 저장하는 **변경 불가능한**<ahref="glossaries/part_2_glossary.md#자료구조-data-structure">자료구조</a>입니다. (`()` 사용)
-소괄호 `()`로 감싸서 만듭니다. 한번 만들어지면 내용을 바꿀 수 없어서, 안정성이 중요할 때 사용됩니다.
- 한번 만들어지면 내용을 바꿀 수 없어 안정성이 중요할 때 (e.g., 함수의 반환 값, 좌표) 사용됩니다.
```python
```python
point=(10,20)
point=(10,20)
print(f"x좌표: {point[0]}")
# point[0] = 15 #! TypeError 발생
# 튜플은 변경 불가! 아래 코드는 오류(TypeError)를 발생시킵니다.
# point[0] = 15
```
```
> **언제 튜플을 사용할까?**
> - 함수가 여러 개의 값을 반환할 때
> - <a href="glossary.md#dictionary">딕셔너리</a>의 키(Key) 값으로 사용해야 할 때
> - 프로그램 전체에서 변하면 안 되는 상수 값을 정의할 때
---
---
## 3일차(수): 여러 데이터를 담는 그릇 (2) - 딕셔너리와 셋
## 6. 여러 데이터를 담는 그릇 (2): 딕셔너리와 셋
### 🎯 오늘의 목표
> **🎯 3일차 목표:** `Key:Value` 쌍으로 데이터를 저장하는 [딕셔너리(Dictionary)](glossaries/part_2_glossary.md#딕셔너리-dictionary)와 중복을 허용하지 않는 셋(Set)을 다룹니다.
-`Key:Value` 쌍으로 데이터를 저장하는 딕셔너리(Dictionary)를 다룰 수 있습니다.
- 중복을 허용하지 않는 셋(Set)의 특징과 집합 연산을 이해합니다.
---
### 6.1. 딕셔너리(Dictionary): 의미를 부여한 데이터 관리법
-`Key:Value` 쌍으로 데이터를 저장하며, 순서보다 '의미(Key)'를 통해 값을 찾는 데 특화된 <ahref="glossaries/part_2_glossary.md#자료구조-data-structure">자료구조</a>입니다. (`{}` 사용)
### 1. 딕셔너리(Dictionary): 의미를 부여한 데이터 관리법
-`Key:Value` 쌍으로 데이터를 저장하며, 순서가 중요하지 않습니다.
- 중괄호 `{}`로 만듭니다. '이름'='홍길동', '나이'=30 처럼 의미를 가진 <ahref="glossary.md#dictionary">딕셔너리</a> 데이터를 관리할 때 매우 유용합니다.
> **🎯 4일차 목표:** `if`, `for`, `while` 제어문을 사용하여 조건과 반복에 따라 코드의 흐름을 제어합니다.
파이썬은 **들여쓰기(indentation)**로 코드 블록을 구분합니다. 보통 4개의 공백(스페이스바 4번)을 사용하며, 이는 파이썬 문법의 **필수 요소**이므로 매우 중요합니다.
#### 💡 쉽게 이해하기: 들여쓰기는 '글의 목차'와 같습니다
### 7.1. 파이썬의 상징: 들여쓰기(Indentation)
> 우리가 보고서를 쓸 때, 큰 제목 아래에 소제목을 쓰고, 그 아래에 내용을 쓰는 것처럼 계층을 만듭니다. 이 계층 구조 덕분에 어떤 내용이 어떤 제목에 속하는지 한눈에 알 수 있습니다.
파이썬은 **[들여쓰기](glossaries/part_2_glossary.md#들여쓰기-indentation)(스페이스 4칸)**로 코드의 소속을 구분하는 '문법'입니다. `if`, `for` 등에 속한 코드들은 반드시 들여쓰기를 해야 합니다.
>
> 파이썬의 들여쓰기도 똑같습니다. `if`문이나 `for`문 아래에 오는 코드들을 안으로 들여쓰면, '이 코드들은 바로 위 `if`문(또는 `for`문)에 소속된 한 팀입니다'라고 알려주는 시각적인 신호입니다. 이 규칙만 잘 지키면 코드의 구조가 명확해지고, 다른 사람이 내 코드를 이해하기도 쉬워집니다. 파이썬에서는 이 규칙이 선택이 아닌 **필수**입니다!
### 2. `if-elif-else`: 조건에 따라 움직이기
### 7.2. `if-elif-else`: 조건에 따라 움직이기
```python
```python
score=85
score=85
ifscore>=90:
ifscore>=90:grade="A"
grade="A"
elifscore>=80:grade="B"
elifscore>=80:
else:grade="F"
grade="B"
print(f"학점: {grade}")
else:
grade="F"
print(f"당신의 학점은 {grade}입니다.")
```
```
### 3. `for`: 순서대로 반복하기
### 7.3. `for`: 순서대로 반복하기
<ahref="glossary.md#list">리스트</a>, <ahref="glossary.md#tuple">튜플</a>, 문자열 등 순회 가능한(iterable) 객체의 요소를 하나씩 순회하며 코드를 반복합니다. 마치 **체크리스트의 항목을 하나씩 확인**하는 것과 같습니다.
리스트, 튜플, 문자열 등 순회 가능한 객체의 요소를 하나씩 순회합니다. `enumerate`를 사용하면 인덱스와 값을 함께 얻을 수 있습니다.
```python
```python
fruits=["apple","banana","cherry"]
fruits=["apple","banana","cherry"]
# 가장 기본적인 for문
forfruitinfruits:
print(f"{fruit}를 먹었습니다.")
# enumerate를 사용하면 인덱스 번호와 값을 함께 사용할 수 있습니다.
foridx,fruitinenumerate(fruits):
foridx,fruitinenumerate(fruits):
print(f"{idx+1}번째 과일은 {fruit}입니다.")
print(f"{idx+1}번째 과일: {fruit}")
# range()를 사용하면 정해진 횟수만큼 반복할 수 있습니다.
foriinrange(5):# 0부터 4까지 5번 반복
print(f"{i}번째 반복")
```
```
### 4. `while`: 조건이 만족하는 동안 반복하기
### 7.4. `while`: 조건이 만족하는 동안 반복하기
주어진 조건이 `True`인 동안 코드를 계속해서 반복 실행합니다. **생명(life)이 0이 될 때까지 계속되는 게임**과 같습니다. 매 라운드 시작 전에 생명이 남아있는지(`life > 0`)를 확인하는 것과 같죠.
주어진 조건이 `True`인 동안 코드를 계속해서 반복합니다. 조건이 언젠가 `False`가 되도록 만들지 않으면 '무한 루프'에 빠지므로 주의해야 합니다.
```python
```python
count=5
count=3
whilecount>0:
whilecount>0:
print(f"카운트 다운: {count}")
print(f"카운트 다운: {count}")
count-=1# count를 1씩 감소시킵니다. 이 줄이 없으면 무한 루프에 빠집니다!
count-=1# 이 줄이 없으면 무한 루프!
print("발사!")
print("발사!")
```
```
---
---
## 5일차(금): 코드를 재사용하는 마법, 함수
## 8. 코드를 재사용하는 마법, 함수
### 🎯 오늘의 목표
-<ahref="glossary.md#function">함수(Function)</a>를 정의하고 호출하여 코드의 재사용성을 높일 수 있습니다.
- 함수의 입력(매개변수)과 출력(반환 값)의 개념을 이해합니다.
- 반복되는 코드를 묶어 함수(Function)로 만들 수 있습니다.
- 함수에 입력을 주는 매개변수(Parameter)와 결과를 돌려받는 반환 값(Return)을 이해합니다.
---
> **🎯 5일차 목표:** 반복되는 코드를 `[함수(Function)](glossaries/part_2_glossary.md#함수-function)`로 묶어 재사용하고, 함수의 입력([매개변수](glossaries/part_2_glossary.md#매개변수-parameter와-인자-argument))과 출력([반환 값](glossaries/part_2_glossary.md#반환-값-return-value))을 이해합니다.
### 1. 함수(Function): 나만의 미니 프로그램
### 8.1. 함수(Function): 나만의 미니 프로그램
코드를 짜다 보면, 비슷한 작업을 여러 번 반복해야 할 때가 있습니다. 함수는 특정 작업을 수행하는 코드 묶음에 이름을 붙여놓고, 필요할 때마다 이름만 불러서 사용하는**'재사용 가능한 코드 조각'**입니다.
[함수](glossaries/part_2_glossary.md#함수-function)는 특정 작업을 수행하는 코드 묶음에 이름을 붙인**'재사용 가능한 레시피'**입니다.`def` 키워드로 정의하고, 이름으로 호출하여 사용합니다.
#### 💡 쉽게 이해하기: 함수는 '나만의 레시피' 또는 '미니 로봇'입니다
### 8.2. 입력(매개변수)과 출력(반환 값)
> 여러분이 '계란 후라이'를 만드는 방법을 '계란 후라이 레시피'라는 이름으로 정리해두었다고 상상해보세요. 앞으로 계란 후라이가 필요할 때마다, 매번 "기름을 두르고, 계란을 깨서 넣고, 소금을 뿌린다..."라고 생각할 필요 없이 그냥 "계란 후라이 레시피대로 해!"라고 말하면 됩니다.
-**[매개변수(Parameter)](glossaries/part_2_glossary.md#매개변수-parameter와-인자-argument):** 함수에 전달하는 재료(입력 값).
>
-**[`return`](glossaries/part_2_glossary.md#반환-값-return-value):** 함수가 작업을 마친 후 돌려주는 결과물(출력 값).
> 함수가 바로 이 **'레시피'**와 같습니다. 특정 기능을 수행하는 코드들을 `def make_fried_egg():` 처럼 하나의 레시피로 만들어두면, 필요할 때마다 `make_fried_egg()`라고 호출만 하면 되는 것이죠. 코드가 훨씬 간결해지고, 관리하기 쉬워집니다.
### 2. 함수 만들기 (`def`) 와 사용하기 (호출)
`def` 키워드를 사용하여 함수를 정의(define)합니다.
```python
```python
# 1. 함수 정의 (레시피 만들기)
defadd(a,b):
defsay_hello():
result=a+b
print("안녕하세요!")
returnresult
print("파이썬의 세계에 오신 것을 환영합니다.")
# 2. 함수 호출 (레시피 사용하기)
say_hello()
say_hello()
```
### 3. 입력(매개변수)과 출력(반환 값)이 있는 함수
# 함수 호출 및 결과 저장
진짜 레시피처럼, 함수도 재료를 받아(입력) 요리를 완성해서(출력) 내놓을 수 있습니다.
sum_result=add(5,3)
print(f"5 + 3 = {sum_result}")
-**매개변수 (Parameter)**: 함수에 전달하는 재료(입력 값).
-**반환 값 (Return)**: 함수가 작업을 마친 후 돌려주는 결과물(출력 값).
```python
# '이름'을 재료로 받아 인사말을 만들어주는 레시피
defmake_greeting(name):
greeting=f"안녕하세요, {name}님!"
returngreeting# 결과물(요리)을 반환
# 함수에 '앨리스'라는 재료를 넣어 호출하고, 결과물을 변수에 저장
alice_greeting=make_greeting("앨리스")
print(alice_greeting)# "안녕하세요, 앨리스님!" 출력
bob_greeting=make_greeting("밥")
print(bob_greeting)# "안녕하세요, 밥님!" 출력
```
```
함수를 잘 사용하면 복잡한 문제를 여러 개의 간단한 함수로 나누어 해결할 수 있어, 훨씬 체계적인 프로그래밍이 가능해집니다.
함수를 잘 사용하면 복잡한 문제를 여러 개의 간단한 함수로 나누어 해결할 수 있어, 훨씬 체계적인 프로그래밍이 가능해집니다.
### 📝 2주차 요약
---
이번 주차에 우리는 파이썬의 가장 기본적인 구성 요소들을 배웠습니다.
-**변수와 자료형**: 데이터를 저장하고(변수), 데이터의 종류(숫자, 문자열, 불리언)를 구분하는 법을 배웠습니다.
-**자료구조**: 여러 데이터를 효율적으로 담는 그릇인 리스트, 튜플, 딕셔너리, 셋의 특징과 사용법을 익혔습니다.
-**제어문**: 코드의 흐름을 제어하는 `if`, `for`, `while` 문을 통해 프로그램이 특정 조건이나 반복에 따라 동작하게 만들었습니다.
-**함수**: 반복되는 코드를 `def` 키워드를 사용해 재사용 가능한 블록으로 만드는 방법을 배웠습니다.
이 핵심 문법들은 앞으로 우리가 만들 모든 AI 서비스의 뼈대가 될 것입니다. 각 개념이 손에 익을 때까지 여러 번 연습해보는 것이 중요합니다.
## 9. 직접 해보기 (Hands-on Lab)
### 🔍 2주차 연습 문제
이번 주에 배운 내용을 바탕으로 다음 함수들을 직접 완성해보세요.
**문제 1: 학점 계산기 함수 만들기**
**문제 1: 학점 계산기 함수**
- 학생의 점수(0~100)를 입력받아 학점을 반환하는 `get_grade` 함수를 만들어보세요.
- 학생의 점수(0~100)를 매개변수로 받아 학점을 반환하는 `get_grade` 함수를 `if-elif-else`를 사용하여 만들어보세요.