Inflearn brand logo image
Inflearn brand logo image
BEST

FastAPI ์™„๋ฒฝ ๊ฐ€์ด๋“œ

๋ณธ ๊ฐ•์˜๋Š” FastAPI์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ๊ณผ ํ•จ๊ป˜, ์›น์„œ๋น„์Šค ๊ฐœ๋ฐœ์˜ ์ „ ๊ณผ์ •์„ ์ตํž ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ณธ ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ๋ถ„์„ ํ˜„์žฅ์—์„œ ํ•„์š”๋กœ ํ•˜๋Š” FastAPI ์ „๋ฌธ ๊ฐœ๋ฐœ์ž๋กœ ๋ฐœ๋‹์›€ ์‹œ์ผœ ๋“œ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ค‘๊ธ‰์ž๋ฅผ ์œ„ํ•ด ์ค€๋น„ํ•œ
[๋ฐฑ์—”๋“œ, ์›น ๊ฐœ๋ฐœ] ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๊ฑธ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์–ด์š”

  • FastAPI์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ ์ตํžˆ๊ธฐ

  • Pydantic Model ๋‹ค๋ฃจ๊ธฐ

  • SQLAlchemy ๊ธฐ๋ฐ˜์—์„œ Database ๋‹ค๋ฃจ๊ธฐ ๋ฐ ์•ˆ์ •์ ์ธ DB Handling ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ

  • SQLAlchemy์—์„œ ๋น„๋™๊ธฐ(Asynchronous) DB Handling

  • Jinja2 ํ…œํ”Œ๋ฆฟ ์—”์ง„ ๋‹ค๋ฃจ๊ธฐ

  • FastAPI์—์„œ File Upload

  • FastAPI์—์„œ MVC ๊ธฐ๋ฐ˜ ๋ชจ๋“ˆ ๊ตฌํ˜„ํ•˜๊ธฐ

  • ๋‹ค์–‘ํ•œ FastAPI์˜ Exception๊ณผ Exception Handling ๋ฐฉ๋ฒ•

  • Middleware ๋‹ค๋ฃจ๊ธฐ

  • FastAPI์˜ Authentication ๊ณผ Login

  • Cookie์™€ SessionMiddleware ๊ธฐ๋ฐ˜์˜ Signed Cookie

  • Redis๋ฅผ ํ™œ์šฉํ•œ Session ๋‹ค๋ฃจ๊ธฐ

๋” ๋น ๋ฅด๊ณ  ํŽธ๋ฆฌํ•œ
๋ชจ๋˜ ์›น/API ๊ฐœ๋ฐœ์„ ์›ํ•œ๋‹ค๋ฉด?

FastAPI๋Š” ๋‹จ๊ธฐ๊ฐ„์— ๊ธ‰๊ฒฉํžˆ ์„ฑ์žฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ์˜ ๊ฐ•๋ ฅํ•œ ์ง€์ง€๋ฅผ ํ†ตํ•ด ๊ทธ ์˜์—ญ์„ ๋น ๋ฅด๊ฒŒ ํ™•์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


์™œ FastAPI ์ธ๊ฐ€์š”?

1. ํƒ์›”ํ•œ ์„ฑ๋Šฅ

ASGI ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋Š” FastAPI๋Š” ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ, ํŒŒ์ด์ฌ ์›น ํ”„๋ ˆ์ž„์›Œํฌ ์ค‘์—์„œ๋„ ๋‹จ์—ฐ ์ตœ์ƒ์˜ ์†๋„๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋น ๋ฅธ ์‘๋‹ต ์†๋„๋Š” ์˜ค๋Š˜๋‚  ์ˆ˜๋งŽ์€ ์‚ฌ์šฉ์ž๋ฅผ ๋™์‹œ์— ์ˆ˜์šฉํ•ด์•ผ ํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•„์ˆ˜์ ์ธ ์š”์†Œ์ž…๋‹ˆ๋‹ค.

2. ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์ง๊ด€์ ์ธ ์„ค๊ณ„

FastAPI๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋”์šฑ ํšจ์œจ์ ์ด๊ณ  ์ƒ์‚ฐ์ ์œผ๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ง๊ด€์ ์ธ ๋‚ด๋ถ€ API, Dependcy Injection ๊ธฐ๋Šฅ, ์ผ์›ํ™”๋œ ํƒ€์ž… ํžŒํŠธ(type hint), ๊ทธ๋ฆฌ๊ณ  ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” OpenAPI ๋ฌธ์„œ๋Š” ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ์˜ค๋ฅ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ , ํ”„๋กœ์ ํŠธ์˜ ์†๋„๋ฅผ ๋น„์•ฝ์ ์œผ๋กœ ๋†’์—ฌ์ค๋‹ˆ๋‹ค.

3. ํŽธ๋ฆฌํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์™€ ๊ฒ€์ฆ

FastAPI๋Š” Pydantic๊ณผ ์™„๋ฒฝํ•˜๊ฒŒ ํ†ตํ•ฉ๋˜์–ด, ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ๊ณผ ์ง๋ ฌํ™”, ํŒŒ์‹ฑ ๊ณผ์ •์„ ์•ˆ์ „ํ•˜๊ณ  ์ •๋ฐ€ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๋”์šฑ ํšจ์œจ์ ์ด๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋„ ์†์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์˜ ๋ฌดํ•œํ•œ ๊ฐ€๋Šฅ์„ฑ

FastAPI๋Š” ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ†ตํ•ด ๋™์‹œ์— ๋‹ค์ˆ˜์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋Šฅ๋ ฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์™ธ๋ถ€ API์™€ ๊ฐ™์€ I/O ๋ฐ”์šด๋“œ ์ž‘์—…์—์„œ ๋น›์„ ๋ฐœํ•˜๋ฉฐ, ๋น ๋ฅด๊ณ  ๋ฐ˜์‘์„ฑ์ด ๋›ฐ์–ด๋‚œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

FastAPI ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค - ๋ณธ ๊ฐ•์˜์™€ ํ•จ๊ป˜ ๋ผ๋ฉด,

โœ… FastAPI์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ๋ถ€ํ„ฐ ๊ณ ๊ธ‰ ๊ฐœ๋…๊นŒ์ง€ ์ฒด๊ณ„์ ์ธ ํ•™์Šต

FastAPI์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ํ™•์‹คํ•˜๊ฒŒ ์ตํžˆ๊ณ , ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ๋ฏธ๋“ค์›จ์–ด ์ฒ˜๋ฆฌ, ๊ณ ๊ธ‰ ์ธ์ฆ ๊ธฐ๋ฒ•๊นŒ์ง€ ๋‹ค๋ฃจ๋ฉฐ, ์ดˆ๋ณด์ž์™€ ๊ฒฝํ—˜์ž ๋ชจ๋‘์—๊ฒŒ ์ ํ•ฉํ•œ ๋‹จ๊ณ„๋ณ„ ํ•™์Šต์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


โœ… ํŠนํžˆ Blog ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ

๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ์ ์ง„์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ณ ๋„ํ™” ํ•˜๋ฉฐ, FastAPI์™€ ๊ด€๋ จ๋œ ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ๋“ค์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ตํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


โœ… ๋‹ค์–‘ํ•œ ์‹ค์Šต ์˜ˆ์ œ๋ฅผ ํ†ตํ•œ ํ•™์Šต

๊ฐ•์˜๋Š” ์ด๋ก  25%, ์‹ค์Šต 75%๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ FastAPI์˜ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ „๋ฌธ๊ฐ€ ์ˆ˜์ค€์˜ ๊ธฐ๋Šฅ๊นŒ์ง€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ตํž ์ˆ˜ ์žˆ๋„๋ก ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์‹ค์Šต ์ˆ˜์—…์œผ๋กœ ์ปค๋ฆฌํ˜๋Ÿผ์„ ๊ฐ€๋“ ์ฑ„์› ์Šต๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ์‹ค์Šต ์ˆ˜์—…์€ ๋ผ์ด๋ธŒ ์ฝ”๋”ฉ์œผ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. ๋‹จ๊ณ„๋ณ„๋กœ ์ฐจ๊ทผ์ฐจ๊ทผ ์˜์ƒ์„ ๋”ฐ๋ผํ•ด ๋ณด์‹œ๋ฉด ์ž์‹ ์žˆ๊ฒŒ FastAPI๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€์— ๋„๋‹ฌํ•œ ์Šค์Šค๋กœ๋ฅผ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

