처음 시작하는 FastAPI

MMM._.MMM·2025년 11월 4일

처음 시작하는 FastAPI 책을 읽으면서 책 내용을 정리한 내용입니다.

PART1-2

도구

컴퓨팅 언어는 다음 요소를 공유합니다.

  • 핵심 언어와 내장 표준 패키지
  • 외부 패키지를 추가하는 방법
  • 권장 외부 패키지
  • 개발 도구 환경

패키지 관리

패키지 관리는 프로젝트에서 사용하는 외부 라이브러리(모듈)들을 설치하고 버전을 관리하는 것을 말합니다.
프로젝트마다 사용하는 라이브러리 버전이 다를 수 있기 때문에 정확한 버전 관리가 중요합니다.

가상환경(Virtual Environment)

가상환경은 프로젝트마다 독립적인 Pyhon 실행 환경을 만들어주는 기능입니다.
한마디로 **"프로젝트별 전용 Python 공간"입니다.

⚠️ 왜 필요한지?
A프로젝트에서 FastAPI의 버전을 0.110을 쓰고 B프로젝트에서 FastAPI의 버전을 0.95를 쓴다면 전역에 설치하면 충돌이 일어납니다. 이럴때 가상환경을 분리해서 독립적으로 관리한다면 문제가 해결이됩니다.

pip(Python Package Installer)

pip는 Python의 기본 패키지 관리자입니다.
Python에 내장되어있으며 라이브러리 설치/삭제/업데이트할 때 사용합니다.

# 패키지 설치
pip install fastapi

# 특정 버전 설치
pip install fastapi==0.110.0

# 설치된 패키지 목록 확인
pip list

# 현재 환경의 패키지 버전들을 requirements.txt로 저장
pip freeze > requirements.txt

# 다른 환경에서 같은 패키지 세팅하기
pip install -r requirements.txt

requirements.txt파일은 프로젝트의 패키지 버전 기록용 파일로 협업시 매우 중요합니다.

venv(Virtual Environment)

venv는 Python에 기본 포함된 가상환경 생성도구 입니다.
프로젝트마다 독립된 환경을 만들때 사용합니다.

# 가상환경 생성
python -m venv .venv

# 가상환경 활성화
# (Windows)
.venv\Scripts\activate
# (macOS/Linux)
source .venv/bin/activate

# 가상환경 비활성화
deactivate

활성화 후에는 터미널에 venv표시가됩니다. 이후 설치하는 패키지는 해당 프로젝트에만 영향을 미칩니다.

Poetry(고급 패키지 & 환경 관리자)

Poetry는 최근 많이 사용되는 고급 패키지 및 의존성 관리 도구입니다.
pip+venv 조합보다 자동화된 관리 기능이 많습니다.

  • 가상환경 자동 생성
  • pyproject.toml 파일로 의존성 관리
  • 패키지 버전 충돌 자동 해결
  • 프로젝트 빌드 & 배포 지원
# 설치
pip install poetry

# 새로운 프로젝트 생성
poetry new myproject

# 패키지 설치
poetry add fastapi

# 개발용 패키지 설치 (예: pytest)
poetry add --dev pytest

# 가상환경 활성화
poetry shell

# 의존성 목록 확인
poetry show

Poetry는 특히 FastAPI, Django등 백엔드 프로젝트에서 표준처럼 사용되고 있습니다.

코드 포매팅

코드 포매팅은 도구를 사용해서 코드 스타일을 정리하는것입니다 주로 협업때 사용하며 black이나 isort를 사용합니다.

  • black: 규칙이 단순하고 강력한 자동 포매터
    - 기능: 코드의 들여쓰기, 따옴표, 줄바꿈등을 자동으로 정리
    - 장점
    • 팀 전체가 같은 코드 스타일을 유지할 수 있다.
    • 설정이 거의 필요없다.
설치
pip install black

사용
black .
  • isort: import문을 자동으로 정렬해주는 도구
    • 표준라이브러리, 외부 라이브러리, 로컬 모듈 순으로 정렬해줍니다.
설치
pip install isort

사용
isort .

소스 관리(Source Control)

소스 관리는 코드의 변경이력 관리 및 협업 도구입니다.
가장 대표적인 도구는 Git이고 이를 기반으로 한 서비스는 GitHub, GitLab, Bitbucket등이 있습니다.

- Git

  • 분산형 버전 관리 시스템(DVCS)
    -> 각 개발자 PC에 전체 저장소가 복제되어 있어 오프라인에서도 작업이 가능
주요 명령어
git init         # 저장소 초기화
git add .        # 변경된 파일 추가
git commit -m "메시지"  # 커밋 생성
git push         # 원격 저장소로 업로드
git pull         # 원격 변경 내용 가져오기
git branch       # 브랜치 목록 확인
git merge        # 브랜치 병합
  • 장점
    • 버전(이력)관리 가능 → 이전 코드로 롤백 가능
    • 협업 시 충돌 관리
    • 브랜치 기반 개발(기능별 분리 개발)

- GitHub/GitLab

  • GitHub: 오픈소스 프로젝트나 개인 포토폴리오에 많이 사용
  • GitLab: 사내/조직용으로 많이 사용하며 CI/CD 파이프라인 내장이 강점

지속적인 통합(CI, Continuous Integration)

CI는 개발 과정에서 코드 변경이 발생할 때마다 자동으로 빌드, 테스트, 검사하는 프로세스입니다.
즉 "새로운 코드가 기존 코드와 잘 작동하는지"를 자동으로 확인해줍니다.

- CI/CD 개념

  • CI(Continuous Integration): 코드 변경시 자동 테스트 및 빌드
  • CD(Continuous Delivery / Deployment): 테스트 통과시 자동 배포

- 주요 도구

  • GitHub Actions: GitHub기반 자동화 도구
  • GitLab CI/CD: GitLab 내장 파이프라인
  • Jenkins: 독립형 오픈소스 CI 서버
  • CircleCI / TravisCI: 클라우드 기반 서비스형 CI

변수(Variable)

변수는 프로그래밍의 가장 기본적인 개념이자 핵심입니다. 어떠한 언어를 배우더라도 변수를 이해하는 것은 필수적입니다.

1. 변수의 기본 개념: 데이터의 이름표

정의
변수는 데이터를 저장하기 위해 사용되는 메모리 공간에 붙인 이름입니다.
컴퓨터 메모리는 방대한 저장 공간이며 변수는 그 저장 공간의 특정 위치에 접근할 수 있도록 도와주는 일종의 주소이자 이름표의 역할을 합니다.

변수의 특징
1. 가변성(Mutability): 변수라는 이름 자체가 "변할 수 있는"이라는 의미를 내포합니다. 변수에 저장된 데이터는 언제든지 다른 값으로 변경될 수 있습니다.
2. 재사용성: 한번 정의된 변수명은 프로그램 내에서 그 변수에 저장된 값을 여러번 가져와서 사용하거나 계산에 사용할 수 있습니다.

2. 프로그래밍에서의 변수 중요성

변수는 단순히 값을 저장하는 것을 넘어 코드를 읽기 쉽게 만들고 유연하게 동작하도록 하는데 결정적인 역할을 합니다.

- 가독성 향상
임의의 값 3.141592 대신 PI라는 변수명을 사용하면 이 숫자가 파이를 의미한다는 것을 명확하게 알 수 있습니다.

# 변수를 사용하지 않을 때
area = 3.141592 * radius * radius

# 변수를 사용할 때
PI = 3.141592
area = PI * radius * radius

- 유지보수 및 재사용성
만약 프로그램 전체에서 특정 상숫값을 100곳에서 사용하고 있다고 가정했을때

  • 변수를 사용하지 않는 경우: 100곳의 코드를 일일이 찾아다니며 값을 수정해야합니다.
  • 변수를 사용하는 경우: TAX_RATE=0.1이라는 변수 정의 부분만 TAX_RATE=0.12로 한번만 수정하면 100곳의 코드에 모두 반영됩니다.

타입힌트(Type Hint)

타입힌트는 코드 가독성과 유지보수를 위해 변수나 함수의 타입을 명시하는 문법입니다.

def add(a: int, b:int) -> int;
	return a + b
  • a: int → 매개변수 a는 정수 타입
  • → int → 반환값은 정수 타입
  • 실행시 강제되지 않지만 IDE에서 오류 감지 및 자동 완성에 도움을 줍니다.

웹 프레임워크 (WSGI and ASGI)

웹 프레임워크는 웹 애플리케이션을 빠르고 효율적으로 개발하기 위한 구조와 도구를 제공합니다.

- WSGI(Web Server Gateway Interface)

  • 동기방식(Syncharonous)
  • 한 요청이 끝나야 다음 요청을 처리 가능
  • 대표 프레임워크: Django, Flask
  • 적합한 경우: 전통적인 웹사이트, CPU 작업 위주

- ASGI(Asynchronous Server Gateway Interface)

  • 비동기 방식(Asynchronous)
  • 여러 요청을 동시에 처리 가능(I/O 작업에 효율적)
  • 대표 프레임워크: FastAPI, Starlette
  • 적합한 경우: 실시간 채팅, WebSocket, 대규모 API 서버

I/O 작업 (Input/Output 작업)
I/O는 말 그대로 입력과 출력을 처리하는 작업입니다.
컴퓨터가 "외부와 주고받는 일"을 할 때마다 I/O가 발생합니다.

  • 입력(Input): 파일 읽기, DB에서 데이터 가져오기 및 API 요청 보내기 → 외부에서 데이터를 읽어옴
  • 출력(Output): 파일 저장, 화면출력, 네트워크로 응답 보내기 → 데이터를 외부로 내보냄

특징

  • I/O작업은 시간이 오래걸림(CPU가 놀고있음)
  • 그래서 비동기방식으로 처리하면 효율적임
    → 다른 작업을 기다리지 않고 동시에 처리 가능

Starlette
Starlette는 Python 비동기(ASGI)기반의 초경량 웹 프레임워크입니다.
FastAPI는 Starlette위에 만들어진 프레임워크입니다.
Starlette = ASGI 기반의 핵심 웹 엔진", "FastAPI = Starlette + 데이터 검증(pydantic) + 자동 문서화 기능 등"

특징

  • ASGI지원 → 비동기 I/O 처리에 강함
  • WebSocket, Streaming 등 실시간 통신 지원
  • 빠르고 가벼움(Flask보다 작고 빠름)
  • FastAPI, Django Channels 같은 프레임워크의 기반이 됨
profile
아....평화롭게 오카네모찌 되고JOB다...

0개의 댓글