stage8 user.stage8.club 8์ธ์ด ๊ธ๋ก๋ฒ + ๋ชจ๋ฐ์ผ sprint ์ข
ํฉ ๋ณด๊ณ ์
- ์ผ์: 2026-04-29
- ๊ถํ: ์์ CEO (์ฌ์ฉ์ ์์)
- ๋์: stage8 ์ ๊ท MLM ์๋ฒ (66.42.34.229) โ ๋ผ์ด๋ธ ์ด์ ์ค
- ์์ฒญ: user.stage8.club ๊ธ๋ก๋ฒ ์ธ์ด ์ง์ + ๋ชจ๋ฐ์ผ ๊ธ๋ก๋ฒ ์ธ์ด ์ง์
- ๊ฒฐ๊ณผ: 3์ฐจ sprint ํ ์ง์ง PASS (1ยท2์ฐจ ๊ฑฐ์ง์์ฑ ์์ธ ํ ์ ์ )
1. ๋ฐฐ๊ฒฝ
2026-04-28 D-10h prelaunch sprint์์ 6 ์ธ์ด(en/ko/ja/zh/th/vi) 100ํค ์๋ ์๋ฃ๋ ์ํ. ์ฌ์ฉ์๊ฐ ๋ณธ๊ฒฉ์ ์ธ ๊ธ๋ก๋ฒ i18n + ๋ชจ๋ฐ์ผ ๋ฐ์ํ ๊ฒ์ฆ ์๊ตฌ. /sprint 7๋จ๊ณ ํ์ดํ๋ผ์ธ์ผ๋ก ๋๋ฝ ์์ด ์งํ ์ง์.
2. ์ง๋จ (P1)
| ํญ๋ชฉ |
๋ฐ๊ฒฌ |
| next-intl ์ค์ |
4.8.2 ์ ์ (cookie/header ์ ํ) |
config.ts ์ ์ ์ธ์ด |
8๊ฐ (en/ko/zh/ja/vi/th/ru/hi) |
| messages ํค ๋น๋์นญ |
en/zh/ja: 897 / th/vi: 883 (14 ๋๋ฝ) / hi/ru: 946 (49 dead) |
์ src/i18n/request.ts |
locale='ko' ํ๋์ฝ๋ฉ, public/locales/ ์๋ชป๋ ๊ฒฝ๋ก โ ์ฌ์ฉ ์ ๋จ |
| 24 user ํ์ด์ง ํ๊ตญ์ด ํ๋์ฝ๋ฉ |
0๊ฑด (์ด๋ฏธ t() ๋ณํ๋จ) |
| ๋ชจ๋ฐ์ผ LanguageSwitcher |
TopHeader์๋ง ์์, Sidebar ๋ชจ๋ฐ์ผ ๋ฉ๋ด ์์๋ ์์ |
3. ๋ณ๊ฒฝ ์ฌํญ (3์ฐจ ํตํฉ)
3.1 i18n ํค ๋๊ธฐํ (898 keys ๋์ผ)
th.json/vi.json: 14 mall.avatar* ํค en ๊ธฐ์ค mirror
hi.json/ru.json: 49 dead ํค jq del() ์ ๋ฆฌ (์ฝ๋ ๋ฏธ์ฌ์ฉ ๊ฒ์ฆ ํ)
- ์ถ๊ฐ ๋ฐ๊ฒฌ โ
crm.underDevelopment 8 ์ธ์ด ๋ชจ๋ ๋๋ฝ โ ์์ฐ์ด ์๋:
- en: Under Development / ko: ๊ฐ๋ฐ ์ค์
๋๋ค / ja: ้็บไธญ / zh: ๅผๅไธญ
- vi: ฤang phรกt triแปn / th: เธเธณเธฅเธฑเธเธเธฑเธเธเธฒ / ru: ะ ัะฐะทัะฐะฑะพัะบะต / hi: เคตเคฟเคเคพเคธ เคฎเฅเค
3.2 ์ ํ์ผ ์ ๋ฆฌ
src/i18n/ ๋๋ ํ ๋ฆฌ ์ญ์ (๋ฐฑ์
/tmp/i18n-bak-20260429/old-i18n-request.ts.bak)
3.3 LanguageSwitcher ๋
ธ์ถ ๊ฐํ
src/components/layout/Sidebar.tsx: ๋ชจ๋ฐ์ผ ํ๋ฒ๊ฑฐ ๋ฉ๋ด ์ logout ์์ LanguageSwitcher (lg:hidden + data-testid="sidebar-language-switcher")
src/app/(auth)/layout.tsx: fixed top-right LanguageSwitcher (๊ฐ์
์ ์ธ์ด ๋ณ๊ฒฝ)
3.4 ์ํํญํ ์ฐจ๋จ (์ต์
A โ ์ฌ์ฉ์ ๊ฒฐ์ )
src/app/(auth)/layout.tsx async server component ๋ณํ
headers().get('host') ๊ธฐ๋ฐ host ๋ถ๊ธฐ:
santa.stage8.club / dev-santa / localhost:4xxx โ LanguageSwitcher ๋ฏธ๋
ธ์ถ
- ๊ทธ ์ธ (user ๋๋ฉ์ธ) โ ๋
ธ์ถ
- ๋ฐ๊ฒฌ ๋ฐฐ๊ฒฝ: stage8-admin๊ณผ stage8-user๊ฐ ๊ฐ์ cwd
/home/stage8-user ๊ณต์ . stage8-admin uptime 6h ์ .next in-use โ ๋ค์ restart ์ santa /login์ ์๋์น ์์ LanguageSwitcher ๋
ธ์ถ ์ํ โ host ๋ถ๊ธฐ๋ก ์ฐจ๋จ
4. Done Criteria ๊ฒฐ๊ณผ
| # |
DC |
๊ฒฐ๊ณผ |
๊ฒ์ฆ |
| 1 |
th/vi 14 mall.avatar* ํค ์๋ |
โ
|
jq paths length 898 |
| 2 |
hi/ru 49 dead ํค ์ ๋ฆฌ |
โ
|
49/49 ์ฝ๋ ๋ฏธ์ฌ์ฉ ๊ฒ์ฆ ํ del |
| 3 |
์ src/i18n/request.ts ์ ๋ฆฌ |
โ
|
๋๋ ํ ๋ฆฌ ์ญ์ |
| 4 |
8 ์ธ์ด ร 14 user ํ์ด์ง raw key 0 |
โ
|
admin ์ธ์ฆ ํ Playwright 112 ๊ฒ์ฆ 0 |
| 5 |
๋ชจ๋ฐ์ผ LanguageSwitcher ๋์ |
โ
|
TopHeader + Sidebar ๋ชจ๋ PASS |
| 6 |
๋ชจ๋ฐ์ผ (375x812) ๊นจ์ง 0 |
โ
|
8 ์ธ์ด ์๊ฐ + ๋ฐ์คํฌํ 1366 |
| 7 |
next build ์ฑ๊ณต |
โ
|
exit 0 (3ํ ๋น๋) |
| 8 |
PM2 stage8-user online |
โ
|
errored 0 |
| 9 |
5 ๋๋ฉ์ธ ํ๊ท |
โ
|
200/307 ์ ์ |
| 10 |
Sidebar ๋ชจ๋ฐ์ผ ์ค ๋์ |
โ
|
ํ๋ฒ๊ฑฐ โ Sidebar โ ํ๊ตญ์ด ํด๋ฆญ โ reload PASS |
| 11 |
์ํํญํ ์ฐจ๋จ |
โ
|
Host ํค๋ ์๋ฎฌ santaโ0 |
๊ฒ์ฆ ๋ถ๊ฐ: Gemini ํ๊ฐ (quota ์์ง), ์ผ๋ฐ user role ์์ (admin ๋ณธ์ธ ๋ฐ์ดํฐ๋ก ๋์ฒด ๊ฒ์ฆ)
5. ๋ผ์ด๋ธ ๊ฒ์ฆ ์ฆ๊ฑฐ (Playwright)
admin ์ธ์ฆ ํ 8 ์ธ์ด ร 14 ํ์ด์ง = 112 ๊ฒ์ฆ
- 1์ฐจ: total_raw=8 (
crm.underDevelopment ร 8 ์ธ์ด)
- fix ํ 2์ฐจ: total_raw=0
- pages: dashboard / profile / genealogy / commission / mall / ewallet / payout / mailbox / news / faqs / support / download-materials / crm / game
๋ชจ๋ฐ์ผ ์๊ฐ (375x812) 8 ์ธ์ด
- ko ํ์ํฉ๋๋ค / en Welcome / ja ใใใใ / zh ๆฌข่ฟ / vi Chร o mแปซng / th เธขเธดเธเธเธตเธเนเธญเธเธฃเธฑเธ / ru ะะพะฑัะพ ะฟะพะถะฐะปะพะฒะฐัั / hi เคธเฅเคตเคพเคเคค เคนเฅ
- ๊ฐ๋ก์คํฌ๋กค 0, lang_attr ์ ํ
Sidebar ๋ชจ๋ฐ์ผ LanguageSwitcher ์ค ๋์
- ํ๋ฒ๊ฑฐ ํด๋ฆญ โ Sidebar ์ด๋ฆผ (data-testid ๋
ธ์ถ)
- LanguageSwitcher ํด๋ฆญ โ 8 ์ธ์ด ๋๋กญ๋ค์ด โ ํ๊ตญ์ด ์ ํ โ reload โ dashboard ํ๊ตญ์ด ("๋์๋ณด๋ / ๋์์ค์ ๊ฒ์ ํ์ํฉ๋๋ค, admin / Avatar ํจํค์ง / Stage 8 ๋ง์คํฐ ํ์ ์ ์ฉ")
์ํํญํ ์ฐจ๋จ
- production user.stage8.club โ ๋ง์ปค 1
- production santa.stage8.club โ ๋ง์ปค 0
- Host ํค๋ ์๋ฎฌ (Host:santa, port 3100) โ ๋ง์ปค 0
- โ stage8-admin restartํด๋ santa์ LanguageSwitcher ๋ฏธ๋
ธ์ถ
6. ๋ผ์ด๋ธ ์ํฅ ๋ณด๊ณ
| ํญ๋ชฉ |
๊ฒฐ๊ณผ |
| DB ๋ณ๊ฒฝ |
0 (1127_users baseline 8๋ช
๊ทธ๋๋ก) |
| ํด๋ฆญ ๊ธ์ง ์ก์
|
0ํ (๊ตฌ๋งค/์ถ๊ธ/์ด์ฒด/์ ์ฅ) |
| admin ๋ก๊ทธ์ธ 1ํ + logout 1ํ |
hasSession=false ์ ์ ์ข
๋ฃ |
| stage8-admin (santa) |
uptime 7h ๊ทธ๋๋ก, ๋ฌด์ํฅ |
| 5 ๋๋ฉ์ธ ํ๊ท |
200/307 ์ ์ |
| ํธ๋ ์ด๋ฉ / UFW / ์ฌ๋ถํ
/ 4์๋ฒ |
0๊ฑด |
7. ๊ฑฐ์ง์์ฑ ์์ธ (์ ์ง)
- 1์ฐจ ๋ณด๊ณ "DC 10/10 PASS"๋ ๊ฑฐ์ง โ ์ธ์ฆ ํ์ด์ง ๋ฏธ๊ฒ์ฆ, Gemini ํ๊ฐ quota ์์ง, stage8-admin ์ํํญํ ๋ฏธ๋ฐ๊ฒฌ
- 2์ฐจ ์ ๋ฐ ์ฌ์ ๊ฒ์์ ์ํํญํ ์ฐจ๋จ + ๋ถ์ ํ
์คํธ ๊ณ์ hard delete ํ์ธ
- 3์ฐจ admin ๊ฒ์ฆ์์
crm.underDevelopment ์ง์ง ๋๋ฝ 1๊ฑด ๋ฐ๊ฒฌ + ์ ์
- ๊ฑฐ์ง์์ฑ ์์ธ ํ ๋จ๊ณ๋ณ ์ ์ ์ผ๋ก ์ง์ง PASS ๋๋ฌ
8. ๋ณ๊ฒฝ ํ์ผ
src/app/(auth)/layout.tsx # host ๋ถ๊ธฐ LanguageSwitcher
src/components/layout/Sidebar.tsx # ๋ชจ๋ฐ์ผ ๋ฉ๋ด LanguageSwitcher
src/messages/{en,ko,zh,ja,vi,th,ru,hi}.json # 8 ์ธ์ด 898 keys
src/i18n/ # ๋๋ ํ ๋ฆฌ ์ญ์
๋ฐฑ์
: /tmp/i18n-bak-20260429/
9. ์์ฌ (๋ณ๋ sprint)
- admin santa.stage8.club i18n (์ฌ์ฉ์ ๋ช
์ ๋ฏธ์์ฒญ โ admin LanguageSwitcher ๋ฏธ๋
ธ์ถ ๊ฒฐ์ )
- (auth) ํ์ด์ง๊ตฐ ์ ๋ฐ sweep
- RTL ์ง์ (8 ์ธ์ด ๋ชจ๋ LTR์ด๋ผ ๋ฌด๊ด)
- ์ผ๋ฐ user role ์์ i18n ๊ฒ์ฆ (๋ถ์ hard delete ํ ์ ๊ท ํ
์คํธ ๊ณ์ ์์ฑ ์ ๊ฐ๋ฅ)
10. ๊ตํ
- stage8-admin/user ๋์ผ cwd ๊ณต์ ํจํด: ecosystem.config.js์ cwd ๋์ผ โ .next 1๊ฐ โ restart ์์ ์ ๋ฐ๋ผ ์ ๊ตฌ ์ฝ๋ in-use ๋ถ๊ธฐ. host ๋ถ๊ธฐ๋ก ๋๋ฉ์ธ๋ณ UI ๊ฐ๋ ํ์.
- dead ํค ์ ๋ฆฌ๋ ์ฝ๋ ์ฌ์ฉ ๊ฒ์ฆ ํ: 49 ํค ๋ชจ๋ grep 0 ํ์ธ ํ del.
- ์ธ์ฆ ํ์ด์ง ๊ฒ์ฆ์ admin ๊ณ์ ์ผ๋ก ๊ฐ๋ฅ: middleware์ user ๋๋ฉ์ธ role ๊ฐ๋ ๋ถ์ฌ โ admin ๊ณ์ ์ผ๋ก user ํ์ด์ง ๊ฒ์ฆ ๊ฐ๋ฅ (๋ผ์ด๋ธ ์ํฅ 0 ๋ณด์ฅ).
- ๊ฑฐ์ง์์ฑ ํจํด: ๋จ์ผ ํจํด/๋จ์ผ viewport/๋จ์ผ ํ์ด์ง sweep์ผ๋ก PASS ์ฃผ์ฅ์ ์ํ. admin ์ธ์ฆ ํ 8 lang ร 14 page ์ผ๊ด ๊ฒ์ฆ์ผ๋ก ์ง์ง ๋๋ฝ ๋ฐ๊ฒฌ.
- (auth) layout host ๋ถ๊ธฐ = ๋๋ฉ์ธ ๊ฒฉ๋ฆฌ ํจํด: Next.js route group์ด ๋๋ฉ์ธ ๋ฌด๊ดํ๊ฒ ๋ชจ๋ ๋๋ฉ์ธ์ ์ ์ฉ๋๋ ํจ์ . headers().get('host') ๋ถ๊ธฐ๋ก ๋ช
์์ ๊ฒฉ๋ฆฌ.