문제 개요 :형광 이미지 촬영 신호 지연 문제
회사가 생산 및 판매하는 구강 카메라는 일반 사진뿐만 아니라 바이오 형광 이미지를 촬영할 수 있는 정밀 의료 장비입니다. 하지만 형광 이미지 촬영 시 촬영 신호가 지연되거나 누락되는 문제가 빈번하게 발생해 사용자의 촬영 경험이 불안정했고, 이는 제품의 신뢰성을 떨어뜨리는 요인이 되었습니다.
플랫폼 개발팀은 하드웨어 개발을 직접 담당하지 않지만, 플랫폼의 사용성이 구강 카메라의 성능에 크게 의존하고 있었기 때문에 이 문제를 해결하는 것이 필수적이라고 판단했습니다. 안정적이고 효율적인 사용자 경험을 위해 촬영 버튼의 입력을 신속하고 정확하게 감지하는 것이 필요했습니다.
문제 원인: 신호 감지 주기의 불안정성
구강 카메라는 단일 촬영 버튼 클릭 시 1초 후 형광 이미지를 추가로 촬영해 총 두 장의 사진을 기록하도록 설계되었습니다. 이때 PC의 백그라운드 프로그램은 구강 카메라의 촬영 신호를 Windows OS의 스페이스바 입력으로 변환해 인식하게 합니다. 그러나 초기 프로그램에서 신호 감지 주기가 너무 길어 두 번의 촬영 신호를 모두 감지하지 못하는 경우가 발생했습니다.
초기 백그라운드 프로그램은 촬영 버튼 입력을 0.7초 단위로 체크했으며, 이는 구강 카메라에서 전송한 촬영 신호를 스페이스바 신호로 변환하는 과정에서 신호 감지가 누락되는 경우가 많았습니다. 특히 실시간 촬영이 중요한 의료 장비 특성상, 이러한 신호 감지의 누락은 사용자 경험에 큰 영향을 미쳤습니다.
엔지니어링 관점에서 보면, 감지 주기가 0.7초인 상황에서 발생한 신호 감지 실패는 신호와 감지 타이밍 간의 비동기성으로 설명할 수 있습니다. 구강 카메라가 촬영 신호를 보낼 때, 이 신호는 매우 짧은 시간 동안 전송되므로, 0.7초의 감지 주기로는 이러한 짧은 신호를 놓칠 가능성이 높습니다.
특히, 사용자가 촬영 버튼을 한 번 누르고 떼는 경우, 그 짧은 신호가 0.7초 주기의 감지 타이밍과 맞물리지 않으면 신호 자체가 백그라운드 프로그램에 의해 감지되지 않는 상황이 발생합니다. 이러한 문제는 주기가 짧아질수록 신호를 놓칠 확률이 줄어드는 특성을 보이기 때문에, 더 짧은 주기로 조정하는 것이 필요했습니다.
문제 해결 접근 방식: Stream 객체 활용 경험
플랫폼 개발팀은 이전에 웹 브라우저의 navigator API에서 제공하는 stream 객체를 활용해 카메라와의 통신 안정성을 확보한 경험이 있었습니다. 이 경험을 바탕으로 기존의 0.7초인 구강 카메라의 촬영 버튼 감지 주기를 카메라의 성능에 영향을 미치지 않는 수준에서 줄이는 방안을 제안했습니다. (참고 - 구강 카메라 스트림 상태 체크로 사용자 경험 개선)
아래 코드는 플랫폼에서 실제로 카메라의 스트림 상태를 체크하기 위해 1.5초 간격으로 useInterval 훅을 사용하여 구현한 예시입니다.
useInterval(() => {
getConnectedDevices();
if (selectedCameraVar() === "QRAYCAM") {
if (devicesStatus.QRAYCAM.isStreamActive && !isCamproStreamOn) {
...
} else if (!devicesStatus.QRAYCAM.isStreamActive && isCamproStreamOn) {
...
}
} else if (selectedCameraVar() === "QRAYPEN") {
if (devicesStatus.QRAYPEN.isStreamActive && !isPencStreamOn) {
...
} else if (!devicesStatus.QRAYPEN.isStreamActive && isPencStreamOn) {
...
}
}
}, 1500);
협업과 테스트를 통한 문제 해결
하드웨어 제조사와의 협업을 통해 촬영 버튼 신호 감지 주기를 0.3초로 변경했습니다. 변경된 주기는 사용자가 버튼을 누르는 동작을 더욱 정밀하게 감지할 수 있도록 하였으며, 이를 통해 촬영 신호 누락 문제를 해결할 수 있었습니다.
반복적인 테스트와 실험을 통해 다양한 조명 환경과 사용자 동작 속도에서 촬영 버튼이 정확하게 감지되는지 확인했습니다. 그 결과, 촬영 타이밍이 일관되고 형광 이미지가 정확히 의도한 시점에 기록되어 사용자 경험이 크게 개선되었습니다.
개선 결과
1. 정확한 촬영 타이밍 확보: 촬영 버튼이 눌린 후 정확히 1초 후에 형광 이미지를 추가 촬영하도록 설정하여, 사용자는 촬영 타이밍에 대한 일관성 있는 경험을 할 수 있었습니다. 이를 통해 형광 이미지가 정확히 의도한 시점에 기록되었으며, 촬영 결과물이 사용자 의도와 완전히 일치하게 되었습니다.
2. 촬영 신호 누락 방지: 기존의 0.5초 주기에서는 촬영 버튼 입력이 간헐적으로 누락되는 현상이 발생했으나, 0.3초 주기로 변경한 이후로는 이러한 신호 누락 문제가 해결되었습니다. 특히 형광 이미지 추가 촬영 시점에서 신호가 안정적으로 감지됨으로써 두 장의 사진이 일관되게 촬영되었습니다.
3. 최적의 주기 설정을 위한 반복 실험: 웹 브라우저 내 navigator.stream 객체의 상태 감지 주기를 최적화했던 과거의 경험을 바탕으로, 여러 가지 감지 주기를 실험하여 최적의 주기를 찾아냈습니다. 이러한 접근은 하드웨어와 소프트웨어 간의 연동에서 발생하는 문제들을 효과적으로 해결할 수 있는 중요한 인사이트를 제공했습니다.
결론: 하드웨어와 소프트웨어의 협업을 통한 문제 해결
이번 프로젝트는 하드웨어와 소프트웨어 간의 협업을 통해 문제를 해결한 사례로, 실시간 장비와 연동되는 시스템에서 신호 감지 주기의 최적화가 매우 중요하다는 것을 확인했습니다. 플랫폼 개발팀은 웹 브라우저와의 연동 경험을 하드웨어 개선에 적용함으로써, 카메라 제조사와 협력해 신호 감지 주기를 줄이고 안정성을 높이는 데 성공했습니다.
그 결과, 촬영 오류 문제를 개선하고 사용자에게 더욱 정밀하고 일관성 있는 의료용 이미지 촬영 경험을 제공할 수 있었습니다. 이 사례는 향후 유사한 문제 해결에 중요한 인사이트를 제공하며, 하드웨어와 소프트웨어 간의 최적화를 위한 지속적인 피드백 루프의 중요성을 강조하는 계기가 되었습니다.