๐Ÿ™€๋ฏธ์นœ ๋กค๋Ÿฌ์ฝ”์Šคํ„ฐ ๋นŒ๋” ๋งŒ๋“ค๊ธฐ (๐ŸŽขRollerCoaster.js + React Three Fiber + AI)

๋ฐœํ–‰: (2026๋…„ 1์›” 12์ผ ์˜คํ›„ 08:07 GMT+9)
8 ๋ถ„ ์†Œ์š”
์›๋ฌธ: Dev.to

Source: Dev.to

์†Œ๊ฐœ ๐Ÿš€

์ง€๋‚œ ๋ฒˆ์— ๋‚˜๋Š” ๋์ด ์—†๋Š” ์žฌ๋ฏธ์žˆ๋Š” ๋กค๋Ÿฌ์ฝ”์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค๊ณ  DEV Community์— ๊ธ€์„ ์˜ฌ๋ ธ์Šต๋‹ˆ๋‹ค.

๋์ด ์—†๋Š” ์žฌ๋ฏธ ๋งŒ๋“ค๊ธฐ (๐ŸŽข RollerCoaster.js + React Three Fiber + AI)

  • ์—„์ฒญ๋‚œ ๊ฐ€ํŒŒ๋ฅธ ์ƒ์Šน๊ณผ ํ•˜๊ฐ•์„ ์ ˆ๋ฒฝ์ฒ˜๋Ÿผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ™€
  • ํ˜„์‹ค์ ์ธ ๋กค๋Ÿฌ์ฝ”์Šคํ„ฐ๊ฐ€ ์ถฉ๋Œํ•˜๊ฑฐ๋‚˜ ํŠธ๋ž™์„ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๊ณ ๋Š” ํšŒ์ „ํ•  ์ˆ˜ ์—†๋Š” ๋ฏธ์นœ๋“ฏ์ด ๋‚ ์นด๋กœ์šด ์ปค๋ธŒ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ™€
  • ๋‚ด๋ ค๊ฐˆ ๋•Œ ๋•…์†์œผ๋กœ ํŒŒ๊ณ ๋“ค์–ด ์ง€ํ•˜์—์„œ ํƒ€๋Š” ์ฆ๊ฑฐ์›€์„ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ™€
  • ๋ฌผ๋ฆฌ ๋ฒ•์น™์„ ๋ฌด์‹œํ•˜๊ณ  ์›ํ•˜๋Š” ๋งŒํผ ๋ฏธ์นœ ๋ฃจํ”„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ™€

ํŠธ๋ž™ ๋นŒ๋”์˜ ์ž…๋ ฅ๊ฐ’์— ์ œํ•œ์„ ๋‘์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทน๋‹จ์ ์ธ ๊ฐ’๋„ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ™€
ํ™”๋ฉด ์™ผ์ชฝ์— ์žˆ๋Š” UI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฏธ์นœ ๋กค๋Ÿฌ์ฝ”์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์„ธ์š”.

How I Created the CRAZY Roller Coaster Builder ๐Ÿ› ๏ธ

์ง€๋‚œ๋ฒˆ์—๋Š” ์œ ๋ช…ํ•œ 3D ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Three.js์˜ RollerCoaster.js์™€ AI์˜ ๋„์›€์„ ๋ฐ›์•„ ๋กค๋Ÿฌ์ฝ”์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. React Three Fiber(Three.js์šฉ React ๋ž˜ํผ)๋ฅผ ์‚ฌ์šฉํ–ˆ๊ณ , ์ดˆ๋ณด์ž๋„ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์ฃผ์„์„ ๋‹ฌ์•„ CodePen ์ƒ˜ํ”Œ์„ ์˜ฌ๋ ธ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ๋ฒ„์ „์—์„œ๋Š”:

  1. ์ด์ „ CodePen ํ”„๋กœ์ ํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
  2. ํŠธ๋ž™โ€‘๋นŒ๋” ํ•จ์ˆ˜์™€ UI๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ฏธ์นœ ํŠธ๋ž™์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  3. ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ„ฐ๋งํ–ˆ์Šต๋‹ˆ๋‹ค: ๊ณตํ†ต ์ƒ์ˆ˜์™€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค๊ณ , ์ค‘๋ณต์„ ์ค„์ด๋ฉฐ, ๋ชจ๋“  ๊ฒƒ์„ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  4. Reactโ€‘Threeโ€‘Drei์˜ Sky์™€ Cloud๋ฅผ ํ™œ์šฉํ•ด ํ˜„์‹ค๊ฐ ์žˆ๋Š” ํ•˜๋Š˜๊ณผ ๊ตฌ๋ฆ„์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  5. Tailwind CSS๋ฅผ ์‚ฌ์šฉํ•ด ์Šคํƒ€์ผ๋ง์„ ๊ฐ„์†Œํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

Known Issues

#IssueWhat I TriedCurrent Workโ€‘around
1๏ธโƒฃ๊ณก์„  ํŠธ๋ž™์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์ƒ์Šน/ํ•˜๊ฐ• ํŠธ๋ž™์„ ๋„ฃ์œผ๋ฉด ํŠธ๋ž™์ด ๋น„ํ‹€๋ฆฝ๋‹ˆ๋‹ค.๊ธฐ๋ณธ ๊ณก์„  ๊ฐ’์„ ์ „๋‹ฌํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Œ.RollerCoaster.js์—์„œ RollerCoasterGeometry๋ฅผ ๋ณต์‚ฌํ•˜๊ณ  ๋น„ํ‹€๋ฆผ์„ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.
2๏ธโƒฃ๋ฃจํ”„๊ฐ€ ์‹œ์ž‘์ ๊ณผ ๋์ ์ด ๋™์ผํ•ด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.๋ฃจํ”„์— ์ž‘์€ ๋น„ํ‹€๋ฆผ์„ ์ถ”๊ฐ€ํ•ด ํ‹ˆ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.๋ฐ๋ชจ๋ฅผ ๊ฐ„๋‹จํžˆ ์œ ์ง€ํ•˜๊ณ  ๋ฃจํ”„ ๋น„ํ‹€๋ฆผ์„ ์—†์•ด์Šต๋‹ˆ๋‹ค.

๋” ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์œผ๋ฉด ์ฝ”๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

New Versions

  • Underwater version โ€“ ์ˆ˜์ค‘ ๋А๋‚Œ์˜ CSS ๊ทธ๋ผ๋””์–ธํŠธ ๋ฐฐ๊ฒฝ๊ณผ ์ƒ์Šนํ•˜๋Š” ๊ฑฐํ’ˆ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Underwater versionโ€ฏ2 โ€“ ๊ฑฐํ’ˆ์„ ๋Œ€ํญ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค:
    • ํ‰๋ฉด ๊ฑฐํ’ˆ์„ 3D ๊ฑฐํ’ˆ ๐Ÿซง ์œผ๋กœ ๊ต์ฒด
    • ์ขŒ์šฐ ํ”๋“ค๋ฆผ์„ ์ถ”๊ฐ€ํ•ด ํ˜„์‹ค๊ฐ ์žˆ๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ตฌํ˜„ ๐Ÿซง
    • ๊ฑฐํ’ˆ ํฌ๊ธฐ ์กฐ์ ˆ (์•„๋ž˜๋Š” ์ž‘๊ฒŒ, ์œ„๋Š” ํฌ๊ฒŒ) ๐Ÿซง
    • ๋ธ”๋Ÿฌ ํšจ๊ณผ๋ฅผ ์ ์šฉํ•ด ๊นŠ์€ ์ˆ˜์ค‘ ๋А๋‚Œ ์—ฐ์ถœ (์ „๊ฒฝ ๊ฑฐํ’ˆ์€ ์„ ๋ช…ํ•˜๊ฒŒ, ๋ฐฐ๊ฒฝ ๊ฑฐํ’ˆ์€ ์–ด๋‘์›Œ์ง) ๐Ÿซง

์–ด๋–ค ์ˆ˜์ค‘ ๋ฒ„์ „์ด ๋” ๋งˆ์Œ์— ๋“œ์‹œ๋‚˜์š”?

ํ–ฅํ›„ ์—…๋ฐ์ดํŠธ ์•„์ด๋””์–ด ๐Ÿ’ก

  • ๋ฐฐ๊ฒฝ ํŒจํ„ด์„ ๋” ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐฐ๊ฒฝ์— ๋” ๋งŽ์€ ๊ฐ์ฒด๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ€๋Šฅํ•œ ์นด๋ฉ”๋ผ ์ œ์–ด๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ์†๋„ ์ œ์–ด๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ๋กค๋Ÿฌ์ฝ”์Šคํ„ฐ, ํŠธ๋ž™ ๋นŒ๋”, ๋‹ค์–‘ํ•œ ๋ฐฐ๊ฒฝ ๋ฐ ๊ทธ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ๋กœ ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  • RollerCoaster.js๋ฅผ ์‚ฌ์šฉํ•œ ์•ฑ์„ ์ถœ์‹œํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์— ๋งŽ์€ ๊ด€์‹ฌ์ด ๋ชจ์ด๋ฉด ์ „์ฒด ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ์•ฑ์œผ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ด์ „์— Microsoft Store์— ๋‡Œ ํ›ˆ๋ จ ์•ฑ๊ณผ Chrome ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ์ถœ์‹œํ•œ ๊ฒฝํ—˜์ด ์žˆ์–ด ๋‹ค์‹œ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ž์‹ ํ•ฉ๋‹ˆ๋‹ค.

๋ฌด๋ฃŒ Chrome ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ œ๊ณต

Microsoft Store์—์„œ ์ œ๊ณต (๋ฌด๋ฃŒ)

Framework Experiments

Vue.js Version

I built a Vue.js version using TresJS (a Three.js wrapper for Vue). I find Vue.js more intuitive than React; React Hooks feel โ€œcrazy difficultโ€ for me. I wanted a CodePen demo to compare Vue and React, but TresJS isnโ€™t supported there, so I tried StackBlitz, where it works (though startup is a bit slow).

Angular Version

I also tried an Angular version with Angularโ€‘Three (a Three.js wrapper for Angular). Like Vue, I wanted a CodePen demo, but neither Angularโ€‘Three nor CodePen support it, so I used StackBlitz again.

React vs Vue vs Svelte vs Angular โ€“ Comparison Table

Framework๋‚œ์ด๋„ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ทœ๋ชจ3D ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
Svelte์‰ฌ์›€์†Œ๊ทœ๋ชจ์†Œ๊ทœ๋ชจThrelte
Vue๋ณดํ†ต์†Œ๊ทœ๋ชจโ€‘์ค‘๊ฐ„๋Œ€๊ทœ๋ชจTresJS
React์–ด๋ ค์›€์ค‘๊ฐ„โ€‘๋Œ€๊ทœ๋ชจ๊ฐ€์žฅ ํผReact Three Fiber
Angular๊ฐ€์žฅ ์–ด๋ ค์›€๋Œ€๊ทœ๋ชจ์ค‘๊ฐ„Angular Three

๋„ค ํ”„๋ ˆ์ž„์›Œํฌ ๋ชจ๋‘ ๋ชจ๋“  ๊ทœ๋ชจ์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ, ํ‘œ์‹œ๋œ ๊ทœ๋ชจ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • Learn with ๐Ÿ–ผ๏ธ Meme Images: ๐Ÿง  AI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๐ŸŽจ 3D ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ• (React Three Fiber vs Three.js vs Aโ€‘Frame + GSAP)
  • GSAP Animation: ์ž ์‹œ ๋ฐ”๋ผ๋ณผ ์ˆ˜ ์žˆ๋Š” ์›น์‚ฌ์ดํŠธ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค (GSAP) ๐ŸŽจ

AIโ€‘Related Posts

  • ๐Ÿง  Codex๊ฐ€ ์˜›๋‚  Claude Code์ฒ˜๋Ÿผ ๊ธฐ๋ถ„์„ ๋Œ์–ด์˜ฌ๋ฆฌ๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ• (โ€œ๋‹น์‹ ์ด ์™„์ „ํžˆ ๋งž์•„์š”!โ€ ๋ผ๋Š” ๋ฐ˜์‘์„ ์–ป๊ธฐ) ๐Ÿค–
  • ๐Ÿค–๐Ÿค– AI๋ฅผ ์‰ฝ๊ฒŒ ๊ทธ๋ฆฌ๊ณ  ๋ฌด๋ฃŒ๋กœ ๋ณ‘๋ ฌ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ• (Git Worktree Runner) ๐Ÿง ๐Ÿง 
  • ๐Ÿค– AI๊ฐ€ ์ง€์‹œ๋ฅผ ๋” ์ž˜ ๋”ฐ๋ฅด๊ฒŒ ํ•˜๋Š” ๋ฌด๋ฃŒ ๋ฐฉ๋ฒ• (OpenSpec) ๐Ÿ“
  • ๐Ÿง  AI๋ฅผ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• โ€ฆ (๊ฒŒ์‹œ๋ฌผ ๊ณ„์†)

Conclusion

CRAZY Roller Coaster๋Š” ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ๋ฏธ์นœ ๋“ฏ์ด ์งœ๋ฆฟํ•œ ๊ฒฝํ—˜์„ ์„ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ™”๋ฉด ์†์—์„œ๋งŒ ๋А๋‚„ ์ˆ˜ ์žˆ๋Š” ๊ด‘๊ธฐ์™€ ๋ฏธ์นœ ๋“ฏํ•œ ์žฌ๋ฏธ๋ฅผ ์ฆ๊ธฐ๊ณ , ํ˜„์‹ค์—์„œ๋Š” ๋ฏธ์น˜๊ฑฐ๋‚˜ ํ™”๋‚ด์ง€ ๋ง™์‹œ๋‹ค. ๐Ÿ™€

์ด ๊ธ€์„ ํ†ตํ•ด ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ฐฐ์› ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ฝ์–ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

Questions & Ideas

  • CRAZY Roller Coaster๋ฅผ ๋” ์ข‹๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ์•„์ด๋””์–ด๊ฐ€ ์žˆ๋‚˜์š”?
  • 2D/3D ์• ๋‹ˆ๋ฉ”์ด์…˜์— ๋Œ€ํ•œ ์ข‹์€ ์•„์ด๋””์–ด๊ฐ€ ์žˆ๋‚˜์š”?
  • 2D/3D ์• ๋‹ˆ๋ฉ”์ด์…˜์— ๋Œ€ํ•ด ์•Œ๊ณ  ๊ณ„์‹ ๊ฐ€์š”?

์—ฌ๋Ÿฌ๋ถ„์˜ ์ƒ๊ฐ์„ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค! โฌ‡๏ธโฌ‡๏ธ

Back to Blog

๊ด€๋ จ ๊ธ€

๋” ๋ณด๊ธฐ ยป

Agent Control Plane: ๊ฑฐ๋ฒ„๋„Œ์Šค ์—†๋Š” ์ธํ…”๋ฆฌ์ „์Šค๋Š” ์™œ ๋ฒ„๊ทธ์ธ๊ฐ€

โ€˜Vibesโ€™๋ฅผ ์ด์šฉํ•œ ์ž์œจ AI ์—์ด์ „ํŠธ ์ œ์–ด ์šฐ๋ฆฌ๋Š” ์ •์ค‘ํ•œ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค โ€” โ€œYou are a helpful assistant,โ€ โ€œPlease do not lie,โ€ โ€œEnsure your SQL query is sa...โ€

2026๋…„์— Google TPU์— ๋Œ€ํ•ด ๋ฐฐ์šธ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค

Gemini, Veo, ๊ทธ๋ฆฌ๊ณ  Nano Banana๋Š” ์ธ์ƒ์ ์ด์ง€๋งŒ, ๊ทธ๊ฒƒ๋“ค์€ ๋‹จ์ง€ ์†Œํ”„ํŠธ์›จ์–ด์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ํ•˜๋“œ์›จ์–ด์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด ๋ด…์‹œ๋‹ค.

์•ˆ๋…•, ๋‰ด๋น„ ์—ฌ๊ธฐ์š”.

์•ˆ๋…•! ๋‚˜๋Š” ๋‹ค์‹œ S.T.E.M. ๋ถ„์•ผ๋กœ ๋Œ์•„๊ฐ€๊ณ  ์žˆ์–ด. ์—๋„ˆ์ง€ ์‹œ์Šคํ…œ, ๊ณผํ•™, ๊ธฐ์ˆ , ๊ณตํ•™, ๊ทธ๋ฆฌ๊ณ  ์ˆ˜ํ•™์„ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์„ ์ฆ๊ฒจ. ๋‚ด๊ฐ€ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ ์ค‘ ํ•˜๋‚˜๋Š”...