TECH 으로 돌아가기
TECH HACKER NEWS 오늘 8분 읽기 21 READS

직접 만든 브라우저 레이디버드, 성능 엔진 전면 개편에 나서다

직접 만든 브라우저 레이디버드, 성능 엔진 전면 개편에 나서다
SOURCE IMAGE · HACKER NEWS

처음부터 다시 만드는 엔진의 부담과 8월의 전환

레이디버드(Ladybird)는 크로미움이나 웹킷을 가져다 쓰지 않고 렌더링 엔진부터 독자적으로 구현하는 오픈소스 브라우저다. 기업과 개인의 후원만으로 운영돼 특정 벤더의 이해관계에서 자유롭다는 점이 강점이지만, 반대로 성숙한 엔진들이 수십 년간 쌓아 온 기능과 성능을 뒤늦게 따라잡아야 하는 숙제를 안고 있다. 8월 소식에서 눈에 띄는 대목은 성능 개선이 그동안의 산발적 대응에서 지속적인 집중 과제로 격상됐다는 점이다. 스타일 엔진 교체, 레이아웃 캐싱, CSS 애니메이션의 메인 스레드 분리가 한 달 안에 한꺼번에 진행됐다.

사용자가 가장 체감할 변화는 영상 재생 범위 확대다. 미디어 소스 익스텐션(MSE) 구현이 조각화된 MP4와 AVC(H.264), HEVC(H.265), AV1, AAC 코덱을 지원하고 지원 여부 질의도 실제 능력을 반영하도록 바뀌면서, 적응형 비트레이트 스트리밍을 쓰는 트위치와 플렉스에서 재생이 가능해졌다. 유튜브는 대부분 영상이 VP9/Opus(WebM)로 제공돼 이전에도 재생됐지만, 일부 오래되거나 덜 알려진 영상과 8K급 고화질은 AVC 또는 AV1로만 서비스되는 경우가 있어 이번 코덱 확장의 실익이 분명하다. 함께 유튜브 미리보기 카드에서의 크래시, preload="none" 상태의 멈춤, HLS.js 기반 플레이어 재생 문제도 정리됐다.

실무자가 챙겨야 할 기능들

프런트엔드 관점에서는 CSS 스크롤 스냅(scroll-snap-type, scroll-snap-align, scroll-snap-stop) 지원이 반갑다. 휠, 키보드, 스크롤바 드래그, 터치패드 관성 스크롤은 물론 scrollTo() 같은 프로그램 방식 스크롤에서도 스냅이 작동하고, 레이아웃이 바뀌면 다시 스냅된다. 다만 scrollIntoView()는 아직 스냅되지 않는다는 한계가 있다. 개발자 도구에는 자바스크립트 디버깅이 들어와 중단점 설정, 한 줄씩 실행, 워치 표현식 평가가 가능해졌다. Wasm 디버깅과 DOM 변경 중단점은 빠져 있고, 프런트엔드는 자체 도구가 나오기 전까지 파이어폭스 DevTools를 임시로 쓴다.

운영 편의 기능도 늘었다. 다운로드는 서버가 지원할 경우 일시정지와 재개가 가능하고 브라우저를 재시작해도 유지되며, 가능하면 네 개의 병렬 연결로 내려받는다. Ctrl+Shift+T로 닫은 탭을 되살릴 때 URL만이 아니라 앞뒤 이동 이력을 포함한 세션 전체가 복원되고 재시작 후에도 유지된다. 다만 폼 제출 데이터는 신중한 처리가 필요하다는 이유로 일부러 저장하지 않는다. 사용자 에이전트(UA) 스니핑으로 깨진 화면을 내려주는 사이트에 대해서는, 정책을 코드에 박아 넣는 대신 런타임에 불러오는 JSON 규칙으로 대응하도록 바꿨다. 첫 적용 대상은 nytimes.com과 cnn.com으로, UA에서 'Ladybird' 표기를 감추면 정상 렌더링된다.

스타일 엔진을 새로 쓴 이유

성능 수치는 방향성을 보여준다. Speedometer 2가 약 47에서 64로, Speedometer 3가 약 2.5에서 3.9로 올랐고, StyleBench는 약 3.5에서 83으로 크게 뛰었다. 성숙한 엔진에 비하면 여전히 낮지만 움직임 자체는 뚜렷하다. 개별 연산을 다른 브라우저와 비교해 유독 느린 지점을 찾아 원인을 제거하는 방식이 주효했다. 크로미움보다 약 90배 느리던 캔버스 fillStyle 파싱은 약 2배 수준으로, replaceChildren()은 13배에서 4배 미만으로, 리스트 삽입·삭제는 120배 이상에서 20배 미만으로 좁혀졌다. 자바스크립트 엔진도 속성 접근과 스프레드, 프로미스 결합자에 빠른 경로가 생겼고 JSON.stringify는 자체 벤치마크에서 V8과 15% 차이까지 좁혀졌다. 희소 배열이 느린 해시 저장 방식에 갇혀 있던 문제를 30줄로 고치자 Minecraft4k가 10.2에서 14.5FPS로 올랐다는 사례도 소개됐다.

가장 근본적인 작업은 셀렉터 매칭, 스타일 무효화, 캐스케이드, 계산된 스타일 유지를 담당하는 스타일 엔진의 교체다. 기존 방식은 변화가 생기면 영향받을 수 있는 요소를 전부 표시해 다시 매칭·캐스케이드하는데, 메뉴 하나를 여는 데도 수천 개 요소가 무효화될 수 있다. 새 엔진은 DOM 변경과 상태 변화, CSSOM 편집을 타입이 지정된 델타의 흐름으로 보고 각 델타를 의존하는 셀렉터로만 전달한 뒤 출력이 바뀌지 않으면 즉시 멈춘다. 데이터베이스에 빗대면 셀렉터는 상시 질의, 계산된 스타일은 점진적으로 갱신되는 구체화 뷰인 셈이다. 정확성 검증을 위해 캐시 없는 참조 구현을 두고 실제 사이트의 수백만 건 이벤트를 재생해 결과가 어긋나면 실패로 처리했다. 레이아웃 결과를 입력 제약 조건 기준으로 캐싱해 바뀌지 않은 하위 트리를 통째로 재사용하고, 불투명도·변형 애니메이션을 컴포지터로 넘겨 메인 스레드 개입 없이 자체 vsync로 진행하게 한 것도 같은 맥락이다.

남은 과제와 알파의 의미

안정성 측면에서는 NaN 박싱된 자바스크립트 값에 저장된 셀 포인터에 케이징을 적용해, 값이 손상되더라도 예약된 영역 밖의 임의 메모리를 가리키지 못하게 막았다. 다만 이것이 자바스크립트 힙 전체를 케이징하는 것은 아니라는 한계도 함께 밝혔다. 웹 표준 준수도를 재는 WPT 점수는 2,079,020에서 2,088,677로 9,657개 서브테스트가 늘었는데, 108개 증가에 그친 7월과 대비된다. 증가분의 상당수는 리퍼러 정책 관련 약 2,500개 테스트에서 나왔고 이제 해당 스위트의 99%를 통과한다.

프로젝트는 첫 알파를 2026년 안에 시작한다는 계획을 유지한다. 다만 남은 일은 엔진 자체보다 배포 인프라에 가깝다. 터미널 없이 동작하는 크래시 리포팅, macOS·리눅스용 서명된 설치 빌드, 자동 업데이트, EasyList 같은 광고 차단 필터를 선택적으로 포함한 첫 실행 경험, 그리고 내려받을 공간이 필요하다. 엔진이 완성된 뒤가 아니라 미완성 상태에서 알파를 여는 것이 목표라는 점은, 이 프로젝트가 실사용 검증을 통해 남은 격차를 메우려 한다는 신호로 읽힌다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://ladybird.org/newsletter/2026-08-31/
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기
처리 중...