개념
레슨 2에서 배운 것을 다른 도구로
레슨 2에서 Playwright로 브라우저를 코드로 조작하는 법을 배웠다. Cypress는 같은 목표(요소를 찾고, 행동을 흉내 내고, 결과를 검증하는 것)를 다른 방식으로 구현한 또 하나의 대표적인 웹 자동화 도구다. 문법도 비슷해 보인다.
// Cypress
it("로그인에 성공하면 대시보드로 이동한다", () => {
cy.visit("https://example.com/login")
cy.get("[data-testid=email]").type("user@example.com")
cy.get("[data-testid=password]").type("password123")
cy.contains("로그인").click()
cy.url().should("include", "/dashboard")
})레슨 2의 Playwright 코드와 나란히 놓아보면, page.goto ↔
cy.visit, getByRole ↔ cy.get/cy.contains처럼 구조가
대응된다는 걸 알 수 있다. 개념은 같고, 문법과 내부 동작 방식이
다르다.
근본적인 구조 차이 — 브라우저 안이냐 밖이냐
가장 큰 차이는 테스트 코드가 실행되는 위치다.
Playwright: 테스트 코드가 브라우저 "밖"에서 실행되며, 여러 브라우저
엔진(Chromium/Firefox/WebKit)을 원격으로 조종한다
Cypress: 테스트 코드가 브라우저 "안"(같은 실행 컨텍스트)에서
함께 돌아간다이 구조 차이가 실무에서 체감되는 여러 차이로 이어진다.
| Playwright | Cypress | |
|---|---|---|
| 지원 브라우저 | Chromium·Firefox·WebKit 모두 | 기본적으로 Chromium 계열 위주(Firefox·WebKit은 제한적) |
| 여러 탭·도메인 다루기 | 자유로움 | 같은 실행 컨텍스트 안이라 제약이 있음(iframe·새 탭 등) |
| 실행 속도 | 빠름 | 빠름(비슷한 수준) |
| 디버깅 경험 | 트레이스 뷰어(레슨 2) | 브라우저 화면에서 각 단계를 실시간으로 보며 디버깅 — 특히 직관적이라는 평가가 많음 |
| 언어 | JS/TS/Python/Java/.NET 등 다양 | 사실상 JS/TS 전용 |
왜 이런 차이가 생겼나 — 설계 철학의 차이
Cypress는 "프런트엔드 개발자가 자기 코드를 테스트하기 쉽게"라는 목표로 만들어져, 브라우저 안에서 실행되는 대신 얻는 빠른 피드백과 직관적인 디버깅 경험에 무게를 뒀다. Playwright는 "여러 브라우저·언어를 아우르는 범용 자동화"를 목표로, 브라우저 밖에서 원격 조종하는 구조로 더 넓은 지원 범위를 확보했다. 이건 레슨 1에서 배운 "도구 선택은 우열이 아니라 맥락의 문제"라는 원칙이 그대로 적용되는 사례다.
언제 어느 쪽을 고려하는가
- 프런트엔드 개발자가 컴포넌트 단위 테스트까지 함께 작성하는 팀 — Cypress의 브라우저 내 디버깅 경험이 강점으로 작용한다
- 여러 브라우저 호환성(특히 Safari/WebKit)을 반드시 확인해야 하는 서비스 — Playwright가 더 안정적으로 지원한다
- 이미 팀에 자동화 자산이 있는 경우 — 새로 배우는 비용보다 기존 자산을 유지하는 것이 대개 더 합리적이다(레슨 1의 ROI 관점)
실무에서 왜 필요한가
채용공고에 "Playwright 경험" 또는 "Cypress 경험"이 각각 따로 명시되는 경우가 흔하다. 한쪽만 알고 있으면 "이 도구, 우리가 쓰는 것과 다른데요?"라는 상황에서 위축되기 쉽다. 하지만 레슨 2에서 배운 핵심 개념(요소 찾기, 자동 대기, AAA 패턴)은 두 도구에 동일하게 적용된다 — 문법을 처음부터 다시 배우는 것과, 이미 아는 개념을 새 문법에 옮기는 것은 완전히 다른 난이도다. 이 레슨의 목적은 Cypress 문법을 통째로 암기하는 게 아니라, "아, 이건 Playwright의 그 개념이 이렇게 표현된 거구나"를 알아볼 수 있게 하는 것이다.