본문 바로가기
개발 가이드/AI 개발

[AI 개발] 1. Python AI 완전 가이드: 설치부터 AI·FastAPI 개발까지

by 플로거 2026. 7. 18.

Python AI 완전 가이드: 설치부터 AI 개발까지

Python 설치, 가상환경, 기본 문법, 비동기 프로그래밍, NumPy·Pandas, PyTorch, Transformers, LangChain, FastAPI까지 한 번에 정리한 실전 입문 가이드입니다.

왜 Python인가?

Python은 AI·머신러닝 분야에서 가장 널리 활용되는 언어 중 하나입니다. 문법이 간결하고, 데이터 처리부터 모델 개발, API 서버, 자동화까지 하나의 언어로 연결하기 쉽다는 장점이 있습니다.

특징 설명
간결한 문법 프로토타입부터 프로덕션 코드까지 빠르게 개발할 수 있습니다.
풍부한 AI 생태계 PyTorch, Transformers, LangChain 등 다양한 라이브러리를 활용할 수 있습니다.
높은 범용성 AI 모델, 웹 API, 데이터 파이프라인, 운영 자동화에 모두 사용할 수 있습니다.

1. 운영체제별 Python 설치

Windows 설치

  1. Python 공식 다운로드 페이지에서 Windows용 설치 프로그램을 내려받습니다.
  2. 설치 화면에서 Add python.exe to PATH 항목을 반드시 체크합니다.
  3. 새 명령 프롬프트 또는 PowerShell을 열어 설치 결과를 확인합니다.
python --version
pip --version

macOS 설치

macOS에서는 Homebrew를 이용하면 Python을 비교적 간단하게 설치하고 업데이트할 수 있습니다.

brew install python
python3 --version
pip3 --version

Linux(Ubuntu·Debian) 설치

APT 패키지 저장소를 이용해 Python, pip, 가상환경 모듈을 함께 설치합니다.

sudo apt update
sudo apt install python3 python3-pip python3-venv

# 설치 확인
python3 --version
pip3 --version

2. 가상환경(venv) 생성 및 활성화

프로젝트마다 필요한 패키지 버전이 다를 수 있으므로, 각 프로젝트에 독립된 가상환경을 만드는 것이 좋습니다.

가상환경 생성

# Windows / macOS / Linux 공통
python -m venv .venv

Windows에서 활성화

.venv\Scripts\activate

macOS·Linux에서 활성화

source .venv/bin/activate

가상환경이 활성화되면 터미널 프롬프트 왼쪽에 일반적으로 (.venv)가 표시됩니다.

가상환경 비활성화

deactivate

3. VS Code와 uv 설정

VS Code Python 확장 설치

VS Code의 확장 탭에서 Microsoft가 제공하는 Python 확장을 설치합니다. 이후 명령 팔레트에서 Python: Select Interpreter를 선택하고 프로젝트의 .venv 인터프리터를 지정합니다.

Windows에서는 보통 .venv/Scripts/python.exe, macOS와 Linux에서는 .venv/bin/python을 선택합니다.

uv 설치 및 패키지 추가

uv는 Python 가상환경과 패키지를 빠르게 관리할 수 있는 도구입니다.

# Windows PowerShell
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# 가상환경에 패키지 설치
uv pip install torch transformers fastapi
반응형

4. Python 기본 문법

자료형과 컬렉션

Python의 리스트와 딕셔너리는 데이터 처리에서 가장 자주 사용하는 기본 자료구조입니다.

# 1. f-string 문자열 포맷팅
name = "Llama-3"
size = "8B"
print(f"모델 이름: {name}, 파라미터 크기: {size}")

# 2. 리스트 슬라이싱 [시작:끝:간격]
scores = [10, 20, 30, 40, 50]
print(scores[1:4])  # [20, 30, 40]

