(๐Ÿ–ผ๏ธ๋ฐˆ ์ด๋ฏธ์ง€์™€ ํ•จ๊ป˜ ๋ฐฐ์šฐ๊ธฐ) ๐Ÿง AI๋ฅผ ์‚ฌ์šฉํ•ด ๐ŸŽจ3D ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ• (React Three Fiber vs Three.js vs A-Frame + GSAP)

๋ฐœํ–‰: (2025๋…„ 12์›” 11์ผ ์˜คํ›„ 08:42 GMT+9)
6 min read
์›๋ฌธ: Dev.to

Source: Dev.to

์†Œ๊ฐœ

์š”์ฆ˜ ์ €๋Š” ๋‘๋‡Œ ํ›ˆ๋ จ ์•ฑ Muscle Brain์„ ๋งŒ๋“ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€๋‚œ ๋ฒˆ์—๋Š” ์•ฑ์„ ์œ„ํ•œ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  GSAP์œผ๋กœ 2D ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ 3D๋ฅผ ๋ฐฐ์šฐ๊ณ  2D ์• ๋‹ˆ๋ฉ”์ด์…˜์„ 3D๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. 3D๋ฅผ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์ด ์ƒˆ๋กœ์šด ๊ฐœ๋…์ด ๋งŽ์•„ ์˜ˆ์ƒ๋ณด๋‹ค ๋” ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค. ์žฌ๋ฏธ์™€ ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ๋ฐˆ ์ด๋ฏธ์ง€๋ฅผ ํ™œ์šฉํ•ด ๋‹จ๊ณ„๋ณ„๋กœ 3D๋ฅผ ํ•จ๊ป˜ ๋ฐฐ์›Œ๋ด…์‹œ๋‹ค! ๐Ÿš€

3D ์›น๊ณผ 2D ์›น์˜ ์ฐจ์ด์ 

3D๋Š” ๋ณด๋‹ค ๋ชฐ์ž…๊ฐ ์žˆ๊ณ  ์‚ฌ์‹ค์ ์ธ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜์ง€๋งŒ, 2D๋ณด๋‹ค ํ•™์Šต ๊ณก์„ ์ด ๊ฐ€ํŒŒ๋ฆ…๋‹ˆ๋‹ค. ์ฃผ์š” ์ฐจ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ฐœ๋…2D ์›น3D ์›น
๋‚œ์ด๋„์‰ฌ์›€์–ด๋ ค์›€
์ถ•X, YX, Y, Z
์นด๋ฉ”๋ผ์—†์Œ์žˆ์Œ
์กฐ๋ช…์—†์Œ์žˆ์Œ
์ƒ‰์น CSSMaterial
  • ์ถ•: 2D๋Š” X(๊ฐ€๋กœ)์™€ Y(์„ธ๋กœ)๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 3D๋Š” Z(๊นŠ์ด)๋ฅผ ์ถ”๊ฐ€ํ•ด ๊ฐ์ฒด๊ฐ€ ์•ž๋’ค๋กœ ๋ฐฐ์น˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์นด๋ฉ”๋ผ: 2D๋Š” ์นด๋ฉ”๋ผ๊ฐ€ ํ•„์š” ์—†์œผ๋ฉฐ ๋ชจ๋“  ๊ฒƒ์ด ๋ฐ”๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. 3D๋Š” ์œ„์น˜, ํšŒ์ „, ์‹œ์•ผ๊ฐ(FOV)์„ ๊ฐ€์ง„ ์นด๋ฉ”๋ผ๊ฐ€ ํ•„์š”ํ•˜๊ณ , ์นด๋ฉ”๋ผ ๋’ค์— ์žˆ๋Š” ๊ฐ์ฒด๋Š” ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์กฐ๋ช…: 3D์—์„œ๋Š” ์กฐ๋ช…์ด ํ•„์ˆ˜์ด๋ฉฐ, ์กฐ๋ช…์ด ์—†์œผ๋ฉด ์žฌ์งˆ์ด ๊ฒ€๊ฒŒ ๋ณด์ž…๋‹ˆ๋‹ค.
  • ์žฌ์งˆ: 3D๋Š” metalness (0โ€ฏ=โ€ฏํ”Œ๋ผ์Šคํ‹ฑ, 1โ€ฏ=โ€ฏ๊ธˆ์†)์™€ roughness (0โ€ฏ=โ€ฏ๊ฑฐ์šธ์ฒ˜๋Ÿผ, 1โ€ฏ=โ€ฏ๋ฌด๊ด‘) ๊ฐ™์€ ์†์„ฑ์„ ๊ฐ€์ง„ ์žฌ์งˆ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. CSS๋Š” ์บ”๋ฒ„์Šค ์ฃผ๋ณ€ UI ๋ ˆ์ด์•„์›ƒ์— ์—ฌ์ „ํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

Comparison image

์ค‘์š”ํ•œ 3D ์šฉ์–ด

์•„๋ž˜๋Š” Three.js(๋˜๋Š” ๊ทธ ๋ž˜ํผ)๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋งˆ์ฃผํ•˜๊ฒŒ ๋  ํ•ต์‹ฌ ์šฉ์–ด๋“ค์ž…๋‹ˆ๋‹ค.

์šฉ์–ด์˜๋ฏธ
Scene๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ๋‹ด๋Š” ์บ”๋ฒ„์Šค
Camera๋‹น์‹ ์˜ ๋ˆˆ; ์”ฌ์˜ ์–ด๋А ๋ถ€๋ถ„์ด ๋ณด์ผ์ง€ ์ •์˜
Render์นด๋ฉ”๋ผ ์‹œ์ ์—์„œ ์”ฌ์„ ๊ทธ๋ฆฌ๊ธฐ
Geometry๊ฐ์ฒด์˜ ํ˜•ํƒœ
Material์™ธ๊ด€(์ƒ‰, ํ…์Šค์ฒ˜ ๋“ฑ)
MeshGeometry์™€ Material์ด ๊ฒฐํ•ฉ๋œ 3D ๊ฐ์ฒด

3D terminology image

Three.js vs React Three Fiber vs Aโ€‘Frame

์„ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชจ๋‘ WebGL์„ ๋ž˜ํ•‘ํ•ด 3D ๊ฐœ๋ฐœ์„ ์‰ฝ๊ฒŒ ํ•ด ์ฃผ์ง€๋งŒ, ๋ชฉํ‘œํ•˜๋Š” ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

Three.js

  • WebGL์„ ์ง์ ‘ ๊ฐ์‹ธ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.
  • ์”ฌ, ์กฐ๋ช…, ์žฌ์งˆ ๋“ฑ์„ ์ฒ˜๋ฆฌํ•ด ์ €์ˆ˜์ค€ ์ฝ”๋“œ๋ฅผ ํฌ๊ฒŒ ์ค„์—ฌ ์ค๋‹ˆ๋‹ค.
  • ๊ณต์‹ ๋ฌธ์„œ:

React Three Fiber (r3f)

  • Three.js์šฉ React ๋ Œ๋”๋Ÿฌ.
  • 3D ์ฝ”๋“œ๋ฅผ React ์ปดํฌ๋„ŒํŠธ ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•˜๊ฒŒ ํ•ด ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์„ ์–ธํ˜• ์Šคํƒ€์ผ์„ ์ด‰์ง„ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฌธ์„œ:

Aโ€‘Frame

  • Three.js ์œ„์— ๊ตฌ์ถ•๋œ ์„ ์–ธํ˜• HTML ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, VR/AR์— ์ดˆ์ .
  • React๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐœ๋ฐœ์ž๋„ ๋น ๋ฅด๊ฒŒ 3D/VR ํ”„๋กœํ† ํƒ€์ž…์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฌธ์„œ:

๋น„๊ต ํ‘œ

ํŠน์ง•Three.jsReact Three FiberAโ€‘Frame
๋‚œ์ด๋„์–ด๋ ค์›€์ค‘๊ฐ„์‰ฌ์›€
์ฝ”๋“œ ์Šคํƒ€์ผ๊ฐ์ฒด์ง€ํ–ฅReact ์ปดํฌ๋„ŒํŠธHTML ์ปดํฌ๋„ŒํŠธ
ํ”„๋ ˆ์ž„์›ŒํฌVanilla JS / anyReact ์ „์šฉVanilla JS / any
์ถ”์ฒœ ๋Œ€์ƒ์ตœ๋Œ€ ์ œ์–ด, React ๋น„์‚ฌ์šฉ์žReact ๊ฐœ๋ฐœ์ž์ดˆ๋ณด์ž, VR/AR

์„ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชจ๋‘ Node.js ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. React Three Fiber๋Š” React๊ฐ€ ํ•„์š”ํ•˜๊ณ , Three.js์™€ Aโ€‘Frame์€ ์ˆœ์ˆ˜ JavaScript/TypeScript์™€ ์–ด๋–ค ํ”„๋ ˆ์ž„์›Œํฌ์™€๋„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒ˜ํ”Œ ์€ํ•˜ ์• ๋‹ˆ๋ฉ”์ด์…˜ (CodePen)

๋ฌด์ž‘์œ„ ๋ณ„๋“ค์ด ์นด๋ฉ”๋ผ์—์„œ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ์œ„์น˜์—์„œ ๊ฐ€๊นŒ์šด ์œ„์น˜๋กœ ์ด๋™ํ•˜๋Š” ์•„์ฃผ ๊ฐ„๋‹จํ•œ ์€ํ•˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋ณ„๋“ค์€ ์ž์ฒด์ ์œผ๋กœ ๋น›๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๋ช…์ด ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋œ ์žฌ์งˆ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • React Three Fiber โ€“ meshBasicMaterial
  • Three.js โ€“ MeshBasicMaterial
  • Aโ€‘Frame โ€“ shader: flat

Galaxy animation preview

React Three Fiber ์ฝ”๋“œ ์˜ˆ์‹œ (GSAP ์• ๋‹ˆ๋ฉ”์ด์…˜)

์•„๋ž˜ ์Šค๋‹ˆํŽซ์€ ๊ฐ ๋ณ„์„ ๋ฉ€๋ฆฌ(z: -50)์—์„œ ๊ฐ€๊นŒ์šด(z: 5) ์œ„์น˜๋กœ 3์ดˆ ๋™์•ˆ ์• ๋‹ˆ๋ฉ”์ด์…˜ํ•˜๊ณ , ๋ฌดํ•œํžˆ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

// Animate the star using GSAP
// gsap.fromTo = animate FROM one value TO another value
gsap.fromTo(
  ref.current.position,          // What to animate (the star's position in 3D space)
  { z: -50 },                    // Starting value: far away (50 units behind camera)
  {
    z: 5,                        // Ending value: close to camera (5 units in front)
    duration: 3,                 // Animation takes 3 seconds
    delay: 0,                    // No initial delay
    repeat: -1,                  // Loop forever
    ease: "none"
  }
);
Back to Blog

๊ด€๋ จ ๊ธ€

๋” ๋ณด๊ธฐ ยป

์—”์ง€๋‹ˆ์–ด๋ง์—์„œ ๋ฉ˜ํ† ๋ง vs. ๋งˆ์ดํฌ๋กœ๋งค๋‹ˆ์ง€๋จผํŠธ

Engineering Leadership: Mentorship vs. Micromanagement ์—”์ง€๋‹ˆ์–ด๋ง ๋ถ„์•ผ์—์„œ ํŒ€์„ ์ด๋„๋Š” ๋ฐฉ์‹์€ ์ œํ’ˆ ํ’ˆ์งˆ๊ณผ ํŒ€ ์‚ฌ๊ธฐ์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. T...

EKS์—์„œ DNS ์‹คํŒจ? ์‹ค์ œ ๋ณ‘๋ชฉ ํ˜„์ƒ์€ AWS ๋„คํŠธ์›Œํฌ ์ œํ•œ์ด์—ˆ์Šต๋‹ˆ๋‹ค

DNS ์กฐ์‚ฌ ๊ฐœ์š” DNS ์กฐ์‚ฌ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ฒ˜์Œ์—๋Š” CoreDNS์™€ NodeLocal DNS ๋ฉ”ํŠธ๋ฆญ์— ์ง‘์ค‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ๋ŒํŒŒ๊ตฌ๋Š” ์ œ๊ฐ€ โ€ฆ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ ์ฐพ์•„์™”์Šต๋‹ˆ๋‹ค.

2026๋…„์„ ์œ„ํ•œ ์ตœ๊ณ ์˜ AI ์ธํ„ฐ๋ทฐ ๋„์šฐ๋ฏธ 10๊ฐ€์ง€

์™œ AI Interview Helpers๊ฐ€ ์ค‘์š”ํ•œ๊ฐ€? ์ทจ์—… ์ธํ„ฐ๋ทฐ๋ฅผ ์–ป๋Š” ๊ฒƒ์€ ์–ด๋ ต๋‹ค. ์ด๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๊ฒƒ์€ ๋”์šฑ ์–ด๋ ต๋‹ค, ํŠนํžˆ ์ธํ„ฐ๋ทฐ๊ฐ€ ๋‹จ์ˆœํžˆ ๋‹น์‹ ์˜ skill๋งŒ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ tech roles์—์„œ๋Š”.

AI ๋ฎค์ง ๋น„๋””์˜ค: ๋…๋ฆฝ ์•„ํ‹ฐ์ŠคํŠธ๊ฐ€ ๋ฉ”์ด์ € ๋ ˆ์ด๋ธ” ์ œ์ž‘ ํ€„๋ฆฌํ‹ฐ์™€ ๊ฒฝ์Ÿํ•˜๋Š” ๋ฐฉ๋ฒ•

๊ฐœ์š” SoraStats Music Video Analytics๋Š” AIโ€‘generated ์Œ์•… ๋น„๋””์˜ค๊ฐ€ stra...์™€ ๊ฒฐํ•ฉ๋  ๊ฒฝ์šฐ 90์ผ ์ด๋‚ด์— Spotify ์ŠคํŠธ๋ฆผ์„ ์ตœ๋Œ€ 7.5๋ฐฐ๊นŒ์ง€ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.