Skip to content

Latest commit

ย 

History

71 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

โ˜˜ DRF์™€ Chat Gpt๋กœ ๋งŒ๋“  ์˜์–ด์ธํ„ฐ๋ทฐ ์„œ๋น„์Šค - English Max

cover

๐Ÿ“Œ 0. Chat Service ๊ฐœ์š”

  • ์‚ฌ์šฉ์ž๊ฐ€ ์˜์–ด ํšŒํ™” ๋ฐ ์ธํ„ฐ๋ทฐ๋ฅผ ์—ฐ์Šตํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋žซํผ

  • ์˜์–ด ์ธํ„ฐ๋ทฐ ์ค€๋น„๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ์˜์–ด ์Šคํ”ผํ‚น ์‹ค๋ ฅ์„ ๊ธฐ๋ฅด๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ์„ ์œ„ํ•œ ํ”Œ๋žซํผ

โœจ1. ๋ชฉํ‘œ์™€ ๊ธฐ๋Šฅ

1.1 ๋ชฉํ‘œ

  • DRF ํ™œ์šฉ ์›น ๊ฐœ๋ฐœ: ๋ชจ๋“  ๊ตฌํ˜„์€ Django Rest Framework๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง„ํ–‰

  • API ๊ธฐ๋Šฅ ๊ตฌํ˜„: ๊ธฐ์กด OpenAI์—์„œ ์ œ๊ณตํ•˜๋Š” API ๋Œ€์‹  ์ง์ ‘ ๊ตฌ์ถ•ํ•œ ์„œ๋ฒ„(DRF:Dangro Rest Framework)๋ฅผ ํ†ตํ•ด ์š”์ฒญ

  • ํ”„๋ก ํŠธ์™€ ๋ฐฑ์•ค๋“œ ๋ถ„๋ฆฌ : JS๋ฅผ ํ†ตํ•ด HTTP/HTTPS ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ํ†ต์‹ 

1.2 ๊ธฐ๋Šฅ

  • ์‚ฌ์šฉ์ž ์ธ์ฆ: Simple JWT๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•œ ํšŒ์›๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„

  • ์ฑ—๋ด‡ API: Django ์„œ๋ฒ„ ๋‚ด ChatGPT API ๊ตฌํ˜„

  • ์‚ฌ์šฉ ์ œํ•œ: ๊ฐ ์‚ฌ์šฉ์ž๋Š” ํ•˜๋ฃจ์— ์ตœ๋Œ€ 5๋ฒˆ ์š”์ฒญ ๊ฐ€๋Šฅ

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ: ์ฑ„ํŒ… ๋‚ด์—ญ ์ €์žฅ ๋ฐ ์กฐํšŒ ๊ธฐ๋Šฅ

๐ŸŽ‰2. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ฐ ๋ฐฐํฌ URL

2.1 ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

  • FE:

    HTML5 CSS3 JavaScript TailwindCSS

โœ” Tailwind ์‚ฌ์šฉ์œผ๋กœ css ๊ฐ„๊ฒฐํ™”

  • BE:

    Python Django

  • Deployment:

    GitHub AWS Lightsail Ubuntu Gunicorn Nginx DB SQLite

โœ” Github ํ”„๋ก ํŠธ ๋ฐฐํฌ, AWS Lightsail ๋ฐฑ์—”๋“œ ๋ฐฐํฌ

2.2 ๋ฐฐํฌ ๋ฐ ๊ด€๋ จ URL:

๐Ÿ“Backend ๋ฐฐํฌ์šฉ : https://github.com/maxkim77/DRFChatService_BE

๐Ÿ“Frontend ๋ฐฐํฌ์šฉ : https://github.com/maxkim77/DRFChatService_FE

๐ŸŽŠ3. ์š”๊ตฌ์‚ฌํ•ญ ๋ช…์„ธ์™€ ๊ธฐ๋Šฅ ๋ช…์„ธ

  • Tool : Mindmeister

MindMeister

๋งˆ์ธ๋“œ๋งต

3.1 ๊ธฐ๋ณธ ์š”๊ตฌ์‚ฌํ•ญ

  • DRF ํ™œ์šฉ: ๋ชจ๋“  ๊ตฌํ˜„์€ Django Rest Framework๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง„ํ–‰

  • ์‚ฌ์šฉ์ž ์ธ์ฆ: ํšŒ์›๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„

  • ์ฑ—๋ด‡ API: Django ์„œ๋ฒ„ ๋‚ด ChatGPT API ๊ตฌํ˜„

  • ์‚ฌ์šฉ ์ œํ•œ: ๊ฐ ์‚ฌ์šฉ์ž๋Š” ํ•˜๋ฃจ์— ์ตœ๋Œ€ 5๋ฒˆ ์š”์ฒญ ๊ฐ€๋Šฅ

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ: ์ฑ„ํŒ… ๋‚ด์—ญ ์ €์žฅ ๋ฐ ์กฐํšŒ ๊ธฐ๋Šฅ

3.2 ์„ ํƒ ์š”๊ตฌ์‚ฌํ•ญ

  • ๋„๋ฉ”์ธ ๋ฐ ๋ฐฐํฌ: ๊ฐœ์ธ ๋„๋ฉ”์ธ ๋“ฑ๋ก ๋ฐ HTTPS ์ ์šฉ

  • OAuth2 ์—ฐ๋™: ์นด์นด์˜ค, GitHub ๋“ฑ OAuth2 ์—ฐ๊ฒฐ

๐Ÿ—“4. ๊ฐœ๋ฐœ ์ผ์ • ๋ฐ ํ”„๋กœ์ ํŠธ๊ตฌ์กฐ / ํ”Œ๋กœ์šฐ ์ฐจํŠธ

4.1 ๊ฐœ๋ฐœ์ผ์ •(WBS)

  • Tool : Mermaid

    Mermaidwbs

Scope WBS Level WBS ID WBS Element Title Completion (Completed Date)
Planning 1 plan1 WBS, Model, Requirements โœ… 11.21.
Planning 1 plan2 ERD โœ… 11.21.
Design 2 des1 Screen Design โœ… 11.21.
Design 2 des2 URL Design โœ… 11.21.
Development 3 dev1 Page Implementation โœ… 11.22.
Development 3 dev2 CRUD Implementation โœ… 11.22.
Development 3 dev3 User Registration & Login โœ… 11.25.(์ผ๋ฐ˜ํ† ํฐ->JWT ๊ตฌํ˜„์—์„œ ์‹œ๊ฐ„์„ ๋งŽ์ด ์‚ฌ์šฉ)
Development 3 dev4 Unique User Permissions โœ… 11.26
Development 3 dev5 ChatGPT Integration โœ… 11.27.
UI/UX 4 ui1 UI Implementation โœ… 11.27.
Deployment 5 dep1 Deployment โœ… 11.28.
Final Preparations 6 prep1 Readme Completion โœ… 11.29.
Final Preparations 6 prep2 Presentation Preparation โœ… 11.30.
Presentation 7 pres1 Final Presentation โœ…12.01.

4.2 ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

๐Ÿ“ฆproject
 โ”ฃ ๐Ÿ“‚accounts
 โ”ƒ โ”ฃ ๐Ÿ“‚migrations
 โ”ƒ โ”ฃ ๐Ÿ“œadmin.py
 โ”ƒ โ”ฃ ๐Ÿ“œapps.py
 โ”ƒ โ”ฃ ๐Ÿ“œmanagers.py
 โ”ƒ โ”ฃ ๐Ÿ“œmodels.py
 โ”ƒ โ”ฃ ๐Ÿ“œtests.py
 โ”ƒ โ”ฃ ๐Ÿ“œurls.py
 โ”ƒ โ”ฃ ๐Ÿ“œviews.py
 โ”ƒ โ”— ๐Ÿ“œ__init__.py
 โ”ฃ ๐Ÿ“‚chat
 โ”ƒ โ”ฃ ๐Ÿ“‚migrations
 โ”ƒ โ”ฃ ๐Ÿ“‚__pycache__
 โ”ƒ โ”ฃ ๐Ÿ“œadmin.py
 โ”ƒ โ”ฃ ๐Ÿ“œapps.py
 โ”ƒ โ”ฃ ๐Ÿ“œmodels.py
 โ”ƒ โ”ฃ ๐Ÿ“œtests.py
 โ”ƒ โ”ฃ ๐Ÿ“œurls.py
 โ”ƒ โ”ฃ ๐Ÿ“œviews.py
 โ”ƒ โ”— ๐Ÿ“œ__init__.py
 โ”ฃ ๐Ÿ“‚project
 โ”ƒ โ”ฃ ๐Ÿ“œasgi.py
 โ”ƒ โ”ฃ ๐Ÿ“œsettings.env
 โ”ƒ โ”ฃ ๐Ÿ“œsettings.py
 โ”ƒ โ”ฃ ๐Ÿ“œurls.py
 โ”ƒ โ”ฃ ๐Ÿ“œwsgi.py
 โ”ƒ โ”— ๐Ÿ“œ__init__.py
 โ”ฃ ๐Ÿ“‚staticfiles
 โ”ฃ ๐Ÿ“œ.env
 โ”ฃ ๐Ÿ“œ.gitignore
 โ”ฃ ๐Ÿ“œdb.sqlite3
 โ”ฃ ๐Ÿ“œmanage.py
 โ”— ๐Ÿ“œrequirements.txt
๐Ÿ“ฆenv
๐Ÿ“ฆFE
 โ”ฃ ๐Ÿ“‚css
 โ”ฃ ๐Ÿ“‚js
 โ”ฃ ๐Ÿ“‚Repo
 โ”— ๐Ÿ“œindex.html

4.3 ํ”Œ๋กœ์šฐ ์ฐจํŠธ

  • Tool : draw.io

draw.io

ํ”Œ๋กœ์šฐ์ฐจํŠธ drawio

  • ์œ ์ € ์š”์ฒญ์— ๊ด€ํ•œ Pool์„ ๋‚˜ํƒ€๋‚ธ ํ”Œ๋กœ์šฐ ์ฐจํŠธ
  • ๊ฐ ํŠน์ง•์— ๋งž๊ฒŒ Lane์„ ๊ตฌ๋ถ„ ํ•จ

4.4 URL ๊ธฐํš

์—”๋“œํฌ์ธํŠธ HTTP ๋ฉ”์„œ๋“œ ๊ธฐ๋Šฅ ์•ฑ ๋น„๊ณ 
/admin/ - ๊ด€๋ฆฌ์ž ํŒจ๋„ ์ ‘์† admin
/account/join/ POST ์‚ฌ์šฉ์ž ๋“ฑ๋ก accounts
/account/login/ POST ๋กœ๊ทธ์ธ accounts
/account/logout/ POST ๋กœ๊ทธ์•„์›ƒ accounts
/account/mypage/ GET ๋‚ด์ •๋ณด์กฐํšŒ accounts * ๋กœ๊ทธ์ธํ›„ mypage๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๋  ๋•Œ
HTTP ์‘๋‹ต 200 ์„ฑ๊ณต์—ฌ๋ถ€ ํ…Œ์ŠคํŠธ ์šฉ url
/api/chat/gpt/ POST GPT ์ฑ—๋ด‡ API chat
/account/token/ POST JWT ํ† ํฐ ํš๋“ accounts
/account/token/refresh/ POST JWT ํ† ํฐ ๊ฐฑ์‹  accounts * ํ”„๋ก ํŠธ์—์„œ ์ฒ˜๋ฆฌํ• ๋•Œ JS ์ฝ”๋“œ์—์„œ refresh
url ๋ถ€๋ถ„๋„ fetch์— ํฌํ•จํ•ด์ฃผ์–ด์•ผ accesstoken์„ ์ œ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•จ
  • HTTP ๋ฉ”์„œ๋“œ ์ฐจ์ด์— ๋”ฐ๋ผ ํŽ˜์ด์ง€ ํŠน์„ฑ์— ๋งž๊ฒŒ ์„ ํƒ
    • GET ๋ฐฉ์‹ : ๋ฐ์ดํ„ฐ๋ฅผ url์— ํฌํ•จ์‹œ์ผœ ์ „๋‹ฌ ex) ์ •๋ณด์กฐํšŒ
    • POST ๋ฐฉ์‹ : ๋ฐ์ดํ„ฐ๋ฅผ HTTP์š”์ฒญ ๋ณธ๋ฌธ์— ํฌํ•จ์‹œ์ผœ ์ „๋‹ฌ ex) ๋ฐ์ดํ„ฐ ์ œ์ถœ ๋ฐ ๋ณ€๊ฒฝ

๐Ÿ“• (์ฐธ๊ณ ์‚ฌํ•ญ) API ๊ธฐ๋Šฅ๊ณผ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ๋ช…ํ™•ํžˆ ์ „๋‹ฌ ํ•˜๊ธฐ ์œ„ํ•œ Swegger drf-yasg ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์„œํ™”

ezgif com-resize (1)

  • ์ž๋™ํ™”๋œ ๋ฌธ์„œ ์ƒ์„ฑ
  • ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒํ•œ ํ…Œ์ŠคํŒ… ์ธํ„ฐํŽ˜์ด์Šค

๐ŸŽ DRF API Document Pdf : https://drive.google.com/file/d/1kwkup07S1y43iVe64-FYTy0PvZ68nh5c/view?usp=sharing

๐Ÿงถ5. ์™€์ด์–ดํ”„๋ ˆ์ž„ / UI

  • Tool : Uizard

Uizard

  • ์™€์ด์–ด ํ”„๋ ˆ์ž„ 5-1

  • UI 5-2

  • ์‹ค์ œ ๊ตฌํ˜„ ํ™”๋ฉด ์Šฌ๋ผ์ด๋“œ1

๐Ÿ–ผ6. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชจ๋ธ๋ง:

6๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ชจ๋ธ๋ง

  • User Table: CustomUser ๋ชจ๋ธ์—์„œ ๊ธฐ๋ณธํ‚ค id, ๊ณ ์œ  ํ•„๋“œ email ํฌํ•จ ํ•จ.

  • Chat Table: role ํ•„๋“œ ๋“ฑ ํฌํ•จ ํ•˜๊ณ , ์™ธ๋ž˜ํ‚ค id๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ” ์ฐธ์กฐํ•จ.

  • UserChatRequest Table: UserChatRequest ๋ชจ๋ธ์—์„œ ์™ธ๋ž˜ํ‚ค user_id๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ” ์ฐธ์กฐํ•˜๊ณ , ์š”์ฒญ ์ˆ˜, ๋‚ ์งœ ํฌํ•จ.

  • Chat ๋ชจ๋ธ๊ณผ UserChatRequest ๋ชจ๋ธ์—์„œ user ํ•„๋“œ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ”๊ณผ ๋‹ค๋Œ€์ผ ๊ด€๊ณ„

๐ŸŽจ7. ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„

  • Tool : draw.io

draw.io

์‹œ์Šคํ…œ์•„ํ‚คํ…์ณ drawio (4)

(Back-End Deployment Stack Features)

  • AWS Lightsail: (Amazon Web Services์˜ ๊ฐ€์ƒ ํ”„๋ผ์ด๋น— ์„œ๋ฒ„(VPS) ์„œ๋น„์Šค) ์„œ๋ฒ„, ์Šคํ† ๋ฆฌ์ง€, ๋„คํŠธ์›Œํ‚น, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์— ์œ ์šฉ.

  • Ubuntu: (Linux ๊ธฐ๋ฐ˜ ์šด์˜ ์ฒด์ œ) ์„œ๋ฒ„ ํ™˜๊ฒฝ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ, ์•ˆ์ •์„ฑ๊ณผ ๋ณด์•ˆ์— ๊ฐ•์ ์„ ๊ฐ€์ง.

  • Gunicorn: (Python WSGI HTTP ์„œ๋ฒ„) Django ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰๊ณผ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์ธํ„ฐ๋„ท์˜ ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต์— ์‚ฌ์šฉ.

  • Nginx: (HTTP ๋ฐ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„œ๋ฒ„) ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ Gunicorn ๋“ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•˜๊ณ  ์ •์  ํŒŒ์ผ ์ œ๊ณต.

๐Ÿ’ถ8. ๊ฐœ๋ฐœ ์ „๋žต ๋ฐ ํŠน์ง•

  • '์ฝ”๋“œ์˜ ๊ฐ€์น˜'์™€ 'ํšจ์œจ์„ฑ'์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์•„๋ž˜์˜ ๋ฐฉ์‹์„ ์ฑ„ํƒํ•ด ๊ฐœ๋ฐœ ํ•จ.

์Šฌ๋ผ์ด๋“œ1

  • TDD : ๊ธฐ๋Šฅ ๊ตฌํ˜„์ „ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก 
  • DRF & Class View : DRF - API ๊ตฌ์ถ•์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, Class View - View๋ฅผ ์ •์˜ ํ• ๋•Œ ํด๋ž˜์Šค๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ์‹
  • Simple JWT : ์ผ๋ฐ˜ ํ† ํฐ์— ๋น„ํ•ด ์ •๋ณด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด Simple JWT ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•จ.
  • ํŠน๋ณ„๊ธฐ๋Šฅ : AI, Speech to Text

9. ๋ฉ”์ธ ๊ธฐ๋Šฅ: ์ฃผ์š” ๊ธฐ๋Šฅ ๋ฐ ์ž‘๋™ ๋ฐฉ์‹

  • ์ฃผ์š” ํŽ˜์ด์ง€ ๊ตฌํ˜„

10

  • Signup ๊ธฐ๋Šฅ

3

  • Login ๊ธฐ๋Šฅ

1

  • Logout ๊ธฐ๋Šฅ

4

  • Chat Gpt - DRF ์—ฐ๊ฒฐ

DRF-Chat ์—ฐ๊ฒฐ

Gpt.-.DRF.mp4
  • ๋กœ๊ทธ์ธ์„ ํ•œ ์œ ์ €๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅ

1

  • ๊ฐ ์œ ์ €๋‹น 5๋ฒˆ ์š”์ฒญ ์ œํ•œ

ezgif com-resize

  • ์ฑ„ํŒ…๋‚ด์—ญ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ €์žฅ ๋˜๋ฉฐ ์žฌ๋กœ๊ทธ์ธํ›„ ์กฐํšŒ ๊ฐ€๋Šฅ

ezgif com-resize (1)

๐Ÿ“š ์ถ”๊ฐ€ ๊ตฌํ˜„ ์‚ฌํ•ญ

(Front-End Deployment)

  • Github ๋ฐฐํฌ ์ปค์Šคํ…€ ๋„๋ฉ”์ธ ํ™œ์„ฑํ™” / Https ํ•ด์ œ

github deploy

(Back-End Deployment)

  • Nginx ๋ฐฐํฌ:

    • AWS Lightsail์—์„œ Ubuntu ํ™˜๊ฒฝ vscode ssh ์—ฐ๊ฒฐ
    • Django repository git clone
    • Gunicorn ์„ค์น˜ ๋ฐ ์—ฐ๊ฒฐ
    • Nginx ์„ค์น˜ / Gunicorn ์—ฐ๊ฒฐ ๋ฐ ๋ฐฐํฌ

ezgif com-resize (2)

๐Ÿ“œ10. ์—๋Ÿฌ ๋ฐ ํ•ด๊ฒฐ: ๊ฐœ๋ฐœ ์ค‘ ๋ฐœ์ƒํ•œ ์ฃผ์š” ๋ฌธ์ œ ๋ฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

โš’ ์˜ค๋ฅ˜ 1: "400 (Bad Request)" ์˜ค๋ฅ˜ ๋ฐœ์ƒ

  • ์›์ธ: ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜

  • ํ•ด๊ฒฐ์ฑ…:

    • ํ”„๋ก ํŠธ์—”๋“œ ์ˆ˜์ •:

      ํ•„์ˆ˜ ํ•„๋“œ์™€ ๋ฐ์ดํ„ฐ ํ˜•์‹ ํ™•์ธ ํ›„ ์ „์†ก

      fetch('http://127.0.0.1:8000/api/user/register/', {
        method: 'POST',
        mode: 'cors', 
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({
          username: username,
          email: email,
          password: password,
          password2: confirmPassword
        })
      })
    • ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ํ›„ ์„œ๋ฒ„ ๋กœ๊ทธ ์ •์ƒ์ž‘๋™ ํ™•์ธ

โš’ ์˜ค๋ฅ˜ 2: AssertionError in Allauth

  • ์‚ฌ์šฉ์ž ์ธ์ฆ, ๋“ฑ๋ก, ๋กœ๊ทธ์ธ, ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ธฐ๋Šฅ๋“ฑ ์ œ๋Œ€๋กœ ๋™์ž‘ ํ•˜์ง€ ์•Š์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ ๋„ค์ž„

  • ์›์ธ: ACCOUNT_USERNAME_REQUIRED ์„ค์ •์ด False๋กœ ๋˜์–ด ์žˆ์Œ

  • ํ•ด๊ฒฐ์ฑ…: settings.py์—์„œ ACCOUNT_USERNAME_REQUIRED๋ฅผ True๋กœ ์„ค์ •

โš’ ์˜ค๋ฅ˜ 3: ํ† ํฐ ์ €์žฅ ๋ฐ ์‚ฌ์šฉ ์˜ค๋ฅ˜

  • ์ผ๋ฐ˜ token ์ธ์ฆ ๊ตฌํ˜„์‹œ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜

  • ํ•ด๊ฒฐ์ฑ…:

    • ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ ์ˆ˜์ •:

      ํ† ํฐ ํ‚ค ์ผ์น˜ ํ™•์ธ

      localStorage.setItem('token', data.Token);
    • API ํ˜ธ์ถœ ์‹œ ํ† ํฐ ํฌํ•จ:

      Authorization ํ—ค๋”์— ํ† ํฐ ์ถ”๊ฐ€

      headers: {
          'Content-Type': 'application/json',
          'Authorization': `Token ${localStorage.getItem('token')}`
      }

โš’ ์˜ค๋ฅ˜ 4: Failed to Start A high performance web server and a reverse proxy server

  • nginx๋ฅผ ์žฌ์‹œ์ž‘ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด systemctl status nginx.service ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํ™•์ธํ•ด ๋ณด๋‹ˆ ์œ„ ์˜ค๋ฅ˜์™€ ๊ฐ™์ด ๋ฐœ์ƒํ•จ.

  • ํ•ด๊ฒฐ์ฑ…:

    - sudo nginx -t ๋ฅผ ํ†ตํ•ด ํŒŒ์ผ ๋ฌธ๋ฒ• ๊ฒ€์‚ฌ๋ฅผ ํ•ด๋ด„
    
    
    - nginx.conf ํŒŒ์ผ 68๋ฒˆ์งธ ์ค„ ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ด์„œ ํ™•์ธ
    
    
    - include /etc/nginx/sites-enabled/*; ์ง€์‹œ์–ด๊ฐ€ ์ค‘๋ณต๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ญ์ œ
    
    
    - ๋‹ค์‹œ sudo nginx -t ๋ฅผ ํ†ตํ•ด ๊ฒ€์‚ฌํ•ด๋ณด๋‹ˆ ๋ฌธ์ œ๊ฐ€ ์—†์–ด์„œ ์„œ๋ฒ„ ์žฌ์‹œ์ž‘
    

๐Ÿ’ก ์•Œ๊ฒŒ๋œ ์ :

  • ํ† ํฐ ๊ด€๋ จ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ๋ฐ ํ† ํฐ ๊ด€๋ฆฌ ๋ฐฉ์‹์˜ ์ฐจ์ด(JWT vs. Token Authentication)๋ฅผ ์•Œ๊ฒŒ ๋จ.

  • ํด๋ž˜์Šค ์„ค์ • ์˜ต์…˜์—์„œ ๋‹จ์ผํด๋ž˜์Šค์—์„œ ๊ฐ๊ฐ ์•„๋ž˜์™€ ๊ฐ™์ด ์ฐจ์ด๊ฐ€ ์žˆ์Œ์„ ์•Œ๊ฒŒ ๋จ.

  • Simple Jwt Authentication in Views

    • ์„ค์ •: rest_framework_simplejwt.authentication.JWTAuthentication์„ authentication_classes์— ์ถ”๊ฐ€

    • ์‚ฌ์šฉ ์˜ˆ์‹œ:

    from rest_framework_simplejwt.authentication import JWTAuthentication
    from rest_framework.permissions import IsAuthenticated
    from rest_framework.views import APIView
    
    class ExampleView(APIView):
        authentication_classes = [JWTAuthentication]
        permission_classes = [IsAuthenticated]
    
        def get(self, request):
            pass
  • Token Authentication in Views

  • ์„ค์ •: rest_framework.authentication.TokenAuthentication์„ authentication_classes์— ์ถ”๊ฐ€

  • ์‚ฌ์šฉ ์˜ˆ์‹œ:

from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView

class ExampleView(APIView):
    authentication_classes = [TokenAuthentication]
    permission_classes = [IsAuthenticated]

    def get(self, request):
        pass

๐Ÿ“–11. ๊ฐœ๋ฐœํ•˜๋ฉฐ ๋А๋‚€์ : ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ์–ป์€ ๊ฒฝํ—˜ ๋ฐ ๋А๋‚€ ์ 

  • DRF์ฑ…์„ ์ง‘ํ•„ํ•˜๋ฉด์„œ ๊ฐœ๋…๋งŒ ๊ณต๋ถ€๋ฅผ ํ–ˆ๋Š”๋ฐ, ์‹ค์ œ๋กœ ์ ์šฉํ•ด๋ณด๋‹ˆ ๋‹จ์ˆœํ•ด๋ณด์ด๋ฉด์„œ๋„ ๋งค์šฐ ์–ด๋ ต๊ฒŒ ๋А๋‚Œ
  • ํŠนํžˆ ์ผ๋ฐ˜ํ† ํฐ์„ ํ†ตํ•ด ๊ตฌํ˜„์„ ๋งˆ์ณค์ง€๋งŒ, JWTํ† ํฐ๋„ ํ•œ๋ฒˆ ๋„์ „ํ•ด๋ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์— WBS ๊ณ„ํš๋ณด๋‹ค ๊ธฐ๊ฐ„์„ ๋Š˜๋ ค 6๋ฒˆ์˜ ํ”„๋กœ์ ํŠธ ์žฌ์ƒ์„ฑ์„ ๋์— ํ†ต์‹ ์— ์„ฑ๊ณตํ•จ
  • ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ  ์žˆ์ง€๋งŒ, ํ”„๋ก ํŠธ๊ฐœ๋ฐœ์ž์™€ ์†Œํ†ตํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด Js ์ง€์‹๋„ ๊ฐ–์ถฐ์•ผ ํ•จ์„ ๋А๋‚Œ ์ถ”๊ฐ€์ ์œผ๋กœ Vanilla Js ๋ง๊ณ ๋„ React ๋“ฑ ๋‹ค์–‘ํ•œ ๊ณต๋ถ€๋ฅผ ํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ฌ
  • DRF๋ฅผ ํ•˜๋ฉฐ ์–ด๋ ค์› ๋˜ ์ : ์ƒ๊ฐ๋ณด๋‹ค ์ฐธ๊ณ ํ•  ๋งŒํ•œ ๊ฐ•์˜๋‚˜ ์˜์ƒ์ด ์ ์—ˆ๋˜ ์ . ์ฐพ์•„๋ณด๋ฉด ๋ธ”๋กœ๊ทธ ๊ธ€์ด ์žˆ๊ธดํ•œ๋ฐ ์—๋Ÿฌ ์ƒํ™ฉ์ด ๋‹ฌ๋ผ ์ ์šฉํ•  ์ˆ˜ ์—†์—ˆ๋˜์ . ์˜์–ด๋กœ ๋œ ๊ฐ•์˜๋‚˜ ๋ฌธ์„œ๊ฐ€ ๋งŽ์•˜๋˜ ์ . DRF๋Š” GPT์˜ ํ• ๋ฃจ์‹œ๋„ค์ด์…˜์ด ์กฐ๊ธˆ ์‹ฌํ–ˆ๋˜ ์ 
  • ํ•˜์ง€๋งŒ ์–ด๋ ค์šด ๋งŒํผ DRF๋Š” ํฌ์†Œ์„ฑ ์žˆ๊ณ  ๊ฒฝ์Ÿ๋ ฅ ์žˆ๋Š” ๊ธฐ์ˆ ์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ฌ
  • ์„œ๋ฒ„ ๋ฐฐํฌ๋ฅผ ํ•˜๋ฉฐ ์–ด๋ ค์› ๋˜ ์ : ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ด€๋ จ ํ•œ๊ตญ์–ด ๊ฐ•์˜ ๋“ฑ์ด ์ ์–ด ์ ์šฉํ•˜๊ธฐ ์–ด๋ ค์› ์Œ. ๊ธ€๋งŒ ๋ณด๊ณ  ์ดํ•ดํ•˜๊ธฐ ๋ถ€์กฑํ•˜๋‹ค๋Š” ๋А๋‚Œ์ด ๋“ฌ.
  • ์‹ค์ œ ๋ฐฑ์—”๋“œ ๋ฐฐํฌ๋ฅผ AWSlightsail Ubuntu, Gunicorn, Nginx ๋“ฑ์„ ํ†ตํ•ด ํ•ด๋ณด๋‹ˆ ์„œ๋ฒ„๊ด€๋ จ ๊ฐ ์Šคํƒ๋“ค์— ๋Œ€ํ•ด ๊ฐœ๋žต์ ์ธ ๋А๋‚Œ์„ ์ตํž ์ˆ˜ ์žˆ์—ˆ์Œ

๐Ÿ”ฅ EST Soft Mini Project (์šฐ์ˆ˜์ƒ ํ”„๋กœ์ ํŠธ) : https://url.kr/oxmvj4

About

[EstSoft] Django Mini Project2

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages