AI Briefing

카카오 FE, Promise 취소 기능 부재 원인 분석 및 광고 SDK 렌더링 취소 해결법 공유

·2023.01.11 00:00

핵심 내용

카카오 FE가 Promise 취소 기능 표준화 난항 원인을 분석하고, 광고 SDK에서 롤백 지연 방식으로 렌더링 취소 문제를 해결한 사례를 소개했다.

1 / 4

자세히 보기

카카오 비즈 FE 파트가 광고 SDK 개발 중 마주한 Promise 취소 기능의 부재와 그 배경을 분석했다. Promise는 비동기 상태를 값으로 다루지만, TC39는 범용적인 취소 기능 표준화를 위해 오랜 기간 논의해왔으나 합의에 이르지 못했다. 초기 제안된 Cancel Token은 Promise와 취소 기능을 분리하는 장점이 있었으나, WHATWG의 AbortController와 AbortSignal이 Web API 표준으로 먼저 채택되면서 언어 차원의 표준화는 중단되었다.

Promise 취소 기능 표준화의 어려움

취소 기능 표준화가 어려운 이유는 크게 세 가지다. 첫째, 취소를 일반 예외로 취급할지 별도 문법으로 처리할지에 대한 합의가 없다. C#처럼 예외로 처리하면 불필요한 에러 로그가 발생하고, 별도 문법을 도입하면 스펙이 복잡해진다. 둘째, 취소의 기대 동작이 모호하다. 에러 발생으로 볼지, Pending 상태 유지로 볼지 정의하기 어렵다. 셋째, 기존 코드와의 호환성 문제다. Promise에 취소 기능이 추가되면 캐시 구현 등 기존 로직에 의도치 않은 영향을 미칠 수 있다. 또한 AbortController가 EventTarget 등 Web 플랫폼에 종속적이라 ECMAScript 표준으로 가져오기에도 한계가 있다.

광고 SDK에서의 렌더링 취소 해결

광고 SDK에서는 렌더링 중 광고가 제거될 경우 롤백 함수가 저장되지 않아 메모리 누수가 발생하는 문제가 있었다. Promise 취소 기능을 직접 구현하려 했으나, 비동기 코드 중간중간 취소 여부를 확인하는 것은 예측 불가능한 사이드이펙트를 유발해 불가능했다. 이에 따라 렌더링을 즉시 중단하는 대신, 광고가 제거되면 이를 버퍼에 저장하고 렌더링 완료 후 롤백하는 방식으로 해결했다. 이 방법은 구현이 간단하고, 빠른 렌더링 속도 덕분에 사용자 경험에 큰 영향을 주지 않는다.

이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.

AI 처리 방식을 확인하거나, 요약 오류와 출처 표기 문제, 삭제 요청을 문의 · 건의로 알려주세요.