Soundlog๋ ๊ด๊ด์ง์ ์์น์ ๋งฅ๋ฝ์ ์์ ์ถ์ฒ, ์ฌํ ๊ธฐ๋ก, Recap ์ฝํ ์ธ ๋ก ์ฐ๊ฒฐํ๋ React Native/Expo ์ฑ์ ๋๋ค.
npm install
npm run web์น ์คํ ํ ๋ธ๋ผ์ฐ์ ์์ http://localhost:8081์ ์ด์ด ํ์ธํฉ๋๋ค. ๋ค์ดํฐ๋ธ ๊ธฐ๋ฅ๊น์ง ํ์ธํ ๋๋ Expo Go ๋๋ development build๋ฅผ ์ฌ์ฉํฉ๋๋ค.
npm run ios
npm run android
npm run dev:clientnpm run typecheck
npm run check:recap-clustering
npm run check:server-contract
npm run check
npm run web:clearcheck:recap-clustering์ ์ ์ฒด ๋ฆฌ์บก๊ณผ ๋ด ๋ฆฌ์บก ์ง๋์ ์ขํ ๋ฌถ์, ์ค๋ณ ๋ฐ๊ฒฝ, ํ๋ ์ ๊ฐ๋ณ ํ ๋ถ๋ฆฌ๋ฅผ ๊ฒ์ฆํฉ๋๋ค. check์๋ ํฌํจ๋์ด ์์ต๋๋ค.
check:server-contract์ ํ์ ๊ฒฝ๋ก์ SoundLogServer/openapi/soundlog-api.yaml๊ณผ ํ๋ก ํธ src/api์ HTTP ๋ฉ์๋ยท๊ฒฝ๋ก๋ฅผ ๋น๊ตํฉ๋๋ค. ์๋ฒ ์ ์ฅ์ ์์น๊ฐ ๋ค๋ฅด๋ฉด SOUNDLOG_SERVER_ROOT๋ฅผ ์ง์ ํฉ๋๋ค.
๋ ๊ฑฐ์ mock API ์ํ๋ฅผ ํ์ธํ๋ ์ง์ฐ/์คํจ ํ๊ฒฝ๋ณ์๋ src/mock-server ์ฐธ๊ณ ์ฉ์ผ๋ก๋ง ๋จ์ ์์ต๋๋ค. ํ์ฌ ์ฑ API facade๋ ์๋ฒ API๋ง ํธ์ถํฉ๋๋ค.
EXPO_PUBLIC_MOCK_API_DELAY_MS=1500 npm run web
EXPO_PUBLIC_MOCK_API_FAIL_ENDPOINTS=playlist.detail npm run web์ค์ ์๋ฒ์ ์ฐ๋ํ ๋๋ Expo ํ๊ฒฝ๋ณ์๋ก API base URL์ ์ง์ ํฉ๋๋ค. ์ด ๊ฐ์ด ์์ผ๋ฉด mock์ผ๋ก ๋์๊ฐ์ง ์๊ณ API URL ๋๋ฝ ์ค๋ฅ๋ฅผ ํ์ํฉ๋๋ค.
EXPO_PUBLIC_SOUNDLOG_API_SOURCE=server EXPO_PUBLIC_SOUNDLOG_API_BASE_URL=https://api.soundlog.p-e.kr npm run iosSoundlog๋ ์น ์๋น์ค๋ฅผ ๋ฐฐํฌํ์ง ์์ต๋๋ค. ์ด์ ๋ฐฐํฌ ๋์์ Expo/EAS๋ก ๋น๋ํ iOSยทAndroid ๋ค์ดํฐ๋ธ ์ฑ์ด๋ฉฐ, ์ฑ์ Vercel ํ๋ก์ ์์ด API์ ML์ด ํจ๊ป ๋ฐฐํฌ๋ https://api.soundlog.p-e.kr์ ์ง์ ํธ์ถํฉ๋๋ค. ์ ์ฅ์์ webยทVercel ๊ด๋ จ ์ค์ ์ ๋ก์ปฌ ํธํ์ฑ ํ์ธ๊ณผ ๊ณผ๊ฑฐ ์คํ์ฉ ์๋ฃ์ผ ๋ฟ ์ด์ ๋ฐฐํฌ ๊ฒฝ๋ก์ ํฌํจํ์ง ์์ต๋๋ค.
๋ค์ดํฐ๋ธ ์ค๋ฐฐํฌ ๋น๋๋ api.soundlog.p-e.kr ์๋ธ๋๋ฉ์ธ์ ์ง์ ํธ์ถํฉ๋๋ค. ๋ก๊ทธ์ธ์ Soundlog ์์ฒด ์ด๋ฉ์ผ/๋น๋ฐ๋ฒํธ ๊ณ์ ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
development, preview EAS profile์ api.soundlog.p-e.kr์ ์ง์ ๋ฐ๋ผ๋ณด๋๋ก ์ค์ ๋์ด ์์ต๋๋ค.
๋ณธ์ธ iPhone์ USB๋ก ์ฐ๊ฒฐํด ์ต์ ์ฝ๋๋ฅผ ์ง์ ํ
์คํธํ ๋๋ iPhone ์ค๊ธฐ๊ธฐ ํ
์คํธ ๊ฐ์ด๋๋ฅผ ๋จผ์ ํ์ธํฉ๋๋ค. ์ค๊ธฐ๊ธฐ์์ 127.0.0.1์ Mac์ด ์๋๋ผ iPhone ์์ ์ด๋ฏ๋ก, ๋ก์ปฌ ์๋ฒ๋ฅผ ์ฌ์ฉํ ๋๋ Mac์ LAN IP๋ฅผ ์ฑ ๋น๋ ํ๊ฒฝ๋ณ์๋ก ์ง์ ํด์ผ ํฉ๋๋ค.
- API ๋ฐ ML:
https://api.soundlog.p-e.kr - ๊ฐ์ธ์ ๋ณด ์ฒ๋ฆฌ๋ฐฉ์นจ:
https://api.soundlog.p-e.kr/legal/privacy - ์๋น์ค ์ด์ฉ์ฝ๊ด:
https://api.soundlog.p-e.kr/legal/terms - ๊ณ ๊ฐ์ง์: ์ค์ ์์ ๊ณผ ๋ต์ฅ์ด ํ์ธ๋ ๋ฉ์ผ์ production EAS ํ๊ฒฝ์ ์ค์
- API source:
server - auth: Soundlog ์์ฒด ์ด๋ฉ์ผ/๋น๋ฐ๋ฒํธ ๋ก๊ทธ์ธ
- iOS/Android: HTTPS API๋ง ์ฌ์ฉ
Mock API๋ก ๋๋๋ฆฌ๋ ๋ฐํ์ ๊ฒฝ๋ก๋ ์ ๊ฑฐํ์ต๋๋ค. ํ๋ฉด ์ํ ํ
์คํธ๊ฐ ํ์ํ๋ฉด ์๋ฒ fixture ๋๋ src/mock-server ๋ ๊ฑฐ์ ์๋ฃ๋ฅผ ๋ณ๋ ๊ฐ๋ฐ ๋๊ตฌ์์๋ง ์ฌ์ฉํฉ๋๋ค.
API origin์ด ์ต์ ์๋ฒ์ธ์ง ํ์ธํ๋ ค๋ฉด ์๋์ฒ๋ผ ์คํํฉ๋๋ค.
SOUNDLOG_API_ORIGIN=https://api.soundlog.p-e.kr npm run check:api-origin์ด ๊ฒ์ฌ๋ ๋ก๊ทธ์ธ ํ์ API๋ ํจ๊ป ํ์ธํ๋ฏ๋ก SOUNDLOG_CHECK_EMAIL,
SOUNDLOG_CHECK_PASSWORD๋ฅผ ์ง์ ํ๋ฉด ํด๋น smoke ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํฉ๋๋ค. ๊ฐ์
์ง์ ํ์ง ์์ผ๋ฉด @soundlog.test ์์ ๊ณ์ ์ ์์ฑํด API์ ML ์ถ์ฒ์ ๊ฒ์ฆํ ๋ค ์ฆ์ ์ญ์ ํฉ๋๋ค.
Android ์ง์ธ ํ ์คํธ์ฉ ๋ด๋ถ ๋ฐฐํฌ ๋น๋๋ ์๋ ๋ช ๋ น์ผ๋ก ์์ฑํฉ๋๋ค.
npx eas build --profile preview --platform androidiOS๋ TestFlight ๋๋ ad hoc ๊ธฐ๊ธฐ ๋ฑ๋ก์ด ํ์ํฉ๋๋ค. App Store/TestFlight์ ์ฌ๋ฆด production profile์ API์ ๊ฐ์ธ์ ๋ณด ์ฒ๋ฆฌ๋ฐฉ์นจ๊ณผ ์ด์ฉ์ฝ๊ด์ https://api.soundlog.p-e.kr์ ์ฌ์ฉํฉ๋๋ค. ์ ์๋ฒ์ ๊ณต๊ฐ ๋ฌธ์ ๊ฒฝ๋ก๋ฅผ ๋ฐฐํฌํ๊ณ ์ค์ ์์ ๊ฐ๋ฅํ ๊ณ ๊ฐ์ง์ ๋ฉ์ผ์ ์ค์ ํ ๋ค ๋ฆด๋ฆฌ์ค ๊ฒ์ฌ๋ฅผ ํต๊ณผํด์ผ ํฉ๋๋ค.
- ๋ฌธ์ ์ธ๋ฑ์ค
- ๋ฆฌ์บกยท๋ก๊ทธ ๋๋ฉ์ธ ๊ธฐ์ค
- ์๋น์ค ๊ธฐํ์
- React Native ํ๋ก ํธ ๊ณ ๋ ค์ฌํญ
- ๋น๊ฐ๋ฐ์์ฉ Codex ๊ฐ๋ฐ ๊ฐ์ด๋
- Codex ์์ฒญ ํ๋กฌํํธ ๋ชจ์
- UI ํผ๋๋ฐฑ ๋ฃจํ ์ด์ ๋ฌธ์
- ๊ฐ๋ฐ์ฉ ํ ์คํธ ๋งค๋์
- PR ์ ์ฉ ๊ฐ๋ฐ ํ๋ฆ
- GCP ์ฑ ๋ฐฐํฌ ๋๋ฉ์ธ ์ค์
- iPhone ์ค๊ธฐ๊ธฐ ํ ์คํธ ๊ฐ์ด๋
- Mock Server ์๋ด
๋น๊ฐ๋ฐ์๋ ๊ธฐ๋ฅ์ ๋ฐ๋ก ๊ตฌํํด๋ฌ๋ผ๊ณ ํ๊ธฐ๋ณด๋ค, ๋จผ์ โ๊ณํ ์๋ฆฝ โ ๋ฆฌ๋ทฐ โ ๊ตฌํ โ ๊ฒ์ฆ โ ์ปค๋ฐโ ํ๋ฆ์ผ๋ก ์์ฒญํ๋ฉด ์์ ํฉ๋๋ค.
์์:
Soundlog ์ฑ์์ ๋ฆฌ์บก ์์ธ ํ์ด์ง๋ฅผ ๊ฐ์ ํ๊ณ ์ถ์ด.
๋จผ์ ๊ด๋ จ ๋ฌธ์๋ฅผ ์ฝ๊ณ ๊ตฌํ ๊ณํ์ ์ธ์ด ๋ค, ์ฃ์ง์ผ์ด์ค๊ฐ ์์ผ๋ฉด ์ง๋ฌธํ๊ณ ,
๊ณํ ๋ฆฌ๋ทฐ ํ ๊ตฌํ, ํ์
์ฒดํฌ, ์น ํ์ธ๊น์ง ์งํํด์ค.
ํ๋ก์ ํธ ์ ์ฉ Codex ์คํฌ์ .codex/skills/soundlog-codex-workflow/SKILL.md์ ์ ๋ฆฌ๋์ด ์์ต๋๋ค.