Skip to content

최근 업무

관리인
관리인November 2, 20252 min read

최근 수행한 업무 가운데 메모리 부족 문제를 해결해야 하는 이슈가 있었다. 대량의 파일을 압축해서 내보내야 하는 이슈였는데, 단순히 압축이 아니라, 이미지에 수정을 가해서 캡쳐한 뒤에 압축해서 브라우저로 다운로드 받는 과정이 존재했다.

이 과정에서 사용되는 라이브러리가 이미지를 로드하는 과정에서 메모리를 사용하고는 해제되지 않는 문제였다. 결론부터 말하자면 라이브러리에서 제공하는 메모리 해제 함수를 제대로 사용하지 못해 발생한 문제였지만, 문제 원인을 찾는 과정에서 메모리 최적화와 관련된 여러 가지 시도를 해볼 수 있었다. 브라우저의 performance탭, memory 탭 사용법과 시각화 된 데이터들에 대한 지식이 늘었다.

메모리 문제보다도 큰 문제가 있었는데, DOM을 사용해야 하는 라이브러리를 워커에서 사용할 수 있도록 했다는 것이다. DOM에는 메인 스레드만 접근할 수 있으므로 기능 자체를 메인과 워커 스레드로 나눠 작업할 계획이었지만, 진행하면 할수록 작업의 의미 자체가 퇴색한다는 사실을 깨닫게 되었다. 렌더링과 같은 무거운 작업을 전부 메인에서 수행하고 압축과 같은 비교적 가벼운 작업을 워커 스레드에서 수행하는 것이 어떤 의미가 있을까? 메인에서 워커로 데이터를 전달했다가, 다운로드를 위해서 다시 워커의 작업물을 메인으로 가져와야 한다면, 메인에서 모든 작업을 수행하는 것에 비해 어떤 이득이 있는가?

이러한 고민을 하던 중 DOM 객체를 모방하여 워커에서 인스턴스를 생성한 뒤 해당 라이브러리를 구동시키는 테스트를 진행했고 수 일에 걸친 좌절 끝에 성공했다. 뿌듯한 기분이었다. 라이브러리에서 요구하는 모든 구조를 모방 DOM에 구현할 수 있을지 의구심에도 집념으로 진행했기 때문에 감정의 강도가 강했을 테지만, 솔직히 도박과 같은 일이었기 때문에 다음에 불확실의 벽에 마주쳤을 때에도 동일한 정신으로 진행할지는 의문이다.

이 메모는 좀 더 다듬어서 정리할 필요가 있다. 이미지도 추가하면 좀 더 기억에 남겠지. 이 사이트를 관리하는 게 점점 귀찮아지고 있기 때문에 이런 글이라도 써 나가야 한다. 아무도 보지 않기 때문에 더욱 그래야 한다.