K

Annotated 활용 제안

· 2년 전 · 328
### 정의
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를 사용하지 않은 현 상태가 가독성이 더 좋은 경우가 많은 것으로 보임.
- **일부 복잡한 유효성 검사 및 중복된 파라미터의 체크 등에는 적용이 필요할 것으로 판단됨.**
- 토큰
- 캡챠
- 일부 파라미터의 유효성검사
|
댓글을 작성하시려면 로그인이 필요합니다. 로그인

그누보드6 이슈

좋은 댓글과 좋아요는 제작자에게 큰힘이 됩니다.

+
제목 글쓴이 날짜 조회
sseiblog-nandsoft
2년 전 조회 210
sseiblog-nandsoft
2년 전 조회 324
2년 전 조회 328
2년 전 조회 259
2년 전 조회 225
2년 전 조회 309
2년 전 조회 261
2년 전 조회 235
2년 전 조회 263
2년 전 조회 288
2년 전 조회 281
2년 전 조회 290
2년 전 조회 275
2년 전 조회 265
2년 전 조회 240
2년 전 조회 292
2년 전 조회 260
2년 전 조회 230
2년 전 조회 279
2년 전 조회 329
🐛 버그신고