FastAPI ์ž์ฒด ๋งŒ์„ ๋‹ค๋ฃจ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
FastAPI๋ฅผ ํ™œ์šฉํ•œ ์›น ์„œ๋น„์Šค ๊ฐœ๋ฐœ์˜ ์ „ ๊ณผ์ •์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

1. Enterprise ๋ ˆ๋ฒจ์—์„œ ์‚ฌ์šฉ๋˜๋Š” Database ์ฝ”๋”ฉ ํ…Œํฌ๋‹‰

Database ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๋Š” ์•ˆ์ •์ ์ธ DB์˜ ์ž์› ๋ณดํ˜ธ๊ฐ€ ํ•„์ˆ˜ ์š”์†Œ์ž…๋‹ˆ๋‹ค. Connection Pooling, Connection, Cursor๋“ฑ์˜ ๋™์ž‘ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๊ทธ๋ฆฌ๊ณ  ์„ฑ๋Šฅ๊ณผ ์•ˆ์ •์ ์ธ Database ํ™œ์šฉ์„ ์œ„ํ•ด ์–ด๋–ป๊ฒŒ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ํ•ต์‹ฌ ์š”์†Œ๋“ค์„ ์ž์„ธํžˆ ์„ค๋ช… ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋˜ํ•œ SQLAlchemy๋ฅผ ํ™œ์šฉํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐ์ž‘๊ณผ ๋น„๋™๊ธฐ(Asynchronous) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฒ˜๋ฆฌ ๊ธฐ๋ฒ•์„ ์‹ฌ๋„ ์žˆ๊ฒŒ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.

2. ์‹ค์Šต ์ค‘์‹ฌ์˜ Blog Application ํ”„๋กœ์ ํŠธ ๊ธฐ๋ฐ˜ ํ•™์Šต

๊ฐ•์˜๋Š” ๋ธ”๋กœ๊ทธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ง์ ‘ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ์ ์ง„์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ณ ๋„ํ™” ํ•˜๋ฉฐ, FastAPI์™€ ๊ด€๋ จ๋œ ๋‹ค์–‘ํ•œ ์Šคํ‚ฌ์„ ์‹ค์Šต์„ ํ†ตํ•ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ตํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. Pydantic ์ดํ•ด๋ฅผ ์œ„ํ•œ ์ƒ์„ธํ•œ ์„ค๋ช…๊ณผ ์‹ค์Šต

FastAPI๋ฅผ ์ž˜ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด์„œ๋Š” Pydantic์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ํ•„์ˆ˜ ์ž…๋‹ˆ๋‹ค. ๋ณธ ๊ฐ•์˜๋Š” Pydantic ์ž์ฒด์— ์„ค๋ช…๊ณผ ์‹ค์Šต ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ FastAPI์— Pydantic์„ ์ ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์‚ฌํ•ญ๊ณผ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ๋“ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

4. Jinja2 ํ…œํ”Œ๋ฆฟ ์—”์ง„์„ ํ†ตํ•œ ๋™์  ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•

FastAPI์—์„œ Jinja2 ํ…œํ”Œ๋ฆฟ ์—”์ง„์„ ํ™œ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•˜๊ณ , ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ๋ฅผ ๋งค๋„๋Ÿฝ๊ฒŒ ํ†ตํ•ฉํ•˜๋Š” ๊ธฐ์ˆ ์„ ์Šต๋“ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5. ๊ฐ•๋ ฅํ•œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ์˜ˆ์™ธ ๊ด€๋ฆฌ ๊ธฐ๋ฒ•

๋‹ค์–‘ํ•œ ์˜ˆ์™ธ ์ƒํ™ฉ์— ๋Œ€๋น„ํ•ด FastAPI์—์„œ ์ œ๊ณตํ•˜๋Š” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ํ•™์Šตํ•˜๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›๋‹ˆ๋‹ค. ๋˜ํ•œ, ๊ณตํ†ต์ ์ธ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ํŒจํ„ด์„ ์ตํ˜€ ์ฝ”๋“œ์˜ ์œ ์ง€ ๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ ์‹œํ‚ต๋‹ˆ๋‹ค.

6. ๋ฏธ๋“ค์›จ์–ด ๋‹ค๋ฃจ๊ธฐ

FastAPI์—์„œ ๊ธฐ๋ณธ ์ œ๊ณตํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ด์˜ ์ ์šฉ๊ณผ ๋”๋ถˆ์–ด Custom ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์ง์ ‘ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ๋ฐฐ์šฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. Custom ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๋ฉด์„œ ๋ฏธ๋“ค์›จ์–ด ๋‚ด๋ถ€ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ์ดํ•ด ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ FastAPI์˜ ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๋Šฅ๋ ฅ์„ ๊ฐ–์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

7. ๊ณ ๊ธ‰ ์ธ์ฆ ๋ฐ ์„ธ์…˜ ๊ด€๋ฆฌ: ์„œ๋ช…๋œ ์ฟ ํ‚ค์™€ Redis ํ™œ์šฉ

์•ˆ์ „ํ•œ ์ธ์ฆ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•˜๊ณ , Redis๋ฅผ ํ™œ์šฉํ•œ ์„ธ์…˜ ๊ด€๋ฆฌ ๋ฐ ์„œ๋ช…๋œ ์ฟ ํ‚ค์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์„ ํ•™์Šตํ•˜์—ฌ, ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์•ˆ์ •์ ์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

๋ณธ ๊ฐ•์˜๋Š” ORM์„ ๋‹ค๋ฃจ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ณธ ๊ฐ•์˜๋Š” Database CRUD์— ๋Œ€ํ•ด ๋งŽ์€ ์‹ค์Šต ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ์ง€๋งŒ, ORM(Object-Relational Mapping)์„ ๋‹ค๋ฃจ์ง€ ์•Š์œผ๋ฉฐ, ์˜ค์ง SQL์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ CRUD๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ•์˜ ์„ ํƒ ์‹œ ์ด์  ์ฐธ๊ณ  ๋ถ€ํƒ ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ˆ˜๊ฐ• ์ „ ์ฐธ๊ณ  ์‚ฌํ•ญ

์‹ค์Šต ํ™˜๊ฒฝ ๐Ÿ’พ

์‹ค์Šต ํ™˜๊ฒฝ

  • ์šด์˜ ์ฒด์ œ(OS): ์‹ค์Šต์€ Windows ์šด์˜์—์„œ ์ง„ํ–‰ํ•˜์ง€๋งŒ, Mac์—์„œ๋„ ๋ฌธ์ œ ์—†์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. VSCode, FastAPI, MySQL, Redis๊ฐ€ ์„ค์น˜ ๋  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์ด๋ฉด ๋ฉ๋‹ˆ๋‹ค.


  • PC ์‚ฌ์–‘: ์ธํ„ฐ๋„ท ์ ‘์†์ด ๊ฐ€๋Šฅํ•œ ๊ธฐ๋ณธ ์‚ฌ์–‘์˜ PC

ํ•™์Šต ์ž๋ฃŒ

  • ๊ฐ•์˜ ์ž๋ฃŒ๋Š” ๊ฐ•์˜ ๋‚ด์—์„œ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์œผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์‹ค์Šต ์ž๋ฃŒ๋Š” https://github.com/chulminkw/fastapi_pguide ์—์„œ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์œผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์Šต ์ฝ”๋“œ๋ฅผ ๋ณด์‹œ๋ฉด ๊ฐ•์˜ ์ˆ˜๊ฐ•์— ํ•„์š”ํ•œ ํŒŒ์ด์ฌ ์ˆ˜์ค€์„ ๋ฏธ๋ฆฌ ๊ฐ€๋Š ํ•ด ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ ์ˆ˜ ์ง€์‹

  • FastAPI๋ฅผ ์ด์šฉํ•œ ์›น ๊ฐœ๋ฐœ์˜ ์ „ ๊ณผ์ •์„ ๋‹ค๋ฃจ๋ฏ€๋กœ ํŒŒ์ด์ฌ์€ ์ดˆ์ค‘๊ธ‰ ์ด์ƒ์˜ ๊ฒฝํ—˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ์‹ค์Šต์˜ ๋งŽ์€ ๋ถ€๋ถ„์ด RDBMS CRUD๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์ง€๋งŒ, ๊ธฐ๋ณธ SQL ์—ญ๋Ÿ‰๋งŒ ์žˆ์œผ์…”๋„ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.


  • UI๋Š” Bootstrap์„ ์ด์šฉํ•˜์ง€๋งŒ, ์‹ค์Šต ์ดํ•ด๋Š” HTML ๊ธฐ๋ณธ ์ •๋„๋งŒ ์•Œ๊ณ  ๊ณ„์…”๋„ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜
์ถ”์ฒœ๋“œ๋ ค์š”!

ํ•™์Šต ๋Œ€์ƒ์€
๋ˆ„๊ตฌ์ผ๊นŒ์š”?

  • FastAPI๋ฅผ ๋ฐฐ์šฐ๊ณ ์ž ํ•˜๋Š” ๋ชจ๋“  ๋ถ„

  • ๋‹จ์ˆœ FastAPI ๊ธฐ๋Šฅ์„ ๋„˜์–ด์„œ ํŒŒ์ด์ฌ ๊ธฐ๋ฐ˜์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌํ˜„์„ ์ฒด๊ณ„์ ์œผ๋กœ ๋ฐฐ์šฐ์‹œ๊ธธ ์›ํ•˜๋Š” ๋ถ„

  • ๋น„๋™๊ธฐ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ™œ์šฉ ๋“ฑ์„ ํ†ตํ•ด ๊ธฐ์กด ์›น/API์˜ ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์›ํ•˜์‹œ๋Š” ๋ถ„

  • ๊ธฐ์กด Java, Node.js ๊ธฐ๋ฐ˜์˜ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž์—์„œ ํŒŒ์ด์ฌ ๊ธฐ๋ฐ˜ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž ์ „ํ™˜์ด ํ•„์š”ํ•˜์‹  ๋ถ„

  • ๊ฐ•๋ ฅํ•œ ์„ฑ๋Šฅ๊ณผ ๊ฐ„๊ฒฐํ•œ ํŽธ์˜ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ๋ชจ๋˜ ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ฐพ๊ณ  ๊ณ„์‹œ๋Š” ๋ถ„

  • (๋ณธ ๊ฐ•์˜์—์„œ๋Š” ๋‹ค๋ฃจ์ง€ ์•Š์ง€๋งŒ)๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์˜ ์„œ๋น™์„ ์œ„ํ•œ ๋น„๋™๊ธฐ API ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ฐพ๊ณ  ๊ณ„์‹  ๋ถ„

์„ ์ˆ˜ ์ง€์‹,
ํ•„์š”ํ• ๊นŒ์š”?

  • ์ค‘๊ธ‰ ์ˆ˜์ค€์˜ ํŒŒ์ด์ฌ ํ™œ์šฉ ๋Šฅ๋ ฅ

  • SQL ๊ธฐ์ดˆ ํ™œ์šฉ ๋Šฅ๋ ฅ

  • HTML ๊ธฐ์ดˆ

์•ˆ๋…•ํ•˜์„ธ์š”
๊ถŒ ์ฒ ๋ฏผ์ž…๋‹ˆ๋‹ค.

