Skip to content

IDU-IFP/ifp-flask-study

Repository files navigation

IFP - Flask ํŠœํ† ๋ฆฌ์–ผ ๊ฐ€์ด๋“œ

๐Ÿ’ก Flask ๋ž€?

Untitled

Flask๋Š” Python ์œผ๋กœ ์ž‘์„ฑ๋œ ๋งˆ์ดํฌ๋กœ ์›น ํ”„๋ ˆ์ž„์›Œํฌ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ํŒŒ์ด์ฌ์œผ๋กœ ์ž‘์„ฑ๋œ ๋˜ ๋‹ค๋ฅธ ํ’€ ์Šคํƒ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ธ Django ๊ฐ€ Django ORM, ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€ ๋“ฑ์„ ์ž์ฒด ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ฒƒ๊ณผ๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ํ”Œ๋ผ์Šคํฌ ๊ณต์‹ ๋ฌธ์„œ์—์„œ๋Š”, โ€œ๋งˆ์ดํฌ๋กœ๋Š” ๋ฌด์—‡์ธ๊ฐ€?โ€ ์— ๋Œ€ํ•ด์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

The โ€œmicroโ€ in microframework means Flask aims to keep the core simple but extensible. ๋งˆ์ดํฌ๋กœํ”„๋ ˆ์ž„์›Œํฌ์˜ "๋งˆ์ดํฌ๋กœ"๋Š” Flask๊ฐ€ ํ•ต์‹ฌ์„ ๋‹จ์ˆœํ•˜์ง€๋งŒ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

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

๐Ÿ’๐Ÿผ Flask ๋ฅผ ๋ฐฑ์—”๋“œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋น„์Šค๋“ค

Flask ๋ฅผ ๋ฐฑ์—”๋“œ ๊ธฐ์ˆ ๋กœ ์‚ฌ์šฉ ์ค‘์ธ ๊ธฐ์—…๋“ค์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

์ด ์™ธ์—๋„, 1000๊ฐœ ์ด์ƒ์˜ ๊ธฐ์—…๋“ค์ด Flask ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Untitled

โœ… Netflix

Untitled

โœ…ย Reddit

Untitled

โœ…ย trivago

Untitled

โœ…ย Patreon

Untitled

โœ…ย Pinterest

Untitled

โœ… Barogo

Untitled

โœ…ย Uber

Untitled

โœ…ย AB180

Untitled

โœ…ย MIT

Untitled

โœ…ย Pinterest

๐Ÿ“„ Flask ํ•œ๊ธ€ ๊ณต์‹ ๋ฌธ์„œ

Flask์˜ ์„ธ๊ณ„์— ์˜ค์‹ ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. - Flask 0.11-dev documentation

๐ŸŒ Flask ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€

Welcome to Flask - Flask Documentation (2.2.x)

๐Ÿ’พ Flask ๊นƒํ—ˆ๋ธŒ ์ €์žฅ์†Œ

https://github.com/pallets/flask

๐Ÿ˜Ž ํŠœํ† ๋ฆฌ์–ผ์—์„œ ์ง„ํ–‰ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋“ค

ํŠœํ† ๋ฆฌ์–ผ์—์„œ ์ง„ํ–‰ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ํŠœํ† ๋ฆฌ์–ผ์„ ์„ฑ๊ณต์ ์œผ๋กœ ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉด, ์•„๋ž˜์˜ ํ”„๋กœ์ ํŠธ๋“ค์ด ์™„์„ฑ๋˜์–ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŠœํ† ๋ฆฌ์–ผ์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์™„๋ฃŒํ•˜๊ณ  ๋‚˜์„œ ๋งˆ๋ฌด๋ฆฌํ•˜๊ธฐ๋ณด๋‹จ, ์ž์‹ ์ด ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์—ˆ๋˜ ๊ธฐ๋Šฅ๋“ค์„ ์ถ”๊ฐ€๋กœ ๊ตฌํ˜„ํ•ด๋ณด๋ฉฐ ๊ณต๋ถ€ํ•˜์‹œ๋Š” ๊ฒƒ์„ ์ ๊ทน ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

๋‚˜๋งŒ์˜ ๋ธ”๋กœ๊ทธ

