/Voice-Of-the-Star

🌟VOS🌟: AIλ₯Ό ν™œμš©ν•œ 고인과의 μ±„νŒ… 및 μŒμ„± 볡원 μ„œλΉ„μŠ€

Primary LanguagePython

πŸ‘₯ νŒ€μ› μ†Œκ°œ

κΉ€μ˜ν›ˆ ν”„λ‘œν•„ κΆŒμ˜€μ„± ν”„λ‘œν•„ κ°•μ†Œλ§ ν”„λ‘œν•„ κΉ€μ„±ν˜„ ν”„λ‘œν•„ 이희석 ν”„λ‘œν•„ ν•œμ§€ν˜œ ν”„λ‘œν•„
κΉ€μ˜ν›ˆ κΆŒμ˜€μ„± κ°•μ†Œλ§ κΉ€μ„±ν˜„ 이희석 ν•œμ§€ν˜œ

🌟 ν”„λ‘œμ νŠΈ μ†Œκ°œ

ν”„λ‘œμ νŠΈ λ°°κ²½

1. 맀년 μ¦κ°€ν•˜λŠ” 사망λ₯  2. 애도 μ‹œκ°„ λΆ€μ‘±
맀년 μ¦κ°€ν•˜λŠ” 사망λ₯  애도 μ‹œκ°„ λΆ€μ‘±

μ‚¬νšŒμ μœΌλ‘œ 맀년 μ¦κ°€ν•˜λŠ” μ‚¬λ§μž μˆ˜μ— λŒ€μ‘ν•˜μ—¬, 우리의 μ„œλΉ„μŠ€λŠ” μ½”λ‘œλ‚˜λ‚˜ 각쒅 μ‚¬κ³ λ‘œ 인해 κ°‘μž‘μŠ€λŸ½κ²Œ 이별을 κ²½ν—˜ν•˜κ³ , μŠ¬ν””μ„ μΆ©λΆ„νžˆ μ²˜λ¦¬ν•  μ‹œκ°„μ‘°μ°¨ 갖지 λͺ»ν•˜λŠ” μ΄λ“€μ—κ²Œ ν•„μš”ν•œ 지지와 μœ„λ‘œλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

μ΄λŸ¬ν•œ 상황듀은 κ°œμΈμ—κ²Œ κ·Ήμ‹¬ν•œ μŠ€νŠΈλ ˆμŠ€μ™€ 정신적 뢀담을 κ°€μ Έμ˜€λ©°, 이λ₯Ό μ™„ν™”μ‹œν‚€λŠ” 것이 우리 μ„œλΉ„μŠ€μ˜ 핡심 λͺ©ν‘œμž…λ‹ˆλ‹€.

ν”„λ‘œμ νŠΈ 주제

AIλ₯Ό ν™œμš©ν•œ 고인과의 μ±„νŒ… 및 μŒμ„± 볡원 μ„œλΉ„μŠ€

이미지 1 이미지 2 이미지 3 이미지 4
  1. 고인의 ν…μŠ€νŠΈ μŠ€νƒ€μΌμ„ μž¬ν˜„ν•˜λŠ” μ±„νŒ… μ„œλΉ„μŠ€

    LLM을 ν™œμš©ν•˜μ—¬ 고인의 ν…μŠ€νŠΈ μŠ€νƒ€μΌμ„ μž¬ν˜„ν•˜κ³ , μ±„νŒ…μ„ 톡해 μ‹€μ‹œκ°„μœΌλ‘œ μƒν˜Έμž‘μš©ν•˜λ©° 고인에 λŒ€ν•œ 그리움을 λ‹¬λž  수 μžˆμŠ΅λ‹ˆλ‹€.

  2. 고인의 λͺ©μ†Œλ¦¬λ₯Ό μž¬ν˜„ν•˜λŠ” μŒμ„± 볡원 μ„œλΉ„μŠ€

    μŒμ„± 볡원 λͺ¨λΈλ‘œ 고인의 λͺ©μ†Œλ¦¬λ₯Ό μž¬ν˜„ν•˜μ—¬ λ”μš± μƒμƒν•œ λŒ€ν™” κ²½ν—˜μ„ μ œκ³΅ν•©λ‹ˆλ‹€.

βš™οΈ κ°œλ°œν™˜κ²½

OS: Linux Ubuntu 22.04

Front-end: React Native, JavaScript, Expo

Back-end: Python 3.10, FastAPI

API: Clova speech API, OpenAI API, Kakao Login API

DB: MySQL, MongoDB, Docker, Docker-compose

Tool: Visual Studio Code, MySQL Workbench, MongoDB Compass, Docker Desktop, Swagger UI, Postman, Figma, notion

πŸ—‚ λ””렉토리 ꡬ쑰

vos-server/
β”‚
β”œβ”€β”€ backend/
β”‚   β”œβ”€β”€ app/
β”‚   β”‚   β”œβ”€β”€ ai_models/
β”‚   β”‚   β”‚   β”œβ”€β”€ speaker_identification/
β”‚   β”‚   β”‚        β”œβ”€β”€ clova_speech.py
β”‚   β”‚   β”‚        └── postprocessing.py
β”‚   β”‚   β”‚   β”œβ”€β”€ text_generation/
β”‚   β”‚   β”‚        β”œβ”€β”€ characteristic_generation.py
β”‚   β”‚   β”‚        β”œβ”€β”€ chat_generation.py
β”‚   β”‚   β”‚        β”œβ”€β”€ crime_prevention.py
β”‚   β”‚   β”‚        β”œβ”€β”€ preprocessing.py
β”‚   β”‚   β”‚        β”œβ”€β”€ run_prompt.py
β”‚   β”‚   β”‚        └── token_limit.py
β”‚   β”‚   β”‚   └── voice_cloning/
β”‚   β”‚   β”‚        └── xtts.py
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ api/
β”‚   β”‚   β”‚   β”œβ”€β”€ admin.py
β”‚   β”‚   β”‚   β”œβ”€β”€ chat.py
β”‚   β”‚   β”‚   β”œβ”€β”€ star.py
β”‚   β”‚   β”‚   └── user.py
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ database/
β”‚   β”‚   β”‚   β”œβ”€β”€ connection.py
β”‚   β”‚   β”‚   β”œβ”€β”€ orm.py
β”‚   β”‚   β”‚   └── repository.py
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ resources/
β”‚   β”‚   β”‚   β”œβ”€β”€ audio/
β”‚   β”‚   β”‚   β”œβ”€β”€ images/
β”‚   β”‚   β”‚   └── text/
β”‚   β”‚   β”‚        β”œβ”€β”€ crime_prevention.txt
β”‚   β”‚   β”‚        β”œβ”€β”€ extract_characteristic.txt
β”‚   β”‚   β”‚        └── system_input.txt
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ schema/
β”‚   β”‚   β”‚   β”œβ”€β”€ request.py
β”‚   β”‚   β”‚   └── response.py
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ service/
β”‚   β”‚   β”‚   β”œβ”€β”€ ai_serving.py
β”‚   β”‚   β”‚   β”œβ”€β”€ auth.py
β”‚   β”‚   β”‚   └── s3_service.py
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ main.py
β”‚   β”‚   └── security.py
β”‚   β”‚
β”‚   └── requirements.txt
β”‚
β”œβ”€β”€ .env
β”œβ”€β”€ .gitignore
β”œβ”€β”€ docker-compose.yml
└── README.md

⛓️ μ„œλΉ„μŠ€ νŒŒμ΄ν”„λΌμΈ

Untitled

🧬 μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜

Untitled

πŸ“± νŽ˜μ΄μ§€λ³„ κΈ°λŠ₯

πŸ”— λ‘œκ·ΈμΈ ν™”λ©΄

  • λͺ¨λ°”일 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 접속 μ΄ˆκΈ°ν™”λ©΄
    • κΈ°μ‘΄ 둜그인 및 μ—‘μ„ΈμŠ€ 토큰 μœ νš¨κΈ°κ°„ λ‚΄ μ•± μ‹€ν–‰ μ‹œ λ°”λ‘œ 고인과의 μ±„νŒ… 리슀트 ν™”λ©΄ μ§„μž…
  • 카카였 둜그인 APIλ₯Ό ν†΅ν•œ μ†Œμ…œ 둜그인 κ΅¬ν˜„

πŸ”— νšŒμ›κ°€μž…

  • 이메일 μ£Όμ†Œ ν˜•νƒœλ‘œ 아이디 생성
  • 이메일 쀑볡 확인 κΈ°λŠ₯을 톡해 κΈ°μ‘΄ DB에 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 아이디 일 경우 κ°€μž… κ°€λŠ₯ν•˜λ„λ‘ κ΅¬ν˜„
  • β€˜λΉ„λ°€λ²ˆν˜Έ ν™•μΈβ€™λž€μ„ 톡해 λΉ„λ°€λ²ˆν˜Έ 일치 μ—¬λΆ€ νŒλ‹¨
  • μ•½κ΄€ λ™μ˜ μ‹œ νšŒμ›κ°€μž… κ°€λŠ₯

πŸ”— λ³„(고인) 생성

  • 고인의 κΈ°λ³Έ 정보, νŠΉμ§•(ν”„λ‘¬ν”„νŠΈ μ—”μ§€λ‹ˆμ–΄λ§μ˜ 페λ₯΄μ†Œλ‚˜ 데이터), μ±„νŒ… μŠ€νƒ€μΌ μΆ”μΆœ 및 κΈ°μ–΅ ν•™μŠ΅μ„ μœ„ν•œ μΉ΄μΉ΄μ˜€ν†‘ λŒ€ν™” 파일 λͺ¨λ‘ μž…λ ₯ν•˜μ—¬μ•Ό 별 생성 κ°€λŠ₯
  • μ—…λ‘œλ“œ 된 ν…μŠ€νŠΈ 파일의 νŠΉμ§• μΆ”μΆœ 및 ν”„λ‘¬ν”„νŠΈ 데이터 DB μ €μž₯

πŸ”— λͺ©μ†Œλ¦¬ 뢄리

  • 고인의 μŒμ„±μ΄ λ‹΄κΈ΄ μ˜€λ””μ˜€ νŒŒμΌμ„ μž…λ ₯λ°›κ³  AI λͺ¨λΈμ„ 톡해 ν™”μž 뢄리
    • μ—¬λŸ¬ μ‚¬λžŒμ˜ λͺ©μ†Œλ¦¬κ°€ λ‹΄κΈ΄ νŒŒμΌλ„ μ—…λ‘œλ“œ 및 뢄리 κ°€λŠ₯
    • ν™”μžμ˜ 수 만큼 μ˜€λ””μ˜€ λ¦¬μŠ€νŠΈκ°€ 생기고 ν™”μžμ˜ λΆ„λ¦¬λœ μŒμ„± 파일 쀑 κ°€μž₯ κΈ΄ μž¬μƒ μ‹œκ°„μ˜ μ˜€λ””μ˜€λ₯Ό μƒ˜ν”Œλ‘œ 제곡, μž¬μƒ λ²„νŠΌμ„ 톡해 μœ μ €κ°€ ν•˜λ‚˜μ”© μž¬μƒν•¨μœΌλ‘œμ¨ ν™”μž ꡬ뢄 및 선택 κ°€λŠ₯
  • μ„ νƒλœ ν™”μžμ˜ μŒμ„±μ„ AI λͺ¨λΈμ„ 톡해 νŠΉμ§• μΆ”μΆœ 및 벑터 데이터 DB μ €μž₯

πŸ”— μ±„νŒ… 리슀트

  • 별(고인)이 μƒμ„±λ˜λ©΄ μ±„νŒ… λ¦¬μŠ€νŠΈμ— μƒμ„±λœ λ³„μ˜ 수만큼 μ±„νŒ… 리슀트 ν‘œκΈ°
  • μ±„νŒ… μ „
    • β€œλ©”μ‹œμ§€κ°€ μ—†μŠ΅λ‹ˆλ‹€.” 문ꡬ ν‘œκΈ°
  • μ±„νŒ… ν›„
    • λ§ˆμ§€λ§‰ μ±„νŒ…μ„ DBμ—μ„œ 쑰회 ν›„ ν‘œκΈ°

πŸ”— μ±„νŒ…

  • μ±„νŒ… λ‹΅λ³€ 생성
    • 고인의 μ±„νŒ… μŠ€νƒ€μΌ μž¬ν˜„ 및 κΈ°μ–΅ 기반의 λ©”μ‹œμ§€λ₯Ό 생성해 μ‹€μ‹œκ°„ μ±„νŒ… κΈ°λŠ₯ κ΅¬ν˜„

πŸ”— μŒμ„± 볡원

  • λ©”μ‹œμ§€ λ²„νŠΌμ„ 1초 이상 ν΄λ¦­ν•¨μœΌλ‘œμ¨ νŒμ—… 메뉴가 λ“±μž₯ν•˜κ³  β€˜λͺ©μ†Œλ¦¬ 듣기’ λ²„νŠΌ 클릭 μ‹œ ν•΄λ‹Ή ν…μŠ€νŠΈλ₯Ό 고인의 λͺ©μ†Œλ¦¬λ‘œ μž¬ν˜„ν•˜λŠ” μ˜€λ””μ˜€ μž¬μƒ

πŸ”— λ³΄μ΄μŠ€ ν”Όμ‹± 및 범죄 탐지

  • κΈˆμ „, 금육 κ΄€λ ¨ λŒ€ν™” λ‚΄μš© 탐지 μ‹œ β€œμ˜μ‹¬μŠ€λŸ¬μš΄ λ©”μ‹œμ§€κ°€ κ°μ§€λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ‹€μ‹œ λ©”μ‹œμ§€λ₯Ό μ „μ†‘ν•΄μ£Όμ„Έμš”.” λΌλŠ” λ©”μ‹œμ§€λ₯Ό λ„μš°λ©° λΆ€μ μ ˆν•œ μ‘λ‹΅μœΌλ‘œ μΈν•œ λŒ€ν™”κ°€ μ§„ν–‰λ˜μ§€ μ•Šλ„λ‘ 차단 κΈ°λŠ₯ κ΅¬ν˜„

πŸ’» ν•΅μ‹¬ 기술

Frontend

  • 고인의 이미지λ₯Ό λͺ¨λ°”μΌκΈ°κΈ°μ˜ μΊμ‹œνŒŒμΌλ‘œ μž„μ‹œ μ €μž₯ ν›„ μ±„νŒ…λ°©μ—μ„œ 뢈러였기
  • 메세지λ₯Ό long press μ‹œ 리슀트 νŒμ—…, λͺ©μ†Œλ¦¬ λ“£κΈ°κΈ°λŠ₯ μΆ”κ°€
  • Base64둜 μΈμ½”λ”©λœ ν™”μžλ³„ μŒμ„± 데이터λ₯Ό expo의 Audioλ₯Ό μ΄μš©ν•˜μ—¬ ν”„λ‘ νŠΈμ—μ„œ μž¬μƒ

Backend

  • μ±„νŒ…λ°© μž…μž₯ μ‹œ μ›Ή μ†ŒμΌ“ μ‹€ν–‰
  • νšŒμ›κ°€μž… μ‹œ λΉ„λ°€λ²ˆν˜Έ hash μ•”ν˜Έν™” ν›„ DB μ €μž₯
  • HS256 μ•Œκ³ λ¦¬μ¦˜ μ‚¬μš© jwt 생성
  • 둜그인 μ‹œ λΉ„λ°€λ²ˆν˜Έ bcrypt 인코딩 및 plain, hash password 검증, access token λ°œκΈ‰
  • access token λ§Œλ£ŒκΈ°κ°„ μ„€μ •μœΌλ‘œ ν•΄λ‹Ή κΈ°κ°„ λ™μ•ˆ 둜그인 μœ μ§€ 및 API 호좜 κ°€λŠ₯
  • Database ORM(SQLAlchemy) 적용
  • API μ‹€ν–‰ μ‹œ μœ μ € 검증 및 쑰회 Dependency Injection
  • λ°μ΄ν„°λ² μ΄μŠ€ 가상 μ»¨ν…Œμ΄λ„ˆ 운영(MySQL, MongoDB)
  • μœ μ €, 고인 이미지 AWS S3 μ €μž₯
  • Voice Cloning λͺ¨λΈ μ„œλΉ™
    • 고인 μŒμ„± λ°μ΄ν„°λ‘œλΆ€ν„° μŒμ„± νŠΉμ§• vector 데이터 μΆ”μΆœ 및 λ°μ΄ν„°λ² μ΄μŠ€ μ €μž₯ β†’ μŒμ„± μž¬μƒ μ‹œ 데이터 쑰회 ν›„ μŒμ„± μž¬μƒ μ‹œ model, text, vector 데이터λ₯Ό 기반으둜 μŒμ„± 볡원

AI

Untitled

πŸ“‘ Text Generation (Prompt Engineering)

고인의 μ±„νŒ… μŠ€νƒ€μΌμ„ λ°˜μ˜ν•˜μ—¬ ν…μŠ€νŠΈ 닡변을 μƒμ„±ν•˜λŠ” ν”„λ‘¬ν”„νŠΈ μ œμž‘

  • ν…μŠ€νŠΈ νŠΉμ§• μΆ”μΆœ ν”„λ‘¬ν”„νŠΈ (GPT-3.5)

    고인의 ν…μŠ€νŠΈμ—μ„œ νŠΉμ§•μ μΈ μš”μ†Œλ₯Ό 10가지 λ‚΄μ™Έλ‘œ μΆ”μΆœ

    μΆ”μΆœλœ νŠΉμ§•μ€ μ±„νŒ… 생성 ν”„λ‘¬ν”„νŠΈμ— μ‚¬μš©

  • μ±„νŒ… 생성 ν”„λ‘¬ν”„νŠΈ (GPT-4)

    고인의 μ±„νŒ…μŠ€νƒ€μΌμ„ λ¬˜μ‚¬ν•˜μ—¬ 고인의 μ±„νŒ…μŠ€νƒ€μΌκ³Ό μœ μ‚¬ν•œ 닡변을 생성

    고인의 페λ₯΄μ†Œλ‚˜λ₯Ό μ£Όμž…ν•˜κ³ , chain-of-thought / least-to-most λ“±μ˜ 기법을 μˆ˜ν–‰

  • λ³΄μ΄μŠ€ν”Όμ‹± 방지 ν”„λ‘¬ν”„νŠΈ (GPT-3.5)

    λ³Έ μ„œλΉ„μŠ€κ°€ 범죄에 μ•…μš©λ˜λŠ” 것을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ μ±„νŒ… λ‚΄μš©μ—μ„œ μ˜μ‹¬μŠ€λŸ¬μš΄ λ©”μ‹œμ§€λ₯Ό 감지

πŸŽ™οΈ Speaker Identification

λ‹€μˆ˜μ˜ ν™”μžκ°€ λ‹΄κΈ΄ μŒμ„±νŒŒμΌμ—μ„œ 고인의 λͺ©μ†Œλ¦¬λ§Œ μΆ”μΆœ

Svoice SpeechBrain VoiceFilter Clova speech AI
model weight 제곡 O O O O
3λͺ…이상 뢄리 O X X O
confidence 제곡 X X X O

β†’ 3λͺ… μ΄μƒμ˜ ν™”μž 뢄리 κ°€λŠ₯ μ—¬λΆ€ 및 μ„±λŠ₯을 κ³ λ €ν•˜μ—¬ Clova speech AI μ„ μ •

πŸ”Š Voice cloning

μΆ”μΆœλœ 고인의 μŒμ„±κ³Ό μƒμ„±λœ ν…μŠ€νŠΈλ₯Ό ν™œμš©ν•΄ 고인 λͺ©μ†Œλ¦¬ 볡원

SCE-TTS Bark vall-e xtts-v2
zero-shot x o o o
ν•œκ΅­μ–΄ 지원 o x x o
inference data 3μ‹œκ°„ 3초 3초 3초

β†’ ν•œκ΅­μ–΄ 지원 및 μŒμ„± 볡원 μ„±λŠ₯을 κ³ λ €ν•˜μ—¬ xtts-v2 μ„ μ •

β†˜οΈ Voice of the star μ‹€ν–‰

1. μ„€μΉ˜ (Linux version)

1-1. pytorch μ„€μΉ˜

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu

1-2. requirements μ„€μΉ˜

pip install -r backend/requirements.txt

1-3. ffmpeg μ„€μΉ˜

sudo apt install ffmpeg

2. ν”„λ‘¬ν”„νŠΈ 파일 μΆ”κ°€

3가지 ν”„λ‘¬ν”„νŠΈ νŒŒμΌμ„ 각각의 κ²½λ‘œμ— μΆ”κ°€ν•©λ‹ˆλ‹€.

PROMPT_FILE_PATH (고인 ν…μŠ€νŠΈ νŠΉμ§•μ„ μΆ”μΆœν•˜λŠ” ν”„λ‘¬ν”„νŠΈ)

VOS-server/backend/app/resources/text/extract_characteristic.txt

SYSTEM_INPUT_PATH (고인의 ν…μŠ€νŠΈ μŠ€νƒ€μΌκ³Ό μœ μ‚¬ν•œ μ±„νŒ… 응닡을 μœ λ„ν•˜λŠ” ν”„λ‘¬ν”„νŠΈ)

VOS-server/backend/app/resources/text/system_input.txt

VOICE_PHISHING_PROMPT_PATH (λ³΄μ΄μŠ€ν”Όμ‹± 감지 ν”„λ‘¬ν”„νŠΈ)

VOS-server/backend/app/resources/text/crime_prevention.txt

3. .env 파일 μ„ΈνŒ…

.env 파일 λ‚΄ ν™˜κ²½λ³€μˆ˜ μ„ΈνŒ…μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

[μž‘μ„± μ˜ˆμ‹œ]

SECRET_KEY="jwt 생성을 μœ„ν•œ λžœλ€ν•œ λΉ„λ°€ν‚€" # 생성방법: terminal> openssl rand -hex 32
JWT_ALGORITHM="JWT μ•Œκ³ λ¦¬μ¦˜" # μ˜ˆμ‹œ: HS256

# MySQL
MYSQL_URL="MYSQL URL" # μ˜ˆμ‹œ: mysql+pymysql://root:vos@127.0.0.1:3306/vos"
MYSQL_BINDING_PORT="MYSQL BINDING PORT" # μ˜ˆμ‹œ: 3306
MYSQL_PORT= "MYSQL PORT" # μ˜ˆμ‹œ: 3306

MYSQL_DATABASE="DATABASE NAME"
MYSQL_USER="USER NAME"
MYSQL_PASSWORD="MYSQL PASSWORD"
MYSQL_ROOT_PASSWORD="MYSQL ROOT PASSWORD"

# MongoDB
MONGO_URI="MongoDB URI" # μ˜ˆμ‹œ: mongodb://vos:vos@localhost:27017/
MONGO_BINDING_PORT="MongoDB BINDING PORT" # μ˜ˆμ‹œ: 27017
MONGO_INITDB_ROOT_USERNAME="MongoDB USER NAME"
MONGO_INITDB_ROOT_PASSWORD="MongoDB USER PASSWORD"

# AI
INVOKE_URL="CLOVA SPEECH INVOKE URL"
CLOVA_SECRET_KEY="CLOVA SPEECH SECRET KEY"
GPT_API_KEY = "ChatGPT API KEY"
VOICE_CLONING_MODEL_PATH="tts_models/multilingual/multi-dataset/xtts_v2"
COMBINED_STAR_VOICE_FILE_PATH="VOS-server/backend/app/resources/audio"

# Prompt
PROMPT_FILE_PATH="VOS-server/backend/app/resources/text/extract_characteristic.txt"
SYSTEM_INPUT_PATH="VOS-server/backend/app/resources/text/system_input.txt"
VOICE_PHISHING_PROMPT_PATH="VOS-server/backend/app/resources/text/crime_prevention.txt"

# CORS
ORIGIN="Allowance Domain"

# AWS S3
S3_BUCKET="BUCKET NAME"
AWS_ACCESS_KEY_ID="AWS ACCESS KEY ID"
AWS_SECRET_ACCESS_KEY="AWS SECRET ACCESS KEY"

4. μ„œλ²„ μ‹€ν–‰

cd backend/app
uvicorn main:app --host 0.0.0.0 --port 8000

5. Docker μ»¨ν…Œμ΄λ„ˆ 생성 및 μ‹€ν–‰

docker-compose up -d

πŸ“Œ Reference

Front-end Details

AI references