2025년 2월 회고: 코드로 음악을 그리고, GAN으로 현실을 비틀다

2025년 2월 회고

프롤로그: 학업지옥에서 찾은 창의적 탈출구

2월은 한마디로 정의하자면 “학업 스트레스 vs 창의적 욕구”의 대결이었다. 데이터 과학 석사 과정에서 통계와 선형대수가 내 정신건강을 갉아먹는 동안, 나는 Remotion과 GAN이라는 새로운 장난감들로 현실도피를 시도했다.

결과적으로? 도피는 성공적이었고, 부산물로 몇 가지 흥미로운 작업물들이 나왔다.

2월의 키워드 맵

├── Academic Hell (통계/선형대수의 공포) ├── Drum Cover + Code (음악을 시각화하는 실험) ├── GAN Adventures └── Mental Health Management (생존 전략)

개요

2월은 개인적인 성장, 학업, 그리고 창의적인 표현에 대한 강한 집중. 학업 과정의 어려움과 개인 웰빙 사이 균형 맞추기 위해 노력했다. 예술과 기술의 융합을 깊이 탐구. 특히 드럼 커버 영상 애니메이션과 GAN(Generative Adversarial Networks) 실험에 몰두했다.

달성한 일

  • 개인적인 성장과 정신 건강 관리를 위한 노력을 지속했다.
  • 데이터 과학 석사 과정의 학업을 꾸준히 이어갔다.
  • 드럼 커버 영상에 Python/React를 활용한 애니메이션을 적용하는 작업을 진행했다.
  • GAN을 이용한 시각 작업 실험을 통해 새로운 표현 방식을 탐구했다.
  • GSAP, Theatre.js, Framer Motion 등 다양한 웹 애니메이션 라이브러리를 탐색하고 활용했다.
  • 과거의 트라우마와 가족 관계에 대한 성찰을 기록했다.
  • 정신 건강 문제(ADHD, ASD, PMDD)와 사회적 압력의 영향을 논의했다.
  • 팬픽션 창작과 요리 등 개인적인 흥미를 표현하는 활동을 즐겼습니다.

도전 과제 및 문제점

  • 통계 및 선형 대수와 같은 학업 과목의 어려움으로 인해 스트레스를 받았다.
  • 학업과 개인적인 웰빙 사이의 균형을 맞추는 데 어려움을 겪었다.
  • GAN 실험에서 예상치 못한 기술적인 난관에 부딪히다.
  • 사회적 압력과 온라인 상호작용에서 오는 부정적인 영향에 직면하다.

배운 점

  • 학업의 어려움을 극복하기 위한 전략과 인내심을 기를 수 있었다.
  • 예술과 기술의 융합을 통해 새로운 창작의 가능성을 발견하고 기술적 역량을 강화했다.
  • 정신 건강 관리가 개인의 삶의 질에 미치는 지대한 영향을 다시 한번 깨달았다.
  • 사회적 문제에 대한 비판적인 시각을 유지하고 콘텐츠로 표현하는 방법을 모색했다.

Remotion, 내 꿈이 현실이 되다

2025-02-25

비디오 편집? 그딴 건 코딩으로 한다

Da Vinci Resolve, After Effects, CapCut… 이런 툴들은 이제 옛날 이야기다. 내가 찾은 건 Remotion이었다. React로 비디오를 만드는 라이브러리.

프론트엔드 개발자로 수년간 쌓아온 경험이 드디어 진짜 내가 원하는 작업에 쓰일 때가 온 것이다. 더 이상 GUI 도구의 제약에 갇힐 필요가 없었다.

// 이런 식으로 비디오를 만드는 세상이 왔다
import {useCurrentFrame, interpolate} from 'remotion';

const DrumAnimation = () => {
  const frame = useCurrentFrame();
  const opacity = interpolate(frame, [0, 30], [0, 1]);
  
  return (
    <div style=>
      {/* 드럼 비트에 맞춘 애니메이션 */}
    </div>
  );
};

드럼 커버 영상의 새로운 패러다임

2월 말부터 본격적으로 드럼 커버 영상에 Python과 React를 활용한 애니메이션을 적용하기 시작했다. 단순히 드럼을 치는 영상이 아니라, 코드로 생성된 시각적 요소들이 음악과 동기화되는 작업이었다