# 3. 딕셔너리
model_config = {
    "temperature": 0.7,
    "max_tokens": 512,
}
print(model_config.get("temperature"))

함수와 람다

def calculate_cost(tokens: int, price_per_1k: float = 0.002) -> float:
    return (tokens / 1000) * price_per_1k

print(calculate_cost(5000))  # 0.01

square = lambda x: x ** 2
print(square(5))  # 25

클래스와 객체지향 프로그래밍

class ModelAgent:
    def __init__(self, name: str, role: str):
        self.name = name
        self.role = role

    def greet(self) -> str:
        return (
            f"안녕하세요. 저는 {self.role} 역할을 수행하는 "
            f"AI 에이전트 {self.name}입니다."
        )

agent = ModelAgent("TestForgeBot", "QA")
print(agent.greet())

컴프리헨션

# 리스트 컴프리헨션
numbers = [1, 2, 3, 4, 5]
squares = [x ** 2 for x in numbers if x % 2 == 0]
print(squares)  # [4, 16]

# 딕셔너리 컴프리헨션
names = ["A", "B", "C"]
ids = {name: idx for idx, name in enumerate(names)}
print(ids)  # {'A': 0, 'B': 1, 'C': 2}

5. 고급 Python 문법

데코레이터

데코레이터는 기존 함수 코드를 직접 수정하지 않고 실행 전후에 로깅, 권한 검사, 실행 시간 측정 등의 공통 로직을 추가할 때 사용합니다.

import time
from functools import wraps


def timer_decorator(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        elapsed = time.time() - start
        print(f"[{func.__name__}] 실행 완료: {elapsed:.4f}초")
        return result

    return wrapper


@timer_decorator
def run_heavy_task():
    time.sleep(0.5)
    return "완료"


run_heavy_task()

제너레이터

제너레이터는 모든 데이터를 한꺼번에 메모리에 올리지 않고, 필요한 시점에 값을 하나씩 생성합니다.

def token_stream(text: str):
    for token in text.split():
        yield token


stream = token_stream("TestForge AI Model is powerful")
for token in stream:
    print(token)

컨텍스트 매니저

with 구문을 활용하면 파일, 소켓, 데이터베이스 연결 같은 리소스를 안정적으로 열고 닫을 수 있습니다.

class ResourceHandler:
    def __enter__(self):
        print("1. 리소스 잠금 설정 완료")
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        print("2. 리소스 잠금 해제 및 close")


with ResourceHandler() as handler:
    print("작업 수행 중...")

타입 힌팅

from typing import Optional


def get_user_metadata(user_id: int) -> dict[str, Optional[str]]:
    return {"name": "홍길동", "email": None}


users: list[int] = [101, 102]

비동기 프로그래밍

asyncawait는 네트워크 API 호출처럼 대기 시간이 긴 작업을 효율적으로 처리할 때 유용합니다.

import asyncio


async def fetch_llm_response(prompt: str) -> str:
    print(f"API 요청 시작: {prompt}")
    await asyncio.sleep(0.5)
    return f"{prompt}에 대한 답변"


async def main():
    responses = await asyncio.gather(
        fetch_llm_response("안녕"),
        fetch_llm_response("반가워"),
    )
    print("전체 수신:", responses)


asyncio.run(main())

6. NumPy와 Pandas

NumPy는 배열과 행렬 연산에, Pandas는 표 형태의 데이터 처리와 분석에 널리 사용됩니다.

import numpy as np
import pandas as pd

# NumPy 다차원 배열 연산
arr = np.array([[1, 2], [3, 4]])
print(arr * 2)

# Pandas DataFrame 생성
data = {"Name": ["Alice", "Bob"], "Age": [25, 30]}
df = pd.DataFrame(data)
print(df)

7. PyTorch 딥러닝

PyTorch는 연구와 서비스 개발에서 모두 활용할 수 있는 대표적인 딥러닝 프레임워크입니다.

import torch
import torch.nn as nn


class SimpleNN(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc = nn.Linear(10, 2)

    def forward(self, x):
        return self.fc(x)


device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = SimpleNN().to(device)
print("구동 장비:", device)

8. LLM·AI Agent 개발

Transformers

from transformers import pipeline

classifier = pipeline("sentiment-analysis")
result = classifier("TestForge is absolutely fantastic!")
print(result)

OpenAI SDK

API 키는 소스 코드에 직접 작성하지 말고 환경변수나 별도의 비밀 관리 도구를 이용해 관리하세요.
import os
from openai import OpenAI

client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])

completion = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {
            "role": "user",
            "content": "파이썬 가이드를 한 문장으로 요약해줘",
        }
    ],
)

print(completion.choices[0].message.content)

LangChain

from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

prompt = ChatPromptTemplate.from_template("{topic}에 대해 설명해줘")
llm = ChatOpenAI(model="gpt-4o-mini")
chain = prompt | llm

result = chain.invoke({"topic": "RAG"})
print(result.content)

9. FastAPI로 AI API 서버 만들기

FastAPI는 타입 힌트와 Pydantic 기반 검증을 지원하며, 기본적으로 /docs 경로에 API 문서를 생성합니다.

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class Query(BaseModel):
    prompt: str


@app.post("/predict")
async def predict_api(query: Query):
    return {
        "prediction": f"입력한 prompt '{query.prompt}'의 처리 결과입니다."
    }

다음 명령어로 개발 서버를 실행할 수 있습니다.

uvicorn main:app --reload

10. 패키지 관리와 개발 도구

Poetry와 uv

# Poetry 프로젝트 초기화
poetry init
poetry add requests fastapi
poetry install

# uv 프로젝트 초기화 및 패키지 추가
uv init
uv add requests fastapi

Ruff와 Mypy

  • Ruff: 린트와 포맷팅을 빠르게 수행하는 도구
  • Mypy: 타입 힌트를 정적으로 검사하는 도구
# Ruff 린트 검사 및 자동 수정
ruff check --fix

# Mypy 타입 검사
mypy app.py

11. Python 실무 설계·운영·검증 기준

실무 설계 기준

결정 지점 확인 질문 실무 기준
경계 코드에서 바뀌기 쉬운 부분은 어디인가? 입출력, 설정, 외부 연동, 핵심 규칙을 분리합니다.
상태 상태가 어디서 생성되고 언제 사라지는가? 상태의 소유자와 수명 주기를 코드로 드러냅니다.
장애 실패했을 때 호출자는 무엇을 받는가? 타임아웃, 재시도, 대체 처리, 오류 계약을 먼저 정합니다.

운영 기준

  • 가상환경과 패키지 버전을 고정합니다.
  • 환경별 설정을 소스 코드와 분리합니다.
  • 로그에 실행 흐름과 실패 원인을 남깁니다.
  • 외부 호출에는 타임아웃과 제한적인 재시도를 적용합니다.
  • pathlib, json, logging 같은 표준 라이브러리를 적극 활용합니다.

검증 전략

품질 축 검증 방법 완료 기준
정확성 정상·실패 케이스를 자동화합니다. 핵심 시나리오가 반복 실행해도 통과합니다.
회귀 방지 버그 수정 시 동일 사례를 테스트로 남깁니다. 같은 문제가 다시 배포되지 않습니다.
운영성 로그, 메트릭, 알림을 확인합니다. 문제가 생겼을 때 원인을 추적할 수 있습니다.

마무리

Python 학습은 문법 암기에 그치지 않고 가상환경, 패키지 관리, 테스트, 타입 힌팅, 로깅, API 서버 구성까지 연결해야 실무 역량으로 이어집니다.

추천 학습 순서: Python 설치 → 가상환경 → 기본 문법 → 비동기 → 데이터 처리 → FastAPI → PyTorch·LLM

반응형

댓글