처음 시작하는 FastAPI

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

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

PART1

모던 웹과 파이썬

서비스와 API

1)서비스란?

"사용자에게 어떤 기능이나 가치를 제공하는 시스템 전체"를 말합니다.

서비스는 하나의 "기능 묶음" 또는 시스템 전체를 말합니다.
그안에 여러개의 API가 들어있습니다.

2)API란?

"서비스 내부의 기능에 접근하기 위한 인터페이스"를 말합니다.

간단하게 말해서 "서비스 내부의 기능에 접근하기 위한 약속"이라고 생각하면 간단합니다.

예시)
로그인 시도 -> POST/users/login

클라이언트가 이런 API주소로 요청(request)을 보내면 서버가 응답(response)을 돌려주는 구조입니다.

API 종류

API는 어떻게 제ㅔ어하고 어떤 형식으로 데이터를 주고 받는지에 따라 여러 방식으로 나눌 수 있습니다.

  • 프로토콜: 제어 구조
  • 형식: 콘텐츠 구조

주요 API 종류

  • 라이브러리(Library)
    함수나 클래스 등 재사용 가능한 코드 묶음을 호출해서 사용하는 방식입니다.
  • 원격 프로시저 호출(RPC Remote Procedure Call)
    원격 서버의 함수를 마치 내 코드처럼 호출하는 방식입니다.
  • 메시징(Messaging)
    메시지를 주고 받는 방식으로 시스템 간 비동기 통신에 자주 사용됩니다.
    예시) RabbitMQ, Kafka 등
  • 통신패턴(Communication Pattern)
    데이터 교환의 구조나 규칙을 정의하는 방식입니다.
    예시) REST, GraphQL, WebSocket 등
    통신은 아래와 같이 다양한 패턴을 따를 수 있습니다.
    • 요청-응답: 웹 브라우저가 웹서버를 호출하는 방법과 같습니다.
    • 게시-구독: '게시자'가 메시지를 게시하면 '구독자'는 메시지의 일부 데이터에 따라 각각에 대해 조치를 취합니다.
    • 대기열: 게시-구독이랑 비슷하지만 구독자 PULL중 하나에서만 메시지를 받아보고 행동에 옮깁니다.

HTTP

  • HTML: 데이터를 표시하는 언어
  • HTTP: 클라이언트-서버 프로토콜
  • URL: 웹 리소스를 위한 주소 체계

REST와 RESTful

  • REST
    REST는 웹에서 자원을 정의하고 자원에서 접근하는 방법을 규정한 아키텍처 스타일입니다.
    간단하게 말해서 웹에서 정보를 주고 받는 규칙이라고 보면 됩니다.

  • REST의 특징
    - HTTP 기반 통신(클라이언트-서버 프로토콜 사용)
    - 상태 비저장(Stateless)
    - 캐시 가능(Cacheable)
    - 리소스 기반(Resource-based)

    리소스는 식별하고자하는 작업을 수행할 수 있는 데이터입니다. 웹서비스는 노출하고자 하는 각 기능에 대해 고유한 URL, HTTP인 EndPoint를 제고으합니다 EndPoint는 URL을 기능으로 라우팅해서 '라우트'라고 부르기도합니다.

  • REST의 핵심 개념

  1. 자원(Resource): URL로 표현
  2. 행위(Method): HTTP 메서드로 구분
    • GET: 데이터 조회
    • POST: 데이터 생성
    • PUT: 데이터 전체 수정
    • PATCH: 데이터 일부 수정
    • DELETE: 데이터 삭제
  3. 표현(Repressentation): JSON, XML 등의 형식으로 데이터 전송
  • RESTful
    RESTful은 REST 원칙을 잘 지켜서 설계된 API를 말합니다.
잘못된 예시
GET /getUserInfo
POST /createNewUser

RESTful한 예시
GET /users
POST /users
GET /users/1
DELETE /users/1

URL은 자원을 표현하고 HTTP 메서드는 행위를 나타내는 것이 RESTful 설계의 핵심입니다.

  • RESTful API의 요청과 응답 구조
    클라이언트는 HTTP 메시지를 통해 서버에 요청을 보냅니다. 이때 요청 데이터는 아래와 같이 여러 위치에 담길 수 있습니다.

요청(Request)

  • Header(헤더): 인증 정보, 콘텐츠 타입 등 요청의 메타데이터를 담습니다.
  • URL Path(URL 문자열): 자원의 위치를 나타냅니다.
  • Query Parameters(쿼리 매개변수): 추가적인 필터나 검색 조건 등을 전달합니다.
    예: /users?age=100&city=Daejeon
  • Body(본문): 주로 POST나 PUT 요청시 실제 데이터를 전송합니다.
    예: JSON 형식의 사용자 정보등

응답(Response)
서버는 요청을 처리한 뒤 HTTP 응답을 반환합니다. 응답에는 다음과 같은 정보가 포함됩니다.

  • 상태코드(Statuse Code)
    요청의 처리 결과를 정수 값으로 나타냅니다.
    - 100번대: 정보, 계속진행
    - 200번대: 성공
    - 300번대: 리디렉션
    - 400번대: 클라이언트 오류
    - 500번대: 서버 오류
    각 숫자는 요청의 성공, 실패, 오류 유형으로 구분하는 데 사용됩니다.

