Skip to content

Latest commit

ย 

History

History
132 lines (96 loc) ยท 6.81 KB

File metadata and controls

132 lines (96 loc) ยท 6.81 KB

ํŒ€ 09 ๋ณด์„ฑ๋ง์ฐจ, ๋ฐฑ์—”๋“œ & AI ๊ธฐ์ˆ  ์ฝ”๋“œ ์„ค๋ช…

1๏ธโƒฃ ํด๋” ๊ตฌ์กฐ

ํด๋” ๊ตฌ์กฐ ๊ธฐ๋Šฅ ์„ค๋ช…
image ๐Ÿšฉ accounts : ๊ณ„์ •์ •๋ณด, ์ดํ™”์ธ ํšŒ์›๊ฐ€์ž… ๊ด€๋ จ

๐Ÿšฉ clova : ์„ค์ • ํŒŒ์ผ (๊ธฐ๋ณธํด๋”)

๐Ÿšฉ informations : ๊ฐœ์ธ์ •๋ณด ๋ฐ ํ–‰์šดํฌ์ธํŠธ์ƒ์ , ๊ณต์ง€์‚ฌํ•ญ ๋“ฑ ๊ด€๋ฆฌ

๐Ÿšฉ lostitem : ๊ฒ€์ƒ‰, ๋“ฑ๋ก ๋“ฑ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ํฌํ•จ



2๏ธโƒฃ ์ฃผ์š” ์ฝ”๋“œ ์†Œ๊ฐœ

์ฃผ์š” ์ฝ”๋“œ Source Code ์ฝ”๋“œ ์„ค๋ช…
์ดํ™”์ธ ์ธ์ฆ ๋ฉ”์ผ image ๐Ÿšฉ Django.core.mail์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ์ด๋ฉ”์ผ ๋ฐœ์†ก ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์ดํ™”์—ฌ๋Œ€ ์ด๋ฉ”์ผ ์ธ์ฆ ๊ธฐ๋Šฅ ์‚ฌ์šฉ

๐Ÿšฉ email ์•„์ด๋””๋งŒ ์ž…๋ ฅ๋ฐ›์•„ ewha.ac.kr ์ฃผ์†Œ๋ฅผ ๋ถ™์—ฌ ๋ฉ”์ผ์„ ๋ฐœ์†กํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ•์ œ๋กœ ์ดํ™”์ธ ์ด๋ฉ”์ผ๋กœ๋งŒ ์ธ์ฆ๋ฒˆํ˜ธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„
๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๐Ÿ“clova/lostitem/views.py
๐Ÿ“‘LostSearchView

๐Ÿ“clova/lostitem/GPT_find.py
โ–ธ ๐Ÿ‘ฉโ€๐Ÿ’ป ์‚ฌ์šฉํ•œ ์˜คํ”ˆ์†Œ์Šค : Google Cloud API, KoNLPy์˜ Komoran ํ˜•ํƒœ์†Œ ๋ถ„์„๊ธฐ, scikitlearn์˜ TfidfVectorizer
๐Ÿšฉ ๊ฒ€์ƒ‰์„ ์œ„ํ•ด ์ž…๋ ฅ ๋ฐ›์€ ์ •๋ณด ์ค‘ ์ผ๋ถ€๋Š” ์ดˆ๊ธฐ ํ•„ํ„ฐ๋ง์— ์‚ฌ์šฉ

๐Ÿšฉ ํ•„ํ„ฐ๋ง ๋œ DB๋ฅผ ๊ฐ€์ง€๊ณ  find(filtered_data, description) ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰. find ํ•จ์ˆ˜๋Š” ์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„๋ฅผ ํ†ตํ•ด ๊ณ„์‚ฐ๋œ ์ƒ์œ„ 3๊ฐœ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜

๐Ÿšฉ jupyter ํ˜•์‹์œผ๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ .py ํ˜•์‹์œผ๋กœ ์ˆ˜์ •ํ•˜์—ฌ GPT_find.py ํŒŒ์ผ์— ์ €์žฅ ํ›„ LostSearchView์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก import ํ•ด์˜ค๋Š” ๋ฐฉ์‹์œผ๋กœ ์„ค๊ณ„
๋“ฑ๋ก ๊ธฐ๋Šฅ ๐Ÿ“clova/lostitem/views.py
๐Ÿ“‘LostImageUploadView & LostUploadView

๐Ÿ“clova/lostitem/GPT_desc.py
โ–ธ ๐Ÿ‘ฉโ€๐Ÿ’ป ์‚ฌ์šฉํ•œ ์˜คํ”ˆ์†Œ์Šค : chat gpt 4.o API
๐Ÿšฉ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์‚ฌ์ง„ ํŒŒ์ผ์„ ๋งํฌํ˜•์‹์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์œ„ํ•ด ์ž„์‹œ๋กœ media ํŒŒ์ผ์— ์ €์žฅํ•˜์—ฌ, url์„ ๋ถˆ๋Ÿฌ์˜ค๋„๋ก ์„ค๊ณ„

๐Ÿšฉ ๋ถ„์‹ค์‹œ๊ฐ„๊ณผ ๋‚ ์งœ๋Š” ํ˜„์žฌ ์‹œ์ ์„ ๊ธฐ์ค€์œผ๋กœ ์ž๋™์œผ๋กœ ์ž…๋ ฅ๋˜๋„๋ก ๋ฐ˜ํ™˜

๐Ÿšฉ register(imagefile) ํ•จ์ˆ˜๋ฅผ ๊ฑฐ์ณ category, description, title ํ•ญ๋ชฉ์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์„ค๊ณ„

๐Ÿšฉ register ํ•จ์ˆ˜๋Š” ์•ž์„  ๊ฒ€์ƒ‰ ๊ณผ์ •๊ณผ ๋™์ผํ•˜๊ฒŒ GPT_desc.py ํŒŒ์ผ์— ํ”„๋กฌํ”„ํŒ…๋œ GPT api ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด๋‘” ๋’ค import ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„

๐Ÿšฉ ์„ฑ๊ณต์ ์œผ๋กœ GPT์—์„œ ์„ค๋ช…์ด ์ƒ์„ฑ๋˜์—ˆ๋‹ค๋ฉด ์„œ๋ฒ„์ฝ”๋“œ 200์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ํ”„๋ก ํŠธ์—”๋“œ์— Response ์‘๋‹ต ๋ฐ˜ํ™˜

๐Ÿšฉ GPT์—์„œ ์„ค๋ช…์ด ์ƒ์„ฑ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด error ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์„œ๋ฒ„์˜ค๋ฅ˜ 500 ๋ฐ˜ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋‹ค์‹œ ์ด๋ฏธ์ง€๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„



3๏ธโƒฃ ๋ฐฐํฌ ๊ณผ์ •์—์„œ์˜ ์ถ”๊ฐ€์ ์ธ Error Handling

๐Ÿ“ข Git Action ์ž๋™ํ™”๋ฅผ ํ†ตํ•ด ์ˆ˜์ •๋œ ์ฝ”๋“œ ์ž๋™ ๋ฐ˜์˜

git remote -v #ํ˜„์žฌ ๊ฐœ๋ฐœํ™˜๊ฒฝ๊ณผ ์—ฐ๊ฒฐ๋œ git remote ์ฃผ์†Œ ํ™•์ธ
git branch -a #ํ˜„์žฌ ๊ฐœ๋ฐœํ™˜๊ฒฝ๊ณผ ์—ฐ๊ฒฐ๋œ git branch ์ด๋ฆ„ ํ™•์ธ

## ์ˆ˜์ •๋œ code๋ฅผ git์— ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•œ ํ™˜๊ฒฝ์ด ํ™•์ธ๋œ ๊ฒฝ์šฐ 

git add .  #์ˆ˜์ •๋œ code ์ „์ฒด๋ฅผ git์— ์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•ด ๋ฐ˜์˜
git commit -m "commit message" #์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ธฐ๋Šฅ๋ณ„๋กœ update
git pull origin main #origin(local)์—์„œ main(git)์œผ๋กœ ๋ฐ˜์˜ํ•œ ์ฝ”๋“œ pull
  • git pull ์—…๋กœ๋“œ๋œ ์ฝ”๋“œ๋Š” git action์„ ํ†ตํ•ด ์ž๋™์œผ๋กœ ๋ฐฐํฌ ๋ฐ˜์˜

  • Git์— ์—…๋กœ๋“œํ•˜๋Š” ๊ณผ์ •์—์„œ chatGPT API Key, Django Key ๋“ฑ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋Š” .env.prod์™€ .env ํŒŒ์ผ์— ์ž‘์„ฑํ•˜์—ฌ gitignore (GitHub์— ์—…๋กœ๋“œ๋˜์ง€ ์•Š๋„๋ก ๊ด€๋ฆฌ)

  • ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ๊ณผ์ •์—์„œ ๊ผญ ํ•„์š”ํ•œ ๋น„๋ฐ€ ์ •๋ณด๋“ค์€ Git Secret์— ์ž‘์„ฑ

  • git action ์ž๋™ํ™” ๋นŒ๋“œ ๊ณผ์ •์—์„œ ํ•„์š”ํ•œ ํŒŒ์ผ์„ ์ž„์˜๋กœ ์ƒ์„ฑํ•˜๋„๋ก ๊ด€๋ฆฌ


#(์˜ˆ) .github/workflows/deploy.yml

- name: create env file
  run: |
    touch .env
    echo "${{ secrets.ENV_VARS }}" >> .env
    
    #django key, Debug ์—ฌ๋ถ€ ๋“ฑ์ด ์ €์žฅ๋œ ENV_VARS secret์„ .env ํŒŒ์ผ๋กœ ๋นŒ๋“œ
    
- name: create json file
  uses: jsdaniell/create-json@v1.2.2
  with:
    name: "extended-medium-423214-k4-3cd01a759605.json"
    json: ${{ secrets.CHATGPT }}
    dir: '.'
    
    #chatGPT ์‹คํ–‰์„ ์œ„ํ•ด ํ•„์š”ํ•œ JSON ํŒŒ์ผ์„ ์ƒ์„ฑ

๐Ÿ“ข [Docker Container]

  • clova.site ๋‚ด๋ถ€์—์„œ chatGPT API ์‹คํ–‰๊ณผ ๊ฒ€์ƒ‰ ๊ณผ์ •์—์„œ์˜ ํ˜•ํƒœ์†Œ ๋ถ„์„์„ ์œ„ํ•ด ๋ฌด๊ฑฐ์šด dependencies๊ฐ€ ํ•„์š” โ†’ ์ด๋ฏธ dependencies๊ฐ€ ์„ค์น˜๋œ python:3.8-slim-buster๋ฅผ builder๋กœ ์„ ํƒํ•˜์—ฌ ๋นŒ๋“œ ๊ณผ์ •์—์„œ time out ๋˜์ง€ ์•Š๋„๋ก ์„ค๊ณ„

  • Docker Container๋ฅผ ํ†ตํ•ด ๊ฐ€์ƒํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜์—ฌ docker ์œ„์—์„œ ์›น์ด ์ž‘๋™ํ•˜๋„๋ก ์›น ์„ค๊ณ„

# pull official base image
FROM python:3.8-slim-buster as builder

# set work directory
WORKDIR /usr/src/app
  • requirements.txt์— ํ•„์š”ํ•œ dependencies ๋ชจ๋‘ ์ž‘์„ฑํ•˜์—ฌ ํ•˜๋‚˜์”ฉ ์„ค์น˜ํ•˜๋˜, no cache dir ์˜ต์…˜ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜ ๊ณผ์ •์—์„œ์˜ ์˜ค๋ฅ˜ ์ตœ์†Œํ™”
# update pip
RUN pip install --upgrade pip

# install dependencies
COPY ./requirements.txt .
RUN pip wheel --no-cache-dir --no-deps --wheel-dir /usr/src/app/wheels -r requirements.txt
  • web ๋นŒ๋“œ ๊ณผ์ •์—์„œ gunicorn ์‚ฌ์šฉํ•˜์˜€์œผ๋‚˜, timeout 120 ์˜ต์…˜์„ ๊ฑธ์–ด ๋ฌด๊ฑฐ์šด application์ด ์„ค์น˜๋˜๋Š” ๊ณผ์ •์—์„œ time out ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€
 web:
    container_name: web
    build:
      context: ./
      dockerfile: Dockerfile.prod
    command: gunicorn --timeout 120 clova.wsgi:application --bind 0.0.0.0:8000
    environment:
      DJANGO_SETTINGS_MODULE: clova.settings.prod 
    env_file:
      - .env
    volumes:
      - static:/home/app/web/static
      - media:/home/app/web/media
    expose:
      - 8000
    entrypoint:
      - sh
      - config/docker/entrypoint.prod.sh

๐Ÿ“ข [ํ”„๋ก ํŠธ-๋ฐฑ์—”๋“œ ์—ฐ๊ฒฐ ๊ณผ์ • ์š”์•ฝ]

  1. ๊ฐ€๋น„์•„ ๋„๋ฉ”์ธ ๊ตฌ๋งค
  2. AWS EC2 ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
  3. SSH ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ ํ†ตํ•ด https ์ ‘๊ทผ ๊ถŒํ•œ ํ—ˆ๊ฐ€
  4. ๊ตฌ๋งคํ•œ ๋„๋ฉ”์ธ ์ฃผ์†Œ ๋ถ„๋ฆฌ api.clova.site & www.clova.site
  5. ํ”„๋ก ํŠธ์—”๋“œ Vercel์˜ API ์š”์ฒญ์ด api.clova.site๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜ค๋ฉด ์ฒ˜๋ฆฌ ํ›„ www.clova.site๋กœ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋„๋ฉ”์ธ ์„ค์ •

๐Ÿ“ข [ํ”„๋ก ํŠธ-๋ฐฑ์—”๋“œ ์—ฐ๊ฒฐ ๊ณผ์ • ์ž์„ธํžˆ]

๊ทธ๋กœ์“ฐ 09ํŒ€ ๋ณด์„ฑ๋ง์ฐจ-์ด์ •์€ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ์— ์ž์„ธํ•œ ์—ฐ๊ฒฐ๊ณผ์ •์„ ์—…๋กœ๋“œ

https://dulbong.tistory.com/entry/์กธ์—…ํ”„๋กœ์ ํŠธ-AWS-Vercel-๊ฐ„-์—ฐ๊ฒฐ์„-์œ„ํ•œ-ACM-Route53-์‚ฌ์šฉ



4๏ธโƒฃ How To Test

๐Ÿ‘‡๐Ÿ‘‡๐Ÿ‘‡ ๋ฐฐํฌ ๋งํฌ ์ ‘์† ๐Ÿ‘‡๐Ÿ‘‡๐Ÿ‘‡

https://www.clova.site