<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>FastAPI on 얼쑤 · Team Edo</title><link>https://team-edo.github.io/tags/fastapi/</link><description>Recent content in FastAPI on 얼쑤 · Team Edo</description><generator>Hugo</generator><language>ko-kr</language><lastBuildDate>Tue, 03 Nov 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://team-edo.github.io/tags/fastapi/index.xml" rel="self" type="application/rss+xml"/><item><title>문서 주소 없이 FastAPI 계약 검증</title><link>https://team-edo.github.io/posts/2026/11/generate-private-openapi-contract/</link><pubDate>Tue, 03 Nov 2026 00:00:00 +0900</pubDate><guid>https://team-edo.github.io/posts/2026/11/generate-private-openapi-contract/</guid><description>&lt;p>백엔드가 호출하는 분석 API의 요청과 응답을 한곳에서 읽을 수 있게 만들고 싶었습니다. 분석 서버는 내부에서만 호출하는 구성이라 운영에 문서 조회 주소를 열 필요는 없었습니다. 또 이미 사용 중인 응답에는 상태마다 다른 필드와 JSON 이름이 있어서, 문서를 붙이는 작업이 기존 직렬화까지 바꾸면 호출자에 영향이 갈 수 있었습니다.&lt;/p>
&lt;h2 id="스키마-생성과-문서-조회-주소를-분리했다">스키마 생성과 공개 경로 분리&lt;/h2>
&lt;p>FastAPI의 &lt;code>docs_url&lt;/code>, &lt;code>redoc_url&lt;/code>, &lt;code>openapi_url&lt;/code> 설정은 꺼 둔 채, 앱 객체의 &lt;code>app.openapi()&lt;/code>에서 문서를 생성하도록 했습니다. 개발 환경에서 JSON을 파일로 저장해 문서를 읽을 수 있습니다. HTTP 테스트에는 문서 관련 경로 세 곳이 모두 404를 반환하는지도 추가했습니다. &lt;a href="https://fastapi.tiangolo.com/tutorial/metadata/#openapi-url">FastAPI의 문서 URL 설정&lt;/a>&lt;/p></description></item><item><title>분석 오류 응답과 로그에서 서명 URL 숨기기</title><link>https://team-edo.github.io/posts/2026/10/keep-signed-urls-out-of-analysis-errors/</link><pubDate>Wed, 28 Oct 2026 00:00:00 +0900</pubDate><guid>https://team-edo.github.io/posts/2026/10/keep-signed-urls-out-of-analysis-errors/</guid><description>&lt;p>얼쑤의 분석 서버는 요청에 담긴 서명 URL로 녹음을 내려받습니다. URL에 읽기 권한이 담겨 있어 유효 시간 안에는 주소만으로 파일을 요청할 수 있습니다. 분석 API를 구현할 때 이 주소가 어디에 남는지 점검했습니다. 제가 작성한 코드에서 URL을 로그에 쓰지 않아도 두 곳에 남을 수 있었습니다. 요청을 검증하는 프레임워크의 응답과 녹음을 내려받는 HTTP 라이브러리의 로그입니다.&lt;/p>
&lt;h2 id="bpm을-틀리게-보냈을-때는-문제가-드러나지-않았다">BPM을 누락해야 드러난 응답 노출&lt;/h2>
&lt;p>당시 FastAPI 기본 검증 응답은 HTTP 422와 함께 오류가 난 입력값을 &lt;code>input&lt;/code>에 넣었습니다. &lt;code>bpm&lt;/code>에 0을 보내면 오류의 입력값도 0이었습니다. 이 경우만 검사하면 기존 처리기를 써도 서명 URL이 응답에 없었습니다. &lt;code>bpm&lt;/code>을 아예 빼자 검증기가 그 필드가 있어야 할 요청 객체를 오류에 담았습니다. 같은 객체의 &lt;code>audioUrl&lt;/code>도 응답에 실릴 수 있었습니다.&lt;/p></description></item></channel></rss>