👀.리디렉션: 요청이나 출력의 흐름을 다른 곳으로 돌리는 것을 의미합니다.

JSON 및 API 데이터 형식

1. JSON이란?
JSON(JavaScript Object Notation)은 가장 많이 쓰이는 데이터 교환형식(Data Format)중 하나입니다.
즉 서버와 클라이언트가 데이터를 주고 받을때 사람이 읽기 쉽고 기계가 처리하기 쉬운 구조로 만들어진 형식입니다.

JSON의 예시
{
	"name": "김민트초코",
    "age": "28",
    "city": "Daeejon"
    "skills": ["Python", "MySQL", "AWS"]
}

JSON은 Key-Value(키-값)구조로 되어있으며 Python의 dict와 형태가 매우 비슷합니다.

2. JSON의 특징

  • 가볍다: 데이터 크기가 작아서 전송 속도가 빠릅니다.
  • 가독성: 사람이 읽고 쓰기 쉽습니다.
  • 언어 독립적: 어떤 프로그래밍 언어에서도 쉽게 사용가능합니다.
  • 데이터 구조 표현 가능: 문자열, 숫자, 배열, 객체 등 다양한 형태 표현이 가능합니다.

3. API에서의 데이터 형식
API에서는 클라이언트와 서버가 서로 정보를 주고받기 위해 데이터를 특정 형식으로 주고받습니다.
1. JSON: 자주사용되는 표준 데이터 형식 -> 가볍고 호환성이 높음
2. XML: 태그기반구조의데이터 형식 -> 가독성은 낮기만 구조적 표현에 강함
3. Form Data: HTML 폼에서 전송되는 형식 -> 로그인, 파일 업로드등에 사용
4. Multipart Form Data: 파일+일반 데이터 함께 전송 -> 이미지 업로드시 자주 사용

동시성(Concurrency)

1. 동시성이란?
"여러 작업을 동시에 다루는 것"을 의미합니다. 즉 한번에 여러 일을 처리하는 것 처럼 보이게 하는 기술입니다.

예: 웹 서버가 여러 사용자의 요청을 동시에 받는 상황이라 가정했을때 한 사용자의 요청을 처리하는 동안 다른 사용자의 요청도 멈추지 않고 처리할 수 있다면 그 서버는 동시성 처리를 지원한다고 할 수있습니다.

2. 동시성과 병렬성의 차이
많은 사람들이 혼동하는 개념이 바로 동시성과 병렬성입니다.
동시성은 여러작업을 빠르게 번갈아 가며 처리하는 방식이고 병렬성은 여러 작업을 진짜로 동시에 처리하는 방식입니다.
간단하게 논리적인지 물리적인지에 따라 다르다고 생각하면 됩니다.

예시로 요리사가 있다고 생각합시다
먼저 찌개를 조금 끓이다가 불을 줄이고,
그동안 볶음밥을 잠시 조리한 뒤,
다시 찌개로 돌아가 조리를 이어간다면
이는 논리적으로는 동시에 하는 것처럼 보이지만,
사실 한 번에 하나의 작업만 처리하는 것이죠.
👉 이런 방식을 동시성(Concurrency) 이라고 합니다.
반면에,
요리사가 한 손으로는 찌개를 끓이고, 다른 손으로는 볶음밥을 볶는다면
두 작업이 실제로 물리적으로 동시에 진행됩니다.
👉 이것이 바로 병렬성(Parallelism) 입니다.

3. 왜 중요한가?
동시성은 특히 웹 서버나 대규모 트래픽을 처리하는 서비스에 매우 중요합니다.
간단한 예시로는 아래와 같습니다.

  • 여러 사용자가 동시에 로그인할 때
  • 여러 채팅 메시지가 동시에 전송 될 때
  • 여러 API 요청이 동시에 들어올 때

계층

계층은 시스템을 여러 단계(레이어)로 나누어 구성하는 구조를 말합니다. 즉 모든 기능을 한 곳에서 처리하지 않고 역할에 따라 나눠서 관리하는 방식을 말합니다.

  • 웹: 클라이언트의 요청을 수집하고 서비스 계층을 호출해서 응답을 반환하는 HTTP를 통한 입력/출력 계층
  • 서비스: 필요할 때 데이터 계층을 호출하는 비즈니스 로직
  • 데이터: 데이터 저장소 및 기타 서비스에 접근
  • 모델: 모든 계층이 공유하는 데이터 정의
  • 웹 클라이언트: 웹 브라우저나 기타 HTTP 클라이언트 측 소프트웨어
  • 데이터베이스:데이터 저장소

**1. 계층 구조의 장점

  • 유연성: 계층간 독립적이므로 한부분만 교체/확장 가능
  • 보안: 인증/인가 계층을 따로 두어 접근 제어 가능
  • 캐시 효율: 중간 계층(예 프록시 서버)에서 데이터 캐시 가능
  • 유지 보수성: 구조가 명확해 관리와 테스트가 쉬움
profile
아....평화롭게 오카네모찌 되고JOB다...

0개의 댓글