Post

🎈 quiz-stream-service

🎈 quiz-stream-service

κ°œμš”

  • ν”„λ‘œμ νŠΈ κΈ°κ°„ Β· 2025-06-16 ~ 2025-06-23
  • μ‹€μ‹œκ°„ ν€΄μ¦ˆ 슀트리밍 μ„œλΉ„μŠ€ QSTR

πŸ€·β€β™‚οΈ μ™œ 이런 ν”„λ‘œμ νŠΈλ₯Ό κΈ°νšν–ˆλ‚˜

https://kahoot.it/

  • Kahootμ΄λΌλŠ” μ‹€μ‹œκ°„ ν€΄μ¦ˆ μ„œλΉ„μŠ€λŠ” μ›Ή μ‚¬μ΄νŠΈλ₯Ό μ΄μš©ν•˜λ©΄μ„œ 인상이 κ°•ν–ˆλ˜ μ„œλΉ„μŠ€λ‘œ μ§€κΈˆκΉŒμ§€λ„ 기얡에 남아 μžˆλ‹€.
  • μ‹€μ‹œκ°„ 톡신 κΈ°μˆ μ„ 처음 μ ‘ν•œ λ‹Ήμ‹œμ—λŠ” β€˜μ›Ή μ‚¬μ΄νŠΈμ—μ„œ 이런 것도 κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜κ΅¬λ‚˜β€™ 생각이 λ“€μ—ˆλ‹€.
  • Kahoot을 많이 μ‚¬μš©ν•΄λ³Έ 것은 μ•„λ‹ˆλΌμ„œ, 클둠 ν”„λ‘œμ νŠΈλ₯Ό λ§Œλ“€κΈ° λ³΄λ‹€λŠ” μ‹€μ‹œκ°„ ν€΄μ¦ˆ μ„œλΉ„μŠ€λ₯Ό κ°œλ°œν•œλ‹€λ©΄ UI/UX μ°¨μ›μ—μ„œ μ–΄λ–»κ²Œ ν•΄μ•Ό ν• μ§€ 고민을 많이 ν–ˆλ‹€.

πŸ›  ν”„λ‘œμ νŠΈ ν™˜κ²½

  • Typescript, NestJS
  • PostgreSQL
  • React, TailwindCSS
  • Docker, Docker-compose
  • Visual Studio Code

πŸš€ ν™”λ©΄ 및 κΈ°λŠ₯

πŸ”Ή ν™ˆ ν™”λ©΄

  • ν™ˆ 화면에 μ ‘μ†ν•˜μ—¬ λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ ν€΄μ¦ˆλ₯Ό μƒμ„±ν•˜λŠ” μΆœμ œμžκ°€ λœλ‹€.

πŸ”Ή ν€΄μ¦ˆ 생성 ν™”λ©΄

  • ν€΄μ¦ˆμ™€ μ§ˆλ¬Έμ„ μƒμ„±ν•œλ‹€.
  • λͺ¨λ“  값을 μž…λ ₯ν•˜κ³  정닡을 선택해야 λ‹€μŒ ν™”λ©΄μœΌλ‘œ λ„˜μ–΄κ°ˆ 수 μžˆλ‹€.

πŸ”Ή 링크 곡유 ν™”λ©΄

  • 링크λ₯Ό λ³΅μ‚¬ν•œλ‹€.
  • μΆœμ œμžλ„ ν•΄λ‹Ή 링크둜 이동해야 ν•œλ‹€.

πŸ”Ή λ‹‰λ„€μž„ 생성 ν™”λ©΄

  • λ‹‰λ„€μž„μ„ μž…λ ₯ν•˜κ³  λ²„νŠΌμ„ λˆ„λ₯΄λ©΄, ν•΄λ‹Ή μ‚¬μš©μžλŠ” μ„Έμ…˜μ— λ“±λ‘λœλ‹€.

πŸ”Ή ν€΄μ¦ˆ λŒ€κΈ° ν™”λ©΄

  • ν€΄μ¦ˆ λŒ€κΈ° ν™”λ©΄μœΌλ‘œ, μΆœμ œμžλŠ” 화면에 ν€΄μ¦ˆλ₯Ό μ‹œμž‘ν•  수 μžˆλŠ” λ²„νŠΌμ΄ λ…ΈμΆœλœλ‹€.

πŸ”Ή 질문 ν™”λ©΄

  • 좜제자의 질문 ν™”λ©΄μ—μ„œλŠ” 정닡이 ν‘œμ‹œλ˜κ³ , λ‹€μŒ 문제둜 λ„˜μ–΄κ°ˆ 수 μžˆλŠ” λ²„νŠΌμ΄ μžˆλ‹€.

  • μ°Έμ—¬μžμ˜ ν™”λ©΄μ—μ„œλŠ” 문제λ₯Ό 선택할 수 있고, λ²„νŠΌμ„ 톡해 닡변을 제좜 ν•  수 μžˆλ‹€.

πŸ”Ή 쀑간 κ²°κ³Ό ν™”λ©΄

  • 각 λ¬Έμ œκ°€ 끝날 λ•Œλ§ˆλ‹€ μˆœμœ„μ™€ 점수 λ“± 쀑간 κ²°κ³Όλ₯Ό 확인 ν•  수 μžˆλ‹€.

πŸ”Ή μ΅œμ’… κ²°κ³Ό ν™”λ©΄

🧐 회고

개발 ν™˜κ²½κ³Ό 운영 ν™˜κ²½μ€ λΆ„λͺ…νžˆ λ‹€λ₯΄λ‹€.
  • 개발 ν™˜κ²½μ—μ„œ ν…ŒμŠ€νŠΈλ₯Ό μΆ©λΆ„νžˆ 마쳀고, Docker 기반의 μ»¨ν…Œμ΄λ„ˆ ν™˜κ²½λ„ κ΅¬μ„±ν–ˆμ§€λ§Œ, μ‹€μ œ μ»¨ν…Œμ΄λ„ˆ κ°„ 톡신 및 μ›Ήμ†ŒμΌ“ 처리 κ³Όμ •μ—μ„œ URLκ³Ό Endpoint κ΄€λ ¨ μˆ˜μ •μ΄ 반볡적으둜 λ°œμƒν–ˆλ‹€.
  • 특히 μ›Ήμ†ŒμΌ“ 톡신은 였λ₯˜λ‘œ λͺ…ν™•νžˆ λ“œλŸ¬λ‚˜κΈ°λ³΄λ‹€λŠ” μ˜ˆμƒμΉ˜ λͺ»ν•œ κ²°κ³Όλ‚˜ λ™μž‘μœΌλ‘œ λ‚˜νƒ€λ‚˜, 원인을 νŒŒμ•…ν•˜κ³  해결책을 μ°ΎλŠ” 데 μ‹œκ°„μ΄ 많이 μ†Œμš”λ˜μ—ˆλ‹€.
  • 이 κ²½ν—˜μ„ 톡해, 운영 ν™˜κ²½μ— 맞좘 λ„€νŠΈμ›Œν¬ ꡬ성과 λΌμš°νŒ… 섀정을 사전에 λ©΄λ°€νžˆ κ²€ν† ν•˜λŠ” 것이 μ–Όλ§ˆλ‚˜ μ€‘μš”ν•œμ§€ 체감할 수 μžˆμ—ˆλ‹€.
μ‚¬μš©μž λ„λ©”μΈμ˜ μƒλž΅μ€ μ˜ˆμƒλ³΄λ‹€ λ§Žμ€ λ³΅μž‘λ„λ₯Ό μ΄ˆλž˜ν–ˆλ‹€.
  • μ΄ˆκΈ°μ—λŠ” μ œν•œλœ 개발 κΈ°κ°„κ³Ό UX 흐름을 κ³ λ €ν•΄, λ³„λ„μ˜ μ‚¬μš©μž 도메인을 μƒλž΅ν•˜μ˜€λ‹€.
  • λŒ€μ‹ , μ°Έμ—¬μžμ™€ 좜제자λ₯Ό μ‹λ³„ν•˜λŠ” 데 μžˆμ–΄ LocalStorage 기반 μ‚¬μš©μž 정보와 Socket ID 및 μ°Έμ—¬μž IDλ₯Ό μ‘°ν•©ν•˜μ—¬ μ‹λ³„ν•˜λ„λ‘ κ΅¬μ„±ν•˜μ˜€λ‹€.
  • μ„Έμ…˜ λ‚΄ 접속 및 μ΄νƒˆμ€ μ„œλ²„ λ©”λͺ¨λ¦¬ μƒμ—μ„œ κ΄€λ¦¬ν•˜κ³ μž ν–ˆμ§€λ§Œ,식별 ν‚€λ‘œ μ‚¬μš©λœ Socket IDλŠ” κ³ μœ μ„±μ΄ λΆ€μ‘±ν•˜μ—¬, λΈŒλΌμš°μ € μƒˆλ‘œκ³ μΉ¨μ΄λ‚˜ κ°•μ œ μ’…λ£Œμ™€ 같은 μΌ€μ΄μŠ€μ—μ„  μ΄νƒˆμ„ μ •ν™•νžˆ 감지할 수 μ—†μ—ˆλ‹€.
  • 초기 λŒ€μ‘ λ°©μ•ˆμœΌλ‘œ, μ„Έμ…˜ μ΄νƒˆ μ‹œ ν•΄λ‹Ή μ°Έμ—¬μž λ ˆμ½”λ“œλ₯Ό μ‚­μ œν–ˆμœΌλ‚˜, 이둜 인해 μ—°κ΄€λœ 점수 및 λ‹΅λ³€ 데이터도 ν•¨κ»˜ μ‚­μ œλ˜λŠ” λ¬Έμ œκ°€ λ°œμƒν•˜μ˜€λ‹€.
  • μ°Έμ—¬μž 데이터λ₯Ό μ‚­μ œν•˜λ©΄ μ„Έμ…˜ 정합성은 μœ μ§€λ˜μ§€λ§Œ, ν€΄μ¦ˆ μ’…λ£Œ ν›„ 점수 및 λž­ν‚Ή 데이터λ₯Ό 보쑴할 수 μ—†λŠ” νŠΈλ ˆμ΄λ“œμ˜€ν”„ 상황이 λ°œμƒν•˜μ˜€λ‹€.
  • 결과적으둜, 데이터 보쑴을 μš°μ„ μ‹œν•˜μ—¬ μ°Έμ—¬μž λ ˆμ½”λ“œλ₯Ό μ‚­μ œν•˜μ§€ μ•ŠλŠ” λ°©ν–₯으둜 κ²°μ •ν•˜μ˜€λ‹€.
  • ν–₯ν›„μ—λŠ” μ‚¬μš©μž 도메인을 λ„μž…ν•˜μ—¬, 접속/μ΄νƒˆ 좔적 및 데이터 정합성을 보닀 μ•ˆμ •μ μœΌλ‘œ μ²˜λ¦¬ν•  κ³„νšμ΄λ‹€.
λ‹¨μˆœν•œ μ„œλΉ„μŠ€μ²˜λŸΌ 보여도, 더 λ‚˜μ€ UXλ₯Ό μœ„ν•΄ κ³ λ €ν•  μš”μ†ŒλŠ” μ—¬μ „νžˆ λ§Žλ‹€.
  • μ‚¬μš©μž κ²½ν—˜μ„ ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ μΆ”κ°€λ‘œ κ³ λ € 쀑인 κΈ°λŠ₯듀은 λ‹€μŒκ³Ό κ°™λ‹€.
  1. μ‚¬μš©μž 인증 κΈ°λŠ₯ λ„μž…
  2. λ‹€μ–‘ν•œ 문제 μœ ν˜• 지원
  3. 링크 λ‹¨μˆœ 볡사가 μ•„λ‹Œ 타 ν”Œλž«νΌ 곡유 κΈ°λŠ₯
  4. λ‘œλ”© ν™”λ©΄, BGM λ“± UI/UX κ°œμ„ 
  5. 쀑간/μ΅œμ’… κ²°κ³Ό ν™”λ©΄μ—μ„œ 좜제자 μ œμ™Έ
  6. λ‹‰λ„€μž„ 쀑볡 λ“± μž…λ ₯ 값에 λŒ€ν•œ μœ νš¨μ„± 검사 κ°•ν™”
  • λ‹¨μˆœν•œ κΈ°λŠ₯ κ΅¬ν˜„μ„ λ„˜μ–΄μ„œ, UXλ₯Ό μ œκ³΅ν•˜κΈ° μœ„ν•΄ κ³ λ €ν•  μš”μ†ŒλŠ” μ•žμœΌλ‘œλ„ 계속 λŠ˜μ–΄λ‚  것이라 μƒκ°ν•œλ‹€.
This post is licensed under CC BY 4.0 by the author.