Annotated 활용 제안
### 정의
Annotated 클래스는 파이썬 타입 힌트와 FastAPI의 의존성 주입 시스템을 세밀하게 제어하기 위한 도구입니다.
Annotated을 사용하면 더 많은 정보를 타입 힌트에 추가하고 FastAPI가 이 정보를 활용하도록 할 수 있습니다.
- FastAPI에서도 사용을 권장하고 있다.
- https://fastapi.tiangolo.com/release-notes/#0951
- https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#advantages-of-annotated
### Annotated 활용해야하는 이유
- FastAPI 공식사이트 및 블로그에서 참고한 장점들을 정리
**1. 기본값 선언이 더 직관적이다.**
- 이 부분은 솔직히 공감이 잘 안된다...
<pre><code># Before
kind: str = Query(default="recv"),
# After
kind: Annotated[str, Query()] = "recv",
</code></pre>
**2. 중복코드량 감소**
<pre><code># 데이터베이스 의존성 주입
DBSession = Annotated[Session, Depends(get_db)]
@router.post("/memo_form_update")
async def memo_form_update(
request: Request,
db: DBSession,
...
</code></pre>
**3. parmater 순서에 대한 제한이 없음**
- [Annotated를 왜 쓰는 것이 더 좋을까?](https://velog.io/@chappi/FastAPI%EB%A5%BC-%EB%B0%B0%EC%9B%8C%EB%B3%B4%EC%9E%90-5%EC%9D%BC%EC%B0%A8-Query-Path#annotated%EB%A5%BC-%EC%99%9C-%EC%93%B0%EB%8A%94-%EA%B2%83%EC%9D%B4-%EB%8D%94-%EC%A2%8B%EC%9D%84%EA%B9%8C)
- => 이부분도 잘 모르겠다.. 어쨌든 기본값 선언 시 '='를 써야한다.
**4. 의존성주입을 세부적으로 커스터마이징 가능**
- [Annotated 테스트 코드](https://github.com/gnuboard/gnu6/commit/ee8be26d2c5559c2fbf0f9c34318044cb4bb9fa9)
- 공통된 유효성검사 함수화 및 코드 분리 가능
**5. API 문서화**
- 그누보드6는 자동 문서화를 사용하지 않으니 상관없을듯..
### 결론
- **2, 4번의 활용방법이 적절할 것으로 판단됨.**
- Annotated를 사용하지 않은 현 상태가 가독성이 더 좋은 경우가 많은 것으로 보임.
- **일부 복잡한 유효성 검사 및 중복된 파라미터의 체크 등에는 적용이 필요할 것으로 판단됨.**
- 토큰
- 캡챠
- 일부 파라미터의 유효성검사
Annotated 클래스는 파이썬 타입 힌트와 FastAPI의 의존성 주입 시스템을 세밀하게 제어하기 위한 도구입니다.
Annotated을 사용하면 더 많은 정보를 타입 힌트에 추가하고 FastAPI가 이 정보를 활용하도록 할 수 있습니다.
- FastAPI에서도 사용을 권장하고 있다.
- https://fastapi.tiangolo.com/release-notes/#0951
- https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#advantages-of-annotated
### Annotated 활용해야하는 이유
- FastAPI 공식사이트 및 블로그에서 참고한 장점들을 정리
**1. 기본값 선언이 더 직관적이다.**
- 이 부분은 솔직히 공감이 잘 안된다...
<pre><code># Before
kind: str = Query(default="recv"),
# After
kind: Annotated[str, Query()] = "recv",
</code></pre>
**2. 중복코드량 감소**
<pre><code># 데이터베이스 의존성 주입
DBSession = Annotated[Session, Depends(get_db)]
@router.post("/memo_form_update")
async def memo_form_update(
request: Request,
db: DBSession,
...
</code></pre>
**3. parmater 순서에 대한 제한이 없음**
- [Annotated를 왜 쓰는 것이 더 좋을까?](https://velog.io/@chappi/FastAPI%EB%A5%BC-%EB%B0%B0%EC%9B%8C%EB%B3%B4%EC%9E%90-5%EC%9D%BC%EC%B0%A8-Query-Path#annotated%EB%A5%BC-%EC%99%9C-%EC%93%B0%EB%8A%94-%EA%B2%83%EC%9D%B4-%EB%8D%94-%EC%A2%8B%EC%9D%84%EA%B9%8C)
- => 이부분도 잘 모르겠다.. 어쨌든 기본값 선언 시 '='를 써야한다.
**4. 의존성주입을 세부적으로 커스터마이징 가능**
- [Annotated 테스트 코드](https://github.com/gnuboard/gnu6/commit/ee8be26d2c5559c2fbf0f9c34318044cb4bb9fa9)
- 공통된 유효성검사 함수화 및 코드 분리 가능
**5. API 문서화**
- 그누보드6는 자동 문서화를 사용하지 않으니 상관없을듯..
### 결론
- **2, 4번의 활용방법이 적절할 것으로 판단됨.**
- Annotated를 사용하지 않은 현 상태가 가독성이 더 좋은 경우가 많은 것으로 보임.
- **일부 복잡한 유효성 검사 및 중복된 파라미터의 체크 등에는 적용이 필요할 것으로 판단됨.**
- 토큰
- 캡챠
- 일부 파라미터의 유효성검사
|
댓글을 작성하시려면 로그인이 필요합니다.
로그인