
1. 배경 (Context): 웹에서 고성능 수학 연산의 한계와 전환 필요성
프로젝트 개요: 'Gershgorin Circle Theorem(거슈고린 원 정리)'의 인터랙티브 시각화 도구 개발.
- 목표: 복소 행렬의 고유값(Eigenvalue) 분포를 웹상에서 실시간으로 시각화하여 사용자에게 전달.
- 제약 사항: JavaScript는 단일 스레드 기반이며, 복잡한 선형대수 연산(특히 반복적인 행렬 분해) 처리 시 메인 스레드 블로킹(Blocking) 현상이 발생하여 UX를 심각하게 저해함.
기술적 의사결정: 계산 로직과 UI 로직의 분리.
- UI/UX: HTML/JavaScript (기존 웹 생태계 활용).
- Core Logic: Rust로 작성 후 WebAssembly(Wasm)로 컴파일하여 브라우저 내 구동.
- 개발 동기: 단순한 라이브러리 호출이 아닌, '야생형' 학습 방식 채택. Rust 언어 습득과 선형대수 알고리즘의 밑바닥 이해를 병행함.
2. 문제점 (Problem): 나이브(Naive)한 알고리즘 구현의 함정
초기 접근의 실패: 교과서적인 'QR 알고리즘(QR Algorithm)'을 그대로 구현할 경우, 실무에서 치명적인 오류 발생.
- QR 분해를 반복(Iteration)하여 상삼각행렬로 수렴시키는 방식은 일반적인 비대칭 행렬(Asymmetric Matrix)에서 수렴을 보장하지 않음.
구체적 실패 사례 (Data):
- 대상: 순열 행렬(Permutation Matrix) 등 직교(Orthogonal) 성질을 가진 행렬.
- 현상: $A = Q \cdot R$ 분해 시, $Q$가 원래 행렬 $A$와 동일하고 $R$이 단위 행렬($I$)이 되는 고정점(Fixed point) 현상 발생.
- 결과: 알고리즘이 무한 루프(Infinite Loop)에 빠지거나, 부정확한 값만 도출하고 멈춤.
- 수치적 불안정성: 부동소수점 오차 누적으로 인해 수렴 속도가 기하급수적으로 느려짐.
Rust 생태계의 한계점 발견:
- Python(NumPy)과 달리 Rust 표준 라이브러리(std/core)에는 복소수(Complex Number) 타입이 내장되어 있지 않음. `num-complex` 크레이트가 존재하나, 학습 및 커스텀 최적화를 위해 직접 구현이 필요했음.
3. 해결 방안 (Solution): Rust와 Wasm을 활용한 최적화 전략
자료구조의 재정의 (Custom Implementation):
- Rust의 `struct`를 활용하여 `Complex` 타입 직접 구현.
- `wasm-bindgen`을 사용하여 JS와 Rust 간의 메모리 공유 및 타입 변환 오버헤드 최소화.
- 복소수 연산(덧셈, 곱셈, 노름 등)을 위한 trait(`Add`, `Mul`) 구현으로 코드 가독성과 타입 안정성 확보.
알고리즘 고도화 (Algorithm Refinement):
- Hessenberg 감소(Reduction) 도입: 단순히 QR 분해를 반복하는 대신, Householder reflector를 사용하여 행렬을 먼저 Hessenberg 형태로 변환.
- Shift 기법 적용: 수렴 속도를 높이기 위해 고유값 근사치를 이용한 Shift 적용 (Wilkinson shift 등). 단순 반복문보다 연산 비용은 높으나 수렴 안정성을 획기적으로 개선.
아키텍처 구성:
- Input: JS에서 행렬 데이터 생성 (사용자 인터랙션).
- Process: Wasm(Rust)에서 고유값 계산 및 Gershgorin 원의 중심/반지름 도출.
- Output: 계산된 경계 데이터를 JS로 반환하여 Canvas/SVG 렌더링.
4. 기대 효과 및 제언 (Impact & Insights)
성능 향상 (Efficiency):
- 복잡한 복소 행렬 연산 처리 속도가 순수 JS 구현 대비 비약적으로 상승.
- 브라우저 메인 스레드 부하 감소로 끊김 없는 60fps 인터랙션 유지 가능.
학습 및 역량 강화 (Engineering capability):
- "기본 문제를 풀 수 없다면, 나누어라": 수학적 난제를 작은 단위(복소수 구현 -> QR 분해 -> Hessenberg 변환)로 쪼개어 해결하는 엔지니어링의 본질 체득.
- 라이브러리 의존도를 낮추고, 블랙박스로 사용하던 `eig()` 함수의 내부 동작 원리를 파악함으로써 디버깅 및 최적화 역량 확보.
비즈니스 인사이트:
- AI 및 데이터 시각화가 중요해지는 시점에서, 프론트엔드 레벨에서의 고성능 연산 요구는 증가할 것임.
- 단순 CRUD 개발자를 넘어, 도메인 로직(수학/통계)을 시스템 레벨 언어(Rust/C++)로 구현하고 웹에 통합할 수 있는 능력이 향후 3년 내 핵심 경쟁력이 될 것임.


