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 - ์ธํ๋ผ ์ฝ๋
- 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
git clone <repository-url>
cd fate
npm installํ๋ก์ ํธ ๋ฃจํธ์ .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 ์ธํ๋ผ ๋ฐฐํฌ ํ ์ค์ ๊ฐ์ผ๋ก ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค.
npm run dev๋ธ๋ผ์ฐ์ ์์ http://localhost:5173 (๋๋ ํ์๋ ํฌํธ)๋ก ์ ์ํ์ธ์.
npm run build๋น๋๋ ํ์ผ์ dist/ ๋๋ ํ ๋ฆฌ์ ์์ฑ๋ฉ๋๋ค.
main ๋๋ master ๋ธ๋์น์ ์ฝ๋๋ฅผ ํธ์ํ๋ฉด ์๋์ผ๋ก ๋ฐฐํฌ๋ฉ๋๋ค.
ํ์ GitHub Secrets:
AWS_ACCESS_KEY_ID- AWS IAM Access Key IDAWS_SECRET_ACCESS_KEY- AWS IAM Secret Access KeyOPENAI_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๋ฅผ ์ฐธ์กฐํ์ธ์.
cd aws/cloudformation
sam build
sam deploy --parameter-overrides \
Environment=dev \
FromEmailAddress=your-email@example.com \
OpenAIApiKey=your-openai-api-key# ํ๊ฒฝ ๋ณ์ ์ค์ ํ
npm run build
./deploy-frontend.sh dev์์ธํ ๋ฐฐํฌ ๊ฐ์ด๋๋ DEPLOYMENT.md๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ฐฐํฌ ์ ๋ค์ AWS ์๋น์ค๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค:
- Cognito User Pool - ์ฌ์ฉ์ ์ธ์ฆ
- SES (Simple Email Service) - ์ด๋ฉ์ผ ์ธ์ฆ (Sandbox ๋๋ Production)
- IAM ์ฌ์ฉ์ - ๋ฐฐํฌ ๊ถํ
์์ธํ ์ค์ ๋ฐฉ๋ฒ์ SETUP.md๋ฅผ ์ฐธ์กฐํ์ธ์.
- OpenAI Platform ์ ์
- API ํค ์์ฑ
- GitHub Secrets์
OPENAI_API_KEY๋ก ์ถ๊ฐ
# ๊ฐ๋ฐ ์๋ฒ ์คํ
npm run dev
# ๋น๋
npm run build
# ๋น๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
npm run previewcd 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 ์ฌ์ฉ์๋ ํ์ํ ์ต์ ๊ถํ๋ง ๋ถ์ฌํ์ธ์
์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ ํด๊ฒฐ ๋ฐฉ๋ฒ:
- Cognito ์ธ์ฆ ์ค๋ฅ: ํ๊ฒฝ ๋ณ์๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋์๋์ง ํ์ธ
- API ํธ์ถ ์คํจ: API Gateway URL์ด ์ฌ๋ฐ๋ฅธ์ง ํ์ธ
- ๋น๋ ์ค๋ฅ: Node.js ๋ฒ์ ํ์ธ (18 ์ด์ ๊ถ์ฅ)
- ๋ฐฐํฌ ์คํจ: AWS ์๊ฒฉ ์ฆ๋ช ๋ฐ ๊ถํ ํ์ธ
์์ธํ ๋ฌธ์ ํด๊ฒฐ์ DEPLOYMENT.md์ ๋ฌธ์ ํด๊ฒฐ ์น์ ์ ์ฐธ์กฐํ์ธ์.
MIT
์ด์ ๋ฐ Pull Request๋ฅผ ํ์ํฉ๋๋ค!