Skip to content

SSAFIT-AI-project/ssafit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

13 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

SSAFIT - ์นด๋“œ ๋น„๊ต ๋ฐ AI ์ถ”์ฒœ ์„œ๋น„์Šค

์‚ผ์„ฑ์ „์ž ๋ธŒ๋žœ๋“œ ์ƒ‰์ƒ์„ ํ™œ์šฉํ•œ ๊น”๋”ํ•˜๊ณ  ๋ชจ๋˜ํ•œ ์นด๋“œ ๋น„๊ต ๋ฐ AI ์ถ”์ฒœ ์›น์‚ฌ์ดํŠธ์ž…๋‹ˆ๋‹ค.

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

1. ํ™ˆํŽ˜์ด์ง€

  • ํžˆ์–ด๋กœ ์„น์…˜๊ณผ ์„œ๋น„์Šค ์†Œ๊ฐœ
  • ์ธ๊ธฐ ์นด๋“œ TOP 3 ํ‘œ์‹œ (API์—์„œ ๋™์  ๋กœ๋”ฉ)
  • AI ์ถ”์ฒœ ์„œ๋น„์Šค ์•ˆ๋‚ด

2. ์นด๋“œ ๋ชฉ๋ก

  • ๋‹ค์–‘ํ•œ ์นด๋“œ ์ •๋ณด ์ œ๊ณต (API์—์„œ ๋™์  ๋กœ๋”ฉ)
  • ์นดํ…Œ๊ณ ๋ฆฌ, ์—ฐํšŒ๋น„, ์ •๋ ฌ ํ•„ํ„ฐ๋ง
  • ์นด๋“œ ์ƒ์„ธ ์ •๋ณด ๋ชจ๋‹ฌ
  • ๋น„๊ตํ•˜๊ธฐ ๊ธฐ๋Šฅ

3. ์นด๋“œ ๋น„๊ต โœ…

  • ํ˜„์žฌ ์ƒํƒœ: ์™„์ „ํžˆ ๊ตฌํ˜„๋˜์–ด ์ •์ƒ ์ž‘๋™
  • ์ตœ๋Œ€ 3๊ฐœ ์นด๋“œ ๋™์‹œ ๋น„๊ต ๊ธฐ๋Šฅ
  • ์นด๋“œ ๋ชฉ๋ก์—์„œ ๋น„๊ต ๋ชฉ๋ก ์ถ”๊ฐ€/์ œ๊ฑฐ
  • ๊ธฐ๋ณธ ์ •๋ณด, ํ˜œํƒ ๋น„๊ต ํ…Œ์ด๋ธ”
  • AI ์ถ”์ฒœ ๊ฒฐ๊ณผ ํ‘œ์‹œ
  • ์ง๊ด€์ ์ธ ๋น„๊ต ์ธํ„ฐํŽ˜์ด์Šค

4. AI ์ฑ—๋ด‡ ์ถ”์ฒœ

  • ์‹ค์‹œ๊ฐ„ ๋Œ€ํ™”ํ˜• ์นด๋“œ ์ถ”์ฒœ (API ๊ธฐ๋ฐ˜ ์‘๋‹ต)
  • ํƒ€์ดํ•‘ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ
  • ๋น ๋ฅธ ์‘๋‹ต ๋ฒ„ํŠผ
  • ์ถ”์ฒœ ๊ฒฐ๊ณผ ์‹ค์‹œ๊ฐ„ ํ‘œ์‹œ

๐ŸŽจ ๋””์ž์ธ ํŠน์ง•

  • ์‚ผ์„ฑ์ „์ž ๋ธŒ๋žœ๋“œ ์ƒ‰์ƒ: ํŒŒ๋ž€์ƒ‰ ๊ณ„์—ด์˜ ์ „๋ฌธ์ ์ด๊ณ  ์‹ ๋ขฐ๊ฐ ์žˆ๋Š” ๋””์ž์ธ
  • ๋ชจ๋˜ํ•œ UI: ๊น”๋”ํ•˜๊ณ  ํ™”๋ คํ•˜์ง€ ์•Š์€ ์„ธ๋ จ๋œ ์ธํ„ฐํŽ˜์ด์Šค
  • ๋ฐ˜์‘ํ˜• ๋””์ž์ธ: ๋ชจ๋ฐ”์ผ, ํƒœ๋ธ”๋ฆฟ, ๋ฐ์Šคํฌํ†ฑ ๋ชจ๋“  ๊ธฐ๊ธฐ ์ง€์›
  • ์‚ฌ์šฉ์ž ์นœํ™”์ : ์ง๊ด€์ ์ธ ๋„ค๋น„๊ฒŒ์ด์…˜๊ณผ ์ธํ„ฐ๋ž™์…˜

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

  • Frontend: Vue.js 3 + TypeScript
  • Styling: CSS3 (CSS Variables, Grid, Flexbox)
  • State Management: Pinia
  • Routing: Vue Router
  • Build Tool: Vite
  • API: Fetch API (๋”๋ฏธ JSON ๋ฐ์ดํ„ฐ)
  • Environment: Vite ํ™˜๊ฒฝ ๋ณ€์ˆ˜

๐Ÿ“ฆ ๋กœ์ปฌ ์„ค์น˜ ๋ฐ ์‹คํ–‰

1. ํ”„๋กœ์ ํŠธ ํด๋ก 

git clone https://github.com/your-username/ssafit.git
cd ssafit

2. ์˜์กด์„ฑ ์„ค์น˜

npm install

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

npm run dev

๊ฐœ๋ฐœ ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋˜๋ฉด ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:3000์œผ๋กœ ์ ‘์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. ๋นŒ๋“œ

npm run build

5. ๋นŒ๋“œ ๊ฒฐ๊ณผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ

npm run preview

๐Ÿš€ GitHub Pages ๋ฐฐํฌ

1. ์ž๋™ ๋ฐฐํฌ ์„ค์ • (์ถ”์ฒœ)

GitHub Actions ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— .github/workflows/deploy.yml ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์„ธ์š”:

name: Deploy to GitHub Pages

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    
    steps:
    - name: Checkout
      uses: actions/checkout@v3
      
    - name: Setup Node.js
      uses: actions/setup-node@v3
      with:
        node-version: '18'
        cache: 'npm'
        
    - name: Install dependencies
      run: npm ci
      
    - name: Build
      run: npm run build
      
    - name: Deploy to GitHub Pages
      uses: peaceiris/actions-gh-pages@v3
      if: github.ref == 'refs/heads/main'
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }}
        publish_dir: ./dist

GitHub ์ €์žฅ์†Œ ์„ค์ •

  1. GitHub ์ €์žฅ์†Œ์—์„œ Settings ํƒญ์œผ๋กœ ์ด๋™
  2. ์™ผ์ชฝ ๋ฉ”๋‰ด์—์„œ Pages ํด๋ฆญ
  3. Source ์„น์…˜์—์„œ Deploy from a branch ์„ ํƒ
  4. Branch๋ฅผ gh-pages๋กœ ์„ค์ •ํ•˜๊ณ  Save ํด๋ฆญ

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

๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ

# ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ
npm run build

# gh-pages ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ ๋ฐ ๋ฐฐํฌ (package.json์— deploy ์Šคํฌ๋ฆฝํŠธ ํฌํ•จ)
npm run deploy

๋˜๋Š” gh-pages ํŒจํ‚ค์ง€๋ฅผ ์ง์ ‘ ์‚ฌ์šฉ:

npm install -g gh-pages
gh-pages -d dist

GitHub ์ €์žฅ์†Œ ์„ค์ •

  1. GitHub ์ €์žฅ์†Œ์—์„œ Settings โ†’ Pages ์ด๋™
  2. Source๋ฅผ Deploy from a branch๋กœ ์„ค์ •
  3. Branch๋ฅผ gh-pages๋กœ ์„ค์ •

3. ๋ฐฐํฌ ํ™•์ธ

๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด https://your-username.github.io/ssafit์—์„œ ์ ‘์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”ง ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •

๊ธฐ๋ณธ ํ™˜๊ฒฝ ๋ณ€์ˆ˜

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— .env ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์„ธ์š”:

# API ์„ค์ •
VITE_API_BASE_URL=/api

# ์•ฑ ์„ค์ •
VITE_APP_TITLE=์นด๋“œ ๋น„๊ต ๋ฐ ์ถ”์ฒœ ์„œ๋น„์Šค
VITE_APP_DESCRIPTION=์‚ผ์„ฑ์ „์ž ๋ธŒ๋žœ๋“œ ์ƒ‰์ƒ์„ ํ™œ์šฉํ•œ ์นด๋“œ ๋น„๊ต ๋ฐ AI ์ถ”์ฒœ ์›น์‚ฌ์ดํŠธ

GitHub Pages ๋ฐฐํฌ์šฉ ํ™˜๊ฒฝ ๋ณ€์ˆ˜

GitHub Pages์—์„œ๋Š” ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ VITE_API_BASE_URL์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•˜์„ธ์š”:

# GitHub Pages ๋ฐฐํฌ์šฉ
VITE_API_BASE_URL=/ssafit/api

Vite ์„ค์ •

vite.config.ts์—์„œ GitHub Pages ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ base ๊ฒฝ๋กœ๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:

export default defineConfig({
  plugins: [vue()],
  // GitHub Pages ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ base ๊ฒฝ๋กœ
  base: '/ssafit/',
  server: {
    port: 3000
  }
})

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

src/
โ”œโ”€โ”€ views/           # ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”œโ”€โ”€ HomeView.vue      # ํ™ˆํŽ˜์ด์ง€
โ”‚   โ”œโ”€โ”€ CardsView.vue     # ์นด๋“œ ๋ชฉ๋ก
โ”‚   โ”œโ”€โ”€ CompareView.vue   # ์นด๋“œ ๋น„๊ต
โ”‚   โ””โ”€โ”€ ChatbotView.vue   # AI ์ฑ—๋ด‡
โ”œโ”€โ”€ services/        # API ์„œ๋น„์Šค
โ”‚   โ””โ”€โ”€ api.ts            # API ํ˜ธ์ถœ ๋ฐ ํƒ€์ž… ์ •์˜
โ”œโ”€โ”€ stores/          # ์ƒํƒœ ๊ด€๋ฆฌ
โ”‚   โ””โ”€โ”€ compare.ts        # ์นด๋“œ ๋น„๊ต ์Šคํ† ์–ด
โ”œโ”€โ”€ router/          # ๋ผ์šฐํŒ… ์„ค์ •
โ”œโ”€โ”€ App.vue          # ๋ฉ”์ธ ์•ฑ ์ปดํฌ๋„ŒํŠธ
โ”œโ”€โ”€ main.ts          # ์•ฑ ์ง„์ž…์ 
โ””โ”€โ”€ style.css        # ๊ธ€๋กœ๋ฒŒ ์Šคํƒ€์ผ

public/
โ””โ”€โ”€ api/             # ๋”๋ฏธ API ๋ฐ์ดํ„ฐ
    โ”œโ”€โ”€ cards.json           # ์นด๋“œ ๋ชฉ๋ก ๋ฐ์ดํ„ฐ
    โ”œโ”€โ”€ popular-cards.json   # ์ธ๊ธฐ ์นด๋“œ ๋ฐ์ดํ„ฐ
    โ””โ”€โ”€ chatbot-responses.json # ์ฑ—๋ด‡ ์‘๋‹ต ๋ฐ์ดํ„ฐ

๐Ÿ”Œ API ์„œ๋น„์Šค ๊ตฌ์กฐ

๋”๋ฏธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

ํ”„๋กœ์ ํŠธ๋Š” ์‹ค์ œ ๋ฐฑ์—”๋“œ API๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ธฐ ์œ„ํ•ด public/api/ ํด๋”์— JSON ํŒŒ์ผ๋“ค์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

1. ์นด๋“œ ๋ชฉ๋ก API (/api/cards.json)

{
  "success": true,
  "data": {
    "cards": [...],
    "categories": [...],
    "total": 6
  }
}

2. ์ธ๊ธฐ ์นด๋“œ API (/api/popular-cards.json)

{
  "success": true,
  "data": {
    "popularCards": [...]
  }
}

3. ์ฑ—๋ด‡ ์‘๋‹ต API (/api/chatbot-responses.json)

{
  "success": true,
  "data": {
    "responses": {
      "greeting": {...},
      "daily_life": {...},
      "transportation": {...},
      ...
    }
  }
}

API ์„œ๋น„์Šค ๊ธฐ๋Šฅ

  • ์‹ค์ œ API ํ˜ธ์ถœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜: fetch API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋”๋ฏธ JSON ํŒŒ์ผ ํ˜ธ์ถœ
  • ๋กœ๋”ฉ ์ƒํƒœ ๊ด€๋ฆฌ: ๊ฐ API ํ˜ธ์ถœ์— ๋Œ€ํ•œ ๋กœ๋”ฉ ์Šคํ”ผ๋„ˆ ์ œ๊ณต
  • ์—๋Ÿฌ ์ฒ˜๋ฆฌ: ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜ ๋ฐ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์‹คํŒจ ์ฒ˜๋ฆฌ

์ฃผ์š” API ํ•จ์ˆ˜

  • getCards(): ์ „์ฒด ์นด๋“œ ๋ชฉ๋ก ์กฐํšŒ
  • getPopularCards(): ์ธ๊ธฐ ์นด๋“œ TOP 3 ์กฐํšŒ
  • getCardById(id): ํŠน์ • ์นด๋“œ ์ƒ์„ธ ์ •๋ณด ์กฐํšŒ
  • getChatbotResponse(type): ์ฑ—๋ด‡ ์‘๋‹ต ์กฐํšŒ
  • searchCards(params): ์นด๋“œ ๊ฒ€์ƒ‰ ๋ฐ ํ•„ํ„ฐ๋ง

๐ŸŽฏ ์ฃผ์š” ํŽ˜์ด์ง€

ํ™ˆํŽ˜์ด์ง€ (/)

  • ์„œ๋น„์Šค ์†Œ๊ฐœ ๋ฐ ์ฃผ์š” ๊ธฐ๋Šฅ ์•ˆ๋‚ด
  • ์ธ๊ธฐ ์นด๋“œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ (API์—์„œ ๋™์  ๋กœ๋”ฉ)
  • AI ์ถ”์ฒœ ์„œ๋น„์Šค CTA

์นด๋“œ ๋ชฉ๋ก (/cards)

  • ์ „์ฒด ์นด๋“œ ๋ชฉ๋ก ํ‘œ์‹œ (API์—์„œ ๋™์  ๋กœ๋”ฉ)
  • ํ•„ํ„ฐ๋ง ๋ฐ ์ •๋ ฌ ๊ธฐ๋Šฅ
  • ์นด๋“œ ์ƒ์„ธ ์ •๋ณด ๋ชจ๋‹ฌ
  • ๋กœ๋”ฉ ์ƒํƒœ ๋ฐ ์—๋Ÿฌ ์ฒ˜๋ฆฌ

์นด๋“œ ๋น„๊ต (/compare) โœ…

  • ํ˜„์žฌ ์ƒํƒœ: ์™„์ „ํžˆ ๊ตฌํ˜„๋˜์–ด ์ •์ƒ ์ž‘๋™
  • ์„ ํƒํ•œ ์นด๋“œ๋“ค์˜ ์ƒ์„ธ ๋น„๊ต ๊ธฐ๋Šฅ
  • ๋น„๊ต ํ…Œ์ด๋ธ” ํ˜•ํƒœ๋กœ ์ •๋ณด ์ œ๊ณต
  • AI ์ถ”์ฒœ ๊ฒฐ๊ณผ ํ‘œ์‹œ
  • ์นด๋“œ ์„ ํƒ ๋ชจ๋‹ฌ

AI ์ถ”์ฒœ (/chatbot)

  • ๋Œ€ํ™”ํ˜• ์นด๋“œ ์ถ”์ฒœ ์‹œ์Šคํ…œ (API ๊ธฐ๋ฐ˜ ์‘๋‹ต)
  • ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ์ธํ„ฐํŽ˜์ด์Šค
  • ์ถ”์ฒœ ๊ฒฐ๊ณผ ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ
  • ๋น ๋ฅธ ์‘๋‹ต ๋ฒ„ํŠผ

๐ŸŽจ ์ƒ‰์ƒ ํŒ”๋ ˆํŠธ

  • Primary Blue: #1428a0 (์‚ผ์„ฑ์ „์ž ๋ฉ”์ธ ๋ธ”๋ฃจ)
  • Light Blue: #1e3a8a
  • Dark Blue: #0f172a
  • Gray: #64748b
  • Light Gray: #f1f5f9
  • White: #ffffff
  • Black: #0f172a

๐Ÿ“ฑ ๋ฐ˜์‘ํ˜• ์ง€์›

  • Desktop: 1200px ์ด์ƒ
  • Tablet: 768px - 1199px
  • Mobile: 767px ์ดํ•˜

๐Ÿ”ง ์ปค์Šคํ„ฐ๋งˆ์ด์ง•

์ƒ‰์ƒ ๋ณ€๊ฒฝ

src/style.css ํŒŒ์ผ์˜ CSS ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ์ƒ‰์ƒ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

:root {
  --samsung-blue: #1428a0;
  --samsung-light-blue: #1e3a8a;
  /* ... */
}

์นด๋“œ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

public/api/cards.json ํŒŒ์ผ์— ์ƒˆ๋กœ์šด ์นด๋“œ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฑ—๋ด‡ ์‘๋‹ต ์ˆ˜์ •

public/api/chatbot-responses.json ํŒŒ์ผ์—์„œ ์ฑ—๋ด‡์˜ ์‘๋‹ต์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿš€ ํ–ฅํ›„ ๊ฐœ์„  ์‚ฌํ•ญ

  • ์นด๋“œ ๋น„๊ต ๊ธฐ๋Šฅ ์‹ค์ œ ๊ตฌํ˜„
  • ์‹ค์ œ ๋ฐฑ์—”๋“œ API ์—ฐ๋™
  • ์‚ฌ์šฉ์ž ์ธ์ฆ ์‹œ์Šคํ…œ
  • ์นด๋“œ ์‹ ์ฒญ ๊ธฐ๋Šฅ
  • ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ ์‹œ์Šคํ…œ
  • ์„ฑ๋Šฅ ์ตœ์ ํ™”
  • PWA ์ง€์›

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

์ด ํ”„๋กœ์ ํŠธ๋Š” MIT ๋ผ์ด์„ ์Šค ํ•˜์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

๐Ÿ“ž ๋ฌธ์˜

ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋ฌธ์˜์‚ฌํ•ญ์ด ์žˆ์œผ์‹œ๋ฉด ์ด์Šˆ๋ฅผ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”.

Releases

No releases published

Packages

 
 
 

Contributors