๐ Backend18 [FastAPI] Middleware ๋ฏธ๋ค์จ์ด (CORS, Logging) 1. ๋ฏธ๋ค์จ์ด๋?FastAPI์ ๋ฏธ๋ค์จ์ด๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ(Request)์ ์๋ต(Response) ์ฌ์ด์ ์คํ๋๋ ๊ฐ๋ก์ฑ๊ธฐ ํจ์์ฃผ๋ก ์ธ์ฆ, ๋ก๊น , ์ฑ๋ฅ ์ธก์ , ์๋ฌ ์ฒ๋ฆฌ, ๋ณด์ ๋ฑ ๊ณตํต ๊ธฐ๋ฅ์ ๊ตฌํํ๋๋ฐ ์ฌ์ฉ ๊ฐ๋ฅ๋น์ฆ๋์ค & ๋๋ฉ์ธ ๋ก์ง์ ๋ถ๋ฆฌํ ์ ์์ด, ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ ํฅ์ 2. FastAPI ์์import timefrom fastapi import FastAPI, Requestapp = FastAPI()@app.middleware("http")async def add_process_time_header(request: Request, call_next): start_time = time.perf_counter() # ์ค์ ๋ผ์ฐํฐ ํจ์ ํธ์ถ ์ response = await ca.. 2025. 4. 20. [FastAPI] SSE (Server-Sent Events) 1. Server-Sent EventsSSE(Server-Sent Events) ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ฐ๊ฒฐ์ ์ ์งํ ์ฑ, ์๋ฒ์์ ๋ฐ์ํ๋ ์ค์๊ฐ ์ด๋ฒคํธ๋ฅผ ์ง์์ ์ผ๋ก ์ ๋ฌ๋ฐ๋ ๋ฐฉ์๐ “์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ํ ๋ฒ ์ฐ๊ฒฐ๋ก ์ฌ๋ฌ ๋ฒ ์๋ต์ ๋ณด๋ผ ์ ์๋ HTTP ๊ธฐ๋ฐ ๊ธฐ์ ” 2. SSE ๊ตฌ์กฐํด๋ผ์ด์ธํธ๋ EventSource ๊ฐ์ฒด๋ฅผ ํตํด ์๋ฒ์ ์์ฒญ์ ๋ณด๋ ๋๋ค.์๋ฒ๋ text/event-stream ํ์ ์ผ๋ก ์๋ต์ ๋ณด๋ด๊ณ ์ฐ๊ฒฐ์ ์ ์งํ ์ฑ ์ฌ๋ฌ ๋ฉ์์ง๋ฅผ ์ ์กํฉ๋๋ค.ํด๋ผ์ด์ธํธ๋ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ๊ฐ ๋ฉ์์ง๋ฅผ ์ค์๊ฐ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.# ClientGET /stream HTTP/1.1Accept: text/event-stream # Responseevent: datadata: Hello, world!event: fin.. 2025. 4. 16. [FastAPI] SQLModel 1. SQLModel์ด๋?๊ธฐ์กด Python SQL ORM ๊ตฌํ์ฒด์ธ SQLAlchemy์ ๊ฒ์ฆ ํจํค์ง Pydantic์ ๊ฒฐํฉํ Python ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ๋ณด๋ค ๊ฐ๊ฒฐํ๊ณ ์ง๊ด์ ์ผ๋ก ์ํํ ์ ์๋ค.SQLAlchemy์ ORM ๊ธฐ๋ฅ์ ์ ์งํ๋ฉด์๋ Pydantic์ ๋ฐ์ดํฐ ๊ฒ์ฆ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ฒ์ด ํน์ง์ด๋ค. 2. SQLAlchemy vs SQLModelSQLAlchemy๋ ๋ ๊ฐ์ง ์ฃผ์ API ์คํ์ผ์ ์ ๊ณตํ๋ค.SQLAlchemy Core: ์ ์์ค SQL ํํ์ ์ฌ์ฉํ์ฌ SQL์ ์ง์ ๋ค๋ฃฐ ์ ์๋๋ก ์ค๊ณ๋จSQLAlchemy ORM: ๊ฐ์ฒด-๊ด๊ณ ๋งคํ(Object-Relational Mapping)์ ํตํด Python ํด๋์ค๋ก DB ๋ชจ๋ธ์ ๋ค๋ฃฐ ์ ์์SQLModel์ SQLAlchemy .. 2025. 3. 14. [FastAPI] Best Practices - Project Structure Project StructureFastAPI ํ๋ก์ ํธ ๊ตฌ์กฐ ์ค๊ณ ํ ๋ ์ฐธ๊ณ ํ๊ธฐ ์ข๋ค.Netflaix/Dipatch๋ฅผ ์ฐธ์กฐํ์ฌ ์์ ํ ์๋ฃ์ด๋ค.fastapi-projectโโโ alembic/โโโ app # ์๋ณธ์ src ์ด์ง๋ง ๋ณธ์ธ์ app ์ ํธํจ.โ โโโ authโ โ โโโ router.pyโ โ โโโ schemas.py # pydantic modelsโ โ โโโ models.py # db modelsโ โ โโโ dependencies.pyโ โ โโโ config.py # local configsโ โ โโโ constants.pyโ โ โโโ exceptions.pyโ โ โโโ service.pyโ โ โโโ ut.. 2025. 2. 14. [SQL] SELECT ๊ด๋ จ ํจ์ ์ง๊ณ ํจ์ (Aggregate Functions)AVG(): ํ๊ท ๊ฐ ๊ณ์ฐSUM(): ํฉ๊ณ ๊ตฌํ๊ธฐCOUNT(): ์ ์ฒด ํ ๊ฐ์COUNT(*): ๋ชจ๋ ํ์ ๊ฐ์COUNT(์ปฌ๋ผ๋ช ): NULL์ด ์๋ ๊ฐ์ ๊ฐ์MAX() / MIN(): ์ต๋๊ฐ๊ณผ ์ต์๊ฐGROUP_CONCAT(): ๋ฌธ์์ด ํฉ์น๊ธฐROUND() / CEIL() / FLOOR(): ๋ฐ์ฌ๋ฆผ, ์ฌ๋ฆผ, ๋ด๋ฆผ ๋๋ฒ์งธ ์ธ์๋ก ์ด๋ ์๋ฆฌ๊น์ง ํํ ์ ํจTRUNCATE(): ์ง์ ํ ์๋ฆฌ์๊น์ง ๋ฒ๋ฆผ์์ N๊ฐ ๋ฐ์ดํฐ ์ถ์ถ (LIMIT)LIMIT N: ๊ฒฐ๊ณผ์์ ์์ N๊ฐ๋ง ์ถ๋ ฅ ๋ ์ง ๋ค๋ฃจ๊ธฐ# ๋ ์ง ๋ฒ์ ์กฐํWHERE JOINED BETWEEN '2021-01-01' AND '2021-12-31'๋๋WHERE YEAR(JOINED) = 2021 # ๋ ์ง ํฌ๋งท ๋ณ๊ฒฝDATE_F.. 2025. 2. 5. [Security] ์คํ๋ง ์ํ๋ฆฌํฐ Spring Security์ธ์ฆ(Authentication), ๊ถํ ๋ถ์ฌ(Authorize) ๋ฐ ๋ณดํธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํ๋ ์์ํฌ 2024. 2. 27. ์ด์ 1 2 3 ๋ค์