Flask ๋กœ ํšŒ์› ๊ด€๋ฆฌ, ๊ฒŒ์‹œ๋ฌผ, ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€, ๋Œ“๊ธ€ ์ž‘์„ฑ, ์ปจํƒํŠธ ํผ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ž์‹ ๋งŒ์˜ ๋ธ”๋กœ๊ทธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ง์ ‘ ์ž‘์„ฑํ•ด ๋ด…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋˜ํ•œ ๋„์ž…ํ•ด ๋ณด๋ฉฐ, ์ฝ”๋“œ๋กœ ์ž์‹ ์ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ํ…Œ์ŠคํŠธํ•ด ๋ด…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ์— ๋Œ€ํ•ด์„œ๋„ ์ดํ•ดํ•ด ๋ด…๋‹ˆ๋‹ค.

Untitled

Untitled

Untitled

Untitled

๊ฐ„๋‹จํ•œ REST API (1)

๊ฐ„๋‹จํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋Š” REST API๋ฅผ ๊ตฌ์ถ•ํ•ด ๋ด„์œผ๋กœ์„œ, HTTP Method์™€ JSON, WEB API์— ๋Œ€ํ•ด ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋ผ์Šคํฌ์—์„œ ์–ด๋–ป๊ฒŒ JSON์œผ๋กœ ์‘๋‹ต์„ ์ฃผ๊ณ ๋ฐ›๋Š”์ง€์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

Untitled

๊ฐ„๋‹จํ•œ REST API (2)

Flask-Restful ์ด๋ผ๋Š” ์™ธ๋ถ€ ํŒจํ‚ค์ง€๋ฅผ ์ด์šฉํ•ด Create, Read, Update, Delete ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” REST API๋ฅผ ๊ตฌ์ถ•ํ•ด ๋ด„์œผ๋กœ์จ, Flask์˜ Pluggable View ์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•ด ๋ด…๋‹ˆ๋‹ค.

Untitled

์ธ์Šคํƒ€๊ทธ๋žจ ํด๋ก ์ฝ”๋”ฉ

ํ”Œ๋ผ์Šคํฌ๋กœ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ, ํšŒ์›๊ฐ€์ž…, ํšŒ์›ํƒˆํ‡ด, JWT๋ฅผ ํ™œ์šฉํ•œ ๋กœ๊ทธ์ธ, ํŒ”๋กœ์šฐ/์–ธํŒ”๋กœ์šฐ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ธ์Šคํƒ€๊ทธ๋žจ์„ Flask๋กœ ๊ตฌํ˜„ํ•ด ๋ด…๋‹ˆ๋‹ค. ์ž์‹ ์ด ์ž‘์„ฑํ•œ API์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•จ์œผ๋กœ์„œ, ์ž์‹ ์˜ ์ฝ”๋“œ๊ฐ€ ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ์ž„์˜๋กœ ์ •ํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด ๊ฒ€์ฆํ•ด ๋ด…๋‹ˆ๋‹ค.

Untitled

(2022.11.16 ํ˜„์žฌ ์ง„ํ–‰์ค‘)

๐ŸŒŸย ์ถ”์ฒœ ์ปค๋ฆฌํ˜๋Ÿผ

์•„๋ž˜์˜ ๊ณผ์ •๋“ค์„ ๋”ฐ๋ผ๊ฐ€๋ฉฐ, Flask ๋ฅผ ๊ณต๋ถ€ํ•ด ๋ณด์„ธ์š”.

Flask ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •ํ•˜๊ธฐ ( VSCode)

  • ํ•ด๋‹น ์—ํ”ผ์†Œ๋“œ์—์„œ๋Š” ์œˆ๋„์šฐ11 ํ™˜๊ฒฝ์—์„œ Flask ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์„ธํŒ…ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋‹ค๋ฃน๋‹ˆ๋‹ค.

[OS - Windows] - "Windows11 ํ™˜๊ฒฝ์—์„œ FLask ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์ค€๋น„ํ•˜๊ธฐ"

Flask ์—์„œ Routing ์ด๋ž€?

  • ํ•ด๋‹น ์—ํ”ผ์†Œ๋“œ์—์„œ๋Š” Routing ์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

[REAL Python - Flask] - "Flask - ํ”Œ๋ผ์Šคํฌ์˜ Routing, Http GET, POST Method ์ฒ˜๋ฆฌํ•˜๊ธฐ, (Create, Read ๊ตฌํ˜„)"

