백엔드 프로그래밍 기초 & FastAPI 소개

홍찬우·2023년 7월 30일

백엔드 프로그래밍

Server 구성 Use case

  • 앱/웹 서비스 서버

  • 머신러닝 서비스 서버

  • 서비스 서버에서 머신러닝 서버에 예측 요청하며 통신


Server 형태

  • 모놀리식 아키텍처

    • 하나의 큰 서버에서 모두 처리하는 경우
  • 마이크로서비스 아키텍처

    • 기능 각각을 개별 서버로 구성하고 서로 통신

Rest API (Representational State Transfer API)

  • 정보를 주고 받을 때 널리 사용되는 형식

  • API 요청 시 활용하는 정해진 형식

  • 요청 모습을 보고 어떤 일을 하는 지 알 수 있음

  • 각 요청이 어떤 동작이나 정보를 위한 것을 요청 모습 자체로 추론 가능

  • CRUD (Create, Read, Updae, Delete)

  • Resource, Method, Representation of Resource로 구성

    • Resource: unique한 ID를 가지는 리소스 e.g., URI

    • Method: 서버에 요청을 보내기 위한 방식 (GET, POST, PUT, PATCH, DELETE)

    • URI & URL

      • URL: Uniform Resource Locator로 인터넷 상 자원의 위치

      • URI: Uniform Resource Identifier로 인터넷 상 자원 식별을 위한 문자열 구성
        URI는 URL을 포함하며, 더 포괄적


HTTP

  • 정보를 주고 받을 때 지켜야 하는 통신 프로토콜(규약)

  • 기본적으로 80번 포트를 사용하며, 서버에서 80번 포트를 열어주지 않으면 HTTP 통신 불가능

Method

  • GET: 정보를 요청 (Read)

    • 어떤 정보를 가져와 조회

    • URL에 변수(데이터)를 포함시켜 요청

    • 데이터를 Header에 포함해 전송

    • 캐싱 가능

  • POST: 정보 입력 (Create)

    • 데이터를 서버로 제출해 추가 또는 수정

    • URL에 변수를 노출하지 않고 요청

    • 데이터를 Body에 포함

    • 캐싱할 수 없음

  • PUT: 정보 업데이트 (Update)

  • PATCH: 정보 업데이트 (Update)

  • DELETE: 정보 삭제 (Delete)

처리 방식GETPOST
URL 노출 여부OX
URL 예시localhost:8080/login?id=chanulocalhost:8080/login
데이터 위치HeaderBody
캐싱 가능OX


Header & Body

  • HTTP 통신은 Request하고 Response를 받을 때 정보를 패킷에 저장

  • 패킷은 header와 body로 구성

    • Header: 보내는 주소, 받는 주소, 시간

    • Body: 실제 전달하려는 내용


Status Code

  • 클라이언트 요청에 따라 서버가 어떻게 반응하는지 알려주는 Code

  • Status Code

    • 1xx (정보): 요청을 받았고, 프로세스를 계속 진행함

    • 2xx (성공): 요청을 성공적으로 받았고, 실행함

    • 3xx (리다이렉션): 요청 완료를 위한 추가 작업이 필요

    • 4xx (클라이언트 오류): 요청 문법이 잘못되었거나 요청을 처리할 수 없음

    • 5xx (서버 오류): 서버가 요청에 대해 실패함


동기와 비동기

  • 동기 (Sync)

    • 서버에서 요청을 보냈을 때, 응답이 돌아와야 다음 동작 수행

    • A 작업이 모두 완료될 때까지 B 작업 대기

  • 비동기 (Async)

    • 요청을 보낼 때 응답 상태와 상관없이 다음 동작 수행

    • A 작업과 B 작업 동시 실행


IP

  • 네트워크에 연결된 특정 PC 주소를 나타내는 체계

  • 용도가 정해진 IP

    • 127.0.0.1: 현재 사용중인 Local PC

    • 0.0.0.0, 255.255.255.255 : 로컬 네트워크에 접속된 모든 장치와 소통하는 주소


Port

  • IP 주소 뒤에 나오는 숫자

  • PC에 접속할 수 있는 통로

  • 통신 규약에 의해 정해진 포트 (다른 용도로 사용 불가)

    • 22: SSH

    • 80: HTTP

    • 443: HTTPS




Fast API

특징

  • Node.js, go와 대등한 성능

  • Flask와 비슷한 구조, Microservice에 적합

  • Swagger 자동 생성

  • Pydantic을 이용한 Serialization


장점

  • Flask보다 간결한 Router 문법

  • 비동기 지원

  • Built-in API Documentation (Swagger)


프로젝트 구조

  • 프로젝트 코드가 들어갈 모듈 설정

    • app을 주로 사용하며, 프로젝트 이름으로 대체하기도 함
  • main.py

    • 간단하게 애플리케이션을 실행할 수 있는 Entrypoint

      EntryPoint: 프로그래밍 언어에서 최상위 코드가 실행되는 시작점 또는 프로그램 진입점

  • main.py 또는 app.py

    • Fast API의 애플리케이션과 Router 설정

간단한 웹 서버 띄우기

  • 루트 (”/”)로 접근하면 Hello World 출력
from fastapi import FastAPI
import uvicorn

# FastAPI 객체 생성
app = FastAPI()

@app.get("/")
def read_root():
		return {"Hello": "World"}

if __name__ == '__main__':
		uvicorn.run(app, host='0.0.0.0', port=8000)
  • 터미널 혹은 CLI에서

    • python3 simple_webserver.py (메인 파일 이름) 입력 시 실행
  • localhost:8000/docs 로 이동하면 Swagger 확인 가능


Swagger

  • 만든 API를 클라이언트에서 호출할 때 편리

  • REST API 설계 및 문서화할 때 사용


Poetry

  • dependency resolver로 복잡한 의존성 버전 충돌 방지

  • 사용 흐름

    1. Project init
    2. Poetry Shell 활성화
    3. Poetry Install
    4. Poetry Add

프로젝트 설정하기

  • FastAPI 프로젝트 생성을 위해 fastapi, uvicorn 패키지 필요

  • poetry init 입력


  • 대화 형식으로 패키지 설치 가능

  • development dependency 분리 가능

    • 개발 환경마다 필요한 패키지 분리
  • 완성이 되면 pyproject.toml에 설정이 저장

  • poetry shell Poetry shell 활성화

  • shell 활성화 후 poetry install

    • pyproject.toml에 저장된 내용에 기반해 라이브러리 설치
  • poerty add 필요한 패키지 추가

  • poetry.lock

    • 이 파일이 존재하면 작성하고 있는 프로젝트 의존성과 동일한 의존성을 가짐

    • 레포지토리에 커밋할 것







※ 모든 이미지 및 코드 출처는 네이버 커넥트재단 부스트캠프 AI Tech 5기입니다. ※

profile
AI-Kid

0개의 댓글