Skip to content

Baseball-Live-Chat/BLC_Frontend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

42 Commits
ย 
ย 
ย 
ย 

Repository files navigation

โšพ BLC Frontend (Baseball Live Chat)

Vue.js JavaScript Pinia Socket.io

์‹ค์‹œ๊ฐ„์œผ๋กœ ์•ผ๊ตฌ ๊ฒฝ๊ธฐ๋ฅผ ๋ณด๋ฉฐ ํŒฌ๋“ค๊ณผ ์†Œํ†ตํ•˜๋Š” ํ”Œ๋žซํผ ํ”„๋ก ํŠธ์—”๋“œ ๐Ÿ”ฅ

์ฃผ์š” ๊ธฐ๋Šฅ โ€ข ์„ค์น˜ ๊ฐ€์ด๋“œ โ€ข ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ โ€ข ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ


๐Ÿ“– ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

BLC Frontend๋Š” Vue.js 3๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋œ ์•ผ๊ตฌ ํŒฌ๋“ค์„ ์œ„ํ•œ ์‹ค์‹œ๊ฐ„ ์†Œํ†ต ํ”Œ๋žซํผ์˜ ํ”„๋ก ํŠธ์—”๋“œ์ž…๋‹ˆ๋‹ค. ํ˜„๋Œ€์ ์ธ SPA(Single Page Application) ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น ๋ฅด๊ณ  ๋ฐ˜์‘์„ฑ ์žˆ๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐ŸŽฏ ์ฃผ์š” ํŠน์ง•

  • ๐Ÿ“ฑ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ - ๋ชจ๋ฐ”์ผ๋ถ€ํ„ฐ ๋ฐ์Šคํฌํ†ฑ๊นŒ์ง€ ์™„๋ฒฝ ์ง€์›
  • โšก ์‹ค์‹œ๊ฐ„ ํ†ต์‹  - Socket.io๋ฅผ ํ†ตํ•œ ์ฆ‰์‹œ ๋ฉ”์‹œ์ง€ ์ „์†ก
  • ๐ŸŽจ ํŒ€๋ณ„ ๋ธŒ๋žœ๋”ฉ - ๊ฐ ์•ผ๊ตฌํŒ€์˜ ๊ณ ์œ  ์ƒ‰์ƒ๊ณผ ๋กœ๊ณ  ์ ์šฉ
  • ๐Ÿ”„ ์ƒํƒœ ๊ด€๋ฆฌ - Pinia๋ฅผ ํ™œ์šฉํ•œ ํšจ์œจ์ ์ธ ์ƒํƒœ ๊ด€๋ฆฌ

โœจ ์ฃผ์š” ๊ธฐ๋Šฅ

๐ŸŸ๏ธ ๊ฒฝ๊ธฐ ์ •๋ณด ๋Œ€์‹œ๋ณด๋“œ

  • ๐Ÿ“Š ์‹ค์‹œ๊ฐ„ ์Šค์ฝ”์–ด ๋ฐ ์ด๋‹ ์ •๋ณด
  • ๐Ÿ† ๊ฐ ํŒ€์˜ ๋กœ๊ณ ์™€ ๋ธŒ๋žœ๋”ฉ ์ƒ‰์ƒ ํ‘œ์‹œ
  • โฐ ๊ฒฝ๊ธฐ ์ƒํƒœ (LIVE, ์ข…๋ฃŒ, ์˜ˆ์ •) ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ
  • ๐Ÿ“ˆ ์ธ๊ธฐ ๊ฒฝ๊ธฐ ์ˆœ์œ„ ๋ฐ ์‹œ์ฒญ์ž ์ˆ˜

๐Ÿ’ฌ ํŒ€๋ณ„ ๋ถ„๋ฆฌ ์ฑ„ํŒ…

  • ๐Ÿ”ด ํ™ˆํŒ€ ์‘์›๋‹จ vs ๐Ÿ”ต ์›์ •ํŒ€ ์‘์›๋‹จ ๋…๋ฆฝ์ ์ธ ์ฑ„ํŒ…๋ฐฉ
  • โšก ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง€ ์ „์†ก ๋ฐ ์ˆ˜์‹ 
  • ๐ŸŽช ๋น ๋ฅธ ์‘์› ๋ฉ”์‹œ์ง€ ํ…œํ”Œ๋ฆฟ
  • ๐Ÿ‘ค ์‚ฌ์šฉ์ž๋ณ„ ๋ฉ”์‹œ์ง€ ๊ตฌ๋ถ„ ํ‘œ์‹œ
  • ๐Ÿ“ ๋ฉ”์‹œ์ง€ ๊ธธ์ด ์ œํ•œ ๋ฐ ์ž…๋ ฅ ๊ฐ€์ด๋“œ

๐Ÿ“ ์‹ค์‹œ๊ฐ„ ๋ฌธ์ž์ค‘๊ณ„

  • ๐Ÿ”ฅ ๊ฒฝ๊ธฐ์˜ ์ฃผ์š” ์ˆœ๊ฐ„๋“ค์„ ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ
  • โšพ ํˆฌ๊ตฌ๋ณ„, ํƒ€๊ตฌ๋ณ„ ์ƒ์„ธ ์ƒํ™ฉ ์ „๋‹ฌ
  • ๐Ÿ“Š ์ž๋™ ์Šคํฌ๋กค ๋ฐ ์ตœ์‹  ์ •๋ณด ์šฐ์„  ํ‘œ์‹œ

๐ŸŽจ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค

  • ๐ŸŒˆ ๊ฐ ํŒ€์˜ ๊ณ ์œ  ์ƒ‰์ƒ ํ…Œ๋งˆ ์ ์šฉ
  • ๐Ÿ–ผ๏ธ ํŒ€ ๋กœ๊ณ  ์ด๋ฏธ์ง€ ์ง€์›
  • ๐Ÿ“ฑ ๋ชจ๋ฐ”์ผ ์ตœ์ ํ™”๋œ ํ„ฐ์น˜ ์ธํ„ฐํŽ˜์ด์Šค
  • โšก ๋ถ€๋“œ๋Ÿฌ์šด ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ์ „ํ™˜ ํšจ๊ณผ

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

ํ•ต์‹ฌ ํ”„๋ ˆ์ž„์›Œํฌ

  • Vue.js 3.3.0 - Composition API๋ฅผ ํ™œ์šฉํ•œ ๋ชจ๋˜ ํ”„๋ก ํŠธ์—”๋“œ
  • Vue Router 4.2.0 - SPA ๋ผ์šฐํŒ… ๊ด€๋ฆฌ
  • Pinia 2.1.0 - ์ง๊ด€์ ์ธ ์ƒํƒœ ๊ด€๋ฆฌ

ํ†ต์‹  & ๋ฐ์ดํ„ฐ

  • Axios 1.4.0 - HTTP ํด๋ผ์ด์–ธํŠธ
  • Socket.io Client 4.7.0 - ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ 

๊ฐœ๋ฐœ ํ™˜๊ฒฝ

  • Vue CLI 5.0 - ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ๋„๊ตฌ
  • ESLint - ์ฝ”๋“œ ํ’ˆ์งˆ ๊ด€๋ฆฌ
  • Prettier - ์ฝ”๋“œ ํฌ๋งทํŒ…
  • CSS3 - ๋ฐ˜์‘ํ˜• ์Šคํƒ€์ผ๋ง

๐Ÿš€ ์„ค์น˜ ๋ฐ ์‹คํ–‰

๐Ÿ“‹ ํ•„์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ

Node.js 16.0.0 ์ด์ƒ
npm 8.0.0 ์ด์ƒ ๋˜๋Š” yarn 1.22.0 ์ด์ƒ

๐Ÿ–ฅ๏ธ ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •

# 1. ์ €์žฅ์†Œ ํด๋ก 
git clone https://github.com/your-username/blc-project.git
cd blc-project/blc_frontend

# 2. ์˜์กด์„ฑ ์„ค์น˜
npm install

# 3. ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰
npm run serve

๐ŸŒ ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:8080 ์ ‘์†

โš™๏ธ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์–ด

# ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰ (ํ•ซ ๋ฆฌ๋กœ๋“œ ํฌํ•จ)
npm run serve

# ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ
npm run build

# ESLint๋กœ ์ฝ”๋“œ ๊ฒ€์‚ฌ
npm run lint

# ESLint๋กœ ์ฝ”๋“œ ์ž๋™ ์ˆ˜์ •
npm run lint:fix

# Prettier๋กœ ์ฝ”๋“œ ํฌ๋งทํŒ…
npm run format

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

