Skip to content

CobyApp/fate

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

10 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Fate - ์šด์„ธ ๋ถ„์„ ํ”Œ๋žซํผ

OpenAI ChatGPT API๋ฅผ ํ™œ์šฉํ•œ ํ˜„๋Œ€์ ์ธ ์šด์„ธ ๋ถ„์„ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค. React + Vite๋กœ ๊ตฌ์ถ•๋˜์—ˆ์œผ๋ฉฐ, AWS ์„œ๋ฒ„๋ฆฌ์Šค ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๐ŸŒŸ ์ฃผ์š” ๊ธฐ๋Šฅ

์šด์„ธ ์นดํ…Œ๊ณ ๋ฆฌ

  • ๐Ÿ“œ ํ† ์ •๋น„๊ฒฐ: ํ† ์ • ์ด์ง€ํ•จ ์„ ์ƒ์˜ ์ „ํ†ต ์šด์„ธ ๋ถ„์„
  • ๐Ÿ”ฎ ์‚ฌ์ฃผ: ์ƒ๋…„์›”์ผ์‹œ ๊ธฐ๋ฐ˜ ์ •ํ™•ํ•œ ์‚ฌ์ฃผ๋ช…๋ฆฌํ•™ ๋ถ„์„
  • ๐Ÿ’• ๊ถํ•ฉ: ๋‘ ์‚ฌ๋žŒ์˜ ์‚ฌ์ฃผ๋ฅผ ๋น„๊ตํ•œ ์ƒ์„ธํ•œ ๊ถํ•ฉ ๋ถ„์„
  • ๐Ÿ’– ์—ฐ์• ์šด: ์—ฐ์ธ๊ณผ์˜ ๊ด€๊ณ„์™€ ์• ์ •์šด ๋ถ„์„
  • โœจ ์˜ค๋Š˜์˜ ์šด์„ธ: ์˜ค๋Š˜ ํ•˜๋ฃจ์˜ ์šด์„ธ์™€ ์กฐ์–ธ
  • ๐Ÿ‰ ๋ ๋ณ„ ์šด์„ธ: ๋ ๋ณ„ ์˜ฌํ•ด ์šด์„ธ ๋ถ„์„
  • ๐ŸŽŠ ์‹ ๋…„์šด์„ธ: ์ƒˆํ•ด ์ „๋ฐ˜์ ์ธ ์šด์„ธ์™€ ์กฐ์–ธ

์ธ์ฆ ๋ฐ ํ”„๋กœํ•„

  • ๐Ÿ” Cognito ์ธ์ฆ: ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ์ด๋ฉ”์ผ ์ธ์ฆ
  • ๐Ÿ‘ค ํ”„๋กœํ•„ ๊ด€๋ฆฌ: ๋‹‰๋„ค์ž„, ์ด๋ฆ„, ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ์ˆ˜์ •
  • ๐Ÿ”‘ ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ด€๋ฆฌ: ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ, ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ •
  • ๐Ÿ—‘๏ธ ๊ณ„์ • ๊ด€๋ฆฌ: ํšŒ์›ํƒˆํ‡ด ๊ธฐ๋Šฅ

๊ธฐํƒ€ ๊ธฐ๋Šฅ

  • ๐ŸŒ ๋‹ค๊ตญ์–ด ์ง€์›: ํ•œ๊ตญ์–ด, ์˜์–ด, ์ผ๋ณธ์–ด
  • ๐Ÿ“ ์šด์„ธ ๊ธฐ๋ก: ์ด์ „์— ๋ณธ ์šด์„ธ ๊ฒฐ๊ณผ ์ €์žฅ ๋ฐ ์กฐํšŒ
  • ๐Ÿ“ฑ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ: ๋ชจ๋ฐ”์ผ ๋ฐ ๋ฐ์Šคํฌํ†ฑ ์ง€์›

๐Ÿ—๏ธ ๊ธฐ์ˆ  ์Šคํƒ

ํ”„๋ก ํŠธ์—”๋“œ

  • React 18 - UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • Vite - ๋นŒ๋“œ ๋„๊ตฌ
  • React Router - ๋ผ์šฐํŒ…
  • AWS Amplify v6 - Cognito ์ธ์ฆ ํ†ตํ•ฉ
  • Axios - HTTP ํด๋ผ์ด์–ธํŠธ
  • i18n - ๋‹ค๊ตญ์–ด ์ง€์›

๋ฐฑ์—”๋“œ

  • AWS Lambda - ์„œ๋ฒ„๋ฆฌ์Šค ํ•จ์ˆ˜
  • API Gateway - REST API
  • DynamoDB - NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • AWS Cognito - ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ๊ด€๋ฆฌ
  • S3 - ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ๋ฐ ํ”„๋ก ํŠธ์—”๋“œ ํ˜ธ์ŠคํŒ…
  • CloudFront - CDN ๋ฐ HTTPS
  • AWS SAM - ์ธํ”„๋ผ ์ฝ”๋“œ

AI/ML

  • OpenAI ChatGPT API - ์šด์„ธ ๋ถ„์„ AI (GPT-4)

๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

fate/
โ”œโ”€โ”€ src/                          # React ์†Œ์Šค ์ฝ”๋“œ
โ”‚   โ”œโ”€โ”€ api/                      # API ํ†ต์‹  ๋ชจ๋“ˆ
โ”‚   โ”‚   โ”œโ”€โ”€ config.js            # API ์„ค์ •
โ”‚   โ”‚   โ””โ”€โ”€ fateApi.js           # ์šด์„ธ API ํด๋ผ์ด์–ธํŠธ
โ”‚   โ”œโ”€โ”€ components/               # ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”‚   โ”œโ”€โ”€ Auth.css             # ์ธ์ฆ ์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ
โ”‚   โ”‚   โ”œโ”€โ”€ Login.jsx            # ๋กœ๊ทธ์ธ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”‚   โ”œโ”€โ”€ Register.jsx         # ํšŒ์›๊ฐ€์ž… ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”‚   โ”œโ”€โ”€ ProfileSettings.jsx  # ํ”„๋กœํ•„ ์„ค์ • ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”‚   โ””โ”€โ”€ ...
โ”‚   โ”œโ”€โ”€ contexts/                 # React Context
โ”‚   โ”‚   โ”œโ”€โ”€ AuthContext.jsx      # ์ธ์ฆ ์ƒํƒœ ๊ด€๋ฆฌ
โ”‚   โ”‚   โ””โ”€โ”€ I18nContext.jsx      # ๋‹ค๊ตญ์–ด ์ƒํƒœ ๊ด€๋ฆฌ
โ”‚   โ”œโ”€โ”€ pages/                    # ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”‚   โ”œโ”€โ”€ Home.jsx             # ๋ฉ”์ธ ํŽ˜์ด์ง€ (์šด์„ธ ์นดํ…Œ๊ณ ๋ฆฌ ์„ ํƒ)
โ”‚   โ”‚   โ””โ”€โ”€ Onboarding.jsx       # ์˜จ๋ณด๋”ฉ ํŽ˜์ด์ง€ (๋กœ๊ทธ์ธ ์ „)
โ”‚   โ”œโ”€โ”€ i18n/                     # ๋‹ค๊ตญ์–ด ๋ฒˆ์—ญ
โ”‚   โ”‚   โ”œโ”€โ”€ index.js             # i18n ์„ค์ •
โ”‚   โ”‚   โ””โ”€โ”€ locales/             # ๋ฒˆ์—ญ ํŒŒ์ผ
โ”‚   โ”‚       โ”œโ”€โ”€ ko.json          # ํ•œ๊ตญ์–ด
โ”‚   โ”‚       โ”œโ”€โ”€ en.json          # ์˜์–ด
โ”‚   โ”‚       โ””โ”€โ”€ ja.json          # ์ผ๋ณธ์–ด
โ”‚   โ””โ”€โ”€ config/
โ”‚       โ””โ”€โ”€ amplify.js           # AWS Amplify ์„ค์ •
โ”œโ”€โ”€ aws/                          # AWS ์ธํ”„๋ผ
โ”‚   โ”œโ”€โ”€ lambda/                   # Lambda ํ•จ์ˆ˜๋“ค
โ”‚   โ”‚   โ”œโ”€โ”€ fate-calculator/     # ์šด์„ธ ๊ณ„์‚ฐ ํ•จ์ˆ˜ (OpenAI API)
โ”‚   โ”‚   โ”œโ”€โ”€ get-fate-history/    # ์šด์„ธ ๊ธฐ๋ก ์กฐํšŒ ํ•จ์ˆ˜
โ”‚   โ”‚   โ”œโ”€โ”€ change-password/     # ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ํ•จ์ˆ˜
โ”‚   โ”‚   โ””โ”€โ”€ upload-profile-image/ # ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ํ•จ์ˆ˜
โ”‚   โ””โ”€โ”€ cloudformation/
โ”‚       โ”œโ”€โ”€ template.yaml        # CloudFormation ํ…œํ”Œ๋ฆฟ
โ”‚       โ””โ”€โ”€ samconfig.toml       # SAM ๋ฐฐํฌ ์„ค์ •
โ”œโ”€โ”€ .github/
โ”‚   โ””โ”€โ”€ workflows/
โ”‚       โ””โ”€โ”€ deploy.yml           # GitHub Actions ์ž๋™ ๋ฐฐํฌ
โ”œโ”€โ”€ deploy-frontend.sh           # ํ”„๋ก ํŠธ์—”๋“œ ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ
โ”œโ”€โ”€ package.json
โ”œโ”€โ”€ vite.config.js
โ””โ”€โ”€ README.md

๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

1. ์ €์žฅ์†Œ ํด๋ก  ๋ฐ ์˜์กด์„ฑ ์„ค์น˜

git clone <repository-url>
cd fate
npm install

2. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— .env ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ๋‹ค์Œ ๊ฐ’๋“ค์„ ์„ค์ •:

# AWS Cognito ์„ค์ •
VITE_COGNITO_USER_POOL_ID=ap-northeast-1_xxxxxxxxx
VITE_COGNITO_USER_POOL_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxxxxxxx
VITE_AWS_REGION=ap-northeast-1

# API Gateway URL (๋ฐฐํฌ ํ›„ ์„ค์ •)
VITE_API_URL=https://your-api-id.execute-api.ap-northeast-1.amazonaws.com/dev

์ฐธ๊ณ : AWS ์ธํ”„๋ผ ๋ฐฐํฌ ํ›„ ์‹ค์ œ ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

3. ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰

npm run dev

๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:5173 (๋˜๋Š” ํ‘œ์‹œ๋œ ํฌํŠธ)๋กœ ์ ‘์†ํ•˜์„ธ์š”.

4. ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ

npm run build

๋นŒ๋“œ๋œ ํŒŒ์ผ์€ dist/ ๋””๋ ‰ํ† ๋ฆฌ์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“ฆ ๋ฐฐํฌ

์ž๋™ ๋ฐฐํฌ (GitHub Actions)

main ๋˜๋Š” master ๋ธŒ๋žœ์น˜์— ์ฝ”๋“œ๋ฅผ ํ‘ธ์‹œํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

ํ•„์ˆ˜ GitHub Secrets:

  • AWS_ACCESS_KEY_ID - AWS IAM Access Key ID
  • AWS_SECRET_ACCESS_KEY - AWS IAM Secret Access Key
  • OPENAI_API_KEY - OpenAI API ํ‚ค
  • FROM_EMAIL_ADDRESS - SES ์ธ์ฆ๋œ ์ด๋ฉ”์ผ ์ฃผ์†Œ
  • VITE_COGNITO_USER_POOL_ID - Cognito User Pool ID (๋ฐฐํฌ ํ›„)
  • VITE_COGNITO_USER_POOL_CLIENT_ID - Cognito User Pool Client ID (๋ฐฐํฌ ํ›„)

์ž์„ธํ•œ ๋‚ด์šฉ์€ DEPLOYMENT.md๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ˆ˜๋™ ๋ฐฐํฌ

1. Backend ๋ฐฐํฌ

cd aws/cloudformation
sam build
sam deploy --parameter-overrides \
  Environment=dev \
  FromEmailAddress=your-email@example.com \
  OpenAIApiKey=your-openai-api-key

2. Frontend ๋ฐฐํฌ

# ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ • ํ›„
npm run build
./deploy-frontend.sh dev

์ž์„ธํ•œ ๋ฐฐํฌ ๊ฐ€์ด๋“œ๋Š” DEPLOYMENT.md๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

โš™๏ธ ์„ค์ •

AWS ์ธํ”„๋ผ ์„ค์ •

๋ฐฐํฌ ์ „ ๋‹ค์Œ AWS ์„œ๋น„์Šค๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

  1. Cognito User Pool - ์‚ฌ์šฉ์ž ์ธ์ฆ
  2. SES (Simple Email Service) - ์ด๋ฉ”์ผ ์ธ์ฆ (Sandbox ๋˜๋Š” Production)
  3. IAM ์‚ฌ์šฉ์ž - ๋ฐฐํฌ ๊ถŒํ•œ

์ž์„ธํ•œ ์„ค์ • ๋ฐฉ๋ฒ•์€ SETUP.md๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

OpenAI API ํ‚ค ๋ฐœ๊ธ‰

  1. OpenAI Platform ์ ‘์†
  2. API ํ‚ค ์ƒ์„ฑ
  3. GitHub Secrets์— OPENAI_API_KEY๋กœ ์ถ”๊ฐ€

๐Ÿงช ๊ฐœ๋ฐœ

๋กœ์ปฌ ๊ฐœ๋ฐœ

# ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰
npm run dev

# ๋นŒ๋“œ
npm run build

# ๋นŒ๋“œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
npm run preview

Lambda ํ•จ์ˆ˜ ๋กœ์ปฌ ํ…Œ์ŠคํŠธ

cd aws/cloudformation
sam build
sam local invoke FateCalculatorFunction --event event.json

๐Ÿ“š ๋ฌธ์„œ

  • DEPLOYMENT.md - ์ƒ์„ธ ๋ฐฐํฌ ๊ฐ€์ด๋“œ
  • SETUP.md - ์ดˆ๊ธฐ ์„ค์ • ๋ฐ AWS ๊ตฌ์„ฑ ๊ฐ€์ด๋“œ
  • ROUTE53_SETUP.md - Route53 ๋„๋ฉ”์ธ ์„ค์ • ๊ฐ€์ด๋“œ
  • VIEW_LOGS.md - ๋กœ๊ทธ ํ™•์ธ ๊ฐ€์ด๋“œ

๐Ÿ”’ ๋ณด์•ˆ

  • ๋ฏผ๊ฐํ•œ ์ •๋ณด(API ํ‚ค, Access Key ๋“ฑ)๋Š” ์ ˆ๋Œ€ ์ฝ”๋“œ์— ์ปค๋ฐ‹ํ•˜์ง€ ๋งˆ์„ธ์š”
  • GitHub Secrets๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•˜์„ธ์š”
  • IAM ์‚ฌ์šฉ์ž๋Š” ํ•„์š”ํ•œ ์ตœ์†Œ ๊ถŒํ•œ๋งŒ ๋ถ€์—ฌํ•˜์„ธ์š”

๐Ÿ› ๋ฌธ์ œ ํ•ด๊ฒฐ

์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

  1. Cognito ์ธ์ฆ ์˜ค๋ฅ˜: ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
  2. API ํ˜ธ์ถœ ์‹คํŒจ: API Gateway URL์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธ
  3. ๋นŒ๋“œ ์˜ค๋ฅ˜: Node.js ๋ฒ„์ „ ํ™•์ธ (18 ์ด์ƒ ๊ถŒ์žฅ)
  4. ๋ฐฐํฌ ์‹คํŒจ: AWS ์ž๊ฒฉ ์ฆ๋ช… ๋ฐ ๊ถŒํ•œ ํ™•์ธ

์ž์„ธํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ์€ DEPLOYMENT.md์˜ ๋ฌธ์ œ ํ•ด๊ฒฐ ์„น์…˜์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๐Ÿ“ ๋ผ์ด์„ ์Šค

MIT

๐Ÿ‘ฅ ๊ธฐ์—ฌ

์ด์Šˆ ๋ฐ Pull Request๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors