CSS를 고치기 위해 맥을 사는 것을 멈추세요
Source: Dev.to
Safari를 Windows & Linux에서 디버깅하는 “해커” 방식
솔직히 말하자면: Safari는 새로운 Internet Explorer 입니다.
웹 개발자는 주로 Chromium(Chrome, Edge, Brave)과 Gecko(Firefox)를 사용합니다. 레이아웃은 Windows나 Linux에서 완벽하게 보이지만, 티켓이 들어오면:
- “iPhone에서 메뉴가 깨져요.”
- “MacBook에서 이미지가 눌려요.”
Mac을 가지고 있지 않다면 보통 선택지는 비싸거나 고통스러운 방법뿐입니다:
- Mac을 구매 –
flex-gap문제를 확인하러 1,000달러 이상을 쓰기. - 클라우드 테스트(BrowserStack, LambdaTest) – 훌륭한 도구지만 비용이 많이 들고 가끔 지연이 있음.
- VM / Hackintosh – 법적 회색 지대, 불안정한 설정, 끝없는 골칫거리.
네 번째 방법
오픈소스 세계에 숨겨진 보석이 있습니다. WebKit(Safari 엔진)을 Windows와 Linux에서 네이티브로 실행할 수 있게 해줍니다. 무료이고 빠르며 Node.js와도 함께 사용할 수 있습니다.
바로 Playwright WebKit 입니다.
WebKit이란? (왜 이렇게 동작하는가)
Safari는 마법이 아니라 WebKit이라는 렌더링 엔진 위에 만든 브라우저 UI입니다.
| 브라우저 | 엔진 |
|---|---|
| Chrome / Edge / Brave | Blink |
| Firefox | Gecko |
| Safari | WebKit |
Apple이 WebKit을 개발하지만 WebKit 자체는 오픈소스입니다. Apple이 2012년에 Safari for Windows를 중단했지만, Playwright 팀(Microsoft)은 Windows와 Linux용 WebKit을 컴파일했습니다.
이를 통해 얻는 이점:
- 동일한 CSS 렌더링 규칙
- 동일한 JavaScript quirks
- 동일한 레이아웃 버그
전체 Safari.app은 아니지만 레이아웃, CSS, JS 디버깅에 있어 ≈ 99.9 % 정확도를 가집니다. 여기서 깨지면 iPhone에서도 깨집니다. 끝.
설정: 2분 만에 Safari 환경 만들기
필요한 것은 Node.js뿐입니다.
사전 준비
- Node.js (Windows, Linux, 혹은 WSL)
- 터미널 (PowerShell, CMD, Bash)
1단계: Playwright 브라우저 설치 (중요)
npx playwright install
이 명령은 Chromium, Firefox, WebKit 바이너리를 OS에 맞게 다운로드합니다. 한 번만 실행하면 됩니다; 그렇지 않으면 codegen이 실패하거나 브라우저를 반복 다운로드합니다.
2단계: WebKit 즉시 실행
npx playwright codegen https://your-website.com --browser webkit
localhost에서도 동작합니다:
npx playwright codegen http://localhost:3000 --browser webkit
Playwright가 수행할 일:
- WebKit 실행
- 브라우저 창 열기
- DevTools 자동 연결
…이제 Windows/Linux에서 Safari를 디버깅할 수 있습니다.
현재 보고 있는 화면
창은 최소화된 형태이며 주소 표시줄, 북마크, Apple UI가 없습니다. 하지만 실제 WebKit이 사이트를 렌더링하고 있습니다. 이 엔진은 다음에서도 사용됩니다:
- macOS Safari
- iOS Safari
- Apple 기기 내 앱 브라우저
Safari 베테랑처럼 디버그하기
DevTools 열기
우클릭 → Inspect Element. DevTools는 WebKit Inspector이며 Chrome DevTools와 차이가 있으니 참고하세요.
먼저 확인할 항목
- Elements – CSS 차이, flexbox 동작, 누락된 gap
- Console – Safari 전용 JS 오류(예: optional chaining, 날짜 파싱)
- Network – CORS, 헤더, mixed‑content 문제
흔히 마주치는 Safari 버그
- flexbox에서
gap이 이상하게 동작 - 모바일에서
100vh와 동적 뷰포트 높이 - flex/grid 컨테이너 안 이미지가 늘어남
position: sticky불일치
날짜 파싱 quirks
new Date('2023-05-01 12:00:00') // ❌ WebKit에서 실패할 수 있음
new Date('2023-05-01T12:00:00Z') // ✅ 안전
방법 2: 스크립트로 Safari 디버그 (파워‑유저 모드)
Safari를 자주 디버그한다면 재사용 가능한 스크립트를 만들어 보세요.
debug-safari.js
// debug-safari.js
const { webkit } = require('playwright');
(async () => {
const browser = await webkit.launch({ headless: false });
const context = await browser.newContext({
viewport: { width: 390, height: 844 }, // iPhone 12–14 크기
deviceScaleFactor: 3,
userAgent:
'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) ' +
'AppleWebKit/605.1.15 (KHTML, like Gecko) ' +
'Version/15.0 Mobile/15E148 Safari/604.1'
});
const page = await context.newPage();
await page.goto('http://localhost:3000');
})();
다음 명령으로 실행합니다:
node debug-safari.js
결과: Windows에서 iPhone‑같은 Safari 시뮬레이터가 지속적으로 실행됩니다.
제한 사항 (트레이드‑오프)
해커용 솔루션이므로 강력하지만 마법은 아닙니다.
테스트할 수 없는 것들
- 비디오·오디오 코덱 – H.264 / AAC 미지원(라이선스 제한)
- Apple 시스템 폰트 – San Francisco는 직접 설치하지 않으면 포함되지 않음
- Apple 전용 통합 – Apple Pay, iCloud, Keychain, OS‑레벨 API
CSS, 레이아웃, JS 버그에 대해서는 전혀 문제가 되지 않습니다.
언제 실제 Mac을 사용해야 할까?
- 출시 전 최종 QA
- 미디어 재생 디버깅
- 네이티브 Safari 확장 프로그램
일상적인 개발에는 Playwright WebKit이 충분합니다.
마무리 생각
코드를 배포하고 Safari가 잘 동작하길 기대하지 마세요. Playwright WebKit을 사용하면:
- 무료 Safari 수준 렌더링
- 즉시 디버깅
- Mac 불필요
- 구독료 없음
모두 터미널 안에서 해결됩니다. 한 번 써보면 CSS 버그 때문에 Mac을 사는 일을 다시는 정당화하지 않을 겁니다.
행복한 디버깅 되세요. 🚀