graph LR
    A[드럼 오디오] --> B[Python 분석]
    B --> C[비트 감지]
    C --> D[React 애니메이션]
    D --> E[Remotion 렌더링]
    E --> F[최종 영상]

이건 그냥 영상 편집이 아니었다. 음악을 시각적 언어로 번역하는 작업이었다.

드럼의 킥, 스네어, 하이햇 각각이 서로 다른 시각적 패턴으로 변환되는 과정을 보는 건 정말 마법 같았다.

GAN, 현실을 비트는 새로운 방법

GAN(Generative Adversarial Networks) 실험은 2월의 또 다른 하이라이트였다. 이론으로만 알고 있던 생성적 적대 신경망을 직접 구현해보니… 예상보다 훨씬 기묘하고 흥미로웠다.

# 핵심은  영원한 대결 구조
class Generator:
    def create_fake_reality(self):
        # "진짜 같은 가짜" 생성
        pass

class Discriminator:
    def detect_fake(self, image):
        # "가짜를 가려내는" 능력
        pass

# 둘이 치고받으며 서로 발전
for epoch in range(endless_battle):
    generator.fool_discriminator()
    discriminator.get_smarter()

예상치 못한 기술적 장벽들

물론 모든 게 순조롭지는 않았다. 훈련 과정에서 마주한 문제들

  1. Mode Collapse: Generator가 한 가지 패턴만 계속 생성하는 현상
  2. Training Instability: 두 네트워크의 균형 맞추기가 생각보다 까다로움
  3. 컴퓨팅 리소스: 내 맥북이 비명을 지르기 시작

하지만 이런 장벽들이 오히려 재미있었다. 문제를 해결해나가는 과정에서 내부 동작을 더 깊이 이해하게 되었으니까.

웹 애니메이션 라이브러리 탐험기

GSAP, Theatre.js, Framer Motion의 삼국지

2월은 웹 애니메이션 라이브러리들을 체계적으로 탐험한 달이기도 했다. 각각의 특성을 파악하고, 어떤 상황에서 어떤 도구가 최적인지 실험해봤다.

애니메이션 라이브러리 비교표

┌─────────────┬─────────────┬─────────────┬─────────────┐ │ 라이브러리 │ GSAP │ Theatre.js │Framer Motion│ ├─────────────┼─────────────┼─────────────┼─────────────┤ │ 학습곡선 │ 중간 │ 높음 │ 낮음 │ │ 성능 │ 최고 │ 높음 │ 좋음 │ │ React 친화 │ 보통 │ 보통 │ 최고 │ │ 타임라인 제어 │ 최고 │ 최고 │ 보통 │ └─────────────┴─────────────┴─────────────┴─────────────┘

Theatre.js: 애니메이션의 새로운 패러다임

특히 Theatre.js는 충격적이었다. 코드로 애니메이션을 만들면서도 GUI 타임라인으로 제어할 수 있다는 게 신세계였다.

// Theatre.js로 복잡한 시퀀스 제어
const sheet = project.sheet('DrumSequence');
const drumObject = sheet.object('Drum', {
  x: types.number(0, {range: [-100, 100]}),
  scale: types.number(1, {range: [0.5, 2]}),
  intensity: types.number(0, {range: [0, 1]})
});

// 드럼 비트에 맞춰 동적으로 제어
drumObject.onValuesChange((values) => {
  updateDrumVisualization(values);
});

학업지옥과 정신건강의 줄타기

통계와 선형대수, 그 지독한 것들

데이터 과학 석사 과정의 현실은 생각보다 힘들었다. 통계와 선형대수라는 두 과목이 내 자존감을 산산조각 내놓았다.

학업 스트레스 차트 스트레스 레벨 ↑ 😱 │ ┌──┐ │ │ │ ← 중간고사 시즌 😰 │ ┌──┤ │ │ │ │ │ 😐 │──┤ │ └──┐ │ │ │ │ ← 창의적 코딩으로 도피 😊 └──┴──┴─────┴──→ 시간 1월 2월 3월 4월

하지만 이상하게도, 학업 스트레스가 클수록 창의적 욕구도 더 강해졌다. 마치 압력솥에서 증기가 새어나오듯, 스트레스가 창작 에너지로 변환되는 과정을 경험했다.

ADHD, ASD, PMDD와의 동거

2월에는 내 정신건강 이슈들(ADHD, ASD, PMDD)에 대해서도 더 솔직하게 마주했다. 이런 신경다양성이 학업에는 장애가 되지만, 창작에는 오히려 독특한 관점을 제공한다는 걸 깨달았다.

내 심리상황과 인지건강의 현 양면성 ├── 학업에서는… │ ├── 집중력 산만 │ ├── 감정 기복 심함 │ └── 사회적 압박감 └── 창작에서는… ├── 독특한 시각 👁️ ├── 강렬한 집중력 (하이퍼포커스) └── 비선형적 사고

사회적 압력과 온라인 상호작용의 어두운 면

SNS, 그 달콤한 필요악의 늪

2월에는 온라인 상호작용에서 오는 부정적인 영향에 대해서도 많이 생각했다. 특히 작업물을 SNS에 올렸을 때 받는 반응에 대한 몰입이 예상보다 내 정신건강에 큰 영향을 미친다는 걸 깨달았다.

💭 SNS 딜레마 좋은 반응 → 도파민 → 더 많은 노출 욕구 → 번아웃 나쁜 반응 → 스트레스 → 자존감 하락 → 창작 의욕 감소

해결책? 일단 내가 정말 만들고 싶은 것에 집중하기로 했다. 남들 눈치 보지 말고.

mindmap
  root((창작의 중심))
    텍스트
      팬픽션
      기술 블로그
    시각
      이미지
      애니메이션
    음악
      드럼 커버
      비트 분석
    기술
      React 컴포넌트
      Python 스크립트

흥미롭게도 요리도 2월의 중요한 창작 활동 중 하나였다. 코딩하다가 막히면 부엌으로 가서 뭔가를 만들어 먹는 게 일종의 명상이 되었다. 손으로 무언가를 만드는 물리적 행위가 디지털 작업으로 지친 뇌에 휴식을 주었다.

기술적 성장과 한계 인식

“완벽하지 않아도 괜찮다”는 깨달음

2월에 가장 중요한 깨달음 중 하나는 완벽하지 않아도 괜찮다는 것이었다. Remotion 애니메이션이 예상과 다르게 나와도, 그 자체로 흥미로운 결과물이었다.

# 완벽주의자의 코드 vs 실험가의 코드
# Before (완벽주의)
def create_perfect_animation():
    # 모든 edge case 고려
    # 완벽한 최적화
    # 버그 제로
    pass

# After (실험가)
def create_interesting_animation():
    # 일단 만들어보자
    # 실패해도 배움이 있다
    # 우연한 발견을 환영한다
    pass

기술적 역량의 확장

2월을 통해 확실히 성장한 영역들:

  1. Generative AI 이해도: 단순 사용자에서 개발자로
  2. 비디오 프로그래밍: Remotion 마스터리
  3. 웹 애니메이션: 복합적 라이브러리 활용 능력
  4. Python-JavaScript 연동: 두 생태계의 브릿지 구축

2월을 마무리하며

예상치 못한 수확들

2월을 시작할 때는 단순히 “학업과 창작의 균형”을 목표로 했다. 하지만 얻은 건 그보다 훨씬 많았다.

  • 기술적 도구들이 진짜 표현 수단이 될 수 있다는 확신
  • 학업 스트레스를 창작 에너지로 전환하는 방법
  • 완벽함보다 실험정신이 더 중요하다는 깨달음
  • 신경다양성이 창작에 주는 독특한 장점들

3월을 향한 다짐

3월부터는 WebGL과 Three.js를 본격적으로 파고들 예정이다. 2D에서 3D로, 평면에서 공간으로 확장하는 새로운 도전이 기다리고 있다.

목표는 여전히 단순하다: 기술을 통해 내 안의 이야기를 더 생생하게 표현하는 것.

P.S. 이 글을 쓰는 지금도 백그라운드에서 GAN 모델이 돌고 있다. 새벽 3시에 GPU 팬 소리를 들으며 글을 쓰는 이 순간이 2월을 가장 잘 요약하는 것 같다.