FastAPI 학습 기록...

zooy·2025년 1월 28일
1

Backend Programming에 B도 몰랐던 제가..
'FastAPI로 배우는 백엔드 프로그램 with 클린 아키텍처' 라는 책으로 공부하게 되었습니다.

[2025.01.10 ~ 01.27] 약 3주간 학습을 끝내며 FastAPI를 활용한
백엔드 개발의 기초를 익히고, 서비스 구축 과정을 경험할 수 있었습니다.
이번 포스팅에서는 학습하면서 느낀 점과 배운 내용을 정리해보려고 합니다.

1. 'FastAPI로 배우는 백엔드 프로그램 with 클린 아키텍처'

📌 이 책을 선택한 이유

FastAPI는 최신 Python 기반의 웹 프레임워크로 빠른 성능과 쉬운 문법이 장점입니다. 이 책은 지인에게 추천받아 구매했으며, FastAPI의 기본 개념부터 실습까지 차근차근 다뤄주어, 처음 배우는 입장에서 부담 없이 접근할 수 있었습니다.

또한, 단순히 FastAPI뿐만 아니라 도커(Docker), 가상환경, 객체 관계 매핑(ORM), 클린 아키텍처 등의 개념도 함께 배울 수 있어, 백엔드 개발의 전반적인 흐름을 이해하는 데 도움이 되었습니다.

📌 학습을 통해 배운 것

책을 따라가면서 직접 코드를 작성하고 수정해보는 과정이 특히 유익했습니다. 주요하게 다룬 내용은 다음과 같습니다.

  1. FastAPI의 기본 개념과 실습
  • FastAPI를 활용한 기본적인 API 구축
  • 비동기 프로그래밍(Async) 개념 및 활용
  1. 클린 아키텍처의 이해
  • 클린 아키텍처의 4계층 구조
    - 엔터티(Entity) = 도메인(Domain)
    - 유스케이스(Use Case) = 어플리케이션(Application)
    - 인터페이스 어댑터(Interface Adapter) = 인터페이스(Interface)
    - 프레임워크 & 드라이버(Framework & Driver) = 인프라(Infra)
  • 의존 관계 역전 원칙(DIP, Dependency Inversion Principle)
  1. 회원가입 및 로그인 기능 구현
  • 의존성 주입
  • JWT 기반 로그인 & 인증
  • 사용자 CRUD 기능 구현
  1. 환경 변수 & 미들웨어 활용
  • 환경 변수 관리
  • 미들웨어를 통한 요청/응답 처리

📌 학습하며 느낀 점

  1. 백엔드 개발의 복잡성...
    처음에는 로그인과 회원가입이 단순한 기능이라고 생각했지만, 실제로 구현해보니 다양한 구성 요소와 연결성이 필요하다는 것을 깨달았습니다. 단순한 API 하나를 만들더라도 데이터베이스, 보안, 인증 로직 등이 얽혀 있어 세심한 설계가 필요했습니다.

  2. 클린 아키텍처를 적용하며 코드의 구조 이해
    책에서는 클린 아키텍처를 기반으로 코드를 작성하는 방법을 다룹니다. 이를 통해 백엔드 개발에서 각 계층이 어떤 역할을 하는지, 왜 이렇게 구조화해야 하는지를 자연스럽게 익힐 수 있었습니다.

  3. 실제 웹 서비스 개발?!
    책을 끝내고 나니 FastAPI를 활용해 직접 웹 애플리케이션을 운영해보고 싶다는 욕구가 생겼습니다. 앞으로 개인 프로젝트를 진행하면서 더 깊이 있는 학습을 이어나가려고 합니다.

📌 FastAPI를 배우고 싶은 분들에게 추천!

이 책은 FastAPI를 처음 접하는 분들에게 특히 추천하고 싶습니다. 기초 개념부터 실습까지 단계별로 설명해주기 때문에, Python을 어느 정도 다룰 줄 아는 사람이라면 쉽게 따라갈 수 있을 것이라고 생각합니다.

2. 새롭게 알게 된 개념 정리

1️⃣ FastAPI & API 관련 용어

  • FastAPI: Python 기반의 비동기 웹 프레임워크로 빠른 성능과 자동 문서화 기능을 제공하며, 타입 힌트를 적극 활용하는 것이 특정입니다.
  • API(Application Programming Interface): 애플리케이션이 서로 통신할 수 있도록 도와주는 인터페이스입니다. 웹 API는 주로 HTTP를 통해 클라이언트와 서버 간 데이터를 주고받습니다.
  • 엔드포인트(Endpoint): API에서 특정 기능을 수행하는 URL 경로
    ex) /users, /login

2️⃣ 유효성 검사 & 데이터 처리

  • 파이단틱 유효성 검사: FastAPI에서 데이터 검증을 위해 사용하는 라이브러리입니다. Python의 타입 힌트를 활용하여 입력값을 자동으로 검증하고 변환해줍니다.
  • 객체 관계 매핑(ORM): 데이터베이스의 테이블을 python 객체로 매핑해 다룰 수 있도록 해주는 기법 (FastAPI에서는 SQLAlchemy 주로 사용)
  • 마이그레이션(Migration): 데이터베이스의 스키마(구조)를 변경할 때 사용하는 기능으로 Alembic 같은 도구를 활용해 스키마 변경을 자동화할 수 있습니다.
  • 스키마(Schema): 데이터베이스에서 테이블 구조를 정의하는 개념으로 API에서는 요청과 응답의 데이터 형식을 정의하는 모델을 의미하기도 합니다.
  • 리버전 파일(Revision File): 데이터베이스 스키마의 변경 내역을 기록하고 버전을 추적하는 파일

3️⃣ 의존성 & 디자인 패턴

  • 의존성(Dependency): 하나의 코드가 다른 코드에 의존하는 관계(모듈, 라이브러리 등)
  • 의존성 규칙: 모듈 간의 관계를 정의하는 원칙. 일반적으로 상위 모듈이 하위 모듈에 직접 의존하지 않도록 설계하는 것이 중요합니다.
  • 의존성 역전(DIP): 객체지향 설계 원칙 중 하나로, 상위 계층이 하위 계층의 세부 구현에 의존하지 않고 인터페이스를 통해 의존성을 관리하는 방법입니다.
  • IoC 컨테이너: 의존성 주입을 관리하는 컨테이너.객체를 직접 생성하는 대신, 필요한 곳에서 의존성을 제공받을 수 있도록 합니다.
  • 프로바이더(Provider): IoC 컨테이너에서 필요한 객체를 제공하는 역할

4️⃣ 비동기 & 동시성 관련 개념

  • ASGI 서버: FastAPI가 사용하는 비동기 웹 서버 인터페이스입니다.
  • 비동식 코드: 요청을 기다리는 동안 다른 작업을 수행할 수 있도록 하는 방식
    async/await 문법을 사용하여 구현
  • 동시성: 여러 작업을 동시에 실행하는 개념. But 실제로는 하나의 CPU 코어에서 작업을 번갈아가며 실행됨.
  • 병렬성: 여러 개의 CPU 코어를 활용해 작업을 동시에 실행하는 방식
  • 멀티스레딩: 하나의 프로세스 내에서 여러 개의 스레드가 병렬로 실행되도록 하는 방식.
  • 멀티프로세싱: 여러 개의 프로세스를 생성하여 병렬 작업을 수행하는 방식(GIL의 영향 X)
  • 비동기 프로그래밍: I/O 대기 시간을 활용하여 다른 작업을 수행할 수 있도록 하는 프로그래밍 방식

5️⃣ 웹 개발 관련 개념

  • 클라이언트(Client): 서버에 요청을 보내주는 주체
    (웹 브라우저, 모바일 앱, API 호출 프로그램 등)
  • 라우터(Router): FastAPI에서 API 엔드포인트를 그룹화하는 기능.
    여러 개의 URL 경로를 관리하기 쉽게 해줍니다.
  • 미들웨어(Middleware): HTTP 요청과 응답을 가로채서 특정 작업
    (로깅, 인증, 보안 등)을 수행하는 기능
  • 로깅 모듈: 애플리케이션에서 실행 중에 발생하는 이벤트를 기록하는 기능.
  • 레디스(Redis): 인메모리 데이터베이스로, 빠른 속도로 데이터를 캐싱하거나 큐 시스템을 구축할 때 사용함.

6️⃣ 코딩 & 패턴 관련 개념

  • 코드 스니펫: 특정 기능을 수행하는 짧은 코드 조각
  • 프레임워크: 개발을 편리하게 도와주는 소프트웨어 도구
    (FastAPI, Django, Flask) 등이 웹 개발 프레임워크에 해당됨.
  • 리팩터링: 코드의 기능은 유지하면서 가독성과 유지보수성을 높이도록 개선하는 작업
  • 데커레이터: 함수를 감싸는 형태로 기능을 추가하는 python 문법.
    FastAPI에서는 @app.get("/") 데커레이터를 사용해 엔드포인트를 정의
  • 프로토콜(Protocol): 네트워크 통신에서 데이터를 주고받는 규칙의 집합
  • 프로토타입: 제품이나 기능의 초기 버전

7️⃣ 오류 코드 (HTTP 상태 코드)

  • 400 에러: 클라이언트가 잘못된 요청을 보냈을 때 발생
  • 403 에러: 접근 권한이 없을 때 발생
  • 404 에러: 요청한 리소스를 찾을 수 없을 때 발생
  • 422 에러: 요청한 데이터 형식이 올바르지 않아 처리할 수 없을 때 발생
  • 500 에러: 서버에서 예상치 못한 오류가 발생했을 때 반환
  • 상태코드 201: 새로운 리소스가 성공적으로 생성되었을 때 반환

8️⃣ 비동기 작업 & 큐 시스템

  • 샐러리 (Celery)란?
    Celery는 분산 비동기 작업 큐를 제공하는 python 라이브러리로, 백그라운드에서 실행할 작업(태스크)을 관리하는 데 사용됩니다. FastAPI와 같은 웹 프레임워크와 함께 사용하면, 긴 시간 동안 실행되는 작업을 비동기적으로 실행하고 성능을 최적화할 수 있습니다.

  • Celery가 필요한 이유
    일반적인 웹 애플리케이션에서 요청을 처리할 때, 모든 작업을 동기적으로 실행하면 성능이 저하될 수 있습니다. 그렇기 때문에 웹 요청 처리와 분리하여 백그라운드에서 실행하면 웹 서버의 응답 속도가 빨라지고, 대규모 트래픽을 처리하는 데 유리해집니다.

  • Celery의 주요 개념

  1. 태스크(Task): 백그라운드에서 실행할 개별 작업
  2. 브로커(Broker): 태스크를 큐에 넣고, 샐러리가 실행할 수 있도록 전달하는 역할(Redis, RabbitMQ)
  3. 워커(Worker): 큐에서 태스크를 가져와 실행하는 프로세스
  4. 비트(Beat): 주기적으로 실행해야 하는 작업(스케줄링 기능)
  • Celery의 동작 흐름
  1. FastAPI 앱에서 특정 요청을 받아 Celery 태스크를 생성
  2. Celery 브로커가 해당 태스크를 작업 큐에 저장
  3. Celery 워커가 큐에서 태스크를 가져와 실행
  4. 실행이 완료되면 결과를 저장하거나 다른 서비스로 전달

FastAPI를 처음 공부하면서 웹 백엔드 개발의 기본 개념부터 클린 아키텍처, 의존성 관리, 비동기 프로그래밍까지 폭넓게 배울 수 있었습니다. 특히, 단순히 API를 만드는 것이 아니라, 구조적인 설계 원칙과 효율적인 개발 방식까지 고민할 수 있어 더욱 의미 있는 시간이었습니다.

이 글이, FastAPI를 접하는 분들께 조금이나마 도움이 되었길 바라며,
앞으로도 다양한 배운 내용을 정리하여 공유해보겠습니다.
오늘도 하고픈걸 향해 떠나는 zooy였습니다.
감사합니다 :)

profile
하고픈걸 향해서

0개의 댓글

관련 채용 정보