Skip to content

Latest commit

ย 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ“ ๋‹ฌ๋ ˆ ์Šคํ„ฐ๋”” ํ”ผ๋“œ๋ฐฑ

์Šคํ„ฐ๋”” ์ฐธ๊ฐ€์ž ํ”ผ๋“œ๋ฐฑ์„ ํ•œ๊ณณ์— ๋ชจ์œผ๋Š” ์‚ฌ์ดํŠธ. https://feedback.dalestudy.com

์Šคํ„ฐ๋””ยทํ”„๋กœ์ ํŠธ(dalestudy.com/programs ์˜ ํ”„๋กœ๊ทธ๋žจ) ๋ฆฌ๋”๋งˆ๋‹ค ๋‹ค๋ฅธ ๋„๊ตฌ๋กœ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๋‹ค ๋ณด๋‹ˆ ์ง€๋‚œ ๊ธฐ์ˆ˜ ํ”ผ๋“œ๋ฐฑ์„ ์ฐพ๊ธฐ๋„, ๊ธฐ์ˆ˜ ๊ฐ„ ๋น„๊ต๋„ ์–ด๋ ค์› ๋‹ค. GitHub ๋กœ๊ทธ์ธ์œผ๋กœ ์ค‘๋ณต ์‘๋‹ต๋งŒ ๋ง‰๊ณ , ์‘๋‹ต์€ ์ต๋ช…์œผ๋กœ D1 ์— ์Œ“๋Š”๋‹ค.

๊ตฌ์กฐ

  • TanStack Start (React) on Cloudflare Workers
  • D1 (SQLite) + Drizzle
  • daleui ๋””์ž์ธ ์‹œ์Šคํ…œ
  • ๋กœ๊ทธ์ธ: DaleStudy GitHub App ์˜ user-to-server OAuth
programs โ”€โ”ฌโ”€ cohorts โ”€ surveys โ”€ questions       cohort: ๊ธฐ์ˆ˜์ œ๋ฉด '1๊ธฐ', ์ƒ์‹œ๋ฉด '2026 ํ•˜๋ฐ˜๊ธฐ'
          โ”‚                 โ””โ”€ responses โ”€ answers
          โ””โ”€ leaders (program_id, login)    โ† ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ

์ฐธ๊ฐ€์ž ๋ช…๋‹จ์€ ๋‘์ง€ ์•Š๋Š”๋‹ค. ์„ค๋ฌธ ๋งํฌ๋Š” ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ ์ฑ„๋„์—๋งŒ ๊ณต์œ ๋˜๊ณ , ๋‹ตํ•˜๋ ค๋ฉด GitHub ๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•˜๋ฉฐ, ๊ฐ™์€ ์‚ฌ๋žŒ์˜ ์ค‘๋ณต ์‘๋‹ต์€ ๋ง‰ํžˆ๋ฏ€๋กœ ๋ช…๋‹จ์ด ์ฃผ๋Š” ์ถ”๊ฐ€ ์•ˆ์ „์ด Discordโ†”GitHub ๋งคํ•‘์„ ์œ ์ง€ํ•˜๋Š” ๋น„์šฉ๋ณด๋‹ค ์ž‘๋‹ค.

์ต๋ช… ์„ค๋ฌธ์˜ responses.respondent_key ๋Š” HMAC(HMAC_SECRET, surveyId:userId) ๋‹ค. ๊ฐ™์€ ์‚ฌ๋žŒ์˜ ์ค‘๋ณต ์‘๋‹ต๋งŒ ๋ง‰๊ณ , ๋ˆ„๊ฐ€ ๋‹ตํ–ˆ๋Š”์ง€๋Š” ๋ฆฌ๋”๋„ ์„œ๋ฒ„๋„ ๋ณต์›ํ•  ์ˆ˜ ์—†๋‹ค. ์‹ค๋ช… ์„ค๋ฌธ์ด๋ฉด GitHub login ์„ ๊ทธ๋Œ€๋กœ ์“ด๋‹ค.

๊ฐœ๋ฐœ

bun install
bun run cf-typegen          # wrangler.jsonc ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค
bun run db:migrate:local
bun run db:seed:local seed/example.json
bun run dev                 # http://localhost:3000

๋กœ์ปฌ ์‹œํฌ๋ฆฟ์€ .dev.vars ์— ๋‘”๋‹ค (git ์— ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š์Œ).

GITHUB_CLIENT_ID=...        # DaleStudy GitHub App ์˜ Client ID
GITHUB_CLIENT_SECRET=...    # ๊ฐ™์€ ์•ฑ์˜ Client secret
HMAC_SECRET=...             # openssl rand -hex 32

GitHub App ์„ค์ •์˜ Callback URL ์— http://localhost:3000/auth/callback ์ด ๋“ฑ๋ก๋ผ ์žˆ์–ด์•ผ ํ•œ๋‹ค. __Host- ์ ‘๋‘์‚ฌ ์ฟ ํ‚ค๋Š” Secure ๊ฐ€ ํ•„์ˆ˜๋ผ ๋กœ์ปฌ ๊ฐœ๋ฐœ์€ localhost ๋ฅผ secure context ๋กœ ์ทจ๊ธ‰ํ•˜๋Š” Chrome/Firefox ์—์„œ ํ•œ๋‹ค.

์„ค๋ฌธ ๋งŒ๋“ค๊ธฐ

๊ด€๋ฆฌ ํ™”๋ฉด์€ ์•„์ง ์—†๋‹ค. seed/ ์— JSON ์„ ์“ฐ๊ณ  ๋„ฃ๋Š”๋‹ค. seed/blog01-final.json ์ด ์‹ค์ œ ์˜ˆ, seed/example.json ์ด ํ˜•์‹ ์„ค๋ช…์ด๋‹ค.

bun run db:seed:local seed/blog01-final.json
bun run db:seed:remote seed/blog01-final.json

ํ”„๋กœ๊ทธ๋žจยท๊ธฐ์ˆ˜ยท๋ฆฌ๋”๋Š” ์ด๋ฏธ ์žˆ์œผ๋ฉด ๊ฑด๋„ˆ๋›ฐ๊ณ , ์„ค๋ฌธ์€ ๊ฐ™์€ id ๊ฐ€ ์žˆ์œผ๋ฉด ์‹คํŒจํ•œ๋‹ค.

๋ฌธํ•ญ์€ ๋‘ ์ข…๋ฅ˜๋‹ค.

  • { "common": "goal_achieved" } โ€” src/questions/common.ts ์˜ ๊ณตํ†ต ๋ฌธํ•ญ. ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ™์€ key ๋กœ ๋ฌป๋Š”๋‹ค. ๋ฌธ๊ตฌ ์† {program}, {activity} ๊ฐ™์€ ์ž๋ฆฌํ‘œ์‹œ์ž๋Š” ์„ค๋ฌธ์˜ vars ๋กœ ์ฑ„์šด๋‹ค. ํ”„๋กœ๊ทธ๋žจ๋ณ„ ๊ฐ’์€ docs/questions.md ์ฐธ๊ณ . ๊ธฐ์ˆ˜ยทํ”„๋กœ๊ทธ๋žจ ๊ฐ„ ๋น„๊ต๋Š” ์ด key ๋กœ ํ•œ๋‹ค. ๊ณตํ†ต ๋ฌธํ•ญ ๋ฌธ๊ตฌ๋ฅผ ๊ณ ์น˜๋ฉด ์ด์ „ ๊ธฐ์ˆ˜์™€ ๋น„๊ต๊ฐ€ ๊นจ์ง€๋ฏ€๋กœ ์‹ ์ค‘ํžˆ.
  • { "type": "long", "label": "โ€ฆ" } โ€” ์ด ์„ค๋ฌธ๋งŒ์˜ ๋ฌธํ•ญ. key ๋Š” ๋น„์–ด ์žˆ๋‹ค.

๋‘˜ ๋‹ค required(๊ธฐ๋ณธ true)์™€ config ๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋‹ค. ์œ ํ˜•์€ scale, short, long, choice ๋„ค ๊ฐ€์ง€. ๊ฐ ์œ ํ˜•์˜ ์ €์žฅ๊ฐ’ยท๊ฒ€์ฆยทconfigยท๊ณตํ†ต ๋ฌธํ•ญ ๋ชฉ๋กยท์œ ํ˜• ์ถ”๊ฐ€ ์ ˆ์ฐจ๋Š” docs/questions.md ์— ์žˆ๋‹ค.

์Šคํ‚ค๋งˆ ๋ฐ”๊พธ๊ธฐ

# src/db/schema.ts ์ˆ˜์ • ํ›„
bunx drizzle-kit generate --name <์„ค๋ช…>
bun run db:migrate:local

๋ฐฐํฌ

main ์— push ํ•˜๋ฉด Cloudflare Workers Builds ๊ฐ€ bun run build โ†’ npx wrangler deploy ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋ฅผ push ํ•˜๋ฉด ํ”„๋ฆฌ๋ทฐ ๋นŒ๋“œ๊ฐ€ ๋ˆ๋‹ค. bun run deploy ๋Š” ์ž๋™ ๋ฐฐํฌ๊ฐ€ ์•ˆ ๋  ๋•Œ์˜ ์ˆ˜๋™ fallback.

์ด๋ฏธ ์„ค์ •๋œ ๊ฒƒ (๋‹ค์‹œ ๋งŒ๋“ค ํ•„์š” ์—†์Œ):

  • D1 feedback (APAC) โ€” id ๋Š” wrangler.jsonc ์— ์žˆ์Œ
  • ์‹œํฌ๋ฆฟ GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET, HMAC_SECRET
  • ์ปค์Šคํ…€ ๋„๋ฉ”์ธ feedback.dalestudy.com (wrangler.jsonc ์˜ routes)
  • Workers Builds โ†” DaleStudy/feedback ์—ฐ๊ฒฐ. ๋นŒ๋“œ ๋ณ€์ˆ˜ BUN_VERSION=1.4.0 (๋นŒ๋“œ ์ด๋ฏธ์ง€ ๊ธฐ๋ณธ bun 1.2.15 ๋Š” lockfile v2 ๋ฅผ ๋ชป ์ฝ๋Š”๋‹ค. ๋กœ์ปฌ bun ์„ ์˜ฌ๋ฆฌ๋ฉด ๊ฐ™์ด ์˜ฌ๋ฆฐ๋‹ค)
  • GitHub App Callback URL: http://localhost:3000/auth/callback, https://feedback.dalestudy.com/auth/callback

HMAC_SECRET ์€ ๋ฐ”๊พธ๋ฉด ๊ธฐ์กด ์ต๋ช… ์‘๋‹ต์ž์˜ ์ค‘๋ณต ๋ฐฉ์ง€ ํ‚ค๊ฐ€ ๋‹ฌ๋ผ์ง€๋ฏ€๋กœ ๊ต์ฒดํ•˜์ง€ ์•Š๋Š”๋‹ค. ์Šคํ‚ค๋งˆ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ๋ฐฐํฌ ์ „์— bun run db:migrate:remote ๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•œ๋‹ค.

About

๐Ÿ“ ์Šคํ„ฐ๋”” ํ”ผ๋“œ๋ฐฑ

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages