IT

Playwright 세션 저장으로 로그인 반복 해결하기: storageState 구현과 주의점

peasy 2026. 6. 3. 07:20

Playwright에서 매번 로그인을 수행하지 않고 이전 인증 상태를 유지하려면 storageState 옵션을 활용해 쿠키와 로컬 스토리지 정보를 JSON 파일로 저장하고 재사용해야 합니다. 이 방법은 테스트 실행 속도를 획기적으로 높여줄 뿐만 아니라, 잦은 로그인으로 인한 계정 차단이나 2단계 인증(MFA)의 번거로움을 피할 수 있는 가장 확실한 해결책입니다.

웹 자동화 시나리오를 설계할 때 가장 병목이 발생하는 지점은 단연 로그인 단계입니다. 단순히 아이디와 비밀번호를 입력하는 것을 넘어, 보안 문자를 풀거나 이메일 인증을 거쳐야 하는 경우 자동화의 난이도는 급격히 상승합니다. 이때 한 번 성공한 로그인 세션을 파일 형태로 '박제'해두면, 다음 실행부터는 로그인 과정을 통째로 건너뛰고 바로 대상 페이지로 진입할 수 있습니다.

하지만 단순히 파일을 저장한다고 해서 모든 문제가 해결되지는 않습니다. 세션의 유효 기간, 보안상의 위험, 그리고 여러 계정을 동시에 다뤄야 하는 복잡한 상황에서는 세밀한 관리 전략이 필요합니다. 실무에서는 인증 정보가 담긴 JSON 파일을 어떻게 생성하고, 어떤 시점에 다시 불러와야 하는지가 구현의 핵심입니다.

이 글에서는 Playwright의 핵심 기능인 세션 캡처와 재사용 메커니즘을 살펴보고, 실제 프로젝트 적용 시 마주하게 되는 보안 이슈와 만료 처리 노하우를 정리해 드립니다. 이 가이드를 따라가면 반복적인 로그인 로직에서 벗어나 실제 검증이 필요한 비즈니스 로직에 더 집중할 수 있게 될 것입니다.

핵심 내용 먼저 보기

핵심 키워드 Playwright 세션 저장 · 연관 검색어 Playwright 세션 저장, storageState, 자동화 로그인 유지, Playwright 쿠키 저장, 웹 자동화 효율화

세션 저장이 자동화 효율을 결정하는 이유

자동화 테스트나 크롤링을 수행할 때 매번 로그인을 시도하는 것은 리소스 낭비일 뿐만 아니라 안정성 측면에서도 위험합니다. 많은 웹사이트는 단시간에 반복되는 로그인을 비정상적인 접근으로 간주하여 IP를 차단하거나 추가적인 본인 인증을 요구하기 때문입니다. 따라서 한 번 획득한 인증 토큰을 로컬에 저장해두고 필요할 때마다 꺼내 쓰는 방식이 권장됩니다.

Playwright는 브라우저 컨텍스트(Browser Context) 단위로 독립된 환경을 제공하는데, 이 컨텍스트 안에 포함된 모든 쿠키와 로컬 스토리지 데이터를 한꺼번에 추출할 수 있는 기능을 내장하고 있습니다. 이를 통해 브라우저를 완전히 종료했다가 다시 켜더라도 마치 '로그인 상태가 유지된 탭'을 새로 여는 것과 같은 효과를 낼 수 있습니다.

storageState를 활용한 인증 정보 캡처 과정

세션을 저장하는 첫 번째 단계는 정상적인 로그인 절차를 한 번 수행하는 것입니다. 로그인이 완료되어 대시보드나 메인 페이지에 진입한 시점에서 browserContext.storageState({ path: 'state.json' }) 메서드를 호출하면 현재 브라우저의 모든 인증 상태가 지정된 경로의 JSON 파일로 기록됩니다.

이때 주의할 점은 로그인이 완전히 완료되었음을 보장하는 대기 로직이 반드시 포함되어야 한다는 것입니다. 특정 요소가 화면에 나타나거나 네트워크 요청이 완료된 것을 확인한 뒤에 상태를 저장해야 불완전한 세션 정보가 기록되는 사고를 방지할 수 있습니다. 저장된 JSON 파일 내부에는 도메인별 쿠키 값과 키-값 쌍의 로컬 스토리지 데이터가 구조화되어 담기게 됩니다.

저장된 세션 파일을 테스트에 적용하는 방법

저장된 세션 정보를 불러오는 방법은 매우 간단합니다. 새로운 브라우저 컨텍스트를 생성할 때 storageState 옵션에 이전에 저장한 JSON 파일 경로를 전달하기만 하면 됩니다. 이렇게 설정된 컨텍스트에서 페이지를 열면, 별도의 로그인 동작 없이도 이미 인증이 완료된 상태로 시작하게 됩니다.

Playwright Test 프레임워크를 사용 중이라면 playwright.config.ts 설정 파일에서 전역적으로 storageState를 지정할 수도 있습니다. 프로젝트 전체에서 공통된 계정을 사용한다면 설정 파일에 등록하는 것이 편리하며, 테스트 케이스마다 다른 계정을 사용해야 한다면 개별 테스트 코드 내에서 컨텍스트를 생성할 때 동적으로 경로를 지정하는 방식을 선택하는 것이 좋습니다.

실무 적용 시 반드시 체크해야 할 보안과 만료 관리

세션 저장 기능을 사용할 때 가장 흔히 저지르는 실수는 민감한 정보가 담긴 JSON 파일을 Git 저장소에 그대로 올리는 것입니다. 이 파일에는 실제 서비스에 접속 가능한 유효한 토큰이 들어 있으므로, 반드시 .gitignore에 추가하여 외부 유출을 막아야 합니다. 보안이 중요한 환경이라면 환경 변수를 통해 경로를 관리하거나 암호화된 저장소를 활용하는 것이 바람직합니다.

또한, 세션은 영구적이지 않습니다. 서버에서 설정한 토큰 만료 시간이 지나면 저장된 JSON 파일은 더 이상 유효하지 않게 됩니다. 따라서 세션 파일이 존재하더라도 페이지 접속 후 로그인 여부를 체크하여, 로그아웃 상태라면 다시 로그인 과정을 거쳐 세션 파일을 갱신하는 자동 갱신 로직을 구축하는 것이 운영 효율을 높이는 핵심 포인트입니다.

Playwright의 세션 저장 기능은 단순한 편의 기능을 넘어 대규모 자동화 시스템의 안정성을 지탱하는 핵심 요소입니다. 로그인을 최소화함으로써 테스트 실행 시간을 단축하고, 외부 인증 시스템과의 의존성을 줄여 불필요한 실패 요인을 제거할 수 있습니다.

하지만 앞서 언급했듯이 보안 관리와 세션 만료 대응이 병행되지 않으면 오히려 관리 포인트가 늘어나는 결과를 초래할 수 있습니다. 프로젝트의 규모에 맞춰 전역 설정으로 관리할지, 아니면 동적으로 세션을 생성하고 갱신할지를 먼저 결정한 뒤 구현에 착수하시기 바랍니다.

결국 자동화의 목표는 사람의 개입을 줄이는 것입니다. 오늘 정리한 storageState 활용법을 통해 로그인이라는 반복적인 장벽을 넘어서고, 더 복잡하고 가치 있는 시나리오 검증에 집중할 수 있는 환경을 구축해 보시길 권장합니다.

자주 묻는 질문

세션 파일을 불러왔는데도 로그인이 풀려 있는 이유는 무엇인가요?

가장 흔한 원인은 서버 측 세션이나 토큰이 만료되었기 때문입니다. 또는 특정 웹사이트가 브라우저의 지문(Fingerprint)이나 IP 변경을 감지하여 세션을 무효화했을 가능성도 있습니다. 이 경우 세션 파일을 삭제하고 다시 로그인하여 갱신해야 합니다.

LocalStorage 정보도 storageState에 함께 저장되나요?

네, Playwright의 storageState는 쿠키뿐만 아니라 모든 도메인의 LocalStorage 데이터도 함께 캡처하여 JSON 파일에 저장합니다. 따라서 로컬 스토리지를 기반으로 인증을 관리하는 최신 웹 앱에서도 문제없이 작동합니다.

여러 개의 계정을 번갈아 가며 테스트하려면 어떻게 하나요?

계정별로 별도의 JSON 파일(예: user1.json, user2.json)을 생성하여 저장하면 됩니다. 테스트 실행 시 각 시나리오에 맞는 파일 경로를 storageState 옵션에 전달하여 컨텍스트를 생성하면 여러 계정의 세션을 독립적으로 사용할 수 있습니다.


해시태그

#Playwright세션저장 #storageState #자동화로그인유지 #Playwright쿠키저장 #웹자동화효율화 #Playwright인증재사용