Chrome Browser Process
멀티 프로세스 아키텍처
최상위 브라우저 프로세스가 주소창·탭·네트워크를 관리하고, 탭마다 별도 렌더러 프로세스를 띄운다.
크롬(Chromium)은 하나의 거대한 프로세스가 아니라 역할별로 분리된 여러 OS 프로세스로 구성된 멀티 프로세스 아키텍처(multi-process architecture)를 채택한다. 최상위에 특권을 가진 브라우저 프로세스(browser process, 흔히 main process)가 있고, 그 아래로 탭 안의 웹 콘텐츠를 실행하는 샌드박스된 렌더러 프로세스(renderer process), 그래픽을 담당하는 GPU 프로세스, 네트워크·오디오·스토리지 등 위험한 작업을 격리한 유틸리티 프로세스(utility process), 그리고 (레거시) 플러그인 프로세스로 나뉜다. 이렇게 나누는 핵심 이유는 안정성(한 탭이 죽어도 다른 탭은 살아있음)과 보안(신뢰할 수 없는 웹 콘텐츠를 최소 권한의 샌드박스에 가둠), 성능 격리다. 프로세스 간 통신은 과거의 레거시 IPC를 대체하는 Mojo라는 IPC 프레임워크로 이뤄지며, scoped/typed 인터페이스로 권한을 좁게 제한한다. 사이트 격리(Site Isolation)가 켜지면 렌더러 프로세스는 한 번에 오직 하나의 사이트(site) 문서만 담고, cross-site iframe은 별도 프로세스(OOPIF)로 분리되어 Spectre 같은 사이드채널 공격으로부터 사이트 간 데이터를 보호한다. 단점은 프로세스마다 V8 등 공통 인프라 사본을 갖게 되어 메모리 오버헤드가 크다는 점이며, 크롬은 기기 사양에 따라 프로세스 수를 제한하고 같은 사이트 탭을 합치는 방식으로 이를 완화한다.
내부 구성
핵심 포인트
- 브라우저 프로세스는 유일하게 높은 권한을 가지며 UI(주소창·탭·북마크), 네비게이션, 네트워크/파일 접근, 스토리지 정책, 프로세스 생성을 총괄한다
- 렌더러 프로세스는 신뢰할 수 없는 웹 콘텐츠를 실행하므로 강한 샌드박스에 갇혀 있고 파일/네트워크에 직접 접근하지 못한다
- IPC는 레거시 Chromium IPC에서 Mojo로 대체 중이며, 인터페이스 단위로 권한을 좁게 부여(capability-based)한다
- 사이트 격리(Site Isolation)는 렌더러 하나에 하나의 site만 담고 cross-site iframe을 OOPIF 별도 프로세스로 분리해 Spectre류 공격을 방어한다
- 멀티 프로세스의 이점은 안정성(크래시 격리), 보안(샌드박스), 성능 격리이고 대가는 메모리 중복(프로세스마다 공통 인프라 사본)이다
- 크롬은 기기 메모리에 따라 프로세스 개수 상한을 두고, 같은 사이트의 여러 탭을 한 렌더러로 통합해 오버헤드를 줄인다
- GPU·네트워크·오디오 등 위험도가 높은 작업은 유틸리티/GPU 프로세스로 out-of-process 격리한다
심화
면접에서 자주 나오는 포인트는 '왜 site(스킴+eTLD+1)를 기준으로 격리하는가'이다. 크롬은 origin(스킴+호스트+포트)이 아니라 site 단위로 프로세스를 나누는데, 이는 document.domain 같은 레거시 same-origin 완화 기능과의 호환성 때문이며, 그래서 정확히는 'origin isolation'이 아니라 'site isolation'이다. 또한 Site Isolation의 결정적 계기는 2018년 Spectre/Meltdown이었다. 사이드채널 공격은 같은 주소공간(프로세스) 안이라면 이론상 임의 메모리를 읽을 수 있으므로, JS 샌드박스만으로는 cross-site 데이터 유출을 막을 수 없다. 따라서 '메모리 자체를 다른 프로세스로 분리'하는 것이 근본 방어책이 되었고, 이는 SharedArrayBuffer 재활성화 조건인 COOP/COEP cross-origin isolation과도 직결된다. 또 하나 깊은 지점은 프로세스 모델의 유연성이다. 크롬은 항상 탭당 하나의 프로세스를 쓰는 것이 아니라 process-per-site-instance를 기본으로 하되, 메모리가 부족하면 같은 사이트의 탭들을 한 프로세스로 병합한다. OOPIF(out-of-process iframe)는 하나의 탭(프레임 트리)이 여러 렌더러 프로세스에 걸쳐 존재할 수 있음을 의미하며, 이때 프레임 트리는 브라우저 프로세스가 소유하고 각 프레임은 프록시(RenderFrameProxy)로 연결된다. 이 구조 덕분에 한 iframe이 크래시해도 부모 문서는 유지된다.
쉽게 말하면 신문사(브라우저)가 기사(탭)마다 별도 작업실(렌더러)을 둬, 한 방에 불이 나도 회사는 계속 돌아감.