๐ช Before / After
๊ธฐ์กด AI Chat ์ปดํฌ๋ํธ๋ UI, ๋น์ฆ๋์ค ๋ก์ง, API ํธ์ถ์ด ํ๋์ ํ์ผ์ ์ง์ค๋์ด ์์ด ์ฝ๋์ ๋ณต์ก๋๊ฐ ๋์์ต๋๋ค. ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ์๋ก ์ ์ง๋ณด์ ๋น์ฉ์ด ์ฆ๊ฐํ๊ณ , ์๋ก์ด ๊ธฐ๋ฅ์ ์ ์ฉํ๊ฑฐ๋ ๋ฒ๊ทธ๋ฅผ ์์ ํ ๋ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์ํฅ์ ์ค ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํ์ต๋๋ค.
์ด๋ฒ ๋ฆฌํฉํ ๋ง์์๋ ์ญํ ์ ๋ช ํํ๊ฒ ๋ถ๋ฆฌํ์ฌ ์ปดํฌ๋ํธ๋ ํ๋ฉด(View)๋ง ๋ด๋นํ๋๋ก ๋ณ๊ฒฝํ์๊ณ , ๋น์ฆ๋์ค ๋ก์ง๊ณผ API ํธ์ถ์ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ธ ๋ชจ๋๋ก ๋ถ๋ฆฌํ์ต๋๋ค.
- ์ฝ๋ ๋ผ์ธ ๊ฐ์
- 1534 → 358 Line
- ์ด 1,176 Line ๊ฐ์(์ฝ 77%)
- ํ๋์ ์ปดํฌ๋ํธ๊ฐ ๋ด๋นํ๋ ์ฑ ์์ ์ฌ๋ฌ ๋ชจ๋๋ก ๋ถ๋ฆฌํ์ฌ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฅ์
- ๊ธฐ๋ฅ ์ถ๊ฐ ์ ๊ธฐ์กด ์ฝ๋๋ฅผ ์์ ํ๋ ๋ฒ์๋ฅผ ์ต์ํํ๋๋ก ๊ตฌ์กฐ ๊ฐ์
๐ฑ AI Chat์ ์ญํ
AI Chat์ ๋จ์ํ ์ฑํ UI๊ฐ ์๋๋ผ ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ๋ผ ๋ค์ํ AI ๊ธฐ๋ฅ์ ์ํํ๋ ํต์ฌ ์ปดํฌ๋ํธ์ ๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- AI ์ฑ๋ ์์ฑ
- ์์ ํ๋ ์ด์
- AI CM Song ์์ฑ
- ์ฌ์ฉ์์ AI ๊ฐ ๋ฉ์์ง ๊ด๋ฆฌ
- AI ์๋ต ์ํ ๋ฐ ์งํ ๊ณผ์ ๊ด๋ฆฌ
์ฌ๋ฌ ๊ธฐ๋ฅ์ด ํ๋์ ์ปดํฌ๋ํธ์ ์ง์ค๋์ด ์์๊ธฐ ๋๋ฌธ์ ์ง์์ ์ธ ๊ธฐ๋ฅ ์ถ๊ฐ ๊ณผ์ ์์ ์ฝ๋ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.
๐ช ๊ธฐ์กด ์ด์
1. View์ Business Logic์ ๊ฒฐํฉ
๊ธฐ์กด์๋ ์ปดํฌ๋ํธ ๋ด๋ถ์์
- API ํธ์ถ
- ์๋ต ๋ฐ์ดํฐ ๊ฐ๊ณต
- ์ํ ๊ด๋ฆฌ
- ํ๋ฉด ๋ ๋๋ง
๋ชจ๋ ์ญํ ์ ์ํํ๊ณ ์์์ต๋๋ค.
์ด๋ก ์ธํด ํ๋ฉด ์์ ๋ง ํ์ํ ๊ฒฝ์ฐ์๋ ๋น์ฆ๋์ค ๋ก์ง์ ํจ๊ป ํ์ธํด์ผ ํ์ผ๋ฉฐ, ์์ ์์ ์๋ ์์์น ๋ชปํ ์ฌ์ด๋ ์ดํํธ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์์์ต๋๋ค.
2. Message ๊ตฌ์กฐ๊ฐ ์ผ๊ด๋์ง ์์
๋ฉ์์ง ํ์ ์ด ๊ท๊ฒฉํ๋์ด ์์ง ์์
- Message๋ง๋ค ๋ค๋ฅธ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ฌ์ฉ
- ์กฐ๊ฑด๋ฌธ ์ฆ๊ฐ
- ์๋ก์ด Message ํ์ ์ถ๊ฐ ์ ๊ธฐ์กด ์ฝ๋ ์์ ํ์
๋ฑ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
๋ฉ์์ง๊ฐ ๋ง์์ง์๋ก ์ฝ๋์ ๋ณต์ก๋๊ฐ ๋น ๋ฅด๊ฒ ์ฆ๊ฐํ๋ ๊ตฌ์กฐ์์ต๋๋ค.
3. ๋ฌธ์์ด ์์ ์ฌ์ฉ
๋ฉ์์ง ํ์ ๊ณผ ์ด๋ฒคํธ ์ด๋ฆ ๋ฑ์ด ๋ฌธ์์ด(String Literal)๋ก ๊ด๋ฆฌ๋๊ณ ์์ด
"TEXT"
"LOADING"
"SONG"
์คํ ํ๋๋ง ๋ฐ์ํด๋ ๋ฐํ์์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์์์ผ๋ฉฐ, IDE์ ์๋์์ฑ์ด๋ ํ์ ๊ฒ์ฆ๋ ํ์ฉํ๊ธฐ ์ด๋ ค์ ์ต๋๋ค.
๐ ๊ฐ์ ์ฌํญ
1. ์ญํ ๋ณ ๋๋ ํ ๋ฆฌ ๋ถ๋ฆฌ
๊ธฐ์กด์๋ ํ๋์ ์ปดํฌ๋ํธ์์ ๋๋ถ๋ถ์ ์ญํ ์ ๋ด๋นํ์ง๋ง, ๋ฆฌํฉํ ๋ง ์ดํ์๋ ๊ฐ ์ฑ ์์ ๋ ๋ฆฝ์ ์ธ ๋ชจ๋๋ก ๋ถ๋ฆฌํ์ต๋๋ค.
src
โโโ components
โ โโโ AiChat.vue // View
โโโ composables
โ โโโ useAiChat.js // Business Logic
โโโ service/api
โ โโโ aiChatApi.js // API
โโโ shared
โโโ adapter
โ โโโ ai-chat.js // ๋ฐ์ดํฐ ๋ณํ
โโโ factory
โโโ ai-chat.js // Message ์์ฑ
์ด๋ฅผ ํตํด View๋ ํ๋ฉด ๋ ๋๋ง๋ง ๋ด๋นํ๊ณ , ๋น์ฆ๋์ค ๋ก์ง๊ณผ API ํธ์ถ์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋๋ก ๊ฐ์ ํ์ต๋๋ค.
2. Business Logic ๋ถ๋ฆฌ
๋น์ฆ๋์ค ๋ก์ง์ useAiChat์ผ๋ก ์ด๋ํ์ฌ
- ํ ์คํธ ์ฉ์ด์ฑ ํฅ์
- View ์ฝ๋ ๋จ์ํ
- ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ก์ง ๊ตฌ์ฑ
์ด ๊ฐ๋ฅํ๋๋ก ๊ฐ์ ํ์ต๋๋ค.
3. API ๊ณ์ธต ๋ถ๋ฆฌ
API ํธ์ถ์ ๋ณ๋์ Service Layer๋ก ๋ถ๋ฆฌํ์ฌ
- API ๋ณ๊ฒฝ ์ ์์ ๋ฒ์ ์ต์ํ
- Mock API ์ ์ฉ ์ฉ์ด
- ์ ์ง๋ณด์์ฑ ํฅ์
ํจ๊ณผ๋ฅผ ์ป์ ์ ์์์ต๋๋ค.
4. Adapter & Factory ํจํด ์ ์ฉ
๋ฉ์์ง ์์ฑ๊ณผ ๋ฐ์ดํฐ ๋ณํ์ ๊ฐ๊ฐ Factory์ Adapter๋ก ๋ถ๋ฆฌํ์ฌ
- Message ์์ฑ ๋ก์ง ์ผ์ํ
- ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ณ๊ฒฝ์ ๋ํ ๋์๋ ฅ ํฅ์
- ์๋ก์ด Message ํ์ ์ถ๊ฐ ์ ์ํฅ ๋ฒ์ ์ต์ํ
ํ ์ ์๋๋ก ๊ฐ์ ํ์ต๋๋ค.
5.Strategy Pattern ์ ์ฉ
AI Channel, ์๊ฐ๋ณ ํ๋ ์ด์ , AI CM Song์ ๋์ผํ Chat UI๋ฅผ ์ฌ์ฉํ์ง๋ง ๋ฉ์์ง๋ฅผ ์์ฑํ๊ณ ์ ์กํ๋ ๋ฐฉ์์ด ์๋ก ๋ฌ๋์ต๋๋ค.
๊ธฐ์กด์๋ ์๋น์ค๋ณ๋ก if/else๋ฅผ ํตํด ์ ์ก ๋ก์ง์ ๋ถ๊ธฐํ์ง๋ง, AI ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ์๋ก ์กฐ๊ฑด๋ฌธ์ด ์ฆ๊ฐํ๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฉ์์ง ํ์ ๋ณ Handler๋ฅผ ๋งคํํ๋ ์ ๋ต(Strategy) ๋ฐฉ์์ ์ ์ฉํ์ต๋๋ค.
constsendHandlerMap= {
[AI_CHAT_TYPES.AI_CHANNEL]:sendDefaultMessage,
[AI_CHAT_TYPES.TIME_CURATION]:sendDefaultMessage,
[AI_CHAT_TYPES.AI_CM_SONG]:sendCmSongMessage
};
sendHandlerMap[type]?.();
์ด ๊ตฌ์กฐ๋ฅผ ํตํด
- ์กฐ๊ฑด๋ฌธ(if, switch) ์ ๊ฑฐ
- ์ ์ก ๋ก์ง์ Handler ๋จ์๋ก ๋ถ๋ฆฌ
- ์๋ก์ด AI ๊ธฐ๋ฅ์ Handler๋ง ์ถ๊ฐํ๋ฉด ๋๋ฏ๋ก ๊ธฐ์กด ํธ์ถ๋ถ ์์ ๋ถํ์
- ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ ํฅ์
์ด๋ผ๋ ํจ๊ณผ๋ฅผ ์ป์์ต๋๋ค.
๐ฏ ๊ฐ์ ํจ๊ณผ
- ์ฝ๋ ๋ผ์ธ 77% ๊ฐ์ (1534 → 358)
- View / Business Logic / API์ ์ฑ ์ ๋ถ๋ฆฌ
- ๋ฉ์์ง ์์ฑ ๋ฐฉ์ ํ์คํ
- ์ ์ง๋ณด์์ฑ๊ณผ ๊ฐ๋ ์ฑ ํฅ์
- ๊ธฐ๋ฅ ์ถ๊ฐ ์ ๋ณ๊ฒฝ ๋ฒ์ ์ต์ํ
- ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ก ๊ฐ์
- ํ์ฅ์ฑ๊ณผ ํ ์คํธ ์ฉ์ด์ฑ ํ๋ณด
'Vue' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Action Sheet๋ฅผ ํธ๋์ง์ + slot์ผ๋ก ๋ง๋ค๊ธฐ (0) | 2025.03.09 |
|---|---|
| ๐ซข husky์ eslint ์ ์ฉ (0) | 2024.05.03 |
| ๐ณ HOC์ฌ์ฉํ์ฌ ๋ก์ง ๊ณตํตํ ์ํค๊ธฐ (0) | 2023.11.05 |
| ๐ vue jest ์ฌ์ด๋๋ก ์์ํ๋ฉด์ ๋ฐฐ์ด๊ฒ๋ค (0) | 2023.08.20 |
| ๐ฐ vue2 jest ํ๊ฒฝ์ธํ (0) | 2023.08.09 |
๋๊ธ