정확한 의미전달
아이템 선정을 하며 많은 것을 느꼈다. 평소에 사람마다 생각이 다르다는것은 잘 알았지만 이렇게나 다를 수 있다는 것이 신기했다. 같은 것을 말해도 이해하는 방식이 저마다 달랐다. 그래서 아이템을 정하고 그에대한 발표자료를 만들면 “왜 이렇게 만들지?” 라는 생각이 들 때가 있었다. 그래서 팀원들과 이야기를 하면 정말 다르다는 것을 느꼈다. 예를 들면 타이머를 정지시키는 기능을 넣기로 이야기를 했다. 그렇다면 나는 당연히 얼굴이 없을때는 타이머가 멈추었다가 다시 나타나면 타이머가 다시 동작하는 것으로 생각했다. 하지만 다른 팀원은 한번 타이머가 멈추면 사용자가 타이머를 다시 시작시켜줘야 한다고 했다. 그래서 협업을 할 때는 최대한 정확하게 나의 의도를 전달하는 것이 중요하다고 생각했다. 어떻게 하면 정확하게 전달 할 수 있을까? 나는 최대한 많이 이야기를 해보는 것이 좋다고 생각한다. 많이 이야기 하면 추상적인 문장이 구체화 되는 것 같았다. 나는 협업을 꽤 잘한다 생각했는데 많은 노력이 필요 할 것 같다.
나의 팀원은 무엇을 하고 있을까?
2월 4일에 초안 발표를 하고 나면 바로 개발에 몰입 할 수 있을 것이라 생각했다. 하지만 초안 발표의 피드백을 수정하고 개발을 어떻게 진행해야 맞을지 고민이 되었다. 그리고 다들 개발을 위한 기본적인 내용을 학습해야 했다. 가까이서 각자 공부하고 코딩도 하지만 사실 같은 팀원이 무엇을 하는지 알기가 어려웠다. 그리고 무엇을 얼마나 알고 있는지 알 수가 없었다. 가장 확실한 것은 가서 물어보는 것 같다. 팀 진행 상황을 정확히 알아야 팀의 작업 속도가 느는 것 같다. 아직 주니어라 내가 다른 팀원들을 확인할 일이 당장 없지만 그래도 팀원들에게 내가 무엇을 하고 있는지는 적극쩍으로 알려 주어야 할 것 같다.
나는 생각보다 소극적이다.
초안 발표 이후 2월 8일에 팀별 업데이트 발표가 있었다. 최종 발표를 염두해 두고 발표하는 자리였다. 우리 팀은 최종 발표시에 어떤 내용을 발표하는 것이라 생각했다. 그런데 정말 최종발표에서 발표하는 것처럼 발표하길 원하셨다. 우리는 팀별 업데이트 순서가 늦어 우리 차례를 기다리는동안 다른 팀의 피드백을 받고 잘못되었다는 것을 알았다. 하지만 나는 시간이 부족하고 다시 준비할 경우 준비한 것도 못보여 줄 것 같아 그대로 진행하는 것이 맞다고 생각했다. 하지만 중간 업데이트 이후 다른 팀원이 그때라도 준비해야 하는게 맞다고 생각했는데 모두 가만히 있어서 아쉬웠다 했다. 돌이켜 생각해보니 어느정도 맞는것 같았다. 내가 틀렸다기 보다는 너무 빨리 포기했나 라는 생각이 들었다. 그리고 아이디어 회의등 개발 외적인 회의에서 의견 피력이 약했던것 같다. 개발에만 집중하면 될거라 생각했던 나를 반성하는 계기가 되었다. 직접 프로젝트에 참여해 보니 기획부터 본인의 의견이나 견해가 들어가고 아니고가 엄청난 차이를 주는 것 같다. 시키는 일을 하는 것과 내가 하고싶은 일을 하는 것의 차이랄까? 나의 의견이 있다면 구체적으로 정확하게 주장하고 알려주는 것이 팀에 도움이 되는 것 같다.
다른 두개를 합치는 것은 생각보다 힘들다.
우리팀의 가장 큰 서비스 중 하나는 AI기반의 자동 타이머이다. AI는 기본적으로 어렵다는 생각이 들지만 타이머는 그렇지 않다. 그래서 AI가 잘 구현되면 타이머를 붙히는 것은 수월할 것이라 생각했다. 유튜브와 mediapipe 공식문서를 보면서 React App 에서 웹 캠을 통해 얼굴 감지 기능을 구현했다. 그리고 다른 팀원이 타이머를 만들었다.
별 걱정하지 않고 타이머 컴포넌트와 얼굴 인식 컴포넌트를 병합하였다. 그런데 약 30초정도 타이머가 진행되면 브라우저의 gpu 메모리 누수가 발생하며 타이머가 급격히 느려졌다. 그 당시에 추론한 원인은 이벤트 큐가 너무 많이 쌓여서 인터벌 처리가 원할하지 못하다는 것이었다. 타이머는 기본적으로 35ms주기로 렌더링 하며 얼굴 인식은 비디오 를 1초에 한번 분석하게 하였다. 비디오 분석에 걸리는 시간이 35ms보다 길어 이벤트 큐가 빠른 속도로 누적되 브라우저가 느려졌다 생각했다. 그렇다면 해결방법은 크게 두가지라 생각했다.
더 가벼운 모델을 도입하거나 장면 분석을 다른 곳에서 진행하는 것이었다. 그 중 우리팀은 장면 분석을 다른곳에서 하는 방법을 먼저 찾아보기로 하였다. 그 결과 웹워커라는 개념이 있었다. 자바스크립트는 싱글 스레드지만 웹 워커를 이용하면 시간이 오래걸리는 작업을 다른곳에서 진행하게 조치 할 수 있었다. 웹 워커를 이용한 방법을 찾기 시작했다.
해결 방법을 찾으며 운영체제에서 공부한 내용이 떠올랐다. 프로세스 스케줄링에서 FCFS 모델에서 작업이 오래걸리는 프로세스가 있을 경우 다른 프로세스의 대기시간이 증가하여 비효율적이라는 내용이 떠올랐다. 지난 4주간 공부했던 운영체제 내용이 이런 곳에서 떠오를 줄 몰랐다.
글을 쓰는 현시점에는 웹 워커를 이용한 방법으로 문제를 해결했다. 내가 직접 모든 코드를 짠건 아니지만 나와같은 고민을 했던 사람이 웹 워커로 AI모델을 구현했다. DOM에 접근하지 않고 장면을 캡쳐해 이미지 엘레먼트를 웹 워커로 옮기는 방식이었다.
쉽다고 생각하는 것은 역시 직접 해보면 어려운 것 같다.
더 공부해야 할 것