/ifp-flask-study

πŸ“– IFP's Flask Framework study repository

Primary LanguagePython

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)"

ν˜„μž¬ μ—…λ°μ΄νŠΈ μ€‘μž…λ‹ˆλ‹€