๐
์บก์คํค ๋์์ธ ๊ฒฝ์ง ๋ํ ์์ ์์ (2025.12) ๐
๐
์กธ์
ํ๋ก์ ํธ ํฌ์คํฐ ์ธ์
์ฐ์์ ์์ (2025.12) ๐
EverTale Frontend๋ ์์ด-๋ถ๋ชจ ์ธํฐ๋ํฐ๋ธ ๋ํ๋ฅผ ์ ๊ณตํ๋ Web App์ ์ฌ์ฉ์ ํ๋ฉด์ ๊ตฌํํฉ๋๋ค. remix ๊ธฐ๋ฐ์ผ๋ก ์๋ฒ์์ ํต์ ์ RESTful API ๋ฐฉ์์ผ๋ก ๊ตฌํํ์๊ณ , Route ๊ธฐ๋ฐ UI ์ค๊ณ, ์๋ฒ ๋ฆฌ๋ค์ด๋ ์ , loader/action์ ํตํด ๋ฐฑ์๋์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ต๋๋ค.
| ๋ถ๋ฅ | ์ฌ์ฉ ๊ธฐ์ | ์ค๋ช |
|---|---|---|
| Framework | Remix | ์๋ฒ ์ค์ฌ ๋ ๋๋ง(SSR) ๋ฐ ๋ผ์ฐํ ๊ธฐ๋ฐ UI ํ๋ ์์ํฌ |
| UI | React | ์ปดํฌ๋ํธ ๊ตฌ์กฐ ๊ธฐ๋ฐ ์ฌ์ฉ์ ํ๋ฉด ๊ตฌ์ฑ |
| Build Tool | Vite | ๋น ๋ฅธ ๊ฐ๋ฐ ํ๊ฒฝ ๋ฐ ๋น๋ ์ต์ ํ |
| Canvas | HTML5 Canvas | ์ฌ์ฉ์ ๊ทธ๋ฆผ ์ฒ๋ฆฌ ๋ฐ YOLO ๊ฒฐ๊ณผ(๋ฐ์ด๋ฉ ๋ฐ์ค) ์ค๋ฒ๋ ์ด |
| Detection | DOM API | ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฏธ์ง ๋ด ์๋ ์ขํ๋ฅผ ๊ณ์ฐ |
| API Strategy | REST API | HTTP ๊ธฐ๋ฐ JSON ์์ฒญยท์๋ต์ ํตํ ์๋ฒ์์ ๋ฐ์ดํฐ ํต์ |
app/
โโ routes.js
โโ components/
โโ styles/
โโ api/
โโ auth/
โโ (๊ฐ ํ์ด์ง๋ณ ํ๋ฉด ํ์ผ)
- routes: Remix ๋ผ์ฐํ ์ญํ ์ ์ํํ๋ค. ์ฃผ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ด์ง๋ฅผ ๊ฒฐ์ ํ๋ฉฐ, loader/action์ ํตํด ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์.
- components: React UI ์ปดํฌ๋ํธ ์งํฉ์ด๋ฉฐ, ๊ณตํต UI ์์ ๋๋ ์กฐํฉ ์์๋ค์ ํฌํจ.
- Styles: ์ ์ญ ์คํ์ผ ๋ฐ UI ์คํ์ผ ๊ด๋ จ css ํ์ผ๋ค์ด ์์น.
- api: ๋ฐฑ์๋ RESTful API์ ํต์ ํ๋ fetch wrapper ๋๋ API abstraction ์ฝ๋๊ฐ ํฌํจ๋จ. HTTP ํต์ ๋ก์ง์ ์ ๋ฆฌํด์ route ๋๋ component์์ ํธ์ถ.
- auth: ํ๋ก ํธ์์ ์ธ์ฆ ์ํ๋ฅผ ์ง์ ๊ด๋ฆฌํ๋ฉฐ, auth.js๋ฅผ ํตํด ์ฟ ํค ๊ธฐ๋ฐ ์ธ์ฆ์ ์ํํจ. ํ ํฐ์ ์ฟ ํค์ ์ ์ฅํ๋ฉฐ, Remix session๊ณผ ํ๋ ฅํ์ฌ ๋ก๊ทธ์ธ ์ํ๋ฅผ ์ ์ง.
- ๊ฐ ํ์ด์ง๋ณ ํ๋ฉด: URL ๊ฒฝ๋ก์ ๋ฐ๋ผ ๋ ๋๋ง๋๋ Remix Route ํ์ด์ง์ด๋ฉฐ, ํ์ด์ง๋ณ loader/action์ ํตํด ์๋ฒ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์.
- Remix loader โ GET
- Remix action โ POST
- ํ ํฐ ํฌํจ Authorization Header
- RESTful endpoint ์ฌ์ฉ
fetch('/api/story', {
method: 'GET',
headers: {
Authorization: `Bearer ${token}`
}
})