Intelligence Lab›Research Blog
비전, 예측 분석, 에이전트, 생성 기술의 현장 적용 사례와 인사이트
운영 DB를 직접 조회하면 화면 하나를 여는 데 5분이 걸렸다. 변경 이력 없는 View라 증분 동기화는 불가능했고, 하루 한 번 전량 스냅샷으로 읽기 전용 미러를 최신 상태로 유지했다. 자주 쓰는 집계는 캐시에 얹어 조회를 1초 이내로 줄였다. 조회 성능을 바꾼 것은 쿼리가 아니라 읽기 구조였다.
2026.06.18 · 3분 읽기
서버리스 렌더에는 약 10분의 실행 시간 제한이 있다. 긴 영상은 프레임을 청크로 나눠 병렬로 렌더하고 하나로 결합했다. 총 시간은 가장 느린 청크 수준으로 줄었고, 이 병렬성은 렌더를 프레임 번호의 결정적 함수로 설계해 둔 데서 공짜로 얻었다.
2026.07.08 · 3분 읽기
마이그레이션에서 가장 기억에 남는 버그는 화면을 깨뜨린 버그가 아니다. 에러 레벨로 쏟아지는 무해한 로그가 진짜 오류를 가렸고, 복제 로직이 새 필드를 몰라 보정값이 조용히 사라졌다. 시끄러운 버그는 스스로를 고발하지만, 조용한 버그는 발견 자체를 늦춘다.
본편에서 걷어낸 수치와 공식의 기록. 합성 관절은 랜드마크 평균으로, 가중치는 역거리제곱으로, 회전은 atan2 참조 벡터로 구했다. 자료구조 다섯 개에 지오메트리 전체가 18KB. 규모가 작을 때 단순함은 성능보다 값지다.
2026.07.08 · 4분 읽기
사용자 그림은 SVG인데 GPU는 삼각형만 안다. SVG 경로를 평탄화하고 earcut으로 삼각분해해 메시로 굽고, 형상(rig.svg)과 골격(rig.json)을 분리하고, 베이크 결과는 캐시했다. 깨지기 쉬운 산출물은 CI 검증이 빌드 단계에서 지킨다.
외부 API의 응답 형태는 우리가 정하지 못한다. Content-Type을 진실로 삼아 응답을 세 갈래로 가르고, 봉투 네 종과 별칭 일곱 종을 하나의 스키마로 정규화하고, 상태코드는 사람이 행동할 수 있는 말로 번역했다. 통합의 품질은 어긋날 때 드러난다.
수십 MB WASM 엔진은 언제 받느냐와 몇 번 받느냐가 체감을 가른다. 변환이 필요한 순간에만 받고, 싱글톤과 Promise 공유로 동시 요청에도 다운로드는 한 번으로 막았다. 실패하면 공유 상태를 비워 다음 시도가 처음부터 다시 시작하게 했다.
브라우저는 WebM·48kHz·스테레오로 녹음하고, 음성합성 API는 WAV·16kHz·Mono·3MB 이하 입력을 요구한다. WebAssembly 트랜스코더를 브라우저에서 필요할 때만 로드해 형식을 맞추고, 보내기 전에 용량을 두 번 검사했다. 기술보다 중요했던 건 둘 사이를 잇는 통합 계층이었다.
2026.06.09 · 5분 읽기
손그림 캐릭터를 실시간으로 움직이는 렌더러는 잘 돌아갔다. 문제는 캔버스 2D 벡터 엔진이라 GPU를 적극 활용하기 어렵다는 점이었다. 코어를 테스트로 고정하고 새 WebGL 엔진을 옆에서 키운 뒤 구 라이브러리를 걷어냈다. 잘 돌아가는 코드를 버린 이유는 고장이 아니라 구조의 한계 때문이었다.
사용자가 그린 그림에는 본도 가중치도 없다. 랜드마크를 관절로 축약하고, 신뢰도에 따라 스무딩을 조절하고, 가려진 관절은 약한 추론으로 메워 웹캠 포즈를 실시간으로 입혔다. 파이프라인을 관통한 원칙은 하나, 불확실성을 버리지 않고 신뢰도로 들고 다니는 것이었다.
2026.06.09 · 6분 읽기
타임라인 편집기는 같은 영상을 미리보기와 최종 렌더로 두 번 그린다. 두 경로가 같은 컴포넌트와 같은 데이터를 공유하게 만들고, 애니메이션을 프레임 번호의 함수로 정의해 불일치를 구조적으로 없앴다. 재생은 흐르는 시계지만, 렌더는 결정적 함수다.
2026.06.07 · 3분 읽기