TIL
  • Main
  • TIL : ML
    • AI News
      • AI-powered coding, free of charge with Colab
    • Paper
      • Retrieval-augmented generation for knowledge-intensive nlp tasks
        • reference 정리
      • Sequence to Sequence
    • Generative AI
      • LLM
        • 기본 개념
    • Boostcamp
      • Daily Report
        • 2021
          • 09
            • week4
            • week5
          • 10
            • week1
            • week2
            • week3
            • week4
          • 11
            • week1
            • week2
            • week3
            • week4
            • week5
          • 12
            • week1
            • week2
            • week3
      • Final Project
        • 프로젝트 기획
          • 🌟최종 프로젝트 기획
          • 최종 프로젝트 Version
          • 아이디어 수집
          • 욕설, 혐오발언 감지
          • 라이브 커머스 레포팅 프로젝트
        • 프로젝트 진행
          • week1
          • week2
          • week3
      • Competition
        • 1. [NLP] 문장 내 개체간 관계 추출
          • Day1 (9.27, 월)
          • Day2-3 (9.28~29, 화~수)
          • Day4 (9.30, 목)
          • Day5 (10.1, 금)
          • Day6~7 (10.2~3, 토~일)
          • Day8 (10.4, 월)
          • Day9 (10.5, 화)
          • Day10 (10.6, 수)
          • Day 11 (10.7 목)
        • 2. [NLP] MRC 프로젝트
          • Day1 (10.25, 월)
          • Day2 (10.26, 화)
          • Day3 (10.27, 수)
          • Day4-5 (10.28-29, 목-금)
          • Day6 (11.1, 월)
          • Day7 (11.2, 화)
          • Day8 (11.3, 수)
          • Day9 (11.4, 목)
        • 🔨3. [NLP] 데이터 제작
          • Day1
        • 🔨4. [공통] 모델 경량화
      • [U Stage] - DL basic
        • (01강) 딥러닝 기본 용어 설명 - Historical Review
        • (02강) 뉴럴 네트워크 - MLP (Multi-Layer Perceptron)
        • (03강) Optimization
        • 🔨(04강) Convolution은 무엇인가?
        • 🔨(05강) Modern CNN - 1x1 convolution의 중요성
        • 🔨(06강) Computer Vision Applications
        • (07강) Sequential Models - RNN
        • (08강) Sequential Models - Transformer
        • Page 2
      • [U Stage] - PyTorch
        • (01강) Introduction to PyTorch
        • (02강) PyTorch Basics
        • (03강) PyTorch 프로젝트 구조 이해하기
        • (04강) AutoGrad & Optimizer
        • (05강) Dataset & Dataloader
        • (06강) 모델 불러오기
        • (07강) Monitoring tools for PyTorch
        • (08강) Multi-GPU 학습
        • (09강) Hyperparameter Tuning
        • (10강) PyTorch Troubleshooting
      • [U Stage] - NLP
        • (01강) Introduction to NLP, Bag-of-Words
        • (02강) Word Embedding
        • (03강) Recurrent Neural Network and Language Modeling
        • (04강) LSTM and GRU
        • (05강) Sequence to Sequence with Attention
        • (06강) Beam Search and BLEU score
        • (07-08강) Transformer
        • (09강) Self-supervised Pre-training Models
      • [P Stage] - KLUE
        • (1강) 인공지능과 자연어 처리
        • (2강) 자연어의 전처리
        • (3강) BERT 언어모델 소개
        • (4강) 한국어 BERT 언어 모델 학습
        • (5강) BERT 기반 단일 문장 분류 모델 학습
        • (6강) BERT 기반 두 문장 관계 분류 모델 학습
        • (7강) BERT 언어모델 기반의 문장 토큰 분류
        • 오피스아워 (9.30, 목)
        • (8강) GPT 언어 모델
        • (9강) GPT 언어모델 기반의 자연어 생성
        • (10강) 최신 자연어처리 연구
      • [P Stage] - MRC
        • Before Study
        • (1강) MRC Intro & Python Basics
        • (2강) Extraction-based MRC
        • (3강) Generation-based MRC
        • (4강) Passage Retrieval - Sparse Embedding
        • (5강) Passage Retrieval - Dense Embedding
        • 오피스아워
        • (6강) Scaling up with FAISS
        • (7강) Linking MRC and Retrieval
        • (8강) Reducing Training Bias
        • (9강) Closed-book QA with T5
        • (10강) QA with Phrase Retrieval
        • 마스터클래스
      • [P Stage] - 데이터제작(NLP)
        • (1강) 데이터 제작의 A to Z
        • (2강) 자연어처리 데이터 기초
        • (3강) 자연어처리 데이터 소개 1
        • (4강) 자연어처리 데이터 소개 2
        • (5강) 원시 데이터의 수집과 가공
        • 오피스아워 (11.10, 수)
        • (6강) 데이터 구축 작업 설계
        • (7강) 데이터 구축 가이드라인 작성 기초
        • (8강) 관계 추출 과제의 이해
        • (9강) 관계 추출 관련 논문 읽기
        • (10강) 관계 추출 데이터 구축 실습
      • [P Stage] - 모델 최적화
        • (1강) 최적화 소개 및 강의 개요
        • (2강) 대회 및 데이터셋 소개
        • (3강) 작은 모델, 좋은 파라미터 찾기: AutoML 이론
        • 🔨(4강) 작은 모델, 좋은 파라미터 찾기: AutoML 실습
        • (5강) 작은 모델, 좋은 파라미터 찾기: Data Augmentation & AutoML 결과 분석
        • 🔨오피스아워 -Baseline 코드에 모듈 작성하기(신종선 멘토님)
      • [P Stage] - Product Serving
        • Part 1: Product Serving 개론
          • 1.1 강의 진행 방식
          • 1.2 MLOps 개론
          • 1.3 Model Serving
          • 1.4 머신러닝 프로젝트 라이프 사이클
        • Part 2: 프로토타입부터 점진적으로 개선하기
          • 2.1 프로토타이핑 - Notebook 베이스(Voila)
          • 2.2 프로토타이핑 - 웹 서비스 형태(Streamlit)
          • 2.3 Linux & Shell Command
          • 2.4 Cloud
          • 2.5 Github Action을 활용한 CI/CD
        • Part 3: 더 완성화된 제품으로
          • 3.1.1 FastAPI
          • 3.1.2 Fast API
          • 3.1.3 Fast API
          • 3.2 Docker
          • 3.3 Logging
          • 3.4 MLFlow
        • Part 4: 심화 소재
          • 4.1 BentoML
          • 4.2 Airflow
          • 4.3 머신러닝 디자인 패턴
          • 4.4 앞으로 더 공부하면 좋을 내용
      • 특강
        • (특강) 김상훈 - 캐글 그랜드마스터의 노하우 대방출
        • (특강) 이활석 - 서비스 향 AI 모델 개발하기
        • (특강) 구종만 - AI + ML과 Quant Trading
        • (특강) 문지형 - 내가 만든 AI 모델은 합법일까, 불법일까
        • (특강) 이준엽 - Full Stack ML Engineer
        • (특강) 박은정 - AI 시대의 커리어 빌딩
        • (특강) 오혜연 - AI Ethics
    • Competition
      • (DACON)한국어 문장 관계 분류 경진대회
        • Day1(2.14, 월)
        • Day2(2.15, 화)
        • Day3(2.16, 수)
        • Day4(2.17, 목)
      • 2021 인공지능 데이터 활용 경진대회
        • 역량평가
          • Day1 (9.28, 화)
          • Day2 (9.29, 수)
          • Day3 (9.30, 목)
        • 예선
          • Data 분석
          • NSML
          • What We Have Done?
    • ETC
      • 인터뷰 대비
        • Computer Science
        • ML/DL
      • Poetry로 dependency 관리
        • window에서 설치하기
      • code block
      • 공부할 것 임시보관
      • Transformer to T5
      • Hugging Face Tutorial
        • Ch1. Transformer models
        • Ch2. Using Transformers
        • Ch3. Fine-tuning a model with the Trainer API
      • KLUE
      • Pandas
  • TIL : Ops
    • AWS
      • SageMaker
  • TIL : Computer (CS)
    • Error
      • TextEncodeInput must be Union[TextInputSequence, Tuple[InputSequence, InputSequence]]
    • Algorithm
      • Theory
      • Programmers
        • 기능개발
    • ETC
      • Github 커밋 히스토리 삭제
Powered by GitBook
On this page
  • 1. 백앤드 프로그래밍
  • 1.1. Server 구성
  • 1.2. RestAPI
  • 1.3. GET과 POST
  • 1.4. Header와 Body
  • 1.5. Status Code
  • 1.6. 동기와 비동기
  • 1.7. IP / Port
  • 2. Fast API
  • 2.1. 특징
  • FastAPI vs Flask
  • 3. 환경설정
  • 3.1. 기본 프로젝트 구조
  • 3.2. Poetry
  • 4. FastAPI 샘플 프로젝트
  • Swagger

Was this helpful?

  1. TIL : ML
  2. Boostcamp
  3. [P Stage] - Product Serving
  4. Part 3: 더 완성화된 제품으로

3.1.1 FastAPI

백앤드로 사용되는 FastAPI에 대해 알아보고 구현하기

1. 백앤드 프로그래밍

1.1. Server 구성

  • 웹, 앱 서버

  • 머신러닝 서비스의 서버

  • 모놀리식 아키텍처(Monolithic Architecture)

    • 통서버

  • 마이크로서비스 아키텍처(Mircroservice Architecture - MSA)

    • 분할서버

1.2. RestAPI

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

HTTP(Hyper Text Transfer Protocol) : 정보를 주고 받을 때 지켜야 하는 통신 프로토콜(규약), 약속

REST(Representational State Transfer)란 형식의 API

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

  • 기본적인 데이터 처리 : 조회 작업, 새로 추가, 수정, 삭제

  • CRUD : Create, Read, Update, Delete

  • Resource, Method, Representation of Resource로 구성

    • Resource : Unique한 ID를 가지는 리소스, URI

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

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

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

      • GET : 정보를 요청하기 위해 사용(Read)

      • POST : 정보를 입력하기 위해 사용(Create)

      • PUT : 정보를 업데이트하기 위해 사용(Update)

      • PATCH : 정보를 업데이트하기 위해 사용(Update)

      • DELETE : 정보를 삭제하기 위해 사용(Delete)

1.3. GET과 POST

  • GET

    • 어떤 정보를 가져와서 조회하기 위해 사용되는 방식

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

    • 데이터를 Header(헤더)에 포함하여 전송함

    • URL에 데이터가 노출되어 보안에 취약

    • 캐싱할 수 있음

  • POST

    • 데이터를 서버로 제출해 추가 또는 수정하기 위해 사용하는 방식

    • URL에 변수(데이터)를 노출하지 않고 요청

    • 데이터를 Body(바디)에 포함

    • URL에 데이터가 노출되지 않아 기본 보안은 되어 있음

    • 캐싱할 수 없음(다만 그 안에 아키텍처로 캐싱할 수 있음)

1.4. Header와 Body

http 통신은 패킷에 정보를 담아 Request/Response 하게 된다. 이 패킷의 구조가 Header/Body로 구성되어 있다.

  • Header: 패킷에 대한 정보(보내는 주소, 받는 주소, 시간)

  • Body: 실제 전달하려는 Data

1.5. Status Code

웹페이지를 보다보면 404 에러를 종종 볼수 있을 것이다. 이런 코드 값이 클라이언트 요청에 대한 서버의 Status Code 값이다.

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

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

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

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

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

1.6. 동기와 비동기

  • 동기(Sync) : 서버에서 요청을 보냈을 때, 응답이 돌아와야 다음 동작을 수행할 수 있음. A 작업이 모두 완료될 때까지 B 작업은 대기해야 함 (Java, Python)

  • 비동기(Async) : 요청을 보낼 때 응답 상태와 상관없이 다음 동작을 수행함. A작업과 B 작업이 동시에 실행됨 (Javascript)

1.7. IP / Port

  • IP

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

    • Internet Protocol의 줄임말, 인터넷상에서 사용하는 주소체계

    • 4덩이의 숫자로 구성된 IP 주소 체계를IPv4라고 함

    • 각 덩어리마다 0~255로 나타낼 수 있음. 2^32 = 43억개의 IP 주소를 표현할 수 있음

    • 몇가지는 용도가 정해짐

    • localhost, 127.0.0.1 : 현재 사용 중인 Local PC

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

    • 개인 PC 보급으로 누구나 PC를 사용해 IPv4로 할당할 수 있는 한계점 진입, IPv6이 나옴

  • Port

    • IP 주소 뒤에 나오는 숫자

    • PC에 접속할 수 있는 통로(채널)

    • 사용 중인 포트는 중복할 수 없음

    • Jupyter Notebook은 8888

    • Port는 0 ~ 65535까지 존재

    • 그 중 0~1024는 통신을 위한 규약에 정해짐

    • 22 : SSH

    • 80 : HTTP

    • 443 : HTTPS

2. Fast API

아직 Flask와 Django에 비해 활용 비중이 적지만, 점차 떠오르는 프레임워크이다.

2.1. 특징

FastAPI vs Flask

  • 장점

    • Flask보다 간결한 Router 문법

    • Asynchronous(비동기) 지원

    • Built-in API Documentation(Swagger)

    • Pydantic을 이용한 Serialization 및 Validation

  • 아쉬운 점

    • 아직까지는 Flask의 유저가 더 많음

    • ORM 등 Database와 관련된 라이브러리가 적음

3. 환경설정

3.1. 기본 프로젝트 구조

  • 프로젝트의 코드가 들어갈 모듈 설정(app). 대안 : 프로젝트 이름, src 등

  • main.py는 간단하게 애플리케이션을 실행할 수 있는 Entrypoint 역할 (참고)

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

  • main.py 또는 app.py : FastAPI의 애플리케이션과 Router 설정

  • model.py는 ML model에 대한 클래스와 함수 정의

3.2. Poetry

  • Dependency Resolver로 복잡한 의존성들의 버전 충돌을 방지

  • Virtualenv를 생성해서 격리된 환경에서 빠르게 개발이 가능해짐

  • 기존 파이썬 패키지 관리 도구에서 지원하지 않는 Build, Publish가 가능

  • pyproject.toml을 기준으로 여러 툴들의 config를 명시적으로 관리

  • 새로 만든 프로젝트라면 poetry를 사용해보고, virtualenv 등과 비교하는 것을 추천

4. FastAPI 샘플 프로젝트

fastapi = "^0.68.1"
uvicorn = "^0.15.0"

위 두개의 패키지를 설치

from fastapi import FastAPI
import uvicorn

# FastAPI 객체 생성
app = FastAPI()

# "/" 로 접근하면 return 을 보여줌
@app.get("/")
def read_root():
    return {"Hello": "World"}

if __name__ == '__main__':
    uvicorn.run(app, host="0.0.0.0", port=8000)
python {file}.py

Swagger

  • {주소}/docs

  • {주소}/redoc

API 패킷정보를 확인하고 , 명세서없이 파라미터 확인이 가능하다.

PreviousPart 3: 더 완성화된 제품으로Next3.1.2 Fast API

Last updated 3 years ago

Was this helpful?

Poetry로 dependency 관리