25,200

๋ช…

์ˆ˜๊ฐ•์ƒ

1,198

๊ฐœ

์ˆ˜๊ฐ•ํ‰

3,924

๊ฐœ

๋‹ต๋ณ€

4.9

์ 

๊ฐ•์˜ ํ‰์ 

13

๊ฐœ

๊ฐ•์˜

(์ „) ์—”์ฝ”์•„ ์ปจ์„คํŒ…

(์ „) ํ•œ๊ตญ ์˜ค๋ผํด

AI ํ”„๋ฆฌ๋žœ์„œ ์ปจ์„คํ„ดํŠธ

ํŒŒ์ด์ฌ ๋จธ์‹ ๋Ÿฌ๋‹ ์™„๋ฒฝ ๊ฐ€์ด๋“œ ์ €์ž

์ปค๋ฆฌํ˜๋Ÿผ

์ „์ฒด

164๊ฐœ โˆ™ (25์‹œ๊ฐ„ 8๋ถ„)

ํ•ด๋‹น ๊ฐ•์˜์—์„œ ์ œ๊ณต:

์ˆ˜์—…์ž๋ฃŒ
๊ฐ•์˜ ๊ฒŒ์‹œ์ผ: 
๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ์ผ: 

์ˆ˜๊ฐ•ํ‰

์ „์ฒด

30๊ฐœ

4.9

30๊ฐœ์˜ ์ˆ˜๊ฐ•ํ‰

  • leejken530๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    leejken530

    ์ˆ˜๊ฐ•ํ‰ 13

    โˆ™

    ํ‰๊ท  ํ‰์  4.2

    5

    27% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    ์žฌ๋ฐŒ๊ณ  ์งˆ๋ฌธ๋„ ๊ธˆ๋ฐฉ ๋‹ต๋ณ€ํ•ด์ฃผ์…”์„œ ์ข‹์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฐ•์˜๋„ ๋‹ค ๋“ค์–ด๋ณผ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

    • ์•ˆ์ฐฝ์‹ ๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
      ์•ˆ์ฐฝ์‹ 

      ์ˆ˜๊ฐ•ํ‰ 2

      โˆ™

      ํ‰๊ท  ํ‰์  5.0

      5

      100% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

      ๋‚ด์šฉ๋„ ์ถฉ์‹คํ•˜๊ณ  ์ œ๊ฒŒ ๋”ฑ ๋งž๋Š” ๊ฐ•์˜์˜€์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ „๋ถ€ RAW SQL๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด๋ผ์„œ ORM์€ ๋‹ค๋ฃจ์ง€ ์•Š์•„์„œ ๋” ์ข‹์•˜์Šต๋‹ˆ๋‹ค. ๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉด์„œ ์ œ๊ฐ€ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•  ์—”๋“œํฌ์ธํŠธ ํ•˜๋‚˜ํ•˜๋‚˜ ๋งŒ๋“ค๋ฉด์„œ ์ง„ํ–‰ํ•˜๋А๋ผ ์‹œ๊ฐ„์ด ๊ฝค ๊ฑธ๋ ธ๋„ค์š”. ๊ฐ•์‚ฌ๋‹˜ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ scoop ๊ฐ™์€ ์œˆ๋„์šฐ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ๋„๊ตฌ ์“ฐ์‹œ๋Š” ๋ถ„๋“ค์€ redis 7.4.1 ์ตœ์‹ ๋ฒ„์ „์ด ํŒจํ‚ค์ง• ๋˜์–ด์„œ ๋ณต์žกํ•œ WSL ์…‹ํŒ…์—†์ด ํ•œ ์ค„ ์„ค์น˜๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. 3์ ๋Œ€ ์˜ˆ์ „๋ฒ„์ „ ์„ค์น˜ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. https://github.com/redis-windows/redis-windows ๊ฐ•์˜ ๋“ฃ๋Š” ๋ถ„๋“ค๊ป˜ ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

      • ๊ถŒ ์ฒ ๋ฏผ
        ์ง€์‹๊ณต์œ ์ž

        ์˜ค, ์žฅ๋ฌธ์˜ ์ˆ˜๊ฐ•ํ‰ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. Windows Redis ๊ด€๋ จํ•ด์„œ ์ข‹์€ ์ •๋ณด๋„ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

    • ์ž„์ฐฌ๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
      ์ž„์ฐฌ

      ์ˆ˜๊ฐ•ํ‰ 14

      โˆ™

      ํ‰๊ท  ํ‰์  4.9

      ์ˆ˜์ •๋จ

      5

      87% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

      Kafka ๊ฐ•์˜๋ฅผ ๋งค์šฐ ์œ ์ตํ•˜๊ฒŒ ์ˆ˜๊ฐ•ํ•˜์—ฌ ๊ณ ๋ฏผ๋„ ์—†์ด ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €์˜ ์„ ํƒ์€ ํ‹€๋ฆฌ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Fast API๋ผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋งŒ ์ง‘์ค‘ํ•˜์ง€ ์•Š๊ณ  ์ค‘๊ฐ„์ค‘๊ฐ„ ์›น ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ ๊ฐœ๋… ๋ฐ ์š”์†Œ๋“ค์„ ์ฒจ๊ฐ€ํ•˜์—ฌ ์ „๋ฐ˜์ ์ธ ์›น์— ๋Œ€ํ•œ ์ดํ•ด๋„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ˜„ ์‹œ์ ์—์„œ๋„ Django๊ฐ€ ๋” ํ™œ์„ฑํ™”๋œ ์ƒํƒœ์ด์ง€๋งŒ, ๋ฏธ๋ž˜๋ฅผ ์œ„ํ•œ ์„ ํƒ์œผ๋กœ ํƒ์›”ํ–ˆ์œผ๋ฉฐ ์•ž์œผ๋กœ ์„ ์ƒ๋‹˜์˜ ์ง„๊ฐ€์ธ ๋จธ์‹ ๋Ÿฌ๋‹ - ๋”ฅ๋Ÿฌ๋‹ ๊ฐ•์˜๊ฐ€ ๋‚˜์˜ค๋ฉด ํญ๋ฐœ์ ์ธ ์‹œ๋„ˆ์ง€๊ฐ€ ๋‚˜์˜ฌ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋‹ค๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

      • tiaz.dev๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
        tiaz.dev

        ์ˆ˜๊ฐ•ํ‰ 5

        โˆ™

        ํ‰๊ท  ํ‰์  5.0

        5

        21% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

        ๋น ๋ฅด๊ฒŒ ๋งŽ์€ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์Šต๋‹ˆ๋‹ค. FastAPI๋ฅผ ์—ฌ๊ธฐ์ €๊ธฐ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ ๊ณต๋ถ€ํ•˜๊ณ  ์ฑ…๋„ ๋ดค์ง€๋งŒ, ๊ฐ€์žฅ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์ œ๋Œ€๋กœ ๋ฐฐ์šธ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ์ฝ”๋”ฉ์ด ๋งŽ๋‹ค๊ณ  ์กฐ๊ธˆ ๊ฑฑ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž์นซ '์ง€๋ฃจํ•  ์ˆ˜๋„ ์žˆ์ง€ ์•Š์„๊นŒ?' ํ–ˆ์ง€๋งŒ, ์ค€๋น„ํ•ด๋‘์‹  ๋กœ์ง์„ ๋น ๋ฅด๊ฒŒ ๋‹ค์‹œ ์ฝ”๋”ฉํ•˜๋ฉด์„œ ์„ค๋ช… ํ•ด์ฃผ์‹œ๋‹ˆ ๋” ์ดํ•ดํ•˜๊ธฐ ์ข‹์•˜์Šต๋‹ˆ๋‹ค. ์ด์ „ ๋ฆฌ๋ทฐ์—์„œ ๋งˆ์ดํฌ๊ฐ€ ์•ฝ๊ฐ„ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์…จ๋Š”๋ฐ, ๊ฐœ์„ ๋˜์–ด ํฌ๊ฒŒ ๋ถˆํŽธํ•˜์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค. ORM์ด ๋น ์ง„ ๊ฒƒ์€ ์กฐ๊ธˆ ์•„์‰ฝ๊ธฐ๋Š” ํ•ฉ๋‹ˆ๋‹ค. ORM์— ๋Œ€ํ•ด์„œ ์–ด๋–ค ์ƒ๊ฐ์ด์‹ ์ง€ ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€์ง€ ๊ผญ ๋“ค์–ด๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ฐฑ์—”๋“œ ์‹ฌํ™” ๊ฐ•์˜๋„ ๊ผญ ๋‚˜์™”์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค!

        • ๊ถŒ ์ฒ ๋ฏผ
          ์ง€์‹๊ณต์œ ์ž

          ์˜ค, ํ›Œ๋ฅญํ•œ ์ˆ˜๊ฐ•ํ‰ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋”์šฑ์ด ์‹œ๊ฐ„์„ ๋‚ด์ฃผ์…”์„œ, ์ด๋ ‡๊ฒŒ ์žฅ๋ฌธ์˜ ์ˆ˜๊ฐ•ํ‰์„ ์ ์–ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ORM์€ ํ˜ธ๋ถˆํ˜ธ๊ฐ€ ๊ทน๋‹จ์œผ๋กœ ๊ฐˆ๋ ค์„œ, ์ œ ๊ฐœ์ธ์ ์ธ ์˜๊ฒฌ์ด ์กฐ์‹ฌ์Šค๋Ÿฝ๋‹ˆ๋‹ค. ๊ฐ•์˜์—์„œ๋„ ์งง๊ฒŒ ์–ธ๊ธ‰๋“œ๋ฆฌ์ง€๋งŒ, ์–ด๋А์ •๋„ DB ๊ฒฝํ—˜ ๊ฒฝ๋ ฅ์ด ๋˜์‹ ๋‹ค๋ฉด ORM ์‚ฌ์šฉ ์—ฌ๋ถ€๋Š” ๊ฐœ์ธ์˜ ์„ ํƒ ์‚ฌํ•ญ์ด๋ผ๊ณ  ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ DB ๊ฒฝํ—˜์ด ์–ผ๋งˆ ์•ˆ๋˜์‹ ๋‹ค๋ฉด ORM๋ณด๋‹ค๋Š” SQL์„ ๋ฐ”๋กœ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค. ๊ผฌ~์˜ฅ ์ œ ๊ฐœ์ธ์ ์ธ ์˜๊ฒฌ์ด ๋” ํ•„์š”ํ•˜์‹œ๋‹ค๋ฉด Q&A์— ํ•ด๋‹น ์งˆ๋ฌธ์„ ์˜ฌ๋ ค ์ฃผ์‹œ๋ฉด ์ข€ ๋” ์ถ”๊ฐ€ ๋‹ต๋ณ€ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

      • shumiro๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
        shumiro

        ์ˆ˜๊ฐ•ํ‰ 3

        โˆ™

        ํ‰๊ท  ํ‰์  5.0

        5

        30% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

        ๊ถŒ ์ฒ ๋ฏผ๋‹˜์˜ ๋‹ค๋ฅธ ๊ฐ•์˜

        ์ง€์‹๊ณต์œ ์ž๋‹˜์˜ ๋‹ค๋ฅธ ๊ฐ•์˜๋ฅผ ๋งŒ๋‚˜๋ณด์„ธ์š”!

        ๋น„์Šทํ•œ ๊ฐ•์˜

        ๊ฐ™์€ ๋ถ„์•ผ์˜ ๋‹ค๋ฅธ ๊ฐ•์˜๋ฅผ ๋งŒ๋‚˜๋ณด์„ธ์š”!

        ์›” โ‚ฉ15,400

        5๊ฐœ์›” ํ• ๋ถ€ ์‹œ

        โ‚ฉ77,000