Flask ๋กœ ๋‚˜๋งŒ์˜ ๋ธ”๋กœ๊ทธ ๊ฐœ๋ฐœํ•˜๊ธฐ (1) - ๊ฐœ๋ฐœ ์ดˆ์„ ๋‹ค์ง€๊ธฐ

  • ํ•ด๋‹น ์—ํ”ผ์†Œ๋“œ์—์„œ๋Š”, ์ •์  ํŒŒ์ผ์„ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋‹ค๋ฃน๋‹ˆ๋‹ค.
  • ๋”๋ถˆ์–ด, ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ํ…œํ”Œ๋ฆฟ์— ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š”์ง€์— ๋Œ€ํ•ด์„œ๋„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

[REAL Python - Flask] - "๋ธ”๋กœ๊ทธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ(0) - ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ, ํŒจํ‚ค์ง€ ์„ค์น˜, ๊ธฐ๋ณธ ์ž‘์—…"

Flask ๋กœ ๋‚˜๋งŒ์˜ ๋ธ”๋กœ๊ทธ ๊ฐœ๋ฐœํ•˜๊ธฐ (2) - ๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž… ๊ตฌํ˜„ํ•˜๊ธฐ

  • ํ•ด๋‹น ์—ํ”ผ์†Œ๋“œ์—์„œ๋Š” ๋กœ๊ทธ์ธ๊ณผ ํšŒ์›๊ฐ€์ž…์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • ํšŒ์›๊ฐ€์ž…์ด๋‚˜ ๋กœ๊ทธ์ธ ๋“ฑ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•˜๊ณ , ์‚ฌ์šฉ์ž๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์„ ์ผ์ผ์ด ์ฟผ๋ฆฌ๋ฌธ์„ ๋‚ ๋ ค ์˜ฌ๋ฆฌ๋Š” ๋ฐฉ๋ฒ• ๋Œ€์‹ , ํŒŒ์ด์ฌ์˜ ํด๋ž˜์Šค๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ORM์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•ด ๋ด…๋‹ˆ๋‹ค.
  • ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ flask-login ์„ ์ด์šฉํ•ด ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณดํ†ต, ์—ฌํƒ€ ๋‹ค๋ฅธ ์›น ์„œ๋น„์Šค์—์„œ๋Š” ๋กœ๊ทธ์ธ์„ ํ•˜๋ฉด โ€œ~~~๋‹˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.โ€ ์™€ ๊ฐ™์ด ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋Š” ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ์ด ๋‹ค๋ฅด๊ฒŒ ๋ณ€ํ™”ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์ฃ . ๋กœ๊ทธ์ธ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ์›น ํŽ˜์ด์ง€๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

[REAL Python - Flask] - "๋ธ”๋กœ๊ทธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ(1) - ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž… ์ฒ˜๋ฆฌํ•˜๊ธฐ"

Flask ๋กœ ๋‚˜๋งŒ์˜ ๋ธ”๋กœ๊ทธ ๊ฐœ๋ฐœํ•˜๊ธฐ (3) - ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€, ์นดํ…Œ๊ณ ๋ฆฌ, ๊ฒŒ์‹œ๋ฌผ ์‹œ์Šคํ…œ ๊ตฌํ˜„ํ•˜๊ธฐ

  • ํ•ด๋‹น ์—ํ”ผ์†Œ๋“œ์—์„œ๋Š” ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€๋Š” ์ผ๋ฐ˜ ํšŒ์›์ด ๋ง˜๋Œ€๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์•ˆ ๋˜๊ฒ ์ฃ . ์ด๋ฅผ ์œ„ํ•ด์„œ ์‚ฌ์šฉ์ž ๋ชจ๋ธ์„ ์ˆ˜์ •ํ•˜๊ณ , ํ•ด๋‹น ์‚ฌ์šฉ์ž๊ฐ€ ๊ด€๋ฆฌ์ž์ธ์ง€ ์•„๋‹Œ์ง€์— ๋”ฐ๋ผ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ œํ•œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ์ž‘์„ฑํ–ˆ๋˜ ๊ธฐ๋Šฅ๋“ค์„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๊ฒ€์ฆํ•ด ๋ณด๊ณ , ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๊ณ  ๊ทธ์— ๋งž์ถ˜ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค. ์™„๋ฒฝํ•œ ํ˜•ํƒœ๋Š” ์•„๋‹ˆ์ง€๋งŒ, โ€œTDD - ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœโ€ ์„ ๊ฒฝํ—˜ํ•ด ๋ด…๋‹ˆ๋‹ค.
  • ๊ฒŒ์‹œ๋ฌผ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์—ญ์‹œ, ๊ฒŒ์‹œ๋ฌผ์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด์„œ ๊ฒŒ์‹œ๋ฌผ ๋ชจ๋ธ์„ ์ž‘์„ฑํ•˜๊ณ , ์ €์ž์™€ ๊ฒŒ์‹œ๋ฌผ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.
  • ์นดํ…Œ๊ณ ๋ฆฌ ์‹œ์Šคํ…œ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ํ•œ ์นดํ…Œ๊ณ ๋ฆฌ์—๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฒŒ์‹œ๋ฌผ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์ฃ . ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋ธ์„ ์ž‘์„ฑํ•˜๊ณ , ๋ธ”๋กœ๊ทธ์— ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[REAL Python - Flask] - "๋ธ”๋กœ๊ทธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ(2) - ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋„์ž…, ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€, ์นดํ…Œ๊ณ ๋ฆฌ, ๊ฒŒ์‹œ๋ฌผ ๏ฟฝ๋‹ค๋ฃจ๊ธฐ"

Flask ๋กœ ๋‚˜๋งŒ์˜ ๋ธ”๋กœ๊ทธ ๊ฐœ๋ฐœํ•˜๊ธฐ (4) - ๊ฒŒ์‹œ๋ฌผ ์‚ญ์ œ, ๋Œ“๊ธ€, ์ปจํƒํŠธ ํผ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ

  • ํ•ด๋‹น ์—ํ”ผ์†Œ๋“œ์—์„œ๋Š” ๊ฒŒ์‹œ๋ฌผ ์‚ญ์ œ, ๋Œ“๊ธ€, ์ปจํƒํŠธ ํผ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ๊ฒŒ์‹œ๋ฌผ-์ €์ž ์˜ ๊ด€๊ณ„์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, Python ORM ์œผ๋กœ ์ผ๋Œ€ ๋‹ค ๊ด€๊ณ„๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋‹ค๋ฃน๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ, ๊ฒŒ์‹œ๋ฌผ์„ ์ž‘์„ฑํ•œ ์œ ์ €๊ฐ€ ํƒˆํ‡ดํ•˜๊ฑฐ๋‚˜, ๋Œ“๊ธ€์ด ๋‹ฌ๋ฆฐ ๊ฒŒ์‹œ๋ฌผ์ด ์‚ญ์ œ๋œ๋‹ค๋ฉด ๊ฒŒ์‹œ๋ฌผ์€, ๊ทธ๋ฆฌ๊ณ  ๋Œ“๊ธ€์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ• ๊นŒ์š”? ์œ„์˜ ๋ฌธ์ œ๋“ค์„ ORM ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค.
  • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์ด๊ณณ์—์„œ๋„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ๋„์ž…๋ฉ๋‹ˆ๋‹ค. ๋ณธ์ธ์ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€, ๋ณธ์ธ์ด ์ž‘์„ฑํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•˜์—ฌ ๊ฒ€์ฆ์„ ํ†ต๊ณผํ•˜๋Š”์ง€ ํ™•์ธํ•ด ๋ณด๊ณ , ๋”์šฑ ๋” ๋‹ค์–‘ํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•ด ๋ด„์œผ๋กœ์„œ ๊ฒฌ๊ณ ํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ๋Š” ์—ฐ์Šต์„ ํ•˜๊ธฐ ์œ„ํ•œ ์ดˆ์„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

[REAL Python - Flask] - "๋ธ”๋กœ๊ทธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ(3) - ๋Œ“๊ธ€ CRUD, ๊ฒŒ์‹œ๋ฌผ ์‚ญ์ œ ์ฒ˜๋ฆฌ, ๊ฐ„๋‹จํ•œ contact form ๊ตฌํ˜„ํ•˜๊ธฐ"

Flask ๋กœ ๊ฐ„๋‹จํ•œ REST API ๊ตฌํ˜„ํ•˜๊ธฐ (1) - JSON ์‘๋‹ตํ•˜๊ธฐ

  • ์ˆœ์ˆ˜ flask ์—์„œ json ์‘๋‹ต์„ ์–ด๋–ป๊ฒŒ ์ฃผ๊ณ ๋ฐ›๋Š”์ง€๋ฅผ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.
  • HTTP Method ์— ๋Œ€ํ•ด ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐ„๋‹จํ•œ REST API ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

[REAL Python - Flask] - "Flask HTTP API(1) - ๊ฐ„๋‹จํ•œ HTTP API ๊ตฌ์ถ•ํ•ด๋ณด๊ธฐ"

Flask ๋กœ ๊ฐ„๋‹จํ•œ REST API ๊ตฌํ˜„ํ•˜๊ธฐ (2) - Flask-restful

  • ์ง€๊ธˆ๊นŒ์ง€ ์‚ฌ์šฉํ•ด์˜ค๋˜ ํ•จ์ˆ˜ํ˜• ๋ทฐ๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šคํ˜• ๋ทฐ, flask ์˜ Pluggable View ์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ณ , ๊ทธ๊ฒƒ์„ ์ ๊ทน ํ™œ์šฉํ•˜๋Š” flask-restful ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ด GET, POST, DELETE, PUT ๋ฉ”์„œ๋“œ์— ๋Œ€์‘ํ•˜๋Š”, ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š” ๊ฐ„๋‹จํ•œ REST API๋ฅผ ๊ตฌ์ถ•ํ•ด ๋ด…๋‹ˆ๋‹ค.
  • ์œ„์™€ ๊ฐ™์ด ํ•œ ํด๋ž˜์Šค ๋‚ด์—์„œ (HTTP๋ฉ”์„œ๋“œ ์†Œ๋ฌธ์ž๋ช…) ์˜ ํŒŒ์ด์ฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ API๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ Django REST Framework์—์„œ๋„ ๋น„์Šทํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
  • ์•ž์œผ๋กœ ์ง„ํ–‰๋  ์ธ์Šคํƒ€๊ทธ๋žจ ํด๋ก ์ฝ”๋”ฉ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•ด์„œ ๊ผญ ์ตํ˜€๋‘์–ด์•ผ ํ•˜๋Š” ์—ํ”ผ์†Œ๋“œ์ž…๋‹ˆ๋‹ค.

[REAL Python - Flask] - "Flask HTTP API(2) - Flask-RESTful ๋กœ ์ƒ์„ฑ, ์กฐํšŒ api ๊ตฌ์ถ•ํ•˜๊ธฐ"

[REAL Python - Flask] - "Flask HTTP API(3) - Flask-RESTful ๋กœ ์‚ญ์ œ, ์ˆ˜์ • api ๊ตฌ์ถ•ํ•˜๊ธฐ"

marshmallow ๋กœ ํŒŒ์ด์ฌ ๊ฐ์ฒด ์ง๋ ฌํ™” / ์—ญ์ง๋ ฌํ™” ์ฒ˜๋ฆฌํ•˜๊ธฐ

  • ์œ„์˜ ์‹ค์Šต์„ ์ž˜ ๋”ฐ๋ผํ•˜์…จ๋‹ค๋ฉด, ๊ทธ๋ฆฌ๊ณ  ์ดํ•ดํ•˜์…จ๋‹ค๋ฉด ๊ฐœ๋ฐœ์ž๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” API ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ ๋‹ค๋Š” ๊ฒƒ์€ ๊ฒฐ๊ตญ, JSON ํ˜น์€ XML ๋“ฑ์˜ ํ˜•์‹์„ ํ™œ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์™€ ์‘๋‹ต์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜์…จ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ์•ž์„œ, ์šฐ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ SQL ์ฟผ๋ฆฌ๋ฌธ์ด ์•„๋‹Œ ํŒŒ์ด์ฌ์˜ ํด๋ž˜์Šค๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ORM์ด๋ผ๊ณ  ํ–ˆ์—ˆ์ฃ ? ๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ๋Š”, ์ž‘์„ฑํ•œ ํŒŒ์ด์ฌ ํด๋ž˜์Šค์˜ ๋ชจ๋ธ ์ธ์Šคํ„ด์Šค๋ฅผ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‘๋‹ตํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ•˜๋Š”๋ฐ ๊ทธ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”๊ฐ€? ์ž…๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ, ์ˆœ์ˆ˜ ํŒŒ์ด์ฌ์œผ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ JSON์œผ๋กœ ์ง๋ ฌํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ , ๊ทธ ์–ด๋ ค์›€์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Marshmallow ๋ผ๋Š” ์ง๋ ฌํ™” / ์—ญ์ง๋ ฌํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.
  • ์•ž์œผ๋กœ ์ง„ํ–‰๋  ์ธ์Šคํƒ€๊ทธ๋žจ ํด๋ก ์ฝ”๋”ฉ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•ด์„œ ๊ผญ ์ตํ˜€๋‘์–ด์•ผ ํ•˜๋Š” ์—ํ”ผ์†Œ๋“œ์ž…๋‹ˆ๋‹ค.

[REAL Python - Flask] - "Flask HTTP API(4) - marshmallow ๋กœ Python์—์„œ ์ง๋ ฌํ™” / ์—ญ์ง๋ ฌํ™” ์ฒ˜๋ฆฌํ•˜๊ธฐ"

์ธ์Šคํƒ€๊ทธ๋žจ ํด๋ก ์ฝ”๋”ฉ ํ”„๋กœ์ ํŠธ (1) - ํ”„๋กœ์ ํŠธ ๊ธฐ๋ณธ ์„ธํŒ…

  • flask ๋Š” Django ์™€๋Š” ๋‹ฌ๋ฆฌ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ๋“ฑ์— ๋Œ€ํ•ด์„œ ์ž์œ ๋„๊ฐ€ ๋†’์€ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์กฐ๊ธˆ ๋” ๊ทœ๋ชจ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ์ „์ฒด์ ์ธ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ์˜ ํ‹€์„ ์žก๋Š” ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ํŒŒ์ด์ฌ์—์„œ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ, requirements.txt ์™€ ๊ฐ™์€ ํŒŒ์ผ๋“ค์„ ๋งŒ๋“ค์–ด ๋ณด๊ณ , ๊ฐœ๋ฐœ์šฉ ํ™˜๊ฒฝ, ๋ฐฐํฌ์šฉ ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ๋„ ๊ฐ„๋žตํžˆ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.
  • ์‹œํฌ๋ฆฟ ํ‚ค์™€ ๊ฐ™์€ ๋ถ€๋ถ„๋“ค์€ ๊นƒํ—ˆ๋ธŒ ์ €์žฅ์†Œ์— ์˜ฌ๋ผ๊ฐ€๋ฉด ์•ˆ ๋˜๋Š” ์ •๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ํŒŒ์ผ๋“ค์„, .env ๋กœ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

[REAL Python - Flask] - "์ธ์Šคํƒ€๊ทธ๋žจ ํด๋ก ์ฝ”๋”ฉ - Instagram Clone (1)"

์ธ์Šคํƒ€๊ทธ๋žจ ํด๋ก ์ฝ”๋”ฉ ํ”„๋กœ์ ํŠธ (2) - ๊ฒŒ์‹œ๋ฌผ ๋ชฉ๋ก, ์ƒ์„ธ์— ๋Œ€ํ•œ CRUD API ๊ตฌํ˜„ํ•˜๊ธฐ

  • ์ธ์Šคํƒ€๊ทธ๋žจ์˜ ์ค‘์š” ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ธ ๊ฒŒ์‹œ๋ฌผ์„ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.
  • /posts/ ์— ๋Œ€ํ•œ GET, POST ์š”์ฒญ์— ์‘๋‹ตํ•˜๋Š” API ๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.
  • /posts// ์— ๋Œ€ํ•œ, GET / PUT / DELETE ์š”์ฒญ์— ์‘๋‹ตํ•˜๋Š” API ๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.
  • ํŒŒ์ด์ฌ์˜ Unittest ํŒจํ‚ค์ง€๋ฅผ ํ™œ์šฉํ•ด ์ž์‹ ์ด ๋งŒ๋“  GET ์š”์ฒญ์— ๋Œ€ํ•œ API ๋ฅผ ํ…Œ์ŠคํŠธํ•ด ๋ด…๋‹ˆ๋‹ค.
  • ๊ฒŒ์‹œ๋ฌผ ๋ชฉ๋ก์— ๋Œ€ํ•œ ํŽ˜์ด์ง€๋„ค์ด์…˜ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

[REAL Python - Flask] - "์ธ์Šคํƒ€๊ทธ๋žจ ํด๋ก ์ฝ”๋”ฉ - Instagram Clone (2)"

์ธ์Šคํƒ€๊ทธ๋žจ ํด๋ก ์ฝ”๋”ฉ ํ”„๋กœ์ ํŠธ (3) - ํ”„๋ก ํŠธ์—”๋“œ ๋‹จ์—์„œ ์—ฐ๊ฒฐํ•ด ๋ณด๊ณ , ํšŒ์›๊ฐ€์ž… ๊ตฌํ˜„ํ•˜๊ธฐ

  • ์ด์ „์— ๋งŒ๋“ค์–ด ๋‘์—ˆ๋˜, ๊ฒŒ์‹œ๋ฌผ ๋ชฉ๋ก API ๋ฅผ ํ”„๋ก ํŠธ์—”๋“œ ๋‹จ์—์„œ ์‚ฌ์šฉํ•ด ๋ด…๋‹ˆ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ fetch() ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฒŒ์‹œ๋ฌผ์˜ ๋‚ด์šฉ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋Š” ์ธ์Šคํƒ€๊ทธ๋žจ ๊ฒŒ์‹œ๋ฌผ ํŽ˜์ด์ง€๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • ํšŒ์›๊ฐ€์ž…์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํผ์—์„œ ํšŒ์›๊ฐ€์ž…์„ ์ง„ํ–‰ํ–ˆ๋˜ ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ, ํ”„๋ก ํŠธ์—”๋“œ์—์„œ JSON ์„ ์ฃผ๊ณ ๋ฐ›์œผ๋ฉฐ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹ฑ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

[REAL Python - Flask] - "์ธ์Šคํƒ€๊ทธ๋žจ ํด๋ก ์ฝ”๋”ฉ - Instagram Clone (3)"

์ธ์Šคํƒ€๊ทธ๋žจ ํด๋ก ์ฝ”๋”ฉ ํ”„๋กœ์ ํŠธ (4) - JWT ๋ฐœ๊ธ‰, ๊ฒŒ์‹œ๋ฌผ ์ž‘์„ฑ ์‹œ ๋กœ๊ทธ์ธํ•œ ์‚ฌ๋žŒ์ด ์ €์ž๋กœ ์ž๋™ ์ถ”๊ฐ€๋˜๋„๋ก ๊ตฌํ˜„ํ•˜๊ธฐ

  • JSON ์›น ํ† ํฐ์€ ๋‘ ๋‹น์‚ฌ์ž ๊ฐ„์˜ ํด๋ ˆ์ž„์„ ์•ˆ์ „ํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œย ๊ฐœ๋ฐฉํ˜• ์—…๊ณ„ ํ‘œ์ค€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
  • https://www.rfc-editor.org/rfc/rfc7519 ์— ๊ทธ๊ฒƒ์˜ ํ‘œ์ค€์ด ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š”, JWT๋ฅผ ์„œ๋ฒ„์—์„œ ์ง์ ‘ ๊ตฌํ˜„ํ•ด ๋ณด๋ฉฐ, ๋กœ๊ทธ์ธ์„ ์œ„ํ•ด์„œ ๋ฐฑ์—”๋“œ ๋‹จ์—์„œ ๋ฌด์—‡์„ ์ค€๋น„ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.
  • ๊ตฌํ˜„ํ–ˆ์œผ๋ฉด ์ž๊ณ ๋กœ ์จ ๋ด์•ผ๊ฒ ์ฃ ? ์‹ค์ œ ์„œ๋น„์Šค์—์„œ ๊ฒŒ์‹œ๋ฌผ์ด๋‚˜ ํ”ผ๋“œ ๋“ฑ์„ ์ž‘์„ฑํ•  ๋•Œ์—๋Š” โ€œํ˜„์žฌ ๋กœ๊ทธ์ธํ•œ ์‚ฌ๋žŒโ€ ์ด โ€œ๊ฒŒ์‹œ๋ฌผ์ด๋‚˜ ํ”ผ๋“œ์˜ ์ž‘์„ฑ์žโ€ ๋กœ ์ถ”๊ฐ€๋˜๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ์„ ํ†ตํ•ด์„œ ์ด ๋ถ€๋ถ„์„ ๊ตฌํ˜„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

[REAL Python - Flask] - "์ธ์Šคํƒ€๊ทธ๋žจ ํด๋ก ์ฝ”๋”ฉ - Instagram Clone (4)"

์ธ์Šคํƒ€๊ทธ๋žจ ํด๋ก ์ฝ”๋”ฉ ํ”„๋กœ์ ํŠธ (5) - Werkzeug, WSGI, NGNIX ์•Œ์•„๋ณด๊ณ , ๊ฒŒ์‹œ๋ฌผ์— ์ด๋ฏธ์ง€๋ฅผ ๋ถ™์—ฌ ์—…๋กœ๋“œํ•˜๊ธฐ

  • Flask ์—์„œ ์ด๋ฏธ์ง€๋ฅผ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฃจ๋Š”์ง€ ์•Œ์•„๋ณด๊ณ , ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ๋ฅผ ์œ„ํ•œ ๋ณ„๋„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด ๋ด…๋‹ˆ๋‹ค.
  • JavaScript๋กœ ๊ฒŒ์‹œ๋ฌผ ์—…๋กœ๋“œ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ์–ด๋–ค ๊ฒƒ์ด ์ €์žฅ๋˜๊ณ , ํ”„๋ก ํŠธ์—”๋“œ ๋‹จ์—์„œ๋Š” ์–ด๋–ค ์ •๋ณด๊ฐ€ ํ•„์š”ํ•œ์ง€์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

[REAL Python - Flask] - "์ธ์Šคํƒ€๊ทธ๋žจ ํด๋ก ์ฝ”๋”ฉ - Instagram Clone (5)"

์ธ์Šคํƒ€๊ทธ๋žจ ํด๋ก ์ฝ”๋”ฉ ํ”„๋กœ์ ํŠธ (6) - ๋ฌดํ•œ ์Šคํฌ๋กค๊ณผ ๋Œ“๊ธ€ API ๊ตฌํ˜„ํ•˜๊ธฐ

  • ์šฐ๋ฆฌ๋Š” ์•ž์„œ ๊ฒŒ์‹œ๋ฌผ API๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉฐ ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํŽ˜์ด์ง€๋„ค์ด์…˜์˜ ์˜๋ฏธ ์ค‘ ์ค‘์š”ํ•œ ๊ฒƒ์€, ๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ โ€œ๊ฒŒ์‹œ๋ฌผ ๋ชฉ๋ก ์กฐํšŒโ€ ๋ฅผ ์š”์ฒญํ•œ๋‹ค๋ฉด, ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” 1์–ต ๊ฐœ์˜ ๊ฒŒ์‹œ๋ฌผ์ด ์žˆ๋‹ค๋ฉด, ๊ทธ๊ฒƒ์„ ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ชจ๋‘ ๋ณด๋‚ด์ค„ ๊ฒƒ์ธ๊ฐ€? ๋ผ๋Š” ์˜๋ฌธ์ ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฝ์„์ง€, ์ฝ์ง€ ์•Š์„์ง€ ๋ชจ๋ฅด๋Š” 1์–ต ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๋‚ด๋ ค๋ณด๋‚ด ์ฃผ๋Š” ๊ฒƒ์€ ๊ต‰์žฅํ•œ ๋‚ญ๋น„์ผ ๊ฒ๋‹ˆ๋‹ค. ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š”, ๋ฐฑ์—”๋“œ์—์„œ ๊ตฌํ˜„ํ•œ ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ์‹ค์ œ ์ธ์Šคํƒ€๊ทธ๋žจ๊ณผ ๋น„์Šทํ•˜๊ฒŒ โ€œ์Šคํฌ๋กค์„ ๋‚ด๋ฆฌ๋ฉด ๊ณ„์† ๊ฒŒ์‹œ๋ฌผ์ด ๋กœ๋“œ๋˜๋„๋กโ€ ๊ตฌํ˜„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

[REAL Python - Flask] - "์ธ์Šคํƒ€๊ทธ๋žจ ํด๋ก ์ฝ”๋”ฉ - Instagram Clone (6)"

ํ˜„์žฌ ์—…๋ฐ์ดํŠธ ์ค‘์ž…๋‹ˆ๋‹ค

About

๐Ÿ“– IFP's Flask Framework study repository

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages