- name
- server
- description
- Write or review the server side of an Apps in Toss mini-app: any backend
that stores per-user data or calls the Apps in Toss partner API (Toss
login token exchange, anonymous-key exchange, other partner calls), on
Cloudflare Workers, Node, a BaaS (Supabase, Firebase) or any other hosting.
Use it right away, before writing server code, for "์๋ฒ์ ์ ์ฅํด์ ๋ค๋ฅธ
๊ธฐ๊ธฐ์์๋ ๋ณด์ด๊ฒ ํด์ค", "์๋ฒ ๋ถ์ฌ์ค", "SupabaseยทFirebase์ ๋ด ๊ธฐ๋ก
์ ์ฅํด์ค", "Workers๋ก ์๋ฒ ๋ง๋ค์ด์ค", "ํ ์ค ๋ก๊ทธ์ธ ๋ถ์ฌ์ค" (even
client side only โ login needs console setup and a server exchange),
"์๋ฒ์์ ์ฌ์ฉ์ ๊ตฌ๋ถ์ ์ด๋ป๊ฒ ํด?", or "getAnonymousKey ๊ฐ์ ์๋ฒ์์
๊ทธ๋๋ก ์จ๋ ๋ผ?" โ even when the user only names the feature. It decides how the server
identifies users (anonymous-key exchange vs Toss login), wires mTLS for
partner API calls, parses the resultType envelope and sets exact CORS
origins, then writes or fixes the code. Keeps the user's chosen hosting.
Deploys only when asked; no console calls. Client screens are `/ait:design`; phone
testing is `/ait:test-on-device`. Triggered by `/ait:server [request]`.
- argument-hint
- [request]
# server skill
## ๋ชฉ์
๋ฏธ๋์ฑ์ด ์ฐ๋ ์๋ฒ ์ฝ๋๋ฅผ ์ฐ๊ฑฐ๋ ๊ณ ์น ๋ ์ฑ์ธํ ์ค ๊ณ ์ ์ ํ๋จ๊ณผ ์ฐ๊ฒฐ๋ถ๋ฅผ ๋งก๋๋ค.
์ฌ์ฉ์๋ณ ์ ์ฅ, ํํธ๋ API ํธ์ถ(ํ ์ค ๋ก๊ทธ์ธ ํ ํฐ ๊ตํ, ์ต๋ช
์๋ณํค ๊ตํ ๋ฑ)์ด
๋์์ด๋ค. ํ๋ ์์ํฌ ํ
ํ๋ฆฟ์ ์๋ก ๊น์ง ์๊ณ , ์ฌ์ฉ์๊ฐ ๊ณ ๋ฅธ ํธ์คํ
๊ณผ ๊ธฐ์กด ์ฝ๋๋ฅผ
๋ฐ๋ฅธ๋ค. ์ฌ์ค(๊ฒฝ๋ก, ์คํค๋ง, ํ์ฉ origin)์ docs MCP๋ก ์ฝ๋ ๊ฐ๋ฐ์์ผํฐ ๋ฌธ์๊ฐ
์ ๋ณธ์ด๊ณ , ์ด skill์ ํ๋จ ๊ธฐ์ค๊ณผ ์ ๊ฒ ์์๋ฅผ ๋ํ๋ค.
## ์คํ ์์
### 0. ๋ฒ์ ํ์ธ
์์
๋๋ ํฐ๋ฆฌ๋ถํฐ ์ฝ๋๋ค(ํด๋ผ์ด์ธํธ `package.json`์ web-framework ๋ฒ์ , ์๋ฒ
๋๋ ํฐ๋ฆฌ, `wrangler.jsonc`ยท`wrangler.toml` ๊ฐ์ ํธ์คํ
์ค์ ). ์๋ฒ๊ฐ ์์ง ์๊ณ
์ฌ์ฉ์๊ฐ ํธ์คํ
์ ์ ํ์ง ์์์ผ๋ฉด ๋ฌด์์ผ๋ก ํ ์ง ํ ๋ฒ ๋ฌป๋๋ค. ์ฌ์ฉ์๊ฐ ์ด๋ฏธ ๊ณ ๋ฅธ
ํธ์คํ
์ ๋ค๋ฅธ ๊ฒ์ผ๋ก ๋ฐ๊พธ์๊ณ ๋จผ์ ์ ์ํ์ง ์๋๋ค.
### 1. ๊ธฐ์ค ์ฝ๊ธฐ
`../launch/references/server-runtime.md`๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง `Read`๋ก ์ฝ๋๋ค.
์๋ฒ ์ฝ๋๋ฅผ ํ ์ค์ด๋ผ๋ ์ฐ๊ธฐ ์ ์ ์ฝ๋๋ค. ์ฌ์ฉ์ ์๋ณ, mTLS ์ธ์ฆ์, Workers ๊ฒฝ๋ก,
์๋ต ๋ดํฌ, CORS, ๋ก์ปฌ ๊ฒ์ฆ ๊ธฐ์ค์ด ๋ชจ๋ ๊ฑฐ๊ธฐ ์๋ค. ๊ฒฝ๋ก์ ์คํค๋ง๋ ๊ทธ ๋ฌธ์๊ฐ
๊ฐ๋ฆฌํค๋ docs ํ์ด์ง๋ฅผ getPage๋ก ์ฝ์ด ๋ง์ถ๋ค.
### 2. ์ฌ์ฉ์ ์๋ณ ์ ํ๊ธฐ
- ๊ฐ์ธ์ ๋ณด๊ฐ ํ์ ์๋ ์ฌ์ฉ์๋ณ ์ ์ฅ์ด๋ฉด ์ต๋ช
์๋ณํค ๊ตํ์ ๋จผ์ ์ ์ํ๋ค.
ํด๋ผ์ด์ธํธ `User.createAnonymousKeyAuthCode()` โ ์๋ฒ์ ๊ตํ API โ `success.anonKey`.
- ์ฌ์ฉ์๊ฐ ํ ์ค ๋ก๊ทธ์ธ์ ์ฝ ์ง์์ผ๋ฉด ๋ฐ๋ฅด๋, ์ฝ์์์ ํ ์ค ๋ก๊ทธ์ธ ๋ฑ๋ก๊ณผ ์ฝ๊ด
์ค์ ์ด ๋จผ์ ๋ผ ์์ด์ผ ํ๋ค๊ณ ์๋ฆฐ๋ค(๋ฑ๋ก ์ ์๋ ํ ํฐ ๋ฐ๊ธ์ด errorCode 4050์ผ๋ก
์คํจํ๋ค). ํด๋ผ์ด์ธํธ ์ชฝ๋ง ์์ฒญ๋ฐ์๋ ์ด ์ ํ ์กฐ๊ฑด๊ณผ, ๋ฐ์ ์ธ๊ฐ ์ฝ๋๋ฅผ ์๋ฒ๊ฐ
ํ ํฐ์ผ๋ก ๋ฐ๊ฟ์ผ ํ๋ค๋ ์ ์ ํจ๊ป ๋งํ๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ `getAnonymousKey()`๋ก ์ป์ ๊ฐ์ ์๋ฒ๊ฐ ๊ทธ๋๋ก ๋ฏฟ๊ฒ ์ง์ง ์๋๋ค.
์ฌ์ฉ์๊ฐ ๊ทธ๋ ๊ฒ ํด ๋ฌ๋ผ๊ณ ํด๋ ์ด์ (๊ทธ ๊ฐ์ ์์ฒญ์๋ฅผ ์ฆ๋ช
ํ์ง ์๋๋ค)๋ฅผ ๋งํ๊ณ
๊ตํ ๋ฐฉ์์ผ๋ก ์ง ๋ค.
- ์ฌ์ฉ์๊ฐ SupabaseยทFirebase๋ฅผ ๊ณจ๋์ผ๋ฉด ์ฌ์ฉ์๋ณ ๋ฐ์ดํฐ๋ ์๋ฒ๋ฅผ ๊ฑฐ์น๊ฒ ํ๊ณ , ํด๋ผ์ด์ธํธ
์ง๊ฒฐ์ ๊ณต์ฉ ๋ฐ์ดํฐ์๋ง ์ด๋ค. secret key๋ ์๋ฒ์๋ง ๋๊ณ `supabase.auth` ๊ฐ์ ์์ฒด
๋ก๊ทธ์ธ์ ๋ถ์ด์ง ์๋๋ค. ์์ธํ ๊ฒฝ๊ณ๋ server-runtime.md์ BaaS ์ .
### 3. ์ฝ๋ ์ฐ๊ธฐยท๊ณ ์น๊ธฐ
server-runtime.md์ ๊ธฐ์ค๋๋ก ์ด๋ค. ์ต์ํ ๋ค์์ ์งํจ๋ค.
- ํํธ๋ API ํธ์ถ์๋ mTLS ํด๋ผ์ด์ธํธ ์ธ์ฆ์๋ฅผ ์ฃ๋๋ค. Workers๋
`mtls_certificates` ๋ฐ์ธ๋ฉ๊ณผ `env.<BINDING>.fetch`.
- ์ฑ๊ณต ํ์ ์ HTTP ์ํ๊ฐ ์๋๋ผ `resultType`์ด๊ณ , ๋ฐ์ดํฐ๋ `success` ์์ ์๋ค.
- CORS๋ `*`๊ฐ ์๋๋ผ ์ฑ์ SDK ๋ฒ์ ์ ๋ง๋ ์ ํํ origin๋ง ํ์ฉํ๋ค.
- ์ธ์ฆ์ยทํคยทํ ํฐ ๊ฐ์ ์ฝ๋, ์ปค๋ฐ, ๋ก๊ทธ, ์๋ต์ ๋ฃ์ง ์๋๋ค. ๊ฒฝ๋ก์ ๋ฐ์ธ๋ฉ ์ด๋ฆ๋ง
๋ค๋ฃฌ๋ค.
- ๋ก์ปฌ ๊ฒ์ฆ์ ๊ฐ์ง mTLS fetch๋ก ๋ดํฌ ๊ฒฝ์ฐ๋ฅผ ๋๋ฆฐ๋ค. ๋ก๊ทธ์ธ ์ฐํ ํ๋๊ทธ๋ฅผ ๋์ง ์๋๋ค.
### 4. ๋ณด๊ณ
์ฌ์ฉ์๊ฐ ์ง์ ํด์ผ ํ ์ผ์ ๋น ๋จ๋ฆฌ์ง ์๋๋ค: ์ฝ์์์ mTLS ์ธ์ฆ์ ๋ฐ๊ธ, ํธ์คํ
๋ก๊ทธ์ธ(`! npx wrangler login` ๋ฑ), ๋ฐฐํฌ ํ ํด๋ผ์ด์ธํธ ์๋ฒ ์ฃผ์ ๊ฐฑ์ ๊ณผ ์ฌ๋น๋.
```
์๋ฒ ์์
๊ฒฐ๊ณผ
์๋ณ ๋ฐฉ์: <์ต๋ช
์๋ณํค ๊ตํ | ํ ์ค ๋ก๊ทธ์ธ>
ํ์ธํ ๊ฒ: <๋ก์ปฌ ํ
์คํธยท๋ดํฌ ๊ฒฝ์ฐ>
์ฌ์ฉ์๊ฐ ํ ์ผ: <์ธ์ฆ์ ๋ฐ๊ธ, ๋ก๊ทธ์ธ, ๋ฐฐํฌ ๋ฑ>
๋ค์ ๋จ๊ณ
/ait:test-on-device # ์๋ฒ ์ฃผ์๋ก ๋ค์ ๋น๋ํ ๋ฒ๋ค์ ํฐ์์ ํ์ธ
# ๋ง๋ก: "๋ง๋ ๋ฏธ๋์ฑ์ ์ค์ ํ ์ค ์ฑ์์ ๋๋ ค๋ณด๊ณ ์ถ์ด. ๋ฒ๋ค ์ฌ๋ ค์ ํฐ์์ ํ์ธํ๊ฒ ํด์ค"
/ait:launch # ์ถ์ ์ ์ ๊ฒ
# ๋ง๋ก: "๊ฒ์ ๋ฃ๊ธฐ ์ ์ ํ๋ฒ ๋ด์ค"
๋ฌธ์๊ฐ ํ์ํ๋ฉด docs MCP(searchDocumentation/getPage)๋ก ์กฐํํ์ธ์.
```
## Out of scope (์ด skill์ด ํ์ง ์๋ ๊ฒ)
- โ ์ฌ์ฉ์๊ฐ ์์ฒญํ์ง ์์ ๋ฐฐํฌ(`wrangler deploy` ๋ฑ), ์ฝ์ ์ฐ๊ธฐ
- โ mTLS ์ธ์ฆ์ ๋ฐ๊ธ(์ฝ์์์ ์ฌ์ฉ์๊ฐ ํ๋ค), ์ธ์ฆ์ยทํค ํ์ผ ๋ด์ฉ ์ฝ๊ธฐ๋ ์ถ๋ ฅ
- โ ํ๋ฉด ์์
(`/ait:design`), ๊ฒ์ ์ ๊ฒ(`/ait:launch`)
- โ ํ์ธํ์ง ๋ชปํ ๋ฐํ์์ mTLS ์ง์ ์ฌ๋ถ ๋จ์
## ์ฐธ๊ณ
- `../launch/references/server-runtime.md`: ์๋ฒ ์ฐ๊ฒฐ ๊ธฐ์ค(์๋ณ, mTLS, Workers,
์๋ต ๋ดํฌ, CORS, ๋ก์ปฌ ๊ฒ์ฆ)
- ์ง skill: `launch`(์ถ์ ์ ์ ๊ฒ), `test-on-device`(ํฐ ํ์ธ), `design`(ํ๋ฉด)
View on GitHub