기본적인 웹서비스 구조
유저 -> 클라이언트 -> 서버 <- 데이터베이스 , 서버 <- 개발자 로 구성이 되어있다.
Fast API
FastAPI는 현대적이고, 빠르며(고성능), 파이썬 표준 타입 힌트에 기초한 Python의 API를 빌드하기 위한 웹 프레임워크입니다.
-> GPT API를 사용하는것처럼 결과를 리스폰해줄 수 있게끔 가능함
pip install fastapi
pip install "uvicorn[standard]"
먼저 설치를 해준다.
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
데코레이터 read_root 를 사용하면 다른 코드들까지 수행한다. (데코레이터는 외곽에 다른 기능을 수행)
#
---------
app.get # Create
app.post # Read
app.put # Update
app.delete # Delete
---------
#
웹에는 Create, Read, Update, Delete CRUD 개념이 존재함
Path Parameter
from fastapi import FastAPI
app = FastAPI()
#path parameter
items = {
0: {"name": "kdb",
"price": 500},
1: {"name": "ronaldo",
"price": 1000},
2: {"name": "messi",
"price": 8000}
}
@app.get("/{item_id}")
def read_root(item_id: int):
return items[item_id]
주소 / 뒤에 0,1,2 가 들어갔을때 메시 호날두, 김덕배의 정보들이 나오게된다.
다음 코드는 key 를 적용해서 리턴값을 받아오는 걸 적용해보면..
주소/0/[key] = name,price 를 입력할때 값을 받아오는 것을 알 수 있다.
from fastapi import FastAPI
app = FastAPI()
#path parameter
items = {
0: {"name": "kdb",
"price": 500},
1: {"name": "ronaldo",
"price": 1000},
2: {"name": "messi",
"price": 8000}
}
@app.get("/{item_id}/{key}")
def read_root(item_id: int, key: str):
return items[item_id][key]
위처럼 get 을 통해서 자료를 가져오는 걸 적용해볼 수 있다.
Query Parameter
@app.get("/kdb-name-search")
def read_name_search(name: str):
for item_id, item in items.items():
if item["name"] == name:
return item
return {"error": "Not Found"}
반복문을 돌면서, item_id, item 내부의 item 을 가져오는 코드
http://127.0.0.1:8000/kdb-name-search?name=ronaldo
-> 위처럼 ? 쿼리를 적어주어야한다. name=이 ronaldo 인 item 을 가져온다.
Post
데이터를 가져올때 규약을 정해주는 라이브러리
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
# body 영역에서 정보를 제공할 때 사용
@app.post("/items/{item_id}")
def create_item(item_id: int, item: Item):
items[item_id] = item.dict()
return{"success": "Item created successfully"}
/docs 를 치면 정보들이 다 나와있다.
Put
docs에서 가격을 입력하면 바뀌는 코드
class ItemForUpdate(BaseModel):
name: Optional[str]
price: Optional[float]
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
if item_id not in items:
return{"error": "Item does not exist"}
if item.name:
items[item_id]["name"] = item.name
if item.price:
items[item_id]["price"] = item.price
Delete
item안의 item_id 를 POP(제거) 하는 코드
@app.delete("/items/{item_id}")
def delete_item(item_id: int):
items.pop(item_id)
return{"success": "Item deleted successfully"}
이제 하나의 LLM 서비스를 만들기 위해 서버 인스턴스와, 웹서버와의 유기작용을 위한 코드를 짜보면 될 듯 하다.
'Study notes' 카테고리의 다른 글
Docker Container 이해하기 - (2) (0) | 2024.07.11 |
---|---|
Docker Container 이해하기 (0) | 2024.07.11 |
Docker에 대하여 - (2) (0) | 2024.06.13 |
Docker에 대하여 - (1) (0) | 2024.06.13 |
Vector DB의 Querying 검색방법(keyword, semantic, hybrid) (3) | 2024.05.08 |