blc_frontend/
โ”œโ”€โ”€ ๐Ÿ“ public/
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ images/
โ”‚   โ”‚   โ””โ”€โ”€ ๐Ÿ“ teams/              # ํŒ€ ๋กœ๊ณ  ์ด๋ฏธ์ง€
โ”‚   โ”‚       โ”œโ”€โ”€ doosan.png         # ๋‘์‚ฐ ๋ฒ ์–ด์Šค
โ”‚   โ”‚       โ”œโ”€โ”€ lg.png             # LG ํŠธ์œˆ์Šค
โ”‚   โ”‚       โ””โ”€โ”€ ...
โ”‚   โ””โ”€โ”€ index.html
โ”œโ”€โ”€ ๐Ÿ“ src/
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ components/
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ common/
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ Header.vue         # ๊ณตํ†ต ํ—ค๋”
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ game/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ GameCard.vue       # ๊ฒฝ๊ธฐ ์นด๋“œ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ GameStatus.vue     # ๊ฒฝ๊ธฐ ์ƒํƒœ
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ RankingSection.vue # ์ธ๊ธฐ ์ˆœ์œ„
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ chat/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ TeamChatSection.vue   # ํŒ€๋ณ„ ์ฑ„ํŒ… ๋ฉ”์ธ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ TeamChatInput.vue     # ์ฑ„ํŒ… ์ž…๋ ฅ
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ ChatMessage.vue       # ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€
โ”‚   โ”‚   โ””โ”€โ”€ ๐Ÿ“ commentary/
โ”‚   โ”‚       โ”œโ”€โ”€ LiveCommentary.vue    # ์‹ค์‹œ๊ฐ„ ๋ฌธ์ž์ค‘๊ณ„
โ”‚   โ”‚       โ””โ”€โ”€ CommentaryItem.vue    # ์ค‘๊ณ„ ์•„์ดํ…œ
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ views/
โ”‚   โ”‚   โ”œโ”€โ”€ Home.vue               # ๋ฉ”์ธ ํŽ˜์ด์ง€
โ”‚   โ”‚   โ””โ”€โ”€ GameDetail.vue         # ๊ฒฝ๊ธฐ ์ƒ์„ธ ํŽ˜์ด์ง€
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ stores/
โ”‚   โ”‚   โ”œโ”€โ”€ game.js                # ๊ฒฝ๊ธฐ ์ƒํƒœ ๊ด€๋ฆฌ
โ”‚   โ”‚   โ”œโ”€โ”€ chat.js                # ์ฑ„ํŒ… ์ƒํƒœ ๊ด€๋ฆฌ
โ”‚   โ”‚   โ””โ”€โ”€ commentary.js          # ๋ฌธ์ž์ค‘๊ณ„ ์ƒํƒœ ๊ด€๋ฆฌ
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ utils/
โ”‚   โ”‚   โ””โ”€โ”€ teamUtils.js           # ํŒ€ ์ •๋ณด ์œ ํ‹ธ๋ฆฌํ‹ฐ
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ router/
โ”‚   โ”‚   โ””โ”€โ”€ index.js               # ๋ผ์šฐํ„ฐ ์„ค์ •
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ assets/
โ”‚   โ”‚   โ””โ”€โ”€ ๐Ÿ“ styles/
โ”‚   โ”‚       โ””โ”€โ”€ main.css           # ๊ธ€๋กœ๋ฒŒ ์Šคํƒ€์ผ
โ”‚   โ”œโ”€โ”€ App.vue                    # ๋ฃจํŠธ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ””โ”€โ”€ main.js                    # ์•ฑ ์ง„์ž…์ 
โ”œโ”€โ”€ package.json                   # ํ”„๋กœ์ ํŠธ ์„ค์ •
โ”œโ”€โ”€ vue.config.js                  # Vue CLI ์„ค์ •
โ””โ”€โ”€ README.md                      # ํ”„๋กœ์ ํŠธ ๋ฌธ์„œ

๐ŸŽจ ํŒ€ ์ด๋ฏธ์ง€ ์„ค์ •

๐Ÿ“ท ํŒ€ ๋กœ๊ณ  ์ถ”๊ฐ€ํ•˜๊ธฐ

  1. ์ด๋ฏธ์ง€ ์ค€๋น„

    - ๊ถŒ์žฅ ํฌ๊ธฐ: 100x100px
    - ํ˜•์‹: PNG (ํˆฌ๋ช… ๋ฐฐ๊ฒฝ ๊ถŒ์žฅ)
    - ํŒŒ์ผ๋ช…: ํŒ€๋ช….png (์˜ˆ: doosan.png)
    
  2. ์ด๋ฏธ์ง€ ์ €์žฅ ์œ„์น˜

    public/images/teams/
    โ”œโ”€โ”€ doosan.png      # ๋‘์‚ฐ ๋ฒ ์–ด์Šค
    โ”œโ”€โ”€ lg.png          # LG ํŠธ์œˆ์Šค
    โ”œโ”€โ”€ samsung.png     # ์‚ผ์„ฑ ๋ผ์ด์˜จ์ฆˆ
    โ”œโ”€โ”€ kia.png         # ๊ธฐ์•„ ํƒ€์ด๊ฑฐ์ฆˆ
    โ”œโ”€โ”€ lotte.png       # ๋กฏ๋ฐ ์ž์ด์–ธ์ธ 
    โ”œโ”€โ”€ nc.png          # NC ๋‹ค์ด๋…ธ์Šค
    โ”œโ”€โ”€ hanwha.png      # ํ•œํ™” ์ด๊ธ€์Šค
    โ”œโ”€โ”€ kt.png          # KT ์œ„์ฆˆ
    โ”œโ”€โ”€ ssg.png         # SSG ๋žœ๋”์Šค
    โ””โ”€โ”€ kiwoom.png      # ํ‚ค์›€ ํžˆ์–ด๋กœ์ฆˆ
    
  3. ํŒ€ ์ •๋ณด ์„ค์ •

    // src/utils/teamUtils.js์—์„œ ํŒ€ ์ƒ‰์ƒ ๋ฐ ์ •๋ณด ์ˆ˜์ •
    export const TEAM_INFO = {
      ๋‘์‚ฐ: {
        name: '๋‘์‚ฐ ๋ฒ ์–ด์Šค',
        image: '/images/teams/doosan.png',
        color: '#131230',      // ๋ฉ”์ธ ์ƒ‰์ƒ
        bgColor: '#f8f9ff'     // ๋ฐฐ๊ฒฝ ์ƒ‰์ƒ
      },
      // ... ๋‹ค๋ฅธ ํŒ€๋“ค
    }

๐Ÿงฉ ์ปดํฌ๋„ŒํŠธ ๊ฐ€์ด๋“œ

๐Ÿ  ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ

Home.vue

  • ๊ฒฝ๊ธฐ ๋ชฉ๋ก ๋ฐ ์ธ๊ธฐ ์ˆœ์œ„ ํ‘œ์‹œ
  • ๊ฐ ๊ฒฝ๊ธฐ ์นด๋“œ ํด๋ฆญ ์‹œ ์ƒ์„ธ ํŽ˜์ด์ง€๋กœ ์ด๋™

GameDetail.vue

  • ๊ฒฝ๊ธฐ ์ƒ์„ธ ์ •๋ณด ๋ฐ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…
  • ๋ฌธ์ž์ค‘๊ณ„์™€ ํŒ€๋ณ„ ์ฑ„ํŒ…์„ ๋™์‹œ ํ‘œ์‹œ

๐Ÿ’ฌ ์ฑ„ํŒ… ์ปดํฌ๋„ŒํŠธ

TeamChatSection.vue

<TeamChatSection 
  :gameId="gameId" 
  :game="gameData" 
/>

TeamChatInput.vue

<TeamChatInput
  :selectedTeam="selectedTeam"
  :homeTeam="homeTeam"
  :awayTeam="awayTeam"
  :homeColor="homeColor"
  :awayColor="awayColor"
  @sendMessage="handleMessage"
/>

ChatMessage.vue

<ChatMessage
  :message="messageData"
  :teamColor="teamColor"
/>

๐Ÿ—ƒ๏ธ ์ƒํƒœ ๊ด€๋ฆฌ (Pinia)

๐ŸŽฎ Game Store

// ๊ฒฝ๊ธฐ ๊ด€๋ จ ์ƒํƒœ ๊ด€๋ฆฌ
const gameStore = useGameStore()

// ์‚ฌ์šฉ ์˜ˆ์‹œ
gameStore.fetchGames()           // ๊ฒฝ๊ธฐ ๋ชฉ๋ก ์กฐํšŒ
gameStore.fetchGameDetail(id)    // ๊ฒฝ๊ธฐ ์ƒ์„ธ ์กฐํšŒ
gameStore.cheerForTeam(id, team) // ํŒ€ ์‘์›

๐Ÿ’ฌ Chat Store

// ์ฑ„ํŒ… ๊ด€๋ จ ์ƒํƒœ ๊ด€๋ฆฌ
const chatStore = useChatStore()

// ์‚ฌ์šฉ ์˜ˆ์‹œ
chatStore.connectToGame(gameId, gameData)  // ์ฑ„ํŒ…๋ฐฉ ์—ฐ๊ฒฐ
chatStore.setSelectedTeam('home')          // ์‘์›ํŒ€ ์„ ํƒ
chatStore.sendMessage(content, team)       // ๋ฉ”์‹œ์ง€ ์ „์†ก
chatStore.disconnect()                     // ์—ฐ๊ฒฐ ํ•ด์ œ

๐Ÿ“ Commentary Store

// ๋ฌธ์ž์ค‘๊ณ„ ๊ด€๋ จ ์ƒํƒœ ๊ด€๋ฆฌ
const commentaryStore = useCommentaryStore()

// ์‚ฌ์šฉ ์˜ˆ์‹œ
commentaryStore.fetchCommentaries(gameId)  // ์ค‘๊ณ„ ๋‚ด์šฉ ์กฐํšŒ
commentaryStore.addCommentary(data)        // ์ƒˆ ์ค‘๊ณ„ ์ถ”๊ฐ€

๐ŸŽจ ์Šคํƒ€์ผ๋ง ๊ฐ€์ด๋“œ

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

/* ๋ฉ”์ธ ์ปฌ๋Ÿฌ */
--primary-blue: #2c5aa0;
--primary-dark: #1e3a5f;

/* ์ƒํƒœ ์ปฌ๋Ÿฌ */
--live-red: #ff4757;
--success-green: #2ed573;
--warning-orange: #ffa502;

/* ๊ทธ๋ ˆ์ด ์Šค์ผ€์ผ */
--gray-100: #f8f9fa;
--gray-300: #e9ecef;
--gray-600: #666666;
--gray-900: #333333;

๐Ÿ“ฑ ๋ฐ˜์‘ํ˜• ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ

/* ๋ชจ๋ฐ”์ผ */
@media (max-width: 768px) { ... }

/* ํƒœ๋ธ”๋ฆฟ */
@media (min-width: 769px) and (max-width: 1024px) { ... }

/* ๋ฐ์Šคํฌํ†ฑ */
@media (min-width: 1025px) { ... }

๐Ÿ›ก๏ธ ์ฝ”๋“œ ํ’ˆ์งˆ

๐Ÿ“ ESLint ์„ค์ •

  • Vue 3 Essential ๊ทœ์น™ ์ ์šฉ
  • Prettier์™€ ํ†ตํ•ฉ๋œ ํฌ๋งทํŒ…
  • console.log ํ—ˆ์šฉ (๊ฐœ๋ฐœ ๋‹จ๊ณ„)

๐ŸŽฏ Prettier ์„ค์ •

{
  "semi": false,
  "singleQuote": true,
  "tabWidth": 2,
  "trailingComma": "es5",
  "printWidth": 80,
  "bracketSpacing": true,
  "arrowParens": "avoid"
}

๐Ÿ”ง ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ

๐Ÿ†• ์ƒˆ ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€

  1. ์ ์ ˆํ•œ ํด๋”์— .vue ํŒŒ์ผ ์ƒ์„ฑ
  2. <template>, <script setup>, <style scoped> ๊ตฌ์กฐ ์‚ฌ์šฉ
  3. props์™€ emits ๋ช…ํ™•ํžˆ ์ •์˜
  4. Prettier ๊ทœ์น™ ์ค€์ˆ˜

๐Ÿ”„ ์ƒํƒœ ๊ด€๋ฆฌ ์ถ”๊ฐ€

  1. stores/ ํด๋”์— ์ƒˆ ์Šคํ† ์–ด ํŒŒ์ผ ์ƒ์„ฑ
  2. defineStore๋ฅผ ์‚ฌ์šฉํ•œ Pinia ์Šคํ† ์–ด ์ •์˜
  3. state, getters, actions ๊ตฌ์กฐ ์ค€์ˆ˜

๐ŸŽจ ์Šคํƒ€์ผ ์ž‘์„ฑ

  1. scoped ์Šคํƒ€์ผ ์‚ฌ์šฉ ๊ถŒ์žฅ
  2. CSS ๋ณ€์ˆ˜ ํ™œ์šฉํ•œ ์ผ๊ด€๋œ ์ƒ‰์ƒ
  3. ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ณ ๋ ค
  4. ํŒ€๋ณ„ ์ƒ‰์ƒ์€ teamUtils.js ํ™œ์šฉ

๐Ÿš€ ๋ฐฐํฌ

๐Ÿ“ฆ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ

npm run build

๋นŒ๋“œ๋œ ํŒŒ์ผ์€ dist/ ํด๋”์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๐ŸŒ ๋ฐฐํฌ ํ™˜๊ฒฝ

  • Netlify - ์ •์  ์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…
  • Vercel - SPA ์ตœ์ ํ™” ๋ฐฐํฌ
  • GitHub Pages - ๋ฌด๋ฃŒ ํ˜ธ์ŠคํŒ…
  • AWS S3 + CloudFront - ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋ฐฐํฌ

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

โ— ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์ด์Šˆ

Socket.io ์—ฐ๊ฒฐ ์˜ค๋ฅ˜

# ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ํ™•์ธ ํ›„ ์—ฐ๊ฒฐ ์„ค์ • ์ˆ˜์ •
// src/stores/chat.js์—์„œ ์„œ๋ฒ„ URL ํ™•์ธ

ํŒ€ ์ด๋ฏธ์ง€ ๋กœ๋“œ ์‹คํŒจ

# ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: public/images/teams/ ํด๋”์— ์ด๋ฏธ์ง€ ํŒŒ์ผ ์กด์žฌ ํ™•์ธ
# ํŒŒ์ผ๋ช…์ด teamUtils.js์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธ

๋นŒ๋“œ ์˜ค๋ฅ˜

# ์˜์กด์„ฑ ์žฌ์„ค์น˜
rm -rf node_modules package-lock.json
npm install

๐Ÿ“ˆ ํ–ฅํ›„ ๊ณ„ํš

๐ŸŽฏ ๋‹จ๊ธฐ ๋ชฉํ‘œ (v1.1)

  • ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์‹œ์Šคํ…œ
  • ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€ ํ•„ํ„ฐ๋ง
  • ์ด๋ชจ์ง€ ๋ฐ˜์‘ ๊ธฐ๋Šฅ
  • PWA (Progressive Web App) ์ง€์›

๐Ÿš€ ์žฅ๊ธฐ ๋ชฉํ‘œ (v2.0)

  • ์‹ค์‹œ๊ฐ„ ๋น„๋””์˜ค ์ŠคํŠธ๋ฆฌ๋ฐ ์—ฐ๋™
  • AI ๊ธฐ๋ฐ˜ ๊ฒฝ๊ธฐ ์˜ˆ์ธก
  • ์†Œ์…œ ๋ฏธ๋””์–ด ์—ฐ๋™
  • ๋‹ค๊ตญ์–ด ์ง€์›

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

๐Ÿ”ง ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์ค€๋น„

  1. ์ด ์ €์žฅ์†Œ๋ฅผ Fork
  2. Feature ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ (git checkout -b feature/amazing-feature)
  3. ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ปค๋ฐ‹ (git commit -m 'Add amazing feature')
  4. ๋ธŒ๋žœ์น˜์— Push (git push origin feature/amazing-feature)
  5. Pull Request ์ƒ์„ฑ

๐Ÿ“ ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜

  • Vue 3 Composition API ์‚ฌ์šฉ
  • ESLint + Prettier ๊ทœ์น™ ์ค€์ˆ˜
  • ์ปดํฌ๋„ŒํŠธ๋ช…์€ PascalCase
  • ํŒŒ์ผ๋ช…์€ PascalCase.vue

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

์ด ํ”„๋กœ์ ํŠธ๋Š” MIT ๋ผ์ด์„ผ์Šค ํ•˜์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ LICENSE ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.


๐Ÿ‘ฅ ํŒ€

Frontend Developer: Your Name

๊ธฐ์ˆ  ์Šคํƒ: Vue.js, JavaScript, CSS3, Pinia, Socket.io


โšพ ์•ผ๊ตฌ๋ฅผ ์‚ฌ๋ž‘ํ•˜๋Š” ๋ชจ๋“  ํŒฌ๋“ค์„ ์œ„ํ•œ ํ”Œ๋žซํผ โšพ

Made with โค๏ธ and โ˜• by BLC Team

About

BLC Project Frontend

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •