우선 To do list 의 API 를 만들었으니, 제대로 구축하기 위해 middle ware 와 main 을 구현해보기로 하였다.
FastAPI 의 를 application 을 진입하기위해 할일목록과 채팅기능 모두를 위한 인프라를 제공해야하기에,
서버구성, websocke연결, 라우터 통합(chat 기능과 Todolist 기능) 등등 어떻것이 필요한지 나열해 보았다.
1. 기본 구성
from fastapi import FastAPI, WebSocket, WebSocketDisconnect
from app.routers import todos, chat
from app.redis import get_redis_client
from fastapi.middleware.cors import CORSMiddleware
그래서 주요 구성으로썬 websoket, CORS, Redis 와 FastAPI 를 사용할것이기에, 일단 CORS 구성을 미들웨어 세팅으로써 해보았다.
2. CORS 구성
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
CORS, 즉 교차 출처 요청처리로써 , 아무래도 일단 모든 출처 허용을 했고, 자격증명 처리 그리고 HTTP 메서드 및 헤더 제어를 나중에 커스터마이즈 할수 있게 만들었고
그리고
연결 설정
connected_clients = set()
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
connected_clients.add(websocket)
구현
async def websocket_endpoint(websocket: WebSocket):
while True:
# 데이터 처리
await asyncio.sleep(1)
이렇게 websocket 의 엔드포인트를 설정해 간단하게 연결시켜놨다. 이로써 실시간 연결과 비동기 통신 설정을 하였다.
그리고 중요한 Data 동기화!. 아무래도 이번엔 Redis 를 사용하기에 dictionary, 형태로 실시간 json 형신을 변환시켜 만들게씀 설정하였다. 아무래도 dictionary 는 json이 편할꺼 같아 만들었다. 그래서 Redis 를 넣어 만들었다. 아무래도 내가 실시간으로 redis log를 하고 싶어 실시간 동기화를 사용하여 일괄적으로 데이터가 조회 될수 있게 연결을 해보았다.
마지막으로 오류 관리!
아무래도 연결시 오류와 데이터 전송 오류등이 필요한 상황에서 만일 오류가 발생시 websocket의 연결이 끊어지게 끔 설정을 하였다.
마우래도 주 메인은 Redis가 시스템적으로 어떻게 구현되는거에 포커싱하다보 기존에 있는 최소한의 구현만 해서 크게 어려움은 없엇다.
except WebSocketDisconnect:
connected_clients.remove(websocket)
print("Client disconnected")
이후 라우터 통합등을 실시 했는데 우선 오늘은 여기까지만 정리하려고 한다.
'[Redis]' 카테고리의 다른 글
[Redis] Chat.py 정리 (1) | 2024.12.24 |
---|---|
[Redis] Redis 기반 할일 목록 과 채팅 기능 만들어보기! (4) | 2024.12.20 |
[Redis] Redis 간단정리 (2) | 2024.12.19 |