
์ ๋๋ ์ดํฐ๋ธ ์ํธ (Generative Art) ๋ฐ ํฌ๋ฆฌ์์ดํฐ๋ธ ์ฝ๋ฉ (Creative Coding) ๋ถ์ผ์์๋ ์๊ฐ์ ํํ์ ์ค์๊ฐ์ฑ, ์ฐ์ฐ ์ฑ๋ฅ, ๊ทธ๋ฆฌ๊ณ ์์ ์ฑ์ด ์ค์ํ ๊ธฐ์ ์ ์๊ตฌ์ฌํญ์ด๋ค. ๊ธฐ์กด์๋ Processing(Java ๊ธฐ๋ฐ) ๊ณผ openFrameworks(C++ ๊ธฐ๋ฐ) ๊ฐ ์ด ๋ถ์ผ์ ํ์ค ๋๊ตฌ๋ก ์๋ฆฌ ์ก์์ผ๋, Rust ์ธ์ด์ ๋ถ์๊ณผ ํจ๊ป Nannou ํ๋ ์์ํฌ๊ฐ ์๋ก์ด ๋์์ผ๋ก ์ฃผ๋ชฉ๋ฐ๊ณ ์๋ค. ๋ณธ ๋ถ์์ Nannou ๊ฐ ์ ๊ณตํ๋ ๊ธฐ์ ์ ์ด์ ์ ๊ท๋ช
ํ๊ณ , ๊ธฐ์กด ๋ค์ดํฐ๋ธ ๋๊ตฌ์ธ Processing ๋ฐ openFrameworks ์์ ์ํคํ
์ฒ์ ์ฐจ์ด๋ฅผ ๋น๊ตํ๋ค.
์ ๋๋ ์ดํฐ๋ธ ์ํธ, ํนํ ๊ณ ํด์๋ ๋น๋์ค ์ถ๋ ฅ์ด๋ ๋ณต์กํ ํํฐํด ์๋ฎฌ๋ ์ด์
์ ๋ค๋ฃจ๋ ๊ฒฝ์ฐ, ํ๋ ์ ๋๋กญ (Frame Drop) ์ ์น๋ช
์ ์ด๋ค. Processing ์ Java ๊ฐ์ ๋จธ์ (JVM) ์์์ ๋์ํ๋ฏ๋ก ๊ฐ๋น์ง ์ปฌ๋ ์
(GC) ์ ์ํ ์์ธก ๋ถ๊ฐ๋ฅํ ์ง์ฐ (Latency Spike) ์ด ๋ฐ์ํ ์ ์๋ค.
๋ฐ๋ฉด, Nannou ๋ Rust ๋ก ์์ฑ๋์ด ๊ฐ๋น์ง ์ปฌ๋ ์
์ด ์กด์ฌํ์ง ์๋๋ค. ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํด์ ๊ฐ ์ปดํ์ผ ํ์์ ์ ์ด๋๋ฏ๋ก, ๋ฐํ์ ์ค ๊ฐ์์ค๋ฌ์ด ์ฑ๋ฅ ์ ํ ์์ด ์ผ์ ํ ํ๋ ์ ๋ ์ดํธ (Frame Rate) ๋ฅผ ์ ์งํ ์ ์๋ค. ์ด๋ ์ฅ์๊ฐ ์ค์น ๋ฏธ์ (Installation Art) ์ด๋ ์ค์๊ฐ ์ธํฐ๋ํฐ๋ธ ์์คํ
์์ ์์คํ
์์ ์ฑ์ ๋ณด์ฅํ๋ ํต์ฌ ์์์ด๋ค.
๊ธฐ์กด์ Processing ๋ฐ openFrameworks ๋ ์ฃผ๋ก OpenGL ์ ์์กดํ์ฌ ๊ทธ๋ํฝ์ค๋ฅผ ์ฒ๋ฆฌํ๋ค. OpenGL ๋ ๋๋ผ์ด๋ฒ ์์กด์ฑ์ด ๋๊ณ , ์ต์ GPU ์ํคํ
์ฒ (Vulkan, Metal, DirectX 12) ๋ฅผ ์์ ํ ๋ฐ์ํ์ง ๋ชปํ๋ ํ๊ณ๊ฐ ์๋ค.
Nannou ๋ Rust ๊ธฐ๋ฐ์ ํฌ๋ก์ค ํ๋ซํผ ๊ทธ๋ํฝ์ค API ์ธ wgpu(WebGPU ํ์ค ๊ธฐ๋ฐ) ๋ฅผ ๋ฐฑ์๋๋ก ํ์ฉํ๋ค. ์ด๋ ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ ์ ๊ณตํ๋ค:
์ ๋๋ ์ดํฐ๋ธ ์ํธ๋ ์ข ์ข ์๋ง ๊ฐ์ ๊ฐ์ฒด ์ํ๋ฅผ ๋ณ๋ ฌ๋ก ๊ณ์ฐํด์ผ ํ๋ค. Rust ์ ์์ ๊ถ ๋ชจ๋ธ์ ๋ฐ์ดํฐ ๋ ์ด์ค (Data Race) ์์ด ์ค๋ ๋๋ฅผ ์์ ํ๊ฒ ํ์ฉํ ์ ์๊ฒ ํ๋ค. Nannou ํ๊ฒฝ์์๋ ๋ฌด๊ฑฐ์ด ์ํ์ ์ฐ์ฐ์ ๋ฉ์ธ ๋ ๋๋ง ์ค๋ ๋์ ๋ถ๋ฆฌํ์ฌ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์์ ์ฒ๋ฆฌํ๋๋ผ๋, ์ปดํ์ผ๋ฌ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ์์ ์ฑ์ ๊ฒ์ฆํ๋ค. ์ด๋ ๋ฉํฐ์ฝ์ด CPU ์ฑ๋ฅ์ ์ต๋ํ ํ์ฉํ๋ฉด์๋ ํฌ๋์ ์๋ ์์ ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๊ฒ ํ๋ค.
Nannou ๋ก ์ปดํ์ผ๋ ์ํธ์ํฌ๋ ๋ชจ๋ ์์กด์ฑ์ด ๋งํฌ๋ ๋จ์ผ ์คํ ํ์ผ (Static Binary) ๋ก ์์ฑ๋๋ค. ์ด๋ Java ๋ฐํ์ (Processing) ์ด๋ ํน์ DLL/๋ผ์ด๋ธ๋ฌ๋ฆฌ (openFrameworks) ๋ฅผ ๋์ ์์คํ ์ ์ค์นํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ ์ ๊ฑฐํ๋ค. ์ ์์ฅ์ด๋ ๊ณต๊ณต ๊ณต๊ฐ์ ํค์ค์คํฌ ํ๊ฒฝ์์ ๋ฐฐํฌ ๋ฐ ์ ์ง๋ณด์ ์ฉ์ด์ฑ์ ํฌ๊ฒ ํฅ์์ํจ๋ค.
| ๋น๊ต ํญ๋ชฉ | Nannou (Rust) | Processing (Java) | openFrameworks (C++) |
|---|---|---|---|
| ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ | ์์ ๊ถ ๋ฐ ๋น๋ฆผ (Ownership) ์ปดํ์ผ ํ์ ๊ฒ์ฆ, ๋ฐํ์ ์ค๋ฒํค๋ ์์ | ๊ฐ๋น์ง ์ปฌ๋ ์
(GC) ์๋ ๊ด๋ฆฌ๋๋ ๋ฐํ์ ์ง์ฐ ๋ฐ์ ๊ฐ๋ฅ | ์๋ ๊ด๋ฆฌ (Manual) ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ด๋ฆฌ, ์ค๋ฅ ์ํ์ฑ ์กด์ฌ |
| ๊ทธ๋ํฝ์ค ๋ฐฑ์๋ | wgpu (WebGPU) Vulkan/Metal/DX12 ์ถ์ํ, ๋ฏธ๋ ์งํฅ์ | OpenGL (์ฃผ๋ฅ) ๋ ๊ฑฐ์ ๋ชจ๋ ๋ฐ ์ฝ์ด ํ๋กํ์ผ ํผ์ฉ | OpenGL ๊ด๋ฒ์ํ ํ๋์จ์ด ์ง์์ด๋ ๊ตฌ์ API ์์กด |
| ๋์์ฑ ์ฒ๋ฆฌ | ๋์ (Safe Threads) ์ธ์ด ๋ ๋ฒจ์์ ์ค๋ ๋ ์์ ์ฑ ๋ณด์ฅ | ์ ํ์ JVM ์ค๋ ๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ GUI ์ค๋ ๋์ ๋๊ธฐํ ์ฃผ์ ํ์ | ์ค๊ฐ (Unsafe Threads) C++ ์ค๋ ๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ ๋ฐ์ดํฐ ๋ ์ด์ค ์ํ |
| ์ํ๊ณ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ | ์ฑ์ฅ ์ค Rust ํฌ๋ ์ดํธ ์ํ๊ณ ํ์ฉ ๊ฐ๋ฅํ๋ ํนํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๋์ ๋ถ์กฑ | ๋งค์ฐ ํ๋ถ 10 ๋ ์ด์์ ์ถ์ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ์ปค๋ฎค๋ํฐ ์์ฐ | ํ๋ถํจ C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฐ๋์ด ์ฉ์ดํ๋ ๋น๋ ์ค์ ๋ณต์ก |
| ๋ฐฐํฌ ํํ | ๋จ์ผ ์คํ ํ์ผ ๋ฐํ์ ์์กด์ฑ ์ต์ํ | JAR ๋ฐ ๋ฐํ์ ํ์ Java ํ๊ฒฝ ์ค์ ํ์ | ๋ฐ์ด๋๋ฆฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ OS ๋ณ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ฆฌ ํ์ |
| ์ปดํ์ผ ๋ชจ๋ธ | AOT (Ahead-Of-Time) ์ต์ ํ๋ ๋ค์ดํฐ๋ธ ์ฝ๋ ์์ฑ | JIT (Just-In-Time) JVM ์์์ ์ธํฐํ๋ฆฌํฐ ๋ฐ ์ปดํ์ผ ํผ์ฉ | AOT ๋ค์ดํฐ๋ธ ์ฝ๋ ์์ฑ |
Processing ์ '์ค์ผ์น' ๊ฐ๋ ์ ํตํด ๋น ๋ฅธ ํ๋กํ ํ์ดํ์ ์ต์ ํ๋์ด ์๋ค. ๊ทธ๋ฌ๋ JVM ์์์ ๋์ํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ํํ๋ฆฐํธ๊ฐ ํฌ๊ณ , ์ฅ๊ธฐ ์คํ ์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ GC ๋ก ์ธํ ํ๋ ์ ์คํต์ด ๋ฐ์ํ ์ ์๋ค. Nannou ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ์ปดํ์ผ๋๋ฏ๋ก ์์คํ ๋ฆฌ์์ค ํจ์จ์ฑ์ด ์๋ฑํ ๋์ผ๋ฉฐ, ํ๋์จ์ด์ ์ง์ ์ ์ธ ์ ๊ทผ์ด ํ์ํ ์ผ์ ์ฐ๋์ด๋ ์ ์์ค ์ ์ถ๋ ฅ ์ฒ๋ฆฌ์ ์ ๋ฆฌํ๋ค.
openFrameworks ๋ C++ ์ ์ฑ๋ฅ์ ํ์ฉํ์ง๋ง, Makefile ๋๋ IDE ํ๋ก์ ํธ ์ค์ (Visual Studio, Xcode ๋ฑ) ์ด ๋ณต์กํ์ฌ ์ด๊ธฐ ํ๊ฒฝ ๊ตฌ์ถ์ ๋น์ฉ์ด ๋ ๋ค. ๋ํ, C++ ์ ํฌ์ธํฐ ์ฐ์ฐ์ผ๋ก ์ธํ ์ธ๊ทธ๋ฉํ
์ด์
ํดํธ (Segmentation Fault) ์ํ์ด ์์กดํ๋ค.
Nannou ๋ Cargo ๋ผ๋ ํตํฉ ๋น๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์กด์ฑ ๊ด๋ฆฌ์ ๋น๋ ๊ณผ์ ์ด ๋จ์ํ๋ค. ๋ํ, Rust ์ ์ปดํ์ผ๋ฌ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฅ๋ฅผ ๋น๋ ๋จ๊ณ์์ ์ฐจ๋จํ๋ฏ๋ก, ๋๋ฒ๊น
์ ์์๋๋ ์๊ฐ์ ์ค์ด๊ณ ์ํธ์ํฌ์ ์ ๋ขฐ์ฑ์ ๋์ผ ์ ์๋ค.
Nannou ๋ ์ ๋๋ ์ดํฐ๋ธ ์ํธ ๋ถ์ผ์์ ์ฑ๋ฅ (Performance), ์์ ์ฑ (Stability), ํ๋์ฑ (Modernity) ์ ๋์์ ์ถ๊ตฌํ๋ ๋๊ตฌ๋ก ์ ์ํ ์ ์๋ค. Processing ์ด ๊ฐ์ง ์ ๊ทผ์ฑ๊ณผ ์ํ๊ณ์ ํ๋ถํจ, openFrameworks ๊ฐ ๊ฐ์ง ํ๋์จ์ด ์ ์ด ๋ฅ๋ ฅ๊ณผ ์ฑ๋ฅ์ ์๋ ์ค๊ฐ ์ง์ ์ด์, ๊ธฐ์ ์ ์ผ๋ก๋ ๋ ์ง๋ณด๋ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ๊ณผ ๊ทธ๋ํฝ์ค ํ์ดํ๋ผ์ธ์ adopts ํ๊ณ ์๋ค.
ํนํ, ์ฅ์๊ฐ ๊ตฌ์ ์ด ํ์ํ ๋ฏธ๋์ด ํ์ฌ๋, ๊ณ ํด์๋ ๋ ๋๋ง์ด ํ์ํ ์๊ฐํ ์์
, ๊ทธ๋ฆฌ๊ณ ๋ณ๋ ฌ ์ฐ์ฐ์ด ํ์์ ์ธ ์๋ฎฌ๋ ์ด์
์ํธ์์ Nannou ๋ ๊ธฐ์กด ๋๊ตฌ๋ค์ ๊ธฐ์ ์ ํ๊ณ (GC ์ง์ฐ, OpenGL ์์กด์ฑ, ๋ฉ๋ชจ๋ฆฌ ๋ถ์์ ์ฑ) ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋์์ ์ํคํ
์ฒ๋ฅผ ์ ๊ณตํ๋ค. ๋น๋ก ์ํ๊ณ์ ๊ท๋ชจ๋ ๊ธฐ์กด ๋๊ตฌ๋ณด๋ค ์์ ์ ์์ผ๋, Rust ์ธ์ด๊ฐ ์ ๊ณตํ๋ ๊ธฐ์ ์ ํ ๋๋ ์ ๋ฌธ์ ์ธ ๋ฏธ๋์ด ์ํธ ์ค์น ๋ฐ ์์คํ
๊ตฌ์ถ์ ์์ด ์ฅ๊ธฐ์ ์ธ ์ ์ง๋ณด์์ฑ๊ณผ ์คํ ํจ์จ์ฑ ์ธก๋ฉด์์ ์ฐ์๋ฅผ ์ ํ๋ค.