Notice
Recent Posts
Recent Comments
Link
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- few-shot
- 소스코드
- sk네트웍스ai캠프
- Docker
- zero-shot
- sk네트웍스family
- 회고록
- 중복인클루드
- #include
- ai캠프
- 주간회고
- 전처리
- 컴파일
- AWS
- sk네트웍스familyai캠프
- 12기
- Langchain
- 배포
- openai
- 어셈블
- C++
- 21주차
- Fine-tuning
- FastAPI
- sk네트웍스familyai캠프12기
- 임베딩
- 최종프로젝트
- one-shot
- Rag
- 헤더가드
Archives
- Today
- Total
ansir 님의 블로그
옵저버 패턴과 FAST API를 활용한 도서 관리 시스템 예제 본문
예제 내용: 도서 관리 API + Swagger UI로 문서 자동화 및 테스트 환경 구성
# GET / books: 조회
# POST / book: 등록
옵저버 패턴을 적용하여 새 도서가 추가되면 데이터 베이스 검색 모듈에 알림을 주도록 설계합니다.
초기 패키지 설정
pip install fastapi pydantic
Book 클래스 정의: pydantic
# pydantic 모델 정의
class Book(BaseModel):
id:int
title:str
class BookCreate(BaseModel):
title : str
# 샘플 데이터
books = [
Book(id=1, title="llm study"),
Book(id=2, title="python study"),
]
옵저버 패턴 구현: Observer와 Subject
# 옵저버 패턴 구현
class Subject:
def __init__(self) -> None:
self._observer = []
def add_observer(self, obs):
self._observer.append(obs)
def notify(self, message):
for obs in self._observer:
obs.update(message)
class Observer: # 추상화( 다양한 옵저버 클래스들을 커버 )
def update(self, message):
raise NotImplementedError
# 옵저버.. RAG 시스템의 검색 메소드
class SearchModule(Observer): # RAG
def update(self, message):
print(f"RAG 검색 모듈: {message}, 인덱스 업데이트")
# BookManager( Subject 상속 )
class BookManager(Subject):
# 책 추가
def add_book(self, book:BookCreate):
new_id = max(b.id for b in books) + 1
new_book = Book(id=new_id, title=book.title)
books.append(new_book)
self.notify(f"새로운 도서 추가: {new_book.title}")
return new_book
API의 엔드 포인트
book_manager = BookManager()
search_module = SearchModule()
book_manager.add_observer(search_module)
app = FastAPI()
# URL에 접속했을 때 바로 테스트 화면으로 전환
@app.get("/")
def intro():
return RedirectResponse(url="/docs")
# 호출
@app.get("/books", response_model = List[Book] ,tags=["Books"]) # 결과 반환 값 설정
async def get_books():
return books
@app.post("/book", response_model = Book, tags=["Books"]) # 결과 반환 값 설정
async def create_book(book:BookCreate):
return book_manager.add_book(book)
실행 결과
create_book 실행 결과
get_books 실행 결과
반응형
'컴퓨터 언어 > Python' 카테고리의 다른 글
FAST API 간단 실습: To-Do API 만들기 (3) | 2025.06.05 |
---|---|
Python 패키지 개발( +GitHub ) (0) | 2025.05.16 |
컴퓨팅 노트북( Computational Notebook ) (1) | 2025.03.07 |
Google Colab, 클라우드 기반 Jupyter Notebook (1) | 2